mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 12:15:53 +00:00
* fix(agents): skip runtime plugin reload when a registry is already active ensureRuntimePluginsLoaded rebuilt and activated a replacement plugin registry on every call site invocation (agent turns, cron isolated-agent runs, the gateway prewarm sidecar). Activating a replacement retires the active registry and runs its plugin host cleanup, which cron.remove()s persistent plugin-scheduled session turns before the replacement's async re-registration catches up — silently deleting the cron row with only a low-level 'cron service unavailable' WARN. Plugins using api.session.workflow.scheduleSessionTurn for recurring jobs lose their schedule on the next agent turn after boot. Guard with getActiveRuntimePluginRegistry(): when a registry is already active every caller's request is satisfied, so return before building a replacement. * fix(agents): make active-registry reuse compatibility-aware, not presence-only The original guard (1de432a9) returned early whenever ANY registry was active, without checking whether it was actually compatible with this call's workspace, plugin scope, config, or runtime mode. A later call requesting a different workspace could silently keep an unrelated workspace's registry active instead of loading its own — a correctness and workspace-isolation issue (caught in upstream review, PR #107752). Fix: compute workspaceDir/startupPluginIds/loadOptions first, then check getLoadedRuntimePluginRegistry({loadOptions, workspaceDir, requiredPluginIds}) before deciding to skip — reusing the existing loader cache-key compatibility rules (workspace, config, runtime subagent mode, required plugin IDs) that already govern normal cache-hit reuse elsewhere. Only skips the reload when an active registry is genuinely compatible; still loads a fresh one otherwise. Tests: replaced the presence-only regression test with three cases — compatible-registry reuse (skip), incompatible/different-workspace (still loads), and startup-scoped plugin IDs passed through to the compatibility check. All 5 acceptance criteria from the review verified locally: runtime-plugins.test.ts, active-runtime-registry.test.ts, standalone-runtime-registry-loader.test.ts, and the full cron lane (33 files / 460 tests, including run.runtime-plugins.test.ts) all green; pnpm build completes clean (5m14s, no errors). * fix(plugins): preserve live scheduled turns Scope dynamic scheduler cleanup to the retiring registry owner and keep runtime workflow APIs callable while their registry remains pinned and live.\n\nCo-authored-by: Dan Scarafoni <dan@poweredbyzon.com> * test(plugins): prove recurring cron ownership * chore(plugin-sdk): refresh api baseline --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>