Compare commits

...

16 Commits

Author SHA1 Message Date
Tideclaw
b2023596c5 fix: stabilize alpha release preflight 2026-06-10 03:45:58 +00:00
Tideclaw
d2bcd95174 test: stabilize task maintenance release shard 2026-06-10 03:29:09 +00:00
Tideclaw
760938348c test: stabilize imessage monitor release shard
(cherry picked from commit 1022e49adc)
2026-06-10 03:10:22 +00:00
Tideclaw
0a3663efe2 test: register matrix fixture for cross-agent acp spawn
(cherry picked from commit 1e74b8c081)
2026-06-10 03:10:22 +00:00
Tideclaw
8117762bec test: stabilize acp spawn channel fixtures
(cherry picked from commit 17a4a7f7d7)
2026-06-10 03:10:22 +00:00
Tideclaw
83d765a66c test: use sqlite session stores in release fixtures
(cherry picked from commit 9afb3acff7)
2026-06-10 03:10:22 +00:00
Tideclaw
d6c580085a test: seed telegram approval stores through sdk
(cherry picked from commit 6a06a36f26)
2026-06-10 03:10:22 +00:00
Tideclaw
4d40e7428a test: seed remaining plugin stores through sdk
(cherry picked from commit aea32e6b6c)
2026-06-10 03:10:22 +00:00
Tideclaw
b92da8cdc0 test: use valid slack session entries
(cherry picked from commit 08f4ff46da)
2026-06-10 03:10:22 +00:00
Tideclaw
dc5c1c3ac5 test: satisfy channel fixture lint
(cherry picked from commit 5ed103e79d)
2026-06-10 03:10:22 +00:00
Tideclaw
e2ab936865 test: seed channel session stores through sdk
(cherry picked from commit 066ed9dd84)
2026-06-10 03:10:22 +00:00
Tideclaw
4afc8dd76e fix(ui): localize cron command labels
(cherry picked from commit 1c2c301701)
2026-06-10 03:10:22 +00:00
Tideclaw
e85e75ed78 fix: allow current release package scan size
(cherry picked from commit a7a5d28b57)
2026-06-10 02:43:07 +00:00
Tideclaw
fd01afddd3 chore: prepare alpha 2026.6.10-alpha.1 2026-06-10 02:33:44 +00:00
Tideclaw
d049bf1787 fix: refresh alpha release generated metadata 2026-06-10 02:21:24 +00:00
Tideclaw
3ad5588abb fix: allow alpha focused publish proof
(cherry picked from commit 8d91342423)
2026-06-10 02:15:28 +00:00
252 changed files with 1823 additions and 1688 deletions

View File

@@ -661,6 +661,10 @@ jobs:
- name: Verify full release validation target
if: ${{ inputs.full_release_validation_run_id != '' }}
env:
RELEASE_TAG: ${{ inputs.tag }}
RELEASE_NPM_DIST_TAG: ${{ inputs.npm_dist_tag }}
WORKFLOW_REF_NAME: ${{ github.ref_name }}
run: |
set -euo pipefail
EXPECTED_RELEASE_SHA="$(git rev-parse HEAD)"
@@ -681,7 +685,11 @@ jobs:
echo "Full release validation target SHA mismatch: expected $EXPECTED_RELEASE_SHA, got $TARGET_SHA" >&2
exit 1
fi
if [[ "$RERUN_GROUP" != "all" ]]; then
tideclaw_alpha_focused_validation=false
if [[ "$RERUN_GROUP" == "install-smoke" && "$RELEASE_TAG" == *"-alpha."* && "$RELEASE_NPM_DIST_TAG" == "alpha" && "$WORKFLOW_REF_NAME" =~ ^tideclaw/alpha/[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}Z$ ]]; then
tideclaw_alpha_focused_validation=true
fi
if [[ "$RERUN_GROUP" != "all" && "$tideclaw_alpha_focused_validation" != "true" ]]; then
echo "Full release validation must run rerun_group=all before npm publish; got $RERUN_GROUP" >&2
exit 1
fi

View File

