Skip to content

Commit 9726ec5

Browse files
authored
Merge branch 'main' into vincentkoc-code/cli-acpx-reliability-20260304
2 parents 4e1f349 + 26e0143 commit 9726ec5

File tree

386 files changed

+2779
-518
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

386 files changed

+2779
-518
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ Docs: https://docs.openclaw.ai
1616

1717
### Fixes
1818

19+
- Outbound/send config threading: pass resolved SecretRef config through outbound adapters and helper send paths so send flows do not reload unresolved runtime config. (#33987) Thanks @joshavant.
1920
- Sessions/subagent attachments: remove `attachments[].content.maxLength` from `sessions_spawn` schema to avoid llama.cpp GBNF repetition overflow, and preflight UTF-8 byte size before buffer allocation while keeping runtime file-size enforcement unchanged. (#33648) Thanks @anisoptera.
2021
- Runtime/tool-state stability: recover from dangling Anthropic `tool_use` after compaction, serialize long-running Discord handler runs without blocking new inbound events, and prevent stale busy snapshots from suppressing stuck-channel recovery. (from #33630, #33583) Thanks @kevinWangSheng and @theotarr.
2122
- Extensions/media local-root propagation: consistently forward `mediaLocalRoots` through extension `sendMedia` adapters (Google Chat, Slack, iMessage, Signal, WhatsApp), preserving non-local media behavior while restoring local attachment resolution from configured roots. Synthesis of #33581, #33545, #33540, #33536, #33528. Thanks @bmendonca3.
2223
- Gateway/security default response headers: add `Permissions-Policy: camera=(), microphone=(), geolocation=()` to baseline gateway HTTP security headers for all responses. (#30186) thanks @habakan.
2324
- Plugins/startup loading: lazily initialize plugin runtime, split startup-critical plugin SDK imports into `openclaw/plugin-sdk/core` and `openclaw/plugin-sdk/telegram`, and preserve `api.runtime` reflection semantics for plugin compatibility. (#28620) thanks @hmemcpy.
25+
- Plugins/startup performance: reduce bursty plugin discovery/manifest overhead with short in-process caches, skip importing bundled memory plugins that are disabled by slot selection, and speed legacy root `openclaw/plugin-sdk` compatibility via runtime root-alias routing while preserving backward compatibility. Thanks @gumadeiras.
2426
- Build/lazy runtime boundaries: replace ineffective dynamic import sites with dedicated lazy runtime boundaries across Slack slash handling, Telegram audit, CLI send deps, memory fallback, and outbound delivery paths while preserving behavior. (#33690) thanks @gumadeiras.
2527
- Config/heartbeat legacy-path handling: auto-migrate top-level `heartbeat` into `agents.defaults.heartbeat` (with merge semantics that preserve explicit defaults), and keep startup failures on non-migratable legacy entries in the detailed invalid-config path instead of generic migration-failed errors. (#32706) thanks @xiwan.
2628
- Plugins/SDK subpath parity: add channel-specific plugin SDK subpaths for Discord, Slack, Signal, iMessage, WhatsApp, and LINE; migrate bundled plugin entrypoints to scoped subpaths/core with CI guardrails; and keep `openclaw/plugin-sdk` root import compatibility for existing external plugins. (#33737) thanks @gumadeiras.
@@ -70,6 +72,8 @@ Docs: https://docs.openclaw.ai
7072
- Agents/Compaction continuity: expand staged-summary merge instructions to preserve active task status, batch progress, latest user request, and follow-up commitments so compaction handoffs retain in-flight work context. (#8903) thanks @joetomasone.
7173
- Gateway/status self version reporting: make Gateway self version in `openclaw status` prefer runtime `VERSION` (while preserving explicit `OPENCLAW_VERSION` override), preventing stale post-upgrade app version output. (#32655) thanks @liuxiaopai-ai.
7274
- Memory/QMD index isolation: set `QMD_CONFIG_DIR` alongside `XDG_CONFIG_HOME` so QMD config state stays per-agent despite upstream XDG handling bugs, preventing cross-agent collection indexing and excess disk/CPU usage. (#27028) thanks @HenryLoenwind.
75+
- CLI/Coding-agent reliability: switch default `claude-cli` non-interactive args to `--permission-mode bypassPermissions`, auto-normalize legacy `--dangerously-skip-permissions` backend overrides to the modern permission-mode form, align coding-agent + live-test docs with the non-PTY Claude path, and emit session system-event heartbeat notices when CLI watchdog no-output timeouts terminate runs. Related to #28261. Landed from contributor PRs #28610 and #31149. Thanks @niceysam, @cryptomaltese and @vincentkoc.
76+
- ACP/ACPX session bootstrap: retry with `sessions new` when `sessions ensure` returns no session identifiers so ACP spawns avoid `NO_SESSION`/`ACP_TURN_FAILED` failures on affected agents. Related to #28786. Landed from contributor PR #31338. Thanks @Sid-Qin and @vincentkoc.
7377
- LINE/auth boundary hardening synthesis: enforce strict LINE webhook authn/z boundary semantics across pairing-store account scoping, DM/group allowlist separation, fail-closed webhook auth/runtime behavior, and replay/duplication controls (including in-flight replay reservation and post-success dedupe marking). (from #26701, #26683, #25978, #17593, #16619, #31990, #26047, #30584, #18777) Thanks @bmendonca3, @davidahmann, @harshang03, @haosenwang1018, @liuxiaopai-ai, @coygeek, and @Takhoffman.
7478
- LINE/media download synthesis: fix file-media download handling and M4A audio classification across overlapping LINE regressions. (from #26386, #27761, #27787, #29509, #29755, #29776, #29785, #32240) Thanks @kevinWangSheng, @loiie45e, @carrotRakko, @Sid-Qin, @codeafridi, and @bmendonca3.
7579
- LINE/context and routing synthesis: fix group/room peer routing and command-authorization context propagation, and keep processing later events in mixed-success webhook batches. (from #21955, #24475, #27035, #28286) Thanks @lailoo, @mcaxtr, @jervyclaw, @Glucksberg, and @Takhoffman.

docs/tools/plugin.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ Use SDK subpaths instead of the monolithic `openclaw/plugin-sdk` import when
112112
authoring plugins:
113113

114114
- `openclaw/plugin-sdk/core` for generic plugin APIs, provider auth types, and shared helpers.
115+
- `openclaw/plugin-sdk/compat` for bundled/internal plugin code that needs broader shared runtime helpers than `core`.
115116
- `openclaw/plugin-sdk/telegram` for Telegram channel plugins.
116117
- `openclaw/plugin-sdk/discord` for Discord channel plugins.
117118
- `openclaw/plugin-sdk/slack` for Slack channel plugins.
@@ -123,8 +124,17 @@ authoring plugins:
123124
Compatibility note:
124125

125126
- `openclaw/plugin-sdk` remains supported for existing external plugins.
126-
- New and migrated bundled plugins should use channel subpaths (or `core`) to
127-
keep startup imports scoped.
127+
- New and migrated bundled plugins should use channel subpaths and `core`; use
128+
`compat` only when broader shared helpers are required.
129+
130+
Performance note:
131+
132+
- Plugin discovery and manifest metadata use short in-process caches to reduce
133+
bursty startup/reload work.
134+
- Set `OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE=1` or
135+
`OPENCLAW_DISABLE_PLUGIN_MANIFEST_CACHE=1` to disable these caches.
136+
- Tune cache windows with `OPENCLAW_PLUGIN_DISCOVERY_CACHE_MS` and
137+
`OPENCLAW_PLUGIN_MANIFEST_CACHE_MS`.
128138

129139
## Discovery & precedence
130140

extensions/acpx/src/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from "node:path";
22
import { fileURLToPath } from "node:url";
3-
import type { OpenClawPluginConfigSchema } from "openclaw/plugin-sdk";
3+
import type { OpenClawPluginConfigSchema } from "openclaw/plugin-sdk/compat";
44

55
export const ACPX_PERMISSION_MODES = ["approve-all", "approve-reads", "deny-all"] as const;
66
export type AcpxPermissionMode = (typeof ACPX_PERMISSION_MODES)[number];

extensions/acpx/src/ensure.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import fs from "node:fs";
22
import path from "node:path";
3-
import type { PluginLogger } from "openclaw/plugin-sdk";
3+
import type { PluginLogger } from "openclaw/plugin-sdk/compat";
44
import { ACPX_PINNED_VERSION, ACPX_PLUGIN_ROOT, buildAcpxLocalInstallCommand } from "./config.js";
55
import {
66
resolveSpawnFailure,

extensions/acpx/src/runtime-internals/events.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AcpRuntimeEvent, AcpSessionUpdateTag } from "openclaw/plugin-sdk";
1+
import type { AcpRuntimeEvent, AcpSessionUpdateTag } from "openclaw/plugin-sdk/compat";
22
import {
33
asOptionalBoolean,
44
asOptionalString,

extensions/acpx/src/runtime-internals/process.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import type {
44
WindowsSpawnProgram,
55
WindowsSpawnProgramCandidate,
66
WindowsSpawnResolution,
7-
} from "openclaw/plugin-sdk";
7+
} from "openclaw/plugin-sdk/compat";
88
import {
99
applyWindowsSpawnProgramPolicy,
1010
materializeWindowsSpawnProgram,
1111
resolveWindowsSpawnProgramCandidate,
12-
} from "openclaw/plugin-sdk";
12+
} from "openclaw/plugin-sdk/compat";
1313

1414
export type SpawnExit = {
1515
code: number | null;

extensions/acpx/src/runtime.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import type {
1010
AcpRuntimeStatus,
1111
AcpRuntimeTurnInput,
1212
PluginLogger,
13-
} from "openclaw/plugin-sdk";
14-
import { AcpRuntimeError } from "openclaw/plugin-sdk";
13+
} from "openclaw/plugin-sdk/compat";
14+
import { AcpRuntimeError } from "openclaw/plugin-sdk/compat";
1515
import { type ResolvedAcpxPluginConfig } from "./config.js";
1616
import { checkAcpxVersion } from "./ensure.js";
1717
import {

extensions/acpx/src/service.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AcpRuntime, OpenClawPluginServiceContext } from "openclaw/plugin-sdk";
1+
import type { AcpRuntime, OpenClawPluginServiceContext } from "openclaw/plugin-sdk/compat";
22
import { beforeEach, describe, expect, it, vi } from "vitest";
33
import { AcpRuntimeError } from "../../../src/acp/runtime/errors.js";
44
import {

extensions/acpx/src/service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import type {
33
OpenClawPluginService,
44
OpenClawPluginServiceContext,
55
PluginLogger,
6-
} from "openclaw/plugin-sdk";
7-
import { registerAcpRuntimeBackend, unregisterAcpRuntimeBackend } from "openclaw/plugin-sdk";
6+
} from "openclaw/plugin-sdk/compat";
7+
import { registerAcpRuntimeBackend, unregisterAcpRuntimeBackend } from "openclaw/plugin-sdk/compat";
88
import { resolveAcpxPluginConfig, type ResolvedAcpxPluginConfig } from "./config.js";
99
import { ensureAcpx } from "./ensure.js";
1010
import { ACPX_BACKEND_ID, AcpxRuntime } from "./runtime.js";

extensions/bluebubbles/src/account-resolve.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { OpenClawConfig } from "openclaw/plugin-sdk";
1+
import type { OpenClawConfig } from "openclaw/plugin-sdk/compat";
22
import { resolveBlueBubblesAccount } from "./accounts.js";
33
import { normalizeResolvedSecretInputString } from "./secret-input.js";
44

0 commit comments

Comments
 (0)