mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-20 13:42:02 +08:00
Compare commits
24 Commits
codex/refa
...
v2026.5.24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e2e7c66bd | ||
|
|
246abdcfc0 | ||
|
|
d1c3958777 | ||
|
|
e1c799b732 | ||
|
|
2f4e5ee438 | ||
|
|
57701503a6 | ||
|
|
ea685a7970 | ||
|
|
e1c973de91 | ||
|
|
a6a5e0cf6f | ||
|
|
532d58c1e3 | ||
|
|
4d856c6dfe | ||
|
|
a9ce9ce0f9 | ||
|
|
f9ebf24db3 | ||
|
|
ef07aa8cd6 | ||
|
|
07c2407133 | ||
|
|
5386e2950d | ||
|
|
0b9f9db1b6 | ||
|
|
8e476dd21d | ||
|
|
1b0b599407 | ||
|
|
a10e471462 | ||
|
|
cf60d8f280 | ||
|
|
198f69ddc6 | ||
|
|
82ab34232d | ||
|
|
87cd6b3e92 |
@@ -241,7 +241,7 @@ jobs:
|
||||
set -euo pipefail
|
||||
timeout --foreground --kill-after=30s 35m docker build \
|
||||
--target runtime-assets \
|
||||
--build-arg OPENCLAW_EXTENSIONS="matrix" \
|
||||
--build-arg OPENCLAW_EXTENSIONS="diagnostics-otel,codex" \
|
||||
.
|
||||
|
||||
normal_ci:
|
||||
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -2,6 +2,14 @@
|
||||
|
||||
Docs: https://docs.openclaw.ai
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Changes
|
||||
|
||||
### Fixes
|
||||
- iMessage: mark authorized slash-command turns as text-sourced commands so `/status`, `/new`, and `/restart` acknowledgements return to the source conversation. (#82642) thanks @homer-byte.
|
||||
|
||||
|
||||
## 2026.5.24
|
||||
|
||||
### Changes
|
||||
@@ -65,6 +73,7 @@ Docs: https://docs.openclaw.ai
|
||||
|
||||
### Fixes
|
||||
|
||||
- Gateway/update: avoid fetching unrelated tags during dev-channel git updates so moved release tags do not block branch-based updates. (#84737) Thanks @rubencu.
|
||||
- MiniMax: store OAuth token expiry as an absolute millisecond timestamp so OAuth profiles no longer appear expired on every request. (#83480) Thanks @NianJiuZst.
|
||||
- Agents/Anthropic: strip missing or blank thinking signatures for signed-thinking providers even when recovery supplies a narrow replay policy without signature preservation. Fixes #84430. (#84448) Thanks @NianJiuZst.
|
||||
- Agents/channels: send a visible notice when an aborted main session cannot be resumed after restart, including Telegram group targets. (#85805) Thanks @pfrederiksen.
|
||||
@@ -106,6 +115,8 @@ Docs: https://docs.openclaw.ai
|
||||
- Release: align generated config/API baselines and the meeting-notes plugin version so release preflight stays green on native Windows.
|
||||
- Install/Windows: run Git hook setup through a Node prepare helper so native Windows installs no longer print POSIX shell errors.
|
||||
- Checks/Windows: chunk and serialize extension oxlint shards on native Windows so changed gates avoid Go-backed linter memory spikes.
|
||||
- Release/Windows: run installed `openclaw.cmd` verification through explicit `cmd.exe` wrapping so npm prepublish/postpublish checks avoid Node shell-argv warnings.
|
||||
- Plugins/Windows: run plugin npm package staging through the shared npm runner so native Windows release checks avoid bare `npm` lookup and `.cmd` shell-argv handling.
|
||||
- Checks/Windows: route full `pnpm check` stage commands through the managed child runner so Windows avoids Node shell-argv deprecation warnings there too.
|
||||
- Agents/fs: allow workspace-only host write/edit tools to write through in-workspace symlink directory parents while preserving outside-workspace symlink rejection. Fixes #84696. Thanks @garbagenetwork.
|
||||
- Checks/Windows: run managed child commands through explicit `cmd.exe` wrapping instead of Node shell mode with argv, avoiding Node 24 subprocess deprecation warnings during changed checks.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
e8e71a715bd33405280b5a9f6b6e788abed636fba66ec5f3a4f9b9a768a1637f config-baseline.json
|
||||
d8c6d36cb079b929ed403503dd09bf61aa7f7ad1ad157ed85d3fc2dd1547baa6 config-baseline.json
|
||||
003183db53a41905c540f37b1d30b3006ef8906915e13eac844b643cd210fdfe config-baseline.core.json
|
||||
859b021f65400df22c95ae55b074cf26c83d3a0bfadb3fceeaca522f6ea391ae config-baseline.channel.json
|
||||
57291e1848bc059994923354d7b0a822909da7a8139a6615a9d5dfa2d189ee5e config-baseline.channel.json
|
||||
74441e331aabb3026784c148d4ee5ce3f489a15ed87ffd9b7ba0c5e2a7bc93be config-baseline.plugin.json
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
8882e41620deeed05be9526981c32a034444abc232903b946c48d416f46f06c3 plugin-sdk-api-baseline.json
|
||||
40b22ddad62692447717a2b4f0ecdbd9f6209fa86eaf4e66f85d37c48e26d394 plugin-sdk-api-baseline.jsonl
|
||||
28fcbbe21ee8088d78774a17e8906d408345dfe210f3b3511a18e26efad6904c plugin-sdk-api-baseline.json
|
||||
8076e25cda96fd463e800064ff6c56a872cf61de73ca0353e0911e0b47f89751 plugin-sdk-api-baseline.jsonl
|
||||
|
||||
4
extensions/acpx/npm-shrinkwrap.json
generated
4
extensions/acpx/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/acpx",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/acpx",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@agentclientprotocol/claude-agent-acp": "0.36.1",
|
||||
"@zed-industries/codex-acp": "0.14.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/acpx",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw ACP runtime backend",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -26,10 +26,10 @@
|
||||
"minHostVersion": ">=2026.4.25"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24",
|
||||
"openclawVersion": "2026.5.24-beta.1",
|
||||
"staticAssets": [
|
||||
{
|
||||
"source": "./src/runtime-internals/mcp-proxy.mjs",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/admin-http-rpc",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw admin HTTP RPC endpoint",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/alibaba-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Alibaba Model Studio video provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/amazon-bedrock-mantle-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/amazon-bedrock-mantle-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "0.97.1",
|
||||
"@aws/bedrock-token-generator": "1.1.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/amazon-bedrock-mantle-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24",
|
||||
"openclawVersion": "2026.5.24-beta.1",
|
||||
"bundledDist": false
|
||||
},
|
||||
"release": {
|
||||
|
||||
4
extensions/amazon-bedrock/npm-shrinkwrap.json
generated
4
extensions/amazon-bedrock/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/amazon-bedrock-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/amazon-bedrock-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-bedrock": "3.1051.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "3.1051.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/amazon-bedrock-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Amazon Bedrock provider plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -27,10 +27,10 @@
|
||||
"minHostVersion": ">=2026.5.12-beta.1"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24",
|
||||
"openclawVersion": "2026.5.24-beta.1",
|
||||
"bundledDist": false
|
||||
},
|
||||
"release": {
|
||||
|
||||
4
extensions/anthropic-vertex/npm-shrinkwrap.json
generated
4
extensions/anthropic-vertex/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/anthropic-vertex-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/anthropic-vertex-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@anthropic-ai/vertex-sdk": "0.16.1",
|
||||
"@earendil-works/pi-agent-core": "0.75.4",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/anthropic-vertex-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Anthropic Vertex provider plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -25,10 +25,10 @@
|
||||
"minHostVersion": ">=2026.5.12-beta.1"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24",
|
||||
"openclawVersion": "2026.5.24-beta.1",
|
||||
"bundledDist": false
|
||||
},
|
||||
"release": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/anthropic-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Anthropic provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -119,8 +119,7 @@ describe("anthropic provider policy public artifact", () => {
|
||||
});
|
||||
|
||||
expect(
|
||||
nextConfig.agents?.defaults?.models?.["anthropic/claude-sonnet-4-20250514"]?.params
|
||||
?.cacheRetention,
|
||||
nextConfig.agents?.defaults?.models?.["anthropic/claude-sonnet-4-6"]?.params?.cacheRetention,
|
||||
).toBe("short");
|
||||
});
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/arcee-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Arcee provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/azure-speech",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Azure Speech plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/bonjour",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Bonjour/mDNS gateway discovery",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
|
||||
4
extensions/brave/npm-shrinkwrap.json
generated
4
extensions/brave/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/brave-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/brave-plugin",
|
||||
"version": "2026.5.24"
|
||||
"version": "2026.5.24-beta.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/brave-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Brave plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -21,10 +21,10 @@
|
||||
"allowInvalidConfigRecovery": true
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/browser-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw browser tool plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -65,7 +65,9 @@ vi.mock("../../media/store.js", () => ({
|
||||
|
||||
vi.mock("./agent.shared.js", () => ({
|
||||
getPwAiModule: vi.fn(async () => null),
|
||||
handleRouteError: vi.fn(),
|
||||
handleRouteError: vi.fn((_ctx, _res, err) => {
|
||||
throw err;
|
||||
}),
|
||||
readBody: vi.fn((req: { body?: unknown }) => req.body ?? {}),
|
||||
requirePwAi: vi.fn(async () => null),
|
||||
resolveProfileContext: vi.fn(() => profileContext),
|
||||
@@ -78,7 +80,7 @@ const { registerBrowserAgentSnapshotRoutes } = await import("./agent.snapshot.js
|
||||
function getSnapshotHandler() {
|
||||
const { app, getHandlers } = createBrowserRouteApp();
|
||||
registerBrowserAgentSnapshotRoutes(app, {
|
||||
state: () => ({ resolved: {} }),
|
||||
state: () => ({ resolved: { extraArgs: [] } }),
|
||||
} as never);
|
||||
const handler = getHandlers.get("/snapshot");
|
||||
expect(handler).toBeTypeOf("function");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/byteplus-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw BytePlus provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/canvas-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Canvas plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/cerebras-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Cerebras provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/chutes-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Chutes.ai provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/clickclack",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw ClickClack channel plugin",
|
||||
"type": "module",
|
||||
@@ -18,7 +18,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/cloudflare-ai-gateway-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
|
||||
"type": "module",
|
||||
|
||||
4
extensions/codex/npm-shrinkwrap.json
generated
4
extensions/codex/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/codex",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/codex",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@earendil-works/pi-coding-agent": "0.75.4",
|
||||
"@openai/codex": "0.132.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/codex",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1170,92 +1170,101 @@ describe("runCodexAppServerAttempt", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("starts active OpenClaw sandbox turns with Codex native execution disabled", async () => {
|
||||
const runtimeId = `codex-test-runtime-${path.basename(tempDir)}`;
|
||||
const restoreSandboxBackend = registerSandboxBackend("codex-test-sandbox", async () => ({
|
||||
id: "codex-test-sandbox",
|
||||
runtimeId,
|
||||
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",
|
||||
workspaceAccess: "rw",
|
||||
prune: { idleHours: 0, maxAgeDays: 0 },
|
||||
},
|
||||
},
|
||||
},
|
||||
} as never;
|
||||
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
|
||||
it("starts active OpenClaw sandbox threads 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();
|
||||
const sandbox = {
|
||||
enabled: true,
|
||||
backendId: "codex-test-sandbox",
|
||||
workspaceAccess: "rw",
|
||||
} as never;
|
||||
const nativeToolSurfaceEnabled = testing.shouldEnableCodexAppServerNativeToolSurface(
|
||||
params,
|
||||
sandbox,
|
||||
);
|
||||
const dynamicTools = await testing.buildDynamicTools({
|
||||
params,
|
||||
resolvedWorkspace: workspaceDir,
|
||||
effectiveWorkspace: workspaceDir,
|
||||
sandboxSessionKey: params.sessionKey!,
|
||||
sandbox,
|
||||
nativeToolSurfaceEnabled,
|
||||
runAbortController: new AbortController(),
|
||||
sessionAgentId: "main",
|
||||
pluginConfig: {},
|
||||
onYieldDetected: () => undefined,
|
||||
});
|
||||
const request = vi.fn(async (method: string, _requestParams?: unknown) => {
|
||||
if (method === "thread/start") {
|
||||
return threadStartResult();
|
||||
}
|
||||
throw new Error(`unexpected method: ${method}`);
|
||||
});
|
||||
|
||||
const run = runCodexAppServerAttempt(params, {
|
||||
pluginConfig: { appServer: { mode: "yolo" } },
|
||||
});
|
||||
await waitForMethod("turn/start");
|
||||
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
|
||||
await run;
|
||||
await startOrResumeThread({
|
||||
client: { request } as never,
|
||||
params,
|
||||
cwd: workspaceDir,
|
||||
dynamicTools: dynamicTools as never,
|
||||
appServer: createThreadLifecycleAppServerOptions(),
|
||||
nativeCodeModeEnabled: nativeToolSurfaceEnabled,
|
||||
nativeCodeModeOnlyEnabled: false,
|
||||
userMcpServersEnabled: nativeToolSurfaceEnabled,
|
||||
environmentSelection: [],
|
||||
});
|
||||
|
||||
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();
|
||||
}
|
||||
const startRequest = request.mock.calls.find(([method]) => method === "thread/start");
|
||||
const startParams = startRequest?.[1] as Record<string, unknown> | undefined;
|
||||
const startConfig = startParams?.config as Record<string, unknown> | undefined;
|
||||
const startDynamicTools = 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(startDynamicTools?.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 () => {
|
||||
const runtimeId = `codex-test-runtime-${path.basename(tempDir)}`;
|
||||
const restoreSandboxBackend = registerSandboxBackend("codex-test-sandbox", async () => ({
|
||||
id: "codex-test-sandbox",
|
||||
runtimeId,
|
||||
const appServer = {
|
||||
...createThreadLifecycleAppServerOptions(),
|
||||
sandbox: "danger-full-access" as const,
|
||||
};
|
||||
const sandbox = {
|
||||
...createSandboxContext({
|
||||
runShellCommand: async () => ({
|
||||
stdout: Buffer.alloc(0),
|
||||
stderr: Buffer.alloc(0),
|
||||
code: 0,
|
||||
}),
|
||||
}),
|
||||
backendId: "codex-test-sandbox",
|
||||
runtimeId: `codex-test-runtime-${path.basename(tempDir)}`,
|
||||
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,
|
||||
}),
|
||||
}));
|
||||
};
|
||||
const request = vi.fn(async (method: string, _requestParams?: unknown) => {
|
||||
if (method === "environment/add") {
|
||||
return {};
|
||||
}
|
||||
if (method === "thread/start") {
|
||||
return threadStartResult();
|
||||
}
|
||||
throw new Error(`unexpected method: ${method}`);
|
||||
});
|
||||
const client = {
|
||||
getServerVersion: () => "0.132.0",
|
||||
request,
|
||||
};
|
||||
try {
|
||||
testing.setOpenClawCodingToolsFactoryForTests(() => [
|
||||
createRuntimeDynamicTool("exec"),
|
||||
@@ -1280,26 +1289,64 @@ describe("runCodexAppServerAttempt", () => {
|
||||
},
|
||||
},
|
||||
} as never;
|
||||
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
|
||||
|
||||
const run = runCodexAppServerAttempt(params, {
|
||||
const nativeToolSurfaceEnabled = testing.shouldEnableCodexAppServerNativeToolSurface(
|
||||
params,
|
||||
sandbox as never,
|
||||
{ sandboxExecServerEnabled: true },
|
||||
);
|
||||
const dynamicTools = await testing.buildDynamicTools({
|
||||
params,
|
||||
resolvedWorkspace: workspaceDir,
|
||||
effectiveWorkspace: "/workspace",
|
||||
sandboxSessionKey: params.sessionKey!,
|
||||
sandbox: sandbox as never,
|
||||
nativeToolSurfaceEnabled,
|
||||
runAbortController: new AbortController(),
|
||||
sessionAgentId: "main",
|
||||
pluginConfig: {
|
||||
appServer: {
|
||||
mode: "yolo",
|
||||
experimental: { sandboxExecServer: true },
|
||||
},
|
||||
},
|
||||
onYieldDetected: () => undefined,
|
||||
});
|
||||
await waitForMethod("turn/start");
|
||||
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
|
||||
await run;
|
||||
const environment = await ensureCodexSandboxExecServerEnvironment({
|
||||
client: client as never,
|
||||
sandbox: sandbox as never,
|
||||
appServerStartOptions: appServer.start,
|
||||
});
|
||||
if (!environment) {
|
||||
throw new Error("expected sandbox exec-server environment");
|
||||
}
|
||||
const environmentSelection = [environment];
|
||||
|
||||
const environmentAdd = requests.find((request) => request.method === "environment/add");
|
||||
const environmentAddParams = environmentAdd?.params as
|
||||
await startOrResumeThread({
|
||||
client: client as never,
|
||||
params,
|
||||
cwd: environment.cwd,
|
||||
dynamicTools: dynamicTools as never,
|
||||
appServer,
|
||||
nativeCodeModeEnabled: nativeToolSurfaceEnabled,
|
||||
nativeCodeModeOnlyEnabled: false,
|
||||
userMcpServersEnabled: nativeToolSurfaceEnabled,
|
||||
environmentSelection,
|
||||
});
|
||||
|
||||
const turnParams = buildTurnStartParams(params, {
|
||||
threadId: "thread-1",
|
||||
cwd: environment.cwd,
|
||||
appServer,
|
||||
sandboxPolicy: { type: "externalSandbox", networkAccess: "enabled" },
|
||||
environmentSelection,
|
||||
});
|
||||
|
||||
const environmentAdd = request.mock.calls.find(([method]) => method === "environment/add");
|
||||
const environmentAddParams = environmentAdd?.[1] as
|
||||
| { environmentId?: string; execServerUrl?: string }
|
||||
| undefined;
|
||||
const startRequest = requests.find((request) => request.method === "thread/start");
|
||||
const startParams = startRequest?.params as
|
||||
const startRequest = request.mock.calls.find(([method]) => method === "thread/start");
|
||||
const startParams = startRequest?.[1] as
|
||||
| {
|
||||
cwd?: string;
|
||||
dynamicTools?: Array<{ name: string }>;
|
||||
@@ -1311,15 +1358,8 @@ describe("runCodexAppServerAttempt", () => {
|
||||
};
|
||||
}
|
||||
| undefined;
|
||||
const turnRequest = requests.find((request) => request.method === "turn/start");
|
||||
const turnParams = turnRequest?.params as
|
||||
| {
|
||||
cwd?: string;
|
||||
environments?: Array<{ environmentId?: string; cwd?: string }>;
|
||||
sandboxPolicy?: { type?: string; networkAccess?: string };
|
||||
}
|
||||
| undefined;
|
||||
|
||||
expect(nativeToolSurfaceEnabled).toBe(true);
|
||||
expect(environmentAddParams?.environmentId).toMatch(/^openclaw-sandbox-/);
|
||||
expect(environmentAddParams?.execServerUrl).toMatch(/^ws:\/\/127\.0\.0\.1:/);
|
||||
expect(startParams?.cwd).toBe("/workspace");
|
||||
@@ -1330,14 +1370,14 @@ describe("runCodexAppServerAttempt", () => {
|
||||
{ environmentId: environmentAddParams?.environmentId, cwd: "/workspace" },
|
||||
]);
|
||||
expect(startParams?.sandbox).toBe("danger-full-access");
|
||||
expect(turnParams?.sandboxPolicy).toEqual({
|
||||
expect(turnParams.sandboxPolicy).toEqual({
|
||||
type: "externalSandbox",
|
||||
networkAccess: "enabled",
|
||||
});
|
||||
expect(turnParams?.cwd).toBe("/workspace");
|
||||
expect(turnParams?.environments).toEqual(startParams?.environments);
|
||||
expect(turnParams.cwd).toBe("/workspace");
|
||||
expect(turnParams.environments).toEqual(startParams?.environments);
|
||||
} finally {
|
||||
restoreSandboxBackend();
|
||||
await releaseCodexSandboxExecServerEnvironment(sandbox as never);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -100,6 +100,12 @@ async function runStreamingSandboxHttpRequest(
|
||||
child.once("close", () => {
|
||||
socket.off("close", abortOnSocketClose);
|
||||
});
|
||||
child.stdin.on("error", (error: NodeJS.ErrnoException) => {
|
||||
if (error.code === "EPIPE" || error.code === "ERR_STREAM_DESTROYED") {
|
||||
return;
|
||||
}
|
||||
embeddedAgentLog.warn("codex sandbox http/request stdin write failed", { error });
|
||||
});
|
||||
child.stdin.end(JSON.stringify(params));
|
||||
return await readStreamingSandboxHttpResponse({
|
||||
child,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/comfy-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw ComfyUI provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/copilot-proxy",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Copilot Proxy provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/deepgram-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Deepgram media-understanding provider",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/deepinfra-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw DeepInfra provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/deepseek-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw DeepSeek provider plugin",
|
||||
"type": "module",
|
||||
|
||||
4
extensions/diagnostics-otel/npm-shrinkwrap.json
generated
4
extensions/diagnostics-otel/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/diagnostics-otel",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/diagnostics-otel",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@opentelemetry/api": "1.9.1",
|
||||
"@opentelemetry/api-logs": "0.218.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/diagnostics-otel",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw diagnostics OpenTelemetry exporter",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -34,10 +34,10 @@
|
||||
"minHostVersion": ">=2026.4.25"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/diagnostics-prometheus",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/diagnostics-prometheus",
|
||||
"version": "2026.5.24"
|
||||
"version": "2026.5.24-beta.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/diagnostics-prometheus",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw diagnostics Prometheus exporter",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -21,10 +21,10 @@
|
||||
"minHostVersion": ">=2026.4.25"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
4
extensions/diffs/npm-shrinkwrap.json
generated
4
extensions/diffs/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/diffs",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/diffs",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@pierre/diffs": "1.2.1",
|
||||
"@pierre/theme": "1.0.3",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/diffs",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw diff viewer plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -31,10 +31,10 @@
|
||||
"minHostVersion": ">=2026.4.30"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24",
|
||||
"openclawVersion": "2026.5.24-beta.1",
|
||||
"staticAssets": [
|
||||
{
|
||||
"source": "./assets/viewer-runtime.js",
|
||||
|
||||
6
extensions/discord/npm-shrinkwrap.json
generated
6
extensions/discord/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/discord",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/discord",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/discord",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Discord channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -21,7 +21,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -65,10 +65,10 @@
|
||||
"allowInvalidConfigRecovery": true
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/document-extract-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw local document extraction plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/duckduckgo-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw DuckDuckGo plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/elevenlabs-speech",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw ElevenLabs speech plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/exa-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Exa plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/fal-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw fal provider plugin",
|
||||
"type": "module",
|
||||
|
||||
6
extensions/feishu/npm-shrinkwrap.json
generated
6
extensions/feishu/npm-shrinkwrap.json
generated
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"name": "@openclaw/feishu",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/feishu",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@larksuiteoapi/node-sdk": "1.65.0",
|
||||
"typebox": "1.1.38",
|
||||
"zod": "4.4.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/feishu",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -17,7 +17,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -48,10 +48,10 @@
|
||||
"minHostVersion": ">=2026.4.25"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/file-transfer",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw file transfer plugin (file_fetch, dir_list, dir_fetch, file_write)",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/firecrawl-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Firecrawl plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/fireworks-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Fireworks provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/github-copilot-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw GitHub Copilot provider plugin",
|
||||
"type": "module",
|
||||
|
||||
6
extensions/google-meet/npm-shrinkwrap.json
generated
6
extensions/google-meet/npm-shrinkwrap.json
generated
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"name": "@openclaw/google-meet",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/google-meet",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"commander": "14.0.3",
|
||||
"typebox": "1.1.38"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/google-meet",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Google Meet participant plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -16,7 +16,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -33,10 +33,10 @@
|
||||
"minHostVersion": ">=2026.4.20"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/google-plugin",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Google plugin",
|
||||
"type": "module",
|
||||
|
||||
6
extensions/googlechat/npm-shrinkwrap.json
generated
6
extensions/googlechat/npm-shrinkwrap.json
generated
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"name": "@openclaw/googlechat",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/googlechat",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"gaxios": "7.1.4",
|
||||
"google-auth-library": "10.6.2",
|
||||
"zod": "4.4.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/googlechat",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Google Chat channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -17,7 +17,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -75,10 +75,10 @@
|
||||
"minHostVersion": ">=2026.4.10"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/gradium-speech",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Gradium speech plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/groq-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Groq media-understanding provider",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/huggingface-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Hugging Face provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/image-generation-core",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw image generation runtime package",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/imessage",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
}
|
||||
},
|
||||
"pluginInspector": {
|
||||
|
||||
@@ -213,6 +213,7 @@ describe("buildIMessageInboundContext forwards GroupSystemPrompt", () => {
|
||||
replyContext: null,
|
||||
effectiveWasMentioned: false,
|
||||
commandAuthorized: false,
|
||||
hasControlCommand: false,
|
||||
effectiveDmAllowFrom: [],
|
||||
effectiveGroupAllowFrom: [],
|
||||
groupSystemPrompt: decision.groupSystemPrompt,
|
||||
|
||||
@@ -803,6 +803,7 @@ describe("resolveIMessageInboundDecision command auth", () => {
|
||||
storeAllowFrom: string[];
|
||||
dmPolicy?: "open" | "pairing" | "allowlist" | "disabled";
|
||||
allowFrom?: string[];
|
||||
text?: string;
|
||||
}) =>
|
||||
resolveIMessageInboundDecision({
|
||||
cfg,
|
||||
@@ -810,13 +811,13 @@ describe("resolveIMessageInboundDecision command auth", () => {
|
||||
message: {
|
||||
id: params.messageId,
|
||||
sender: "+15555550123",
|
||||
text: "/status",
|
||||
text: params.text ?? "/status",
|
||||
is_from_me: false,
|
||||
is_group: false,
|
||||
},
|
||||
opts: undefined,
|
||||
messageText: "/status",
|
||||
bodyText: "/status",
|
||||
messageText: params.text ?? "/status",
|
||||
bodyText: params.text ?? "/status",
|
||||
allowFrom: params.allowFrom ?? [],
|
||||
groupAllowFrom: [],
|
||||
groupPolicy: "open",
|
||||
@@ -849,6 +850,84 @@ describe("resolveIMessageInboundDecision command auth", () => {
|
||||
return;
|
||||
}
|
||||
expect(decision.commandAuthorized).toBe(true);
|
||||
expect(decision.hasControlCommand).toBe(true);
|
||||
});
|
||||
|
||||
it("marks authorized iMessage control commands as text command turns", async () => {
|
||||
const decision = await resolveDmCommandDecision({
|
||||
messageId: 102,
|
||||
dmPolicy: "pairing",
|
||||
storeAllowFrom: ["+15555550123"],
|
||||
text: "/new",
|
||||
});
|
||||
|
||||
expect(decision.kind).toBe("dispatch");
|
||||
if (decision.kind !== "dispatch") {
|
||||
return;
|
||||
}
|
||||
|
||||
const { ctxPayload } = buildIMessageInboundContext({
|
||||
cfg,
|
||||
decision,
|
||||
message: {
|
||||
id: 102,
|
||||
guid: "p:0/GUID-command",
|
||||
sender: "+15555550123",
|
||||
text: "/new",
|
||||
is_from_me: false,
|
||||
is_group: false,
|
||||
},
|
||||
historyLimit: 0,
|
||||
groupHistories: new Map(),
|
||||
});
|
||||
|
||||
expect(ctxPayload.CommandAuthorized).toBe(true);
|
||||
expect(ctxPayload.CommandSource).toBe("text");
|
||||
expect(ctxPayload.CommandTurn).toMatchObject({
|
||||
kind: "text-slash",
|
||||
source: "text",
|
||||
authorized: true,
|
||||
commandName: "new",
|
||||
});
|
||||
});
|
||||
|
||||
it("does not mark authorized non-command iMessage DMs as text command turns", async () => {
|
||||
const decision = await resolveDmCommandDecision({
|
||||
messageId: 103,
|
||||
dmPolicy: "pairing",
|
||||
storeAllowFrom: ["+15555550123"],
|
||||
text: "hello there",
|
||||
});
|
||||
|
||||
expect(decision.kind).toBe("dispatch");
|
||||
if (decision.kind !== "dispatch") {
|
||||
return;
|
||||
}
|
||||
expect(decision.commandAuthorized).toBe(true);
|
||||
expect(decision.hasControlCommand).toBe(false);
|
||||
|
||||
const { ctxPayload } = buildIMessageInboundContext({
|
||||
cfg,
|
||||
decision,
|
||||
message: {
|
||||
id: 103,
|
||||
guid: "p:0/GUID-non-command",
|
||||
sender: "+15555550123",
|
||||
text: "hello there",
|
||||
is_from_me: false,
|
||||
is_group: false,
|
||||
},
|
||||
historyLimit: 0,
|
||||
groupHistories: new Map(),
|
||||
});
|
||||
|
||||
expect(ctxPayload.CommandAuthorized).toBe(true);
|
||||
expect(ctxPayload.CommandSource).toBeUndefined();
|
||||
expect(ctxPayload.CommandTurn).toMatchObject({
|
||||
kind: "normal",
|
||||
source: "message",
|
||||
commandName: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -892,6 +971,7 @@ describe("buildIMessageInboundContext MessageSid handling (rowid-leak regression
|
||||
replyContext: undefined,
|
||||
isCommand: false,
|
||||
commandAuthorized: false,
|
||||
hasControlCommand: false,
|
||||
};
|
||||
return {
|
||||
cfg: {} as OpenClawConfig,
|
||||
|
||||
@@ -395,6 +395,7 @@ type IMessageInboundDispatchDecision = {
|
||||
replyContext: IMessageReplyContext | null;
|
||||
effectiveWasMentioned: boolean;
|
||||
commandAuthorized: boolean;
|
||||
hasControlCommand: boolean;
|
||||
// Forwarded as ctxPayload.GroupSystemPrompt for group messages. Resolved
|
||||
// from `channels.imessage.groups.<chat_id>.systemPrompt` (or the `"*"`
|
||||
// wildcard) at gate time. Always undefined for DMs.
|
||||
@@ -884,6 +885,7 @@ export async function resolveIMessageInboundDecision(params: {
|
||||
replyContext: filteredReplyContext,
|
||||
effectiveWasMentioned,
|
||||
commandAuthorized,
|
||||
hasControlCommand: hasControlCommandInMessage,
|
||||
groupSystemPrompt,
|
||||
};
|
||||
}
|
||||
@@ -1031,6 +1033,8 @@ export function buildIMessageInboundContext(params: {
|
||||
MediaRemoteHost: params.remoteHost,
|
||||
WasMentioned: decision.effectiveWasMentioned,
|
||||
CommandAuthorized: decision.commandAuthorized,
|
||||
CommandSource:
|
||||
decision.commandAuthorized && decision.hasControlCommand ? ("text" as const) : undefined,
|
||||
OriginatingChannel: "imessage" as const,
|
||||
OriginatingTo: imessageTo,
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/inworld-speech",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Inworld speech plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/irc",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw IRC channel plugin",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/kilocode-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Kilo Gateway provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/kimi-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Kimi provider plugin",
|
||||
"type": "module",
|
||||
|
||||
6
extensions/line/npm-shrinkwrap.json
generated
6
extensions/line/npm-shrinkwrap.json
generated
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"name": "@openclaw/line",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/line",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@line/bot-sdk": "11.0.0",
|
||||
"zod": "4.4.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/line",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw LINE channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -16,7 +16,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -46,10 +46,10 @@
|
||||
"minHostVersion": ">=2026.4.10"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/litellm-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw LiteLLM provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/llm-task",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw JSON-only LLM task plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/lmstudio-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw LM Studio provider plugin",
|
||||
"type": "module",
|
||||
|
||||
4
extensions/lobster/npm-shrinkwrap.json
generated
4
extensions/lobster/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/lobster",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/lobster",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@clawdbot/lobster": "2026.4.6",
|
||||
"ajv": "8.20.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/lobster",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
6
extensions/matrix/npm-shrinkwrap.json
generated
6
extensions/matrix/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/matrix",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/matrix",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/matrix",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Matrix channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -22,7 +22,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -87,10 +87,10 @@
|
||||
"allowInvalidConfigRecovery": true
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/mattermost",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Mattermost channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -16,7 +16,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/media-understanding-core",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw media understanding runtime package",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/meeting-notes",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw meeting notes plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/memory-core",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw core memory search plugin",
|
||||
"type": "module",
|
||||
@@ -14,7 +14,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
4
extensions/memory-lancedb/npm-shrinkwrap.json
generated
4
extensions/memory-lancedb/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/memory-lancedb",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/memory-lancedb",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"@lancedb/lancedb": "0.29.0",
|
||||
"apache-arrow": "18.1.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/memory-lancedb",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"bundleRuntimeDependencies": false,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/memory-wiki",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw persistent wiki plugin",
|
||||
"type": "module",
|
||||
@@ -14,7 +14,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/microsoft-foundry",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Microsoft Foundry provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/microsoft-speech",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Microsoft speech plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/migrate-claude",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "Claude to OpenClaw migration provider",
|
||||
"type": "module",
|
||||
@@ -9,7 +9,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/migrate-hermes",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "Hermes to OpenClaw migration provider",
|
||||
"type": "module",
|
||||
@@ -12,7 +12,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/minimax-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw MiniMax provider and OAuth plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/mistral-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Mistral provider plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/moonshot-provider",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"private": true,
|
||||
"description": "OpenClaw Moonshot provider plugin",
|
||||
"type": "module",
|
||||
|
||||
6
extensions/msteams/npm-shrinkwrap.json
generated
6
extensions/msteams/npm-shrinkwrap.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@openclaw/msteams",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/msteams",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.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.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/msteams",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"description": "OpenClaw Microsoft Teams channel plugin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -22,7 +22,7 @@
|
||||
"openclaw": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
@@ -58,10 +58,10 @@
|
||||
"minHostVersion": ">=2026.4.10"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.5.24"
|
||||
"pluginApi": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"build": {
|
||||
"openclawVersion": "2026.5.24"
|
||||
"openclawVersion": "2026.5.24-beta.1"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
|
||||
6
extensions/nextcloud-talk/npm-shrinkwrap.json
generated
6
extensions/nextcloud-talk/npm-shrinkwrap.json
generated
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"name": "@openclaw/nextcloud-talk",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openclaw/nextcloud-talk",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.24-beta.1",
|
||||
"dependencies": {
|
||||
"zod": "4.4.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"openclaw": ">=2026.5.24"
|
||||
"openclaw": ">=2026.5.24-beta.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"openclaw": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user