@@ -268,6 +268,8 @@ jobs:
EXPECTED_SHA: ${{ steps.ref.outputs.sha }}
EXPECTED_RELEASE_PROFILE: ${{ inputs.release_profile }}
EXPECTED_WORKFLOW_BRANCH: ${{ github.ref_name }}
RELEASE_TAG: ${{ inputs.tag }}
RELEASE_NPM_DIST_TAG: ${{ inputs.npm_dist_tag }}
run: |
set -euo pipefail
RUN_JSON="$(gh run view "$FULL_RELEASE_VALIDATION_RUN_ID" --repo "$GITHUB_REPOSITORY" --json workflowName,headBranch,event,status,conclusion,url)"
@@ -295,7 +297,11 @@ jobs:
echo "Full release validation profile mismatch: expected $EXPECTED_RELEASE_PROFILE, got $release_profile" >&2
exit 1
fi
if [[ "$rerun_group" != "all" ]]; then
tideclaw_alpha_focused_validation=false
if [[ "$rerun_group" == "install-smoke" && "$RELEASE_TAG" == *"-alpha."* && "$RELEASE_NPM_DIST_TAG" == "alpha" && "$EXPECTED_WORKFLOW_BRANCH" =~ ^tideclaw/alpha/[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}Z$ ]]; then
tideclaw_alpha_focused_validation=true
fi
if [[ "$rerun_group" != "all" && "$tideclaw_alpha_focused_validation" != "true" ]]; then
echo "Full release validation must run rerun_group=all before npm publish; got $rerun_group" >&2
exit 1
fi

View File

@@ -2,6 +2,12 @@
Docs: https://docs.openclaw.ai
## 2026.6.10
### Fixes
- Alpha/nightly release metadata refreshes generated plugin inventory, config, Plugin SDK API, package version, and shrinkwrap state for the June 10 candidate.
## 2026.6.5
### Highlights

View File

@@ -1,4 +1,4 @@
37b56008790612b8293930b6a29d74490e98daa90f954fca9d133fcc28645c4c config-baseline.json
75b64c2ea081369ba4306493313a8a4cd48b784145f92fed995e6b77a5df350d config-baseline.core.json
17d64c9799dfa239a49493413f1100bdd9237e9b67aaeae331a4604dbc227023 config-baseline.channel.json
f9d1f50bfa8403891e76cd99dc1357cdece4a71e8ae18a39b190c2a14e6f97b0 config-baseline.plugin.json
c55137ba447f9810d845b77aa8197cfe702cdb6eb724616d6c1e2cd268e13edb config-baseline.json
7b2f99fdd52527397bf3520d923e7b4eec6b0091a7a7a006f6f39bedb931404c config-baseline.core.json
7641a0edd1f7ddb904d394381017cb645d2c2c1a86d875df30e9bf11f8dd012e config-baseline.channel.json
b0dec5acfe60557e728e5ad03cc36d19d2432d51f755656c97846afa7fbe374a config-baseline.plugin.json

View File

@@ -1,2 +1,2 @@
424f72310250c242a3157994c45f7319370c1bf99014a13ee5f86cc811f43dd4 plugin-sdk-api-baseline.json
87e786df92be36c22a7b392162c9fa39b634094d15aec4736d8b65be8d7cfd9c plugin-sdk-api-baseline.jsonl
4768607253fdc720cb2bc280ac285ccfa7f7057a01659691f5be5b1f58422789 plugin-sdk-api-baseline.json
7901bc511cf6f9628df4cd619035265f48c40939e4e8e51c5c10dc73a263f183 plugin-sdk-api-baseline.jsonl

View File

