Compare commits

...

26 Commits

Author SHA1 Message Date
Tideclaw
9149aeeed8 test(codex): extend sandbox startup test budget 2026-05-23 16:37:47 +00:00
Tideclaw
25c4cec6d7 test(codex): scope sandbox startup timeout 2026-05-23 16:08:40 +00:00
Tideclaw
6d15f06850 test(codex): allow sandbox exec startup in prerelease 2026-05-23 15:39:17 +00:00
Tideclaw
b2a4c9bd01 test(whatsapp): initialize inbound media runtime 2026-05-23 14:57:12 +00:00
Tideclaw
ffd810c654 chore: refresh alpha config baseline 2026-05-23 14:43:45 +00:00
Tideclaw
6c59d01bf8 chore: prepare alpha 2026.5.23-alpha.1 2026-05-23 14:31:35 +00:00
Tideclaw
588ed7e2f8 test: align release workflow assertions 2026-05-23 14:31:30 +00:00
Tideclaw
79df168478 test: pass codex tool specs into thread payload
(cherry picked from commit 0549c14f8a0d5709a83508c8010ab0abb3bf474c)
2026-05-23 14:14:21 +00:00
Tideclaw
cb9cd23cd4 test: avoid sandbox runtime flake in codex shard
(cherry picked from commit 7bc55ae19e54466151fb0c67600cfaff1a588263)
2026-05-23 14:14:21 +00:00
Tideclaw
4677e186b1 test: stabilize alpha release monitor coverage
(cherry picked from commit 2187a0d3ba6498c0e65dd36b64dab2d81f2833d0)
2026-05-23 14:14:21 +00:00
Tideclaw
5aada48ec0 test: keep codex sandbox fixture local
(cherry picked from commit 91b9740b57f23b15dc6bf8615dbeb0db9f2cb35d)
2026-05-23 14:13:53 +00:00
Tideclaw
0d7e592885 test: stabilize alpha prerelease gates
(cherry picked from commit b4c1505822e139ce1ddb84f52eb5a527fa6b7c1d)
2026-05-23 14:13:48 +00:00
Tideclaw
bb595316e3 fix(codex): ensure app-server binding directories
(cherry picked from commit 0f617da61ec258be79c0e1be7673c8cbb6da6cbe)
2026-05-23 14:13:05 +00:00
Tideclaw
b001d0042c test: stabilize alpha release gates
(cherry picked from commit fdf1f1773b48026ad12ff28be9cbb2c42da36d8f)
2026-05-23 14:12:54 +00:00
Tideclaw
101d3ede60 test: retry bundled smoke HTTP timeouts
(cherry picked from commit 52d7f5d4ccf368c5d90a7a73f3cf49e41afea859)
(cherry picked from commit 79a7272997a82e0aca80768bb881617378d838a8)
2026-05-23 14:12:18 +00:00
Tideclaw
c5e9b98608 test: satisfy bundled smoke lint
(cherry picked from commit 7d6fbd958a4cec5354c91e225979f3041fa3261d)
(cherry picked from commit 2dedd5840635bfea2ab74de923dc69037f6cf568)
2026-05-23 14:12:18 +00:00
Tideclaw
a28590411a test: retry bundled plugin runtime HTTP probes
(cherry picked from commit 3b7932412a4f03977a6409fba61889020ecf081f)
(cherry picked from commit cbc3bd0430b88ae687a37b577577e5e0b9a6fd74)
2026-05-23 14:12:18 +00:00
Tideclaw
f016e1013e test: stabilize alpha plugin prerelease
(cherry picked from commit 2edb34c466949de8afb6a9722e6c695267ec6b57)
(cherry picked from commit 06167870b0ffe46787f16423eee08d397973244c)
2026-05-23 14:12:18 +00:00
Tideclaw
792c4f5a9d test(whatsapp): align setup and login coverage expectations
(cherry picked from commit a1a499ee6a)
(cherry picked from commit d49d303ec43decfb3472157950adda35ba21039a)
(cherry picked from commit eb3abe53cdb0ae4f1835c361b73bebf5f64aafcf)
2026-05-23 14:12:18 +00:00
Tideclaw
2019df7c86 fix: stabilize plugin prerelease checks
(cherry picked from commit f5611643f6b0ec5bdec29458e61bc67386c5c983)
(cherry picked from commit d218320dfd)
(cherry picked from commit df6e56d0945aed0b3f05b1e5423f0d7c4e710d5b)
(cherry picked from commit ce6c14afb59398ee7994a5ce88c8b18b7dd977da)
2026-05-23 14:12:18 +00:00
Tideclaw
f61d38ea1d fix: reset macos swift build cache
(cherry picked from commit 3f75f1a621bf1fe84bf03988a2526b6492ff7ef8)
(cherry picked from commit 07fac81f60)
(cherry picked from commit a36a8c0d79914a1887f34555b1e2f8472d6ab474)
(cherry picked from commit d9748e848d1aa96c9339aa6e9b90ceb4be60a63c)
2026-05-23 14:12:18 +00:00
Tideclaw
8f03dfb07f fix: clear swiftpm sparkle artifact cache
(cherry picked from commit b517edc45d99fac85f31f69bee5918688da86ec2)
(cherry picked from commit 97482aecfe)
(cherry picked from commit 8e1dbf3e4733f17b991a1000560db0e60ae5d95a)
(cherry picked from commit 1c639d6f384ca9f204f362a75ea999f134bdde4c)
2026-05-23 14:12:18 +00:00
Tideclaw
af34d10c04 fix: repair macos swift artifact cache
(cherry picked from commit f790b3beb10f026102e9a75daa1b064f5e6a5976)
(cherry picked from commit ad6944e07d)
(cherry picked from commit 11e67682cd690f663938af2de3464a34946f5af4)
(cherry picked from commit 8c4b8e98a9bd9ec679c433408aa533901a0f6a98)
2026-05-23 14:12:18 +00:00
Tideclaw
3c2c30c1fa fix: align plugin prerelease guardrails
(cherry picked from commit ca8c7224a3bf4165723755358f579098cce193bd)
(cherry picked from commit ff12508123)
(cherry picked from commit a8ce81c77d9981ed7cb76249c2791eaf8b9d1bbf)
(cherry picked from commit 873a71b7fa8bb05e05efee29913b4f7e5ac31c51)
2026-05-23 14:12:18 +00:00
Tideclaw
32d1cf6b51 test: align fs-safe dependency contracts
(cherry picked from commit b13b13f1d012b434e8c511591b4fa790a5190c68)
(cherry picked from commit 97e7fe571b)
(cherry picked from commit 6f4db9ed19ad9426dd8834bea16714a9a55c4ed6)
(cherry picked from commit 14ac8eb36213449a94c9445e6d01185a4cf335b0)
2026-05-23 14:12:18 +00:00
Tideclaw
694dbbbd61 fix: align release dependency guardrails
(cherry picked from commit 2a83073226a1c56bd3fad5876be840822358de32)
(cherry picked from commit a1d32c384b)
(cherry picked from commit c82c3f47a1327ff7ba32c2c46f993b00f877d48c)
(cherry picked from commit 069fbfc9fc3561de1b7bb3b2a44b1b740db1a783)
2026-05-23 14:12:18 +00:00
188 changed files with 715 additions and 437 deletions

