diff --git a/CHANGELOG.md b/CHANGELOG.md index 35096e71ef9..48a479053bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ Docs: https://docs.openclaw.ai - Gateway/startup: include resolved thinking and fast-mode defaults in the `agent model` startup log line, defaulting unset startup thinking to `medium` without mixing in reasoning visibility. - Gateway/watch: suppress sync-I/O trace output during `pnpm gateway:watch --benchmark` unless explicitly requested, so CPU profiling no longer floods the terminal with stack traces. - Gateway/watch: when benchmark sync-I/O tracing is explicitly enabled, tee trace blocks to the benchmark output log and filter them from the terminal pane while keeping normal Gateway logs visible. +- Plugins/runtime-deps: include `json5` in the memory-core plugin runtime dependency set so packaged `memory_search` sandboxes can resolve generated OpenClaw runtime chunks that parse JSON5 config. Fixes #77461. - Agents/OpenAI: default direct OpenAI Responses models to the SSE transport instead of WebSocket auto-selection, preventing pi runtime chat turns from hanging on servers where the WebSocket path stalls while the OpenAI HTTP stream works. Thanks @vincentkoc. - Discord: prefer IPv4 for Discord REST and gateway WebSocket startup paths so IPv4-only networks no longer stall before Gateway READY and inbound message dispatch. Fixes #77398; refs #77526. Thanks @Beandon13. - Channels/plugins: key bundled package-state probes, env/config presence, and read-only command defaults by channel id instead of manifest plugin id, preserving setup and native-command detection for channel plugins whose package id differs from the channel alias. Thanks @vincentkoc. diff --git a/config/knip.config.ts b/config/knip.config.ts index d511e6d2342..1e7a1cd8ec1 100644 --- a/config/knip.config.ts +++ b/config/knip.config.ts @@ -41,6 +41,7 @@ const bundledPluginIgnoredRuntimeDependencies = [ "@tloncorp/tlon-skill", "@zed-industries/codex-acp", "jiti", + "json5", "linkedom", "openclaw", "pdfjs-dist", diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json index edd2c6fc614..2370d7e50b5 100644 --- a/extensions/memory-core/package.json +++ b/extensions/memory-core/package.json @@ -6,6 +6,7 @@ "type": "module", "dependencies": { "chokidar": "^5.0.0", + "json5": "^2.2.3", "typebox": "1.1.37" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc35dae2bd6..01724ada089 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -924,6 +924,9 @@ importers: chokidar: specifier: ^5.0.0 version: 5.0.0 + json5: + specifier: ^2.2.3 + version: 2.2.3 typebox: specifier: 1.1.37 version: 1.1.37 diff --git a/src/plugins/contracts/extension-runtime-dependencies.contract.test.ts b/src/plugins/contracts/extension-runtime-dependencies.contract.test.ts index cfe8c4bdd51..b142b792ade 100644 --- a/src/plugins/contracts/extension-runtime-dependencies.contract.test.ts +++ b/src/plugins/contracts/extension-runtime-dependencies.contract.test.ts @@ -30,6 +30,11 @@ const INDIRECT_RUNTIME_DEPENDENCIES = new Map>([ // LanceDB imports apache-arrow at runtime through its peer dependency. new Set(["apache-arrow"]), ], + [ + "extensions/memory-core", + // Packaged memory tools run through generated OpenClaw runtime chunks that parse JSON5 config. + new Set(["json5"]), + ], [ "extensions/tlon", // The Tlon plugin manifest exposes the bundled skill from this package path. @@ -215,6 +220,12 @@ describe("Discord dependency ownership", () => { }); describe("extension runtime dependency manifests", () => { + it("keeps json5 in memory-core for packaged runtime config parsing", () => { + const manifest = readPackageManifest("extensions/memory-core/package.json"); + + expect(manifest.dependencies?.json5).toBeDefined(); + }); + for (const manifestPath of listPackageManifests(EXTENSION_ROOT)) { const extensionDir = toPosixPath(path.dirname(manifestPath));