@@ -137,7 +137,7 @@ Each entry lists the package, distribution route, and description.
- **[mattermost](/plugins/reference/mattermost)** (`@openclaw/mattermost`) - included in OpenClaw. Adds the Mattermost channel surface for sending and receiving OpenClaw messages.
- **[memory-core](/plugins/reference/memory-core)** (`@openclaw/memory-core`) - included in OpenClaw. Adds file-backed memory search tools.
- **[memory-core](/plugins/reference/memory-core)** (`@openclaw/memory-core`) - included in OpenClaw. Adds agent-callable tools.
- **[memory-wiki](/plugins/reference/memory-wiki)** (`@openclaw/memory-wiki`) - included in OpenClaw. Persistent wiki compiler and Obsidian-friendly knowledge vault for OpenClaw.
@@ -267,10 +267,10 @@ Each entry lists the package, distribution route, and description.
- **[googlechat](/plugins/reference/googlechat)** (`@openclaw/googlechat`) - npm; ClawHub. OpenClaw Google Chat channel plugin for spaces and direct messages.
- **[llama-cpp](/plugins/reference/llama-cpp)** (`@openclaw/llama-cpp-provider`) - npm; ClawHub. OpenClaw llama.cpp embedding provider plugin.
- **[line](/plugins/reference/line)** (`@openclaw/line`) - npm; ClawHub. OpenClaw LINE channel plugin for LINE Bot API chats.
- **[llama-cpp](/plugins/reference/llama-cpp)** (`@openclaw/llama-cpp-provider`) - npm; ClawHub. Local GGUF embeddings through node-llama-cpp.
- **[lobster](/plugins/reference/lobster)** (`@openclaw/lobster`) - npm; ClawHub. Lobster workflow tool plugin for typed pipelines and resumable approvals.
- **[matrix](/plugins/reference/matrix)** (`@openclaw/matrix`) - ClawHub: `clawhub:@openclaw/matrix`; npm. OpenClaw Matrix channel plugin for rooms and direct messages.

View File

@@ -1,13 +1,13 @@
---
summary: "OpenClaw llama.cpp embedding provider plugin."
summary: "Local GGUF embeddings through node-llama-cpp."
read_when:
- You are installing, configuring, or auditing the llama-cpp plugin
title: "llama-cpp plugin"
title: "Llama Cpp plugin"
---
# llama-cpp plugin
# Llama Cpp plugin
OpenClaw llama.cpp embedding provider plugin.
Local GGUF embeddings through node-llama-cpp.
## Distribution
@@ -20,4 +20,4 @@ contracts: embeddingProviders
## Related docs
- [llama.cpp Provider](/plugins/llama-cpp)
- [llama-cpp](/plugins/llama-cpp)

View File

@@ -1,5 +1,5 @@
---
summary: "Adds file-backed memory search tools."
summary: "Adds agent-callable tools."
read_when:
- You are installing, configuring, or auditing the memory-core plugin
title: "Memory Core plugin"
@@ -7,7 +7,7 @@ title: "Memory Core plugin"
# Memory Core plugin
Adds file-backed memory search tools.
Adds agent-callable tools.
## Distribution

View File