View File

@@ -1651,10 +1651,23 @@ jobs:
restore-keys: |
${{ runner.os }}-swift-build-v2-${{ steps.swift-toolchain.outputs.key }}-
- name: Reset Swift binary artifact cache
run: |
set -euo pipefail
# SwiftPM can restore a stale binary-artifact cache where the
# Sparkle.xcframework directory exists without its Info.plist.
# Clear the restored build workspace plus Sparkle's shared artifact
# cache so the release build resolves artifacts from Package.resolved.
rm -rf apps/macos/.build "$HOME/Library/Caches/org.swift.swiftpm/artifacts/sparkle"
- name: Preserve Swift build cache hit
if: steps.swift-build-cache.outputs.cache-hit == 'true'
run: |
set -euo pipefail
if [ ! -d apps/macos/.build ]; then
echo "Swift build cache was reset; skipping mtime preservation."
exit 0
fi
# Exact source-hash cache hits already match these inputs; checkout
# mtimes are the only reason SwiftPM rebuilds cached products.
find apps/macos/Sources apps/macos/Tests apps/shared/OpenClawKit/Sources apps/swabble/Sources apps/macos/.build/checkouts \

View File

@@ -1,4 +1,4 @@
5482b1a125a5c41856f6f49dfd70e2efe9e52a7cc0e2d4c24a56d99adfeda6be config-baseline.json
3d686075da4d4f6c6319c3247e93f486a6c48314a28a2961cd4acab7f3fa5389 config-baseline.core.json
11839c7a1b858c66075156f0e203aa8367cd8321047684679a18e18b7c8fe1f7 config-baseline.channel.json
5c214ab364011fd95735755f9fa4298aa4de8ad81144ae8dd08d969bb7ba318b config-baseline.plugin.json
26f9d2986029b924178118308b8662bcf903073b9f55af5ea4695458510c55b7 config-baseline.json
efbcd4f99fc3a38b5e1750160e0bbd24835128fd3975165b533bb718debeea89 config-baseline.core.json
859b021f65400df22c95ae55b074cf26c83d3a0bfadb3fceeaca522f6ea391ae config-baseline.channel.json
74441e331aabb3026784c148d4ee5ce3f489a15ed87ffd9b7ba0c5e2a7bc93be config-baseline.plugin.json