@@ -1,5 +1,5 @@
---
summary: "Use Microsoft Foundry chat and MAI image deployments from OpenClaw."
summary: "Adds Microsoft Foundry model provider support to OpenClaw."
read_when:
- You are installing, configuring, or auditing the microsoft-foundry plugin
title: "Microsoft Foundry plugin"
@@ -7,9 +7,7 @@ title: "Microsoft Foundry plugin"
# Microsoft Foundry plugin
Use Microsoft Foundry deployments from OpenClaw with API-key auth or Microsoft
Entra ID through the Azure CLI. The plugin owns Microsoft Foundry model
discovery, runtime token refresh, and MAI image generation.
Adds Microsoft Foundry model provider support to OpenClaw.
## Distribution
@@ -18,7 +16,10 @@ discovery, runtime token refresh, and MAI image generation.
## Surface
- Model provider: `microsoft-foundry`
providers: microsoft-foundry; contracts: imageGenerationProviders
<!-- openclaw-plugin-reference:manual-start -->
- Image-generation provider: `microsoft-foundry`
## Requirements
@@ -105,3 +106,5 @@ MAI image constraints:
Foundry deployment through onboarding or add `models.providers.microsoft-foundry.baseUrl`.
- `supports MAI image deployments only`: the selected image model points at a
non-MAI deployment. Use a deployed MAI image model for `image_generate`.
<!-- openclaw-plugin-reference:manual-end -->

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/acpx",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/acpx",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@agentclientprotocol/claude-agent-acp": "0.39.0",
"@zed-industries/codex-acp": "0.15.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"staticAssets": [
{
"source": "./src/runtime-internals/mcp-proxy.mjs",

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/alibaba-provider",
"version": "2026.6.2",
"version": "2026.6.10-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.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@anthropic-ai/sdk": "0.100.1",
"@aws/bedrock-token-generator": "1.1.0"

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Amazon Bedrock provider plugin with model discovery, embeddings, and guardrail support.",
"repository": {
"type": "git",
@@ -28,10 +28,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"bundledDist": false
},
"release": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@anthropic-ai/vertex-sdk": "0.16.1"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Anthropic Vertex provider plugin for Claude models on Google Vertex AI.",
"repository": {
"type": "git",
@@ -23,10 +23,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"bundledDist": false
},
"release": {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -15,6 +15,17 @@ function restoreEnvVar(name: string, value: string | undefined): void {
}
}
function readAuthorizationHeader(init?: { headers?: HeadersInit }): string {
const headers = init?.headers;
if (headers instanceof Headers) {
return headers.get("Authorization") ?? "";
}
if (Array.isArray(headers)) {
return headers.find(([key]) => key.toLowerCase() === "authorization")?.[1] ?? "";
}
return headers?.Authorization ?? headers?.authorization ?? "";
}
async function runChutesCatalog(params: { apiKey?: string; discoveryApiKey?: string }) {
const provider = await registerSingleProviderPlugin(plugin);
const result = await provider.catalog?.run({
@@ -101,8 +112,8 @@ describe("chutes implicit provider auth mode", () => {
const chutesCalls = fetchMock.mock.calls.filter(([url]) => String(url).includes("chutes.ai"));
expect(chutesCalls.length).toBeGreaterThan(0);
const request = chutesCalls[0]?.[1] as { headers?: Record<string, string> } | undefined;
expect(request?.headers?.Authorization).toBe("Bearer my-chutes-access-token");
const request = chutesCalls[0]?.[1] as { headers?: HeadersInit } | undefined;
expect(readAuthorizationHeader(request)).toBe("Bearer my-chutes-access-token");
});
});
});

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex-supervisor",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"private": true,
"description": "OpenClaw Codex app-server fleet supervision plugin.",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/codex",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/codex",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@openai/codex": "0.137.0",
"typebox": "1.1.39",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Codex app-server harness and model provider plugin with a Codex-managed GPT catalog.",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.5.1-beta.1"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/copilot",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/copilot",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@github/copilot-sdk": "1.0.0-beta.9"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw GitHub Copilot agent runtime plugin (registers a `github-copilot` AgentHarness backed by @github/copilot-sdk over JSON-RPC to the GitHub Copilot CLI)",
"repository": {
"type": "git",
@@ -25,10 +25,10 @@
"minHostVersion": ">=2026.5.28"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"bundledDist": false
},
"release": {

View File

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

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diagnostics-otel",
"version": "2026.6.2",
"version": "2026.6.10-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.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw diagnostics OpenTelemetry exporter for metrics and traces.",
"repository": {
"type": "git",
@@ -34,10 +34,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diffs-language-pack",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diffs-language-pack",
"version": "2026.6.2"
"version": "2026.6.10-alpha.1"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs-language-pack",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw diffs viewer syntax highlighting language pack",
"repository": {
"type": "git",
@@ -22,13 +22,13 @@
"minHostVersion": ">=2026.5.27"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"assetScripts": {
"build": "node ../../scripts/build-diffs-viewer-runtime.mjs full"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"staticAssets": [
{
"source": "./assets/viewer-runtime.js",

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw read-only diff viewer plugin and file renderer for agents.",
"repository": {
"type": "git",
@@ -29,13 +29,13 @@
"minHostVersion": ">=2026.4.30"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"assetScripts": {
"build": "node ../../scripts/build-diffs-viewer-runtime.mjs curated"
},
"build": {
"openclawVersion": "2026.6.2",
"openclawVersion": "2026.6.10-alpha.1",
"staticAssets": [
{
"source": "./assets/viewer-runtime.js",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/discord",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/discord",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@discordjs/voice": "0.19.2",
"discord-api-types": "0.38.48",
@@ -16,7 +16,7 @@
"ws": "8.21.0"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Discord channel plugin for channels, DMs, commands, and app events.",
"repository": {
"type": "git",
@@ -20,7 +20,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -67,10 +67,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/feishu",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).",
"repository": {
"type": "git",
@@ -17,7 +17,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -51,10 +51,10 @@
"minHostVersion": ">=2026.5.29"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/file-transfer",
"version": "2026.6.2",
"version": "2026.6.10-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.6.2",
"version": "2026.6.10-alpha.1",
"private": true,
"description": "OpenClaw Firecrawl plugin",
"type": "module",

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/gmi-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"private": true,
"description": "OpenClaw GMI Cloud provider plugin",
"type": "module",

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-meet",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Google Meet participant plugin for joining calls through Chrome or Twilio transports.",
"repository": {
"type": "git",
@@ -16,7 +16,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -33,10 +33,10 @@
"minHostVersion": ">=2026.4.20"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Google Chat channel plugin for spaces and direct messages.",
"repository": {
"type": "git",
@@ -17,7 +17,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -75,10 +75,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/huggingface-provider",
"version": "2026.6.2",
"version": "2026.6.10-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.6.2",
"version": "2026.6.10-alpha.1",
"private": true,
"description": "OpenClaw image generation runtime package",
"type": "module",

View File

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

View File

@@ -101,7 +101,7 @@ describe("monitorIMessageProvider watch.subscribe startup retry", () => {
runtime: runtime as never,
});
await vi.runAllTimersAsync();
await vi.advanceTimersByTimeAsync(1_000);
await monitorPromise;
expect(createIMessageRpcClientMock).toHaveBeenCalledTimes(2);
@@ -146,7 +146,7 @@ describe("monitorIMessageProvider watch.subscribe startup retry", () => {
runtime: runtime as never,
}).catch((error: unknown) => error);
await vi.runAllTimersAsync();
await vi.advanceTimersByTimeAsync(2_000);
const monitorError = await monitorErrorPromise;
expect(monitorError).toBeInstanceOf(Error);

View File

@@ -277,15 +277,15 @@ function hasIMessageEchoMatch(params: {
if (!params.text && !fallbackMessageId) {
continue;
}
const echoOptions =
params.skipIdShortCircuit || params.includePendingText
? {
skipIdShortCircuit: params.skipIdShortCircuit,
includePendingText: params.includePendingText,
}
: undefined;
if (
params.echoCache.has(
scope,
{ text: params.text, messageId: fallbackMessageId },
{
skipIdShortCircuit: params.skipIdShortCircuit,
includePendingText: params.includePendingText,
},
)
params.echoCache.has(scope, { text: params.text, messageId: fallbackMessageId }, echoOptions)
) {
return true;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw LINE channel plugin for LINE Bot API chats.",
"repository": {
"type": "git",
@@ -16,7 +16,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -46,10 +46,10 @@
"minHostVersion": ">=2026.4.10"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

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

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/llama-cpp-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/llama-cpp-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"node-llama-cpp": "3.18.1"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/llama-cpp-provider",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw llama.cpp embedding provider plugin",
"repository": {
"type": "git",
@@ -23,10 +23,10 @@
"minHostVersion": ">=2026.6.2"
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"bundleRuntimeDependencies": false,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
"version": "2026.6.2",
"version": "2026.6.10-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.6.2",
"version": "2026.6.10-alpha.1",
"private": true,
"description": "OpenClaw LM Studio provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/lobster",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/lobster",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"dependencies": {
"@clawdbot/lobster": "2026.5.22",
"typebox": "1.1.39"

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
"version": "2026.6.2",
"version": "2026.6.10-alpha.1",
"description": "OpenClaw Matrix channel plugin for rooms and direct messages.",
"repository": {
"type": "git",
@@ -22,7 +22,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.6.2"
"openclaw": ">=2026.6.10-alpha.1"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -88,10 +88,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.6.2"
"pluginApi": ">=2026.6.10-alpha.1"
},
"build": {
"openclawVersion": "2026.6.2"
"openclawVersion": "2026.6.10-alpha.1"
},
"release": {
"publishToClawHub": true,

View File

@@ -3,6 +3,7 @@ import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
import { saveSessionStore, type SessionEntry } from "openclaw/plugin-sdk/session-store-runtime";
import { afterEach, describe, expect, it } from "vitest";
import {
getMatrixExecApprovalApprovers,
@@ -342,12 +343,12 @@ describe("matrix exec approvals", () => {
).toBe(false);
});
it("scopes non-matrix turn sources to the stored matrix account", () => {
it("scopes non-matrix turn sources to the stored matrix account", async () => {
const tmpDir = createTempDir();
const storePath = path.join(tmpDir, "sessions.json");
fs.writeFileSync(
await saveSessionStore(
storePath,
JSON.stringify({
{
"agent:ops-agent:matrix:channel:!room:example.org": {
sessionId: "main",
updatedAt: 1,
@@ -359,8 +360,8 @@ describe("matrix exec approvals", () => {
lastTo: "channel:C999",
lastAccountId: "work",
},
}),
"utf-8",
} as Record<string, SessionEntry>,
{ skipMaintenance: true },
);
const cfg = buildMultiAccountMatrixConfig({ sessionStorePath: storePath });
const request = makeForeignChannelApprovalRequest({

View File

@@ -7,6 +7,11 @@ import {
testing as sessionBindingTesting,
registerSessionBindingAdapter,
} from "openclaw/plugin-sdk/session-binding-runtime";
import {
loadSessionStore,
saveSessionStore,
type SessionEntry,
} from "openclaw/plugin-sdk/session-store-runtime";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { installMatrixMonitorTestRuntime } from "../../test-runtime.js";
import { MATRIX_OPENCLAW_FINALIZED_PREVIEW_KEY } from "../send/types.js";
@@ -65,7 +70,7 @@ vi.mock("./replies.js", () => ({
deliverMatrixReplies: deliverMatrixRepliesMock,
}));
function writeMatrixSessionMeta(
async function writeMatrixSessionMeta(
storePath: string,
sessionKey: string,
origin: {
@@ -75,10 +80,8 @@ function writeMatrixSessionMeta(
nativeChannelId?: string;
nativeDirectUserId?: string;
},
): void {
const store = fs.existsSync(storePath)
? (JSON.parse(fs.readFileSync(storePath, "utf8")) as Record<string, Record<string, unknown>>)
: {};
): Promise<void> {
const store = loadSessionStore(storePath, { clone: false });
const existing = store[sessionKey] ?? {
sessionId: `sess-${Object.keys(store).length + 1}`,
updatedAt: Date.now(),
@@ -97,8 +100,7 @@ function writeMatrixSessionMeta(
...origin,
},
};
fs.mkdirSync(path.dirname(storePath), { recursive: true });
fs.writeFileSync(storePath, JSON.stringify(store, null, 2), "utf8");
await saveSessionStore(storePath, store, { skipMaintenance: true });
}
beforeEach(() => {
@@ -1153,7 +1155,7 @@ describe("matrix monitor handler pairing account scope", () => {
const sendNotice = vi.fn(async () => "$notice");
try {
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "direct",
from: "matrix:@user:example.org",
to: "room:!other:example.org",
@@ -1207,7 +1209,7 @@ describe("matrix monitor handler pairing account scope", () => {
}));
try {
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "direct",
from: "matrix:@user:example.org",
to: "room:!other:example.org",
@@ -1251,7 +1253,7 @@ describe("matrix monitor handler pairing account scope", () => {
const sendNotice = vi.fn(async () => "$notice");
try {
writeMatrixSessionMeta(storePath, "agent:ops:matrix:direct:@user:example.org", {
await writeMatrixSessionMeta(storePath, "agent:ops:matrix:direct:@user:example.org", {
chatType: "direct",
from: "matrix:@user:example.org",
to: "room:!other:example.org",
@@ -1295,7 +1297,7 @@ describe("matrix monitor handler pairing account scope", () => {
const sendNotice = vi.fn(async () => "$notice");
try {
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "direct",
from: "matrix:@user:example.org",
to: "room:!other:example.org",
@@ -1347,13 +1349,13 @@ describe("matrix monitor handler pairing account scope", () => {
const sendNotice = vi.fn(async () => "$notice");
try {
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "direct",
from: "matrix:@user:example.org",
to: "room:!other:example.org",
nativeChannelId: "!other:example.org",
});
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "direct",
from: "matrix:@other:example.org",
to: "room:@other:example.org",
@@ -1389,7 +1391,7 @@ describe("matrix monitor handler pairing account scope", () => {
const sendNotice = vi.fn(async () => "$notice");
try {
writeMatrixSessionMeta(storePath, "agent:ops:main", {
await writeMatrixSessionMeta(storePath, "agent:ops:main", {
chatType: "group",
from: "matrix:channel:!group:example.org",
to: "room:!group:example.org",
@@ -1421,9 +1423,9 @@ describe("matrix monitor handler pairing account scope", () => {
it("skips the shared-session notice when Matrix DMs are isolated per room", async () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "matrix-dm-room-scope-"));
const storePath = path.join(tempDir, "sessions.json");
fs.writeFileSync(
await saveSessionStore(
storePath,
JSON.stringify({
{
"agent:ops:main": {
sessionId: "sess-main",
updatedAt: Date.now(),
@@ -1433,8 +1435,8 @@ describe("matrix monitor handler pairing account scope", () => {
accountId: "ops",
},
},
}),
"utf8",
} as Record<string, SessionEntry>,
{ skipMaintenance: true },
);
const sendNotice = vi.fn(async () => "$notice");
@@ -1468,9 +1470,9 @@ describe("matrix monitor handler pairing account scope", () => {
it("skips the shared-session notice when a Matrix DM is explicitly bound", async () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "matrix-dm-bound-notice-"));
const storePath = path.join(tempDir, "sessions.json");
fs.writeFileSync(
await saveSessionStore(
storePath,
JSON.stringify({
{
"agent:bound:session-1": {
sessionId: "sess-bound",
updatedAt: Date.now(),
@@ -1480,8 +1482,8 @@ describe("matrix monitor handler pairing account scope", () => {
accountId: "ops",
},
},
}),
"utf8",
} as Record<string, SessionEntry>,
{ skipMaintenance: true },
);
const sendNotice = vi.fn(async () => "$notice");
const touch = vi.fn();

View File

@@ -2,6 +2,7 @@
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { saveSessionStore, type SessionEntry } from "openclaw/plugin-sdk/session-store-runtime";
import { afterEach, describe, expect, it } from "vitest";
import type { OpenClawConfig } from "./runtime-api.js";
import { resolveMatrixOutboundSessionRoute } from "./session-route.js";
@@ -27,21 +28,23 @@ const defaultAccountPerRoomDmMatrixConfig = {
},
} satisfies MatrixChannelConfig;
function createTempStore(entries: Record<string, unknown>): string {
async function createTempStore(entries: Record<string, unknown>): Promise<string> {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "matrix-session-route-"));
tempDirs.add(tempDir);
const storePath = path.join(tempDir, "sessions.json");
fs.writeFileSync(storePath, JSON.stringify(entries), "utf8");
await saveSessionStore(storePath, entries as Record<string, SessionEntry>, {
skipMaintenance: true,
});
return storePath;
}
function createMatrixRouteConfig(
async function createMatrixRouteConfig(
entries: Record<string, unknown>,
matrix: MatrixChannelConfig = perRoomDmMatrixConfig,
): OpenClawConfig {
): Promise<OpenClawConfig> {
return {
session: {
store: createTempStore(entries),
store: await createTempStore(entries),
},
channels: {
matrix,
@@ -127,14 +130,14 @@ function resolveUserRoute(params: { cfg: OpenClawConfig; accountId?: string; tar
});
}
function resolveUserRouteForCurrentSession(params: {
async function resolveUserRouteForCurrentSession(params: {
storedSession: Record<string, unknown>;
accountId?: string;
target?: string;
matrix?: MatrixChannelConfig;
}) {
return resolveUserRoute({
cfg: createMatrixRouteConfig(
cfg: await createMatrixRouteConfig(
{
[currentDmSessionKey]: params.storedSession,
},
@@ -188,8 +191,8 @@ afterEach(() => {
});
describe("resolveMatrixOutboundSessionRoute", () => {
it("reuses the current DM room session for same-user sends when Matrix DMs are per-room", () => {
const route = resolveUserRouteForCurrentSession({
it("reuses the current DM room session for same-user sends when Matrix DMs are per-room", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession(),
accountId: "ops",
});
@@ -197,8 +200,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectCurrentDmRoomRoute(route);
});
it("falls back to user-scoped routing when the current session is for another DM peer", () => {
const route = resolveUserRouteForCurrentSession({
it("falls back to user-scoped routing when the current session is for another DM peer", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession({ from: "matrix:@bob:example.org" }),
accountId: "ops",
});
@@ -206,8 +209,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectFallbackUserRoute(route);
});
it("falls back to user-scoped routing when the current session belongs to another Matrix account", () => {
const route = resolveUserRouteForCurrentSession({
it("falls back to user-scoped routing when the current session belongs to another Matrix account", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession(),
accountId: "support",
});
@@ -215,8 +218,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectFallbackUserRoute(route);
});
it("reuses the canonical DM room after user-target outbound metadata overwrites latest to fields", () => {
const route = resolveUserRouteForCurrentSession({
it("reuses the canonical DM room after user-target outbound metadata overwrites latest to fields", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession({
from: "matrix:@bob:example.org",
to: "room:@bob:example.org",
@@ -231,8 +234,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectCurrentDmRoomRoute(route);
});
it("does not reuse the canonical DM room for a different Matrix user after latest metadata drift", () => {
const route = resolveUserRouteForCurrentSession({
it("does not reuse the canonical DM room for a different Matrix user after latest metadata drift", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession({
from: "matrix:@bob:example.org",
to: "room:@bob:example.org",
@@ -248,8 +251,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectFallbackUserRoute(route, { userId: "@bob:example.org" });
});
it("does not reuse a room after the session metadata was overwritten by a non-DM Matrix send", () => {
const route = resolveUserRouteForCurrentSession({
it("does not reuse a room after the session metadata was overwritten by a non-DM Matrix send", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredChannelSession(),
accountId: "ops",
});
@@ -257,8 +260,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectFallbackUserRoute(route);
});
it("uses the effective default Matrix account when accountId is omitted", () => {
const route = resolveUserRouteForCurrentSession({
it("uses the effective default Matrix account when accountId is omitted", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession(),
matrix: defaultAccountPerRoomDmMatrixConfig,
});
@@ -266,8 +269,8 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expectCurrentDmRoomRoute(route);
});
it("reuses the current DM room when stored account metadata is missing", () => {
const route = resolveUserRouteForCurrentSession({
it("reuses the current DM room when stored account metadata is missing", async () => {
const route = await resolveUserRouteForCurrentSession({
storedSession: createStoredDirectDmSession({ accountId: null }),
matrix: defaultAccountPerRoomDmMatrixConfig,
});
@@ -291,17 +294,17 @@ describe("resolveMatrixOutboundSessionRoute", () => {
expect(channelRoute.threadId).toBe("$RootEvent:Example.Org");
});
it("resolves per-room DM metadata from the base key when currentSessionKey has a thread suffix", () => {
it("resolves per-room DM metadata from the base key when currentSessionKey has a thread suffix", async () => {
const storedSession = createStoredDirectDmSession();
const route = resolveUserRoute({
cfg: createMatrixRouteConfig({
cfg: await createMatrixRouteConfig({
[currentDmSessionKey]: storedSession,
}),
accountId: "ops",
target: "@alice:example.org",
});
const threadedRoute = resolveMatrixOutboundSessionRoute({
cfg: createMatrixRouteConfig({
cfg: await createMatrixRouteConfig({
[route?.baseSessionKey ?? currentDmSessionKey]: storedSession,
}),
agentId: "main",

View File

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

View File

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

View File

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

View File

@@ -1035,7 +1035,7 @@ describe("generateAndAppendDreamNarrative", () => {
sessionId: "still-missing-non-dreaming",
updatedAt: Date.now(),
},
},
} as never,
{ skipMaintenance: true },
);
await fs.writeFile(orphanPath, '{"runId":"dreaming-narrative-light-123"}\n', "utf-8");
@@ -1105,7 +1105,7 @@ describe("generateAndAppendDreamNarrative", () => {
sessionId: "still-live",
updatedAt: Date.now(),
},
},
} as never,
{ skipMaintenance: true },
);
await fs.writeFile(orphanTranscript, '{"runId":"dreaming-narrative-deep-orphan"}\n', "utf-8");

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