View File

@@ -1,2 +1,2 @@
e07c1b7a7bc8a6eb25a832961c2367f56d60a1fa54096dda460f8db1e572aa2a plugin-sdk-api-baseline.json
34f2af745b9ed47eec90350b2c2a9000566744b8982440feee1c4a405d0a28ca plugin-sdk-api-baseline.jsonl
3fd8386b18b9650a1c5c7d42e20a9cccd7f77417aad35b8b1a0afd349f62505d plugin-sdk-api-baseline.json
e92bf254ae952cf94a6b352956f784f6eec980711f0ee9e35b5aff0687b9990a plugin-sdk-api-baseline.jsonl

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/acpx",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/acpx",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@agentclientprotocol/claude-agent-acp": "0.36.1",
"@zed-industries/codex-acp": "0.14.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw ACP runtime backend",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22",
"openclawVersion": "2026.5.23-alpha.1",
"staticAssets": [
{
"source": "./src/runtime-internals/mcp-proxy.mjs",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/admin-http-rpc",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw admin HTTP RPC endpoint",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/alibaba-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Alibaba Model Studio video provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@anthropic-ai/sdk": "0.97.1",
"@aws/bedrock-token-generator": "1.1.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Amazon Bedrock Mantle (OpenAI-compatible) provider plugin",
"repository": {
"type": "git",
@@ -25,10 +25,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22",
"openclawVersion": "2026.5.23-alpha.1",
"bundledDist": false
},
"release": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@aws-sdk/client-bedrock": "3.1051.0",
"@aws-sdk/client-bedrock-runtime": "3.1051.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Amazon Bedrock provider plugin",
"repository": {
"type": "git",
@@ -27,10 +27,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22",
"openclawVersion": "2026.5.23-alpha.1",
"bundledDist": false
},
"release": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@anthropic-ai/vertex-sdk": "0.16.1",
"@earendil-works/pi-agent-core": "0.75.4",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Anthropic Vertex provider plugin",
"repository": {
"type": "git",
@@ -25,10 +25,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22",
"openclawVersion": "2026.5.23-alpha.1",
"bundledDist": false
},
"release": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Anthropic provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/arcee-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Arcee provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/azure-speech",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Azure Speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/bonjour",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Bonjour/mDNS gateway discovery",
"type": "module",
"dependencies": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/brave-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/brave-plugin",
"version": "2026.5.22"
"version": "2026.5.23-alpha.1"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/brave-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Brave plugin",
"repository": {
"type": "git",
@@ -21,10 +21,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/browser-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw browser tool plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/byteplus-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw BytePlus provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/canvas-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Canvas plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/cerebras-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Cerebras provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/chutes-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Chutes.ai provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/clickclack",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw ClickClack channel plugin",
"type": "module",
@@ -18,7 +18,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/cloudflare-ai-gateway-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/codex",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/codex",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@earendil-works/pi-coding-agent": "0.75.4",
"@openai/codex": "0.132.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Codex harness and model provider plugin",
"repository": {
"type": "git",
@@ -27,10 +27,10 @@
"minHostVersion": ">=2026.5.1-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -79,6 +79,7 @@ import { createCodexTestModel } from "./test-support.js";
import {
buildContextEngineBinding,
buildTurnCollaborationMode,
buildThreadStartParams,
buildThreadResumeParams,
buildTurnStartParams,
startOrResumeThread,
@@ -192,6 +193,22 @@ function createCodexRuntimePlanFixture(): NonNullable<EmbeddedRunAttemptParams["
} as unknown as NonNullable<EmbeddedRunAttemptParams["runtimePlan"]>;
}
function createCodexSandboxTestConfig(): EmbeddedRunAttemptParams["config"] {
return {
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "codex-test-sandbox",
scope: "session",
workspaceAccess: "rw",
prune: { idleHours: 0, maxAgeDays: 0 },
},
},
},
} as EmbeddedRunAttemptParams["config"];
}
function threadStartResult(threadId = "thread-1") {
return {
thread: {
@@ -1037,69 +1054,65 @@ describe("runCodexAppServerAttempt", () => {
);
});
it("starts active OpenClaw sandbox turns with Codex native execution disabled", async () => {
const restoreSandboxBackend = registerSandboxBackend("codex-test-sandbox", async () => ({
id: "codex-test-sandbox",
runtimeId: "codex-test-runtime",
runtimeLabel: "Codex Test Sandbox",
workdir: "/workspace",
buildExecSpec: async () => ({
argv: ["true"],
env: {},
stdinMode: "pipe-closed" as const,
}),
runShellCommand: async () => ({
stdout: Buffer.alloc(0),
stderr: Buffer.alloc(0),
code: 0,
}),
}));
try {
testing.setOpenClawCodingToolsFactoryForTests(() => [
createRuntimeDynamicTool("exec"),
createRuntimeDynamicTool("process"),
createRuntimeDynamicTool("message"),
]);
const sessionFile = path.join(tempDir, "session.jsonl");
const workspaceDir = path.join(tempDir, "workspace");
const params = createParams(sessionFile, workspaceDir);
params.disableTools = false;
params.runtimePlan = createCodexRuntimePlanFixture();
params.config = {
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "codex-test-sandbox",
scope: "session",
},
},
},
} as never;
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const run = runCodexAppServerAttempt(params, {
pluginConfig: { appServer: { mode: "yolo" } },
});
await waitForMethod("turn/start");
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
await run;
const startRequest = requests.find((request) => request.method === "thread/start");
const startParams = startRequest?.params as Record<string, unknown> | undefined;
const startConfig = startParams?.config as Record<string, unknown> | undefined;
const dynamicTools = startParams?.dynamicTools as Array<{ name: string }> | undefined;
expect(startConfig?.["features.code_mode"]).toBe(false);
expect(startConfig?.["features.code_mode_only"]).toBe(false);
expect(startParams?.environments).toEqual([]);
expect(dynamicTools?.map((tool) => tool.name)).toEqual([
"message",
"sandbox_exec",
"sandbox_process",
]);
} finally {
restoreSandboxBackend();
it("builds active OpenClaw sandbox turns with Codex native execution disabled", async () => {
testing.setOpenClawCodingToolsFactoryForTests(() => [
createRuntimeDynamicTool("exec"),
createRuntimeDynamicTool("process"),
createRuntimeDynamicTool("message"),
]);
const sessionFile = path.join(tempDir, "session.jsonl");
const workspaceDir = path.join(tempDir, "workspace");
const params = createParams(sessionFile, workspaceDir);
params.disableTools = false;
params.runtimePlan = createCodexRuntimePlanFixture();
params.config = createCodexSandboxTestConfig();
const sandboxSessionKey = params.sessionKey;
if (!sandboxSessionKey) {
throw new Error("createParams must provide a sessionKey for Codex dynamic tool tests.");
}
const runAbortController = new AbortController();
const dynamicTools = await testing.buildDynamicTools({
params,
resolvedWorkspace: workspaceDir,
effectiveWorkspace: workspaceDir,
sandboxSessionKey,
sandbox: {
enabled: true,
backendId: "docker",
docker: { binds: ["/tmp/openclaw-data:/data:rw"] },
} as never,
nativeToolSurfaceEnabled: false,
runAbortController,
sessionAgentId: "main",
pluginConfig: { appServer: { mode: "yolo" } },
onYieldDetected: () => undefined,
});
const toolBridge = createCodexDynamicToolBridge({
tools: dynamicTools,
signal: runAbortController.signal,
});
const appServer = resolveCodexAppServerRuntimeOptions({
pluginConfig: { appServer: { mode: "yolo" } },
env: {},
requirementsToml: null,
});
const startParams = buildThreadStartParams(params, {
cwd: workspaceDir,
dynamicTools: toolBridge.specs,
appServer,
nativeCodeModeEnabled: false,
nativeCodeModeOnlyEnabled: false,
environmentSelection: [],
});
const startConfig = startParams.config as Record<string, unknown>;
expect(startConfig["features.code_mode"]).toBe(false);
expect(startConfig["features.code_mode_only"]).toBe(false);
expect(startParams.environments).toEqual([]);
expect(startParams.dynamicTools?.map((tool) => tool.name)).toEqual([
"message",
"sandbox_exec",
"sandbox_process",
]);
});
it("routes native Codex execution through an OpenClaw sandbox exec-server when opted in", async () => {
@@ -1130,20 +1143,11 @@ describe("runCodexAppServerAttempt", () => {
const params = createParams(sessionFile, workspaceDir);
params.disableTools = false;
params.runtimePlan = createCodexRuntimePlanFixture();
params.config = {
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "codex-test-sandbox",
scope: "session",
},
},
},
} as never;
params.config = createCodexSandboxTestConfig();
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const run = runCodexAppServerAttempt(params, {
startupTimeoutFloorMs: 180_000,
pluginConfig: {
appServer: {
mode: "yolo",
@@ -1151,7 +1155,7 @@ describe("runCodexAppServerAttempt", () => {
},
},
});
await waitForMethod("turn/start");
await waitForMethod("turn/start", 180_000);
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
await run;
@@ -1200,7 +1204,7 @@ describe("runCodexAppServerAttempt", () => {
} finally {
restoreSandboxBackend();
}
});
}, 240_000);
it("closes the sandbox exec-server release path used by turn/start failure cleanup", async () => {
const sessionFile = path.join(tempDir, "session.jsonl");

View File

@@ -76,6 +76,18 @@ describe("codex app-server session binding", () => {
expect(bindingStat.isFile()).toBe(true);
});
it("creates the binding sidecar directory before writing", async () => {
const sessionFile = path.join(tempDir, "missing", "session.json");
await writeCodexAppServerBinding(sessionFile, {
threadId: "thread-123",
cwd: tempDir,
});
const bindingStat = await fs.stat(resolveCodexAppServerBindingPath(sessionFile));
expect(bindingStat.isFile()).toBe(true);
});
it("round-trips plugin app policy context with app ids as record keys", async () => {
const sessionFile = path.join(tempDir, "session.json");
const pluginAppPolicyContext = {

View File

@@ -1,4 +1,5 @@
import fs from "node:fs/promises";
import path from "node:path";
import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
import {
ensureAuthProfileStore,
@@ -174,10 +175,9 @@ export async function writeCodexAppServerBinding(
createdAt: binding.createdAt ?? now,
updatedAt: now,
};
await fs.writeFile(
resolveCodexAppServerBindingPath(sessionFile),
`${JSON.stringify(payload, null, 2)}\n`,
);
const bindingPath = resolveCodexAppServerBindingPath(sessionFile);
await fs.mkdir(path.dirname(bindingPath), { recursive: true });
await fs.writeFile(bindingPath, `${JSON.stringify(payload, null, 2)}\n`);
}
function readContextEngineBinding(value: unknown): CodexAppServerContextEngineBinding | undefined {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/comfy-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw ComfyUI provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Copilot Proxy provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepgram-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Deepgram media-understanding provider",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepinfra-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw DeepInfra provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepseek-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw DeepSeek provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@opentelemetry/api": "1.9.1",
"@opentelemetry/api-logs": "0.218.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw diagnostics OpenTelemetry exporter",
"repository": {
"type": "git",
@@ -34,10 +34,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.22"
"version": "2026.5.23-alpha.1"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw diagnostics Prometheus exporter",
"repository": {
"type": "git",
@@ -21,10 +21,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diffs",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diffs",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@pierre/diffs": "1.2.1",
"@pierre/theme": "1.0.3",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw diff viewer plugin",
"repository": {
"type": "git",
@@ -31,10 +31,10 @@
"minHostVersion": ">=2026.4.30"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22",
"openclawVersion": "2026.5.23-alpha.1",
"staticAssets": [
{
"source": "./assets/viewer-runtime.js",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/discord",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/discord",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@discordjs/voice": "0.19.2",
"discord-api-types": "0.38.47",
@@ -17,7 +17,7 @@
"ws": "8.20.1"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Discord channel plugin",
"repository": {
"type": "git",
@@ -21,7 +21,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -65,10 +65,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/document-extract-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw local document extraction plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/duckduckgo-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw DuckDuckGo plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/elevenlabs-speech",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw ElevenLabs speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/exa-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Exa plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/fal-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw fal provider plugin",
"type": "module",

View File

@@ -1,19 +1,19 @@
{
"name": "@openclaw/feishu",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/feishu",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@larksuiteoapi/node-sdk": "1.65.0",
"typebox": "1.1.38",
"zod": "4.4.3"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/feishu",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
"repository": {
"type": "git",
@@ -17,7 +17,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -48,10 +48,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/file-transfer",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw file transfer plugin (file_fetch, dir_list, dir_fetch, file_write)",
"type": "module",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/firecrawl-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Firecrawl plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/fireworks-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Fireworks provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/github-copilot-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw GitHub Copilot provider plugin",
"type": "module",

View File

@@ -194,6 +194,27 @@ function requireRecord(value: unknown, label: string): Record<string, unknown> {
return value;
}
function createAgentSessionMock(sessionStore: Record<string, unknown>) {
return {
resolveStorePath: vi.fn(() => "/tmp/sessions.json"),
loadSessionStore: vi.fn(() => sessionStore),
saveSessionStore: vi.fn(async () => {}),
updateSessionStore: vi.fn(async (_storePath, mutator) => mutator(sessionStore as never)),
resolveSessionFilePath: vi.fn(() => "/tmp/session.json"),
getSessionEntry: vi.fn(({ sessionKey }: { sessionKey: string }) => sessionStore[sessionKey]),
patchSessionEntry: vi.fn(async (params) => {
const current = (sessionStore[params.sessionKey] ?? params.fallbackEntry ?? {}) as Record<
string,
unknown
>;
const patch = (await params.update(current as never)) as Record<string, unknown>;
const next = { ...current, ...patch };
sessionStore[params.sessionKey] = next;
return next;
}),
};
}
function mockCall(mock: { mock: { calls: unknown[][] } }, callIndex = 0): unknown[] {
const call = mock.mock.calls.at(callIndex);
if (!call) {

View File

@@ -1,18 +1,18 @@
{
"name": "@openclaw/google-meet",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/google-meet",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"commander": "14.0.3",
"typebox": "1.1.38"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-meet",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Google Meet participant plugin",
"repository": {
"type": "git",
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -33,10 +33,10 @@
"minHostVersion": ">=2026.4.20"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-plugin",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Google plugin",
"type": "module",

View File

@@ -1,19 +1,19 @@
{
"name": "@openclaw/googlechat",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/googlechat",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"gaxios": "7.1.4",
"google-auth-library": "10.6.2",
"zod": "4.4.3"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Google Chat channel plugin",
"repository": {
"type": "git",
@@ -17,7 +17,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -75,10 +75,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/gradium-speech",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Gradium speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/groq-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Groq media-understanding provider",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/huggingface-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Hugging Face provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/image-generation-core",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw image generation runtime package",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/imessage",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw iMessage channel plugin using imsg on a signed-in Mac",
"type": "module",
@@ -40,10 +40,10 @@
]
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
}
},
"pluginInspector": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/inworld-speech",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Inworld speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/irc",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw IRC channel plugin",
"type": "module",
"devDependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/kilocode-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Kilo Gateway provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/kimi-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Kimi provider plugin",
"type": "module",

View File

@@ -1,18 +1,18 @@
{
"name": "@openclaw/line",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/line",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@line/bot-sdk": "11.0.0",
"zod": "4.4.3"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw LINE channel plugin",
"repository": {
"type": "git",
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -46,10 +46,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/litellm-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw LiteLLM provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw JSON-only LLM task plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/lmstudio-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw LM Studio provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/lobster",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/lobster",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@clawdbot/lobster": "2026.4.6",
"ajv": "8.20.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/lobster",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
"repository": {
"type": "git",
@@ -25,10 +25,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,5 +1,11 @@
# Changelog
## 2026.5.23-alpha.1
### Changes
- Version alignment with core OpenClaw release numbers.
## 2026.5.22
### Changes

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/matrix",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/matrix",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@matrix-org/matrix-sdk-crypto-nodejs": "0.4.0",
"@matrix-org/matrix-sdk-crypto-wasm": "18.3.0",
@@ -18,7 +18,7 @@
"zod": "4.4.3"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Matrix channel plugin",
"repository": {
"type": "git",
@@ -22,7 +22,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -87,10 +87,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/mattermost",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Mattermost channel plugin",
"repository": {
"type": "git",
@@ -16,7 +16,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/media-understanding-core",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw media understanding runtime package",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/meeting-notes",
"version": "2026.5.21",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw meeting notes plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-core",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw core memory search plugin",
"type": "module",
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -9,7 +9,11 @@ import {
spyRuntimeLogs,
} from "openclaw/plugin-sdk/test-fixtures";
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import { readShortTermRecallEntries, recordShortTermRecalls } from "./short-term-promotion.js";
import {
readShortTermRecallEntries,
recordShortTermRecalls,
waitForPendingShortTermWrites,
} from "./short-term-promotion.js";
const getMemorySearchManager = vi.hoisted(() => vi.fn());
const getRuntimeConfig = vi.hoisted(() => vi.fn(() => ({})));
@@ -92,7 +96,8 @@ beforeEach(() => {
}));
});
afterEach(() => {
afterEach(async () => {
await waitForPendingShortTermWrites();
vi.restoreAllMocks();
process.exitCode = undefined;
setVerbose(false);
@@ -102,6 +107,7 @@ afterAll(async () => {
if (!fixtureRoot) {
return;
}
await waitForPendingShortTermWrites();
await fs.rm(fixtureRoot, { recursive: true, force: true });
});

View File

@@ -734,6 +734,13 @@ async function withInProcessShortTermLock<T>(lockPath: string, task: () => Promi
}
}
export async function waitForPendingShortTermWrites(): Promise<void> {
while (inProcessShortTermLocks.size > 0) {
const pending = Array.from(inProcessShortTermLocks.values());
await Promise.allSettled(pending);
}
}
async function withShortTermLock<T>(workspaceDir: string, task: () => Promise<T>): Promise<T> {
const lockPath = resolveLockPath(workspaceDir);
return withInProcessShortTermLock(lockPath, async () => {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/memory-lancedb",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/memory-lancedb",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@lancedb/lancedb": "0.29.0",
"apache-arrow": "18.1.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-lancedb",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-wiki",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw persistent wiki plugin",
"type": "module",
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-foundry",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Microsoft Foundry provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-speech",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Microsoft speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/migrate-claude",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "Claude to OpenClaw migration provider",
"type": "module",
@@ -9,7 +9,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/migrate-hermes",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "Hermes to OpenClaw migration provider",
"type": "module",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/minimax-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw MiniMax provider and OAuth plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/mistral-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Mistral provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/moonshot-provider",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"private": true,
"description": "OpenClaw Moonshot provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/msteams",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/msteams",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"@azure/identity": "4.13.1",
"@microsoft/teams.api": "2.0.11",
@@ -17,7 +17,7 @@
"typebox": "1.1.38"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/msteams",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Microsoft Teams channel plugin",
"repository": {
"type": "git",
@@ -22,7 +22,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -58,10 +58,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,17 +1,17 @@
{
"name": "@openclaw/nextcloud-talk",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/nextcloud-talk",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"dependencies": {
"zod": "4.4.3"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/nextcloud-talk",
"version": "2026.5.22",
"version": "2026.5.23-alpha.1",
"description": "OpenClaw Nextcloud Talk channel plugin",
"repository": {
"type": "git",
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.5.22"
"openclaw": ">=2026.5.23-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -44,10 +44,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.5.22"
"pluginApi": ">=2026.5.23-alpha.1"
},
"build": {
"openclawVersion": "2026.5.22"
"openclawVersion": "2026.5.23-alpha.1"
},
"release": {
"publishToClawHub": true,

Some files were not shown because too many files have changed in this diff Show More