Skip to content

fix(memory): move local llama.cpp runtime to provider plugin#91324

Merged
osolmaz merged 5 commits into
mainfrom
codex/88705-node-llama-cpp-memory-search
Jun 9, 2026
Merged

fix(memory): move local llama.cpp runtime to provider plugin#91324
osolmaz merged 5 commits into
mainfrom
codex/88705-node-llama-cpp-memory-search

Conversation

@osolmaz

@osolmaz osolmaz commented Jun 8, 2026

Copy link
Copy Markdown
Member

Opened on behalf of Onur Solmaz (osolmaz). This is AI-assisted and ready for maintainer review.

Summary

Users who configured local memory embeddings could lose node-llama-cpp during an OpenClaw npm update.
The root package no longer owns that native dependency, so installing it manually next to OpenClaw is not stable.
This change makes local GGUF embeddings an official llama-cpp provider plugin that owns node-llama-cpp, while memory-core keeps owning memory indexing and search.

Fixes #88705

Maintainer Direction

Vincent Koc (vincentkoc) approved creating an extension/plugin for this on Discord. This PR follows that direction by adding the official llama-cpp provider plugin instead of putting node-llama-cpp back in the main OpenClaw package.

What Changed

Local embeddings still use memorySearch.provider: "local".
The difference is that local is now provided by @openclaw/llama-cpp-provider, not by the main OpenClaw package.
Existing local-memory configs get a repair path through doctor, and the Gateway starts the provider plugin when local memory embeddings are configured.

  • Added extensions/llama-cpp with plugin metadata, node-llama-cpp@3.18.1, shrinkwrap, provider registration, tests, and docs.
  • Removed the built-in local embedding provider registration from memory-core.
  • Added a memory-host SDK runtime option so the local embedding worker can import node-llama-cpp from the plugin package URL.
  • Updated startup planning so configured memory embedding providers, including aliases like models.providers.local-gpu.api = "local", start the owning plugin.
  • Updated doctor repair so memorySearch.provider: "local" maps to the official llama-cpp plugin install.
  • Updated user docs, plugin reference docs, official external plugin catalog, package excludes, and labeler ownership.

Testing

I tested the provider boundary, startup selection, doctor repair, memory host worker import path, docs list, type surfaces, the full build, and a real package/update-shaped local embedding flow.
The first direct build and pnpm docs command hit pnpm fetch failures in the sandbox, so I reran the build with network approval and ran the docs list script directly.

  • node scripts/generate-npm-shrinkwrap.mjs --package-dir extensions/llama-cpp --check
  • ./node_modules/.bin/oxfmt --check --threads=1 .github/labeler.yml docs/concepts/memory-builtin.md docs/concepts/memory-qmd.md docs/concepts/memory-search.md docs/docs.json docs/plugins/plugin-inventory.md docs/plugins/reference.md docs/plugins/reference/memory-core.md docs/plugins/llama-cpp.md docs/plugins/reference/llama-cpp.md docs/reference/memory-config.md extensions/memory-core/openclaw.plugin.json extensions/memory-core/src/memory/embeddings.test.ts extensions/memory-core/src/memory/embeddings.ts extensions/memory-core/src/memory/index.test.ts extensions/memory-core/src/memory/provider-adapters.ts extensions/llama-cpp/index.ts extensions/llama-cpp/index.test.ts extensions/llama-cpp/openclaw.plugin.json extensions/llama-cpp/package.json extensions/llama-cpp/src/embedding-provider.ts package.json packages/memory-host-sdk/src/host/embeddings-worker.ts packages/memory-host-sdk/src/host/embeddings.test.ts packages/memory-host-sdk/src/host/embeddings.ts packages/memory-host-sdk/src/host/node-llama.ts scripts/lib/official-external-plugin-catalog.json src/commands/doctor-memory-search.test.ts src/commands/doctor-memory-search.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/commands/doctor/shared/missing-configured-plugin-install.ts src/gateway/server-startup-plugins.test.ts src/plugins/channel-plugin-ids.test.ts src/plugins/gateway-startup-plugin-ids.ts src/plugins/official-external-plugin-catalog.test.ts
  • git diff --check
  • node scripts/run-vitest.mjs extensions/llama-cpp/index.test.ts packages/memory-host-sdk/src/host/embeddings.test.ts extensions/memory-core/src/memory/embeddings.test.ts extensions/memory-core/src/memory/index.test.ts src/commands/doctor-memory-search.test.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/plugins/official-external-plugin-catalog.test.ts src/plugins/channel-plugin-ids.test.ts src/gateway/server-startup-plugins.test.ts
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
  • node scripts/run-tsgo.mjs -p tsconfig.extensions.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions.tsbuildinfo
  • node scripts/docs-list.js
  • node scripts/build-all.mjs
  • node scripts/run-vitest.mjs src/plugins/contracts/extension-runtime-dependencies.contract.test.ts test/openclaw-npm-release-check.test.ts test/plugin-npm-package-manifest.test.ts
  • codex review --base main

Real Behavior Proof

Crabbox package/update proof:

  • Provider/id: Azure Crabbox, cbx_840624445686
  • Run: run_b931f3d21df8
  • Environment: Linux, Node v24.16.0, npm 11.13.0, pnpm 11.2.2
  • Command: node scripts/crabbox-wrapper.mjs run --provider azure --idle-timeout 90m --ttl 240m --timing-json --script .crabbox/scripts/llama-cpp-provider-proof.sh
  • Result: passed, exit 0, total 6m33.536s

What the proof did:

  • Built and checked the PR OpenClaw npm package tarball.
  • Built and packed the PR @openclaw/llama-cpp-provider plugin with package-local runtime metadata and current shrinkwrap.
  • Installed published openclaw@latest plus a separately installed global node-llama-cpp@3.18.1.
  • Updated global OpenClaw to the PR package tarball.
  • npm 11.13.0 did not prune the global root node-llama-cpp in this environment, so the proof removed that root package explicitly before continuing. This keeps the post-update state equivalent to issue Bug: npm updates drop node-llama-cpp, breaking local memory_search after every OpenClaw update #88705: OpenClaw has memorySearch.provider: "local" but no root-level node-llama-cpp.
  • Verified memory status --deep reports the missing @openclaw/llama-cpp-provider before repair.
  • Ran doctor --fix against a local npm registry serving the PR provider package; doctor installed missing configured plugin "llama-cpp" from @openclaw/llama-cpp-provider.
  • Verified the installed provider plugin owns node-llama-cpp under OpenClaw plugin npm state, not under the root OpenClaw package.
  • Ran openclaw memory status --deep: provider local, model hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf, embeddings ready, vector store ready, semantic vectors ready.
  • Ran openclaw memory index --force.
  • Ran openclaw memory search <marker> --json and verified the result contained the marker through the installed llama.cpp provider.

Proof marker: OPENCLAW_LLAMA_CPP_PROVIDER_PROOF_OK

Risks

The main risk is native package installation across platforms.
The code keeps the native dependency out of the main package and pins it in the provider plugin shrinkwrap, but release validation should still prove the new provider package installs and loads on supported platforms.

  • This changes local from a memory-core built-in to an official external provider plugin.
  • Existing configured local users rely on openclaw doctor --fix or plugin install/update flow to install @openclaw/llama-cpp-provider.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime extensions: memory-core Extension: memory-core scripts Repository scripts commands Command implementations size: L maintainer Maintainer-authored PR labels Jun 8, 2026
@clawsweeper

clawsweeper Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed June 9, 2026, 1:53 AM ET / 05:53 UTC.

Summary
The PR externalizes local GGUF memory embeddings into a new official llama-cpp provider plugin, removes the built-in local provider from memory-core, and updates doctor, gateway startup, package metadata, tests, and docs for that boundary.

PR surface: Source +1945, Tests +238, Docs +89, Config +42, Other +774. Total +3088 across 39 files.

Reproducibility: yes. The linked issue and Crabbox smoke describe a package update where memorySearch.provider: "local" remains configured but root node-llama-cpp is absent, and current main source still registers local from memory-core against that root dependency path.

Review metrics: 3 noteworthy metrics.

  • Memory provider ownership: 1 built-in provider removed, 1 official external provider added. This is the central compatibility change for existing local memory users during upgrades.
  • Dependency graph surfaces: 1 plugin package manifest added, 1 plugin shrinkwrap added, root lockfile changed. These files are supply-chain review surfaces and are blocked by the repository dependency guard until approved.
  • Public SDK surface: 1 exported local embedding provider signature changed. The public Plugin SDK baseline should record intentional API drift before release.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Regenerate or otherwise resolve the Plugin SDK API baseline for the changed public embedding-provider signature.
  • Get repository admin or security approval for the dependency graph changes on the current head SHA.
  • [P2] Add or link supported-platform native install/load release validation for the provider package.

Risk before merge

  • [P1] Existing memorySearch.provider: "local" users move from an in-package built-in provider to an installed external provider, so upgrade safety depends on doctor/plugin install working before memory search is needed.
  • [P1] The PR changes dependency graph files and the repository dependency guard says the exact head SHA requires repository admin or security approval before merge.
  • [P1] The new provider owns a native package with platform-specific optional binaries, so Linux proof is strong but release validation still needs supported-platform install/load coverage.
  • [P1] The public Plugin SDK signature drift needs a refreshed API baseline or a narrower internal seam before release preflight can be trusted.

Maintainer options:

  1. Finish SDK, security, and native release gates first (recommended)
    Refresh the Plugin SDK API baseline, get dependency-graph approval for the current head, and add supported-platform provider install/load validation before merge.
  2. Accept Linux-only proof as maintainer-owned risk
    Maintainers could intentionally land with the existing Linux Crabbox proof if they are willing to own follow-up fixes for unsupported native install/load failures.
  3. Pause if external provider ownership is not final
    If maintainers are not ready to make local an official external provider contract, pause this PR and keep the linked bug open for a different migration plan.

Next step before merge

  • [P2] Human maintainer/security handling is required for the protected maintainer label, dependency graph approval, native release validation, and public SDK contract decision.

Security
Needs attention: The functional shape looks intentional, but the PR adds a native dependency graph and is still blocked on repository dependency/security approval for the current head.

Review findings

  • [P2] Refresh the Plugin SDK API baseline — packages/memory-host-sdk/src/host/embeddings.ts:31
Review details

Best possible solution:

Merge the ownership change only after refreshing the public SDK API baseline, obtaining explicit dependency/security approval for the current head, and validating the provider package install/load path across supported native platforms.

Do we have a high-confidence way to reproduce the issue?

Yes. The linked issue and Crabbox smoke describe a package update where memorySearch.provider: "local" remains configured but root node-llama-cpp is absent, and current main source still registers local from memory-core against that root dependency path.

Is this the best way to solve the issue?

Yes, the plugin-owned native dependency is the best ownership direction for this bug under the repo's plugin dependency policy. The current branch still needs API-baseline and security/release gates before it is the best mergeable form.

Full review comments:

  • [P2] Refresh the Plugin SDK API baseline — packages/memory-host-sdk/src/host/embeddings.ts:31
    This adds nodeLlamaCppImportUrl to the local embedding provider runtime options used by createLocalEmbeddingProvider, which is re-exported through openclaw/plugin-sdk/memory-core-host-engine-embeddings. Because that public SDK signature changed, the API baseline hash needs to be regenerated or this seam should be kept internal; otherwise the Plugin SDK API check/release preflight can fail and the API drift is not reviewed as an intentional public contract change.
    Confidence: 0.76

Overall correctness: patch is incorrect
Overall confidence: 0.78

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against e1978cf73cbd.

Label changes

Label justifications:

  • P1: The PR targets a real local memory-search break after npm updates and touches upgrade-sensitive provider/plugin routing.
  • merge-risk: 🚨 compatibility: Existing local memory users now depend on external provider installation and doctor repair instead of the memory-core built-in adapter.
  • merge-risk: 🚨 other: The branch adds a native dependency graph and package release surface that green unit tests do not settle.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (logs): The PR body and comments include after-fix Crabbox package/update proof with real openclaw memory status, memory index, and memory search results through the installed provider package.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body and comments include after-fix Crabbox package/update proof with real openclaw memory status, memory index, and memory search results through the installed provider package.
Evidence reviewed

PR surface:

Source +1945, Tests +238, Docs +89, Config +42, Other +774. Total +3088 across 39 files.

View PR surface stats
Area Files Added Removed Net
Source 14 2084 139 +1945
Tests 9 265 27 +238
Docs 10 102 13 +89
Config 3 42 0 +42
Generated 0 0 0 0
Other 3 774 0 +774
Total 39 3267 179 +3088

Security concerns:

  • [medium] Approve the native dependency graph before merge — extensions/llama-cpp/package.json:13
    The new provider package adds node-llama-cpp@3.18.1 plus shrinkwrap and lockfile changes; the repository dependency guard comment says dependency graph changes require repository admin or security approval for the exact head SHA.
    Confidence: 0.92
  • [medium] Validate native optional packages across supported platforms — extensions/llama-cpp/npm-shrinkwrap.json:1
    Registry metadata for node-llama-cpp@3.18.1 shows many platform-specific optional native packages, so release validation should prove install and load behavior beyond the Linux Crabbox proof before this becomes the official local provider path.
    Confidence: 0.82

Acceptance criteria:

  • [P1] pnpm plugin-sdk:api:check or regenerated Plugin SDK API baseline review.
  • [P1] Dependency guard approval for head e825b67.
  • [P1] Supported-platform install/load validation for @openclaw/llama-cpp-provider.

What I checked:

  • Repository policy applied: Read the full root AGENTS.md plus scoped guides for extensions, plugins, gateway, docs, scripts, and plugin SDK; the plugin ownership, dependency graph, SDK baseline, and protected-label guidance affected this review. (AGENTS.md:1, e1978cf73cbd)
  • Current main still owns local embeddings in memory-core: Current main registers the local memory embedding adapter inside memory-core and loads createLocalEmbeddingProvider from the memory host SDK, so the linked update bug is not already implemented on main. (extensions/memory-core/src/memory/provider-adapters.ts:67, e1978cf73cbd)
  • PR moves local runtime into plugin package: The PR head adds a llama-cpp adapter that resolves node-llama-cpp from the plugin package URL and passes it to the host local embedding provider. (extensions/llama-cpp/src/embedding-provider.ts:86, e825b67100f9)
  • Doctor repair path exists in PR: The PR head collects configured memory embedding providers from official external plugin catalog manifests, which is the path that lets doctor --fix install the llama-cpp plugin for memorySearch.provider: "local". (src/commands/doctor/shared/missing-configured-plugin-install.ts:138, e825b67100f9)
  • Public SDK signature changes: The PR adds nodeLlamaCppImportUrl to the exported local embedding runtime options while createLocalEmbeddingProvider is re-exported through the public plugin SDK subpath, so the Plugin SDK API baseline needs to be refreshed or the seam kept internal. (packages/memory-host-sdk/src/host/embeddings.ts:29, e825b67100f9)
  • Real behavior proof in PR discussion: The PR body and comments report two Azure Crabbox runs, including run_b931f3d21df8 and run_013cd187d9b6, that exercised a package/update-shaped local-memory flow, verified missing provider guidance before repair, installed the PR provider package, and confirmed memory status/index/search through the installed provider. (e825b67100f9)

Likely related people:

  • vincentkoc: Current-main blame on the sampled local adapter, host SDK, and gateway startup lines points to recent work by Vincent Koc, and the PR body says Vincent approved the plugin direction in Discord. (role: recent area contributor and reviewer signal; confidence: high; commits: 50130d32a997, 2e08f0f4221f, 37f449d7e189; files: extensions/memory-core/src/memory/provider-adapters.ts, packages/memory-host-sdk/src/host/embeddings.ts, src/plugins/gateway-startup-plugin-ids.ts)
  • steipete: The memory embedding/provider architecture appears to date to commits moving memory embeddings into provider plugins and moving the memory host into the SDK package. (role: feature-history owner; confidence: medium; commits: 77e6e4cf87f7, eebce9e9c7cb; files: extensions/memory-core/src/memory/provider-adapters.ts, packages/memory-host-sdk/src/host/embeddings.ts)
  • ngutman: A prior focused fix in this area addressed recursive provider discovery during memory provider registration, which is adjacent to this PR's provider ownership and startup activation changes. (role: adjacent memory-provider contributor; confidence: medium; commits: 004704817997; files: extensions/memory-core/src/memory/provider-adapters.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jun 8, 2026
@osolmaz

osolmaz commented Jun 8, 2026

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@osolmaz

osolmaz commented Jun 8, 2026

Copy link
Copy Markdown
Member Author

Verification update for this draft:

  • Focused Vitest, core/extensions tsgo, docs list, build, package-contract tests, and codex review --base main all passed locally.
  • Real package/update-shaped proof passed on Azure Crabbox:
    • provider/id: azure, cbx_840624445686
    • run: run_b931f3d21df8
    • environment: Linux, Node v24.16.0, npm 11.13.0, pnpm 11.2.2
    • result: exit 0, total 6m33.536s
  • The proof built the PR OpenClaw package, packed the PR @openclaw/llama-cpp-provider, installed published openclaw@latest plus a separate global node-llama-cpp@3.18.1, updated to the PR package, removed the root-level node-llama-cpp, then verified:
    • local memory reports missing @openclaw/llama-cpp-provider before repair,
    • doctor --fix installs configured plugin llama-cpp,
    • the installed provider plugin owns node-llama-cpp,
    • memory status --deep reports embeddings ready,
    • memory index --force succeeds,
    • memory search returns the marker through the installed llama.cpp provider.

Note: npm 11.13.0 did not prune the separately installed root node-llama-cpp in this proof environment, so the proof removed it explicitly before proving the provider-owned dependency path. This still covers the issue state where the root copy is absent after update.

ClawSweeper re-review is queued/in progress after the PR body update.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 8, 2026
@osolmaz

osolmaz commented Jun 8, 2026

Copy link
Copy Markdown
Member Author

Live issue #88705 smoke passed in Crabbox.

Provider/id: Azure Crabbox cbx_5ae28f6cc6d0
Run: run_013cd187d9b6
Environment: Linux, Node v24.16.0, npm 11.13.0, pnpm 11.2.2
Result: exit 0, total 7m38.522s

What this proved:

  • Installed published openclaw@latest plus separate global node-llama-cpp@3.18.1.
  • Updated OpenClaw to this PR package.
  • Removed root/global node-llama-cpp.
  • Confirmed memory status --deep --agent main fails before provider install with the expected missing-provider guidance for @openclaw/llama-cpp-provider.
  • Installed this PR's @openclaw/llama-cpp-provider from npm-pack.
  • Confirmed the installed provider plugin owns node-llama-cpp under plugin npm state.
  • memory status --deep --agent main reported Provider: local, Embeddings: ready, Vector store: ready, and Semantic vectors: ready.
  • memory index --force --agent main passed.
  • memory search ISSUE_88705_LLAMA_CPP_PROVIDER_SMOKE_OK --agent main --json returned the marker through the installed provider.

This covers the reported issue state where local memory is configured but the OpenClaw root/global install no longer has node-llama-cpp after update.

@osolmaz osolmaz marked this pull request as ready for review June 8, 2026 06:22
@osolmaz osolmaz requested a review from a team as a code owner June 8, 2026 06:22
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label Jun 8, 2026
@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Dependency Guard

This PR changes dependency-related files. Maintainers should confirm these changes are intentional.

Changed files:

  • extensions/llama-cpp/npm-shrinkwrap.json
  • extensions/llama-cpp/package.json
  • pnpm-lock.yaml

Maintainer follow-up:

  • Review whether the dependency changes are intentional.
  • Inspect resolved package deltas when lockfile, shrinkwrap, or workspace dependency policy changes are present.
  • Treat package-lock.json and npm-shrinkwrap.json diffs as security-review surfaces.
  • Run pnpm deps:changes:report -- --base-ref origin/main --markdown /tmp/dependency-changes.md --json /tmp/dependency-changes.json locally for detailed release-style evidence.

@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Dependency graph change authorized

This PR includes dependency graph changes. A repository admin or member of @openclaw/openclaw-secops authorized this exact head SHA with /allow-dependencies-change.

  • Approved SHA: e825b67100f9ef660d6fabd1bf9c31d9c706f727
  • Approved by: @joshavant

A later push changes the PR head SHA and requires a fresh security approval.

@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 8, 2026
@clawsweeper clawsweeper Bot removed the status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. label Jun 8, 2026
@osolmaz osolmaz requested a review from vincentkoc June 8, 2026 07:17
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 8, 2026
@osolmaz

osolmaz commented Jun 8, 2026

Copy link
Copy Markdown
Member Author

ready for review, tested live on crabbox that it should solve the issue

maybe minor nitpicks remain, like plugin/extension/folder naming (extensions/llama-cpp vs @openclaw/llama-cpp-provider)

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 8, 2026
@osolmaz osolmaz force-pushed the codex/88705-node-llama-cpp-memory-search branch from 7978447 to 992319e Compare June 9, 2026 05:31
@osolmaz

osolmaz commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@socket-security

socket-security Bot commented Jun 9, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Publisher changed: npm @earendil-works/pi-tui is now published by mitsuhiko

Author: mitsuhiko

From: pnpm-lock.yamlnpm/@earendil-works/pi-tui@0.76.0

ℹ Read more on: This package | This alert | What is unstable ownership?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Try to reduce the number of authors you depend on to reduce the risk to malicious actors gaining access to your supply chain. Packages should remove inactive collaborators with publishing rights from packages on npm.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@earendil-works/pi-tui@0.76.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@osolmaz

osolmaz commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@osolmaz

osolmaz commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@joshavant joshavant self-assigned this Jun 9, 2026
@joshavant

Copy link
Copy Markdown
Contributor

/allow-dependencies-change

@osolmaz

osolmaz commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

Merge note before squash merge:

  • Head SHA: e825b67100f9ef660d6fabd1bf9c31d9c706f727.
  • Merge state: CLEAN; PR is open and not draft.
  • GitHub checks are passing or skipped as expected, including dependency-guard after @joshavant approved the dependency graph change with /allow-dependencies-change.
  • Local verification run before handoff: pnpm deadcode:dependencies, pnpm deadcode:unused-files, pnpm deadcode:report:ci:ts-unused, pnpm tsgo:test, node scripts/generate-npm-shrinkwrap.mjs --package-dir extensions/llama-cpp --check, and git diff --check.
  • Live package/update proof for issue Bug: npm updates drop node-llama-cpp, breaking local memory_search after every OpenClaw update #88705 passed on Crabbox: provider azure, id cbx_840624445686, run run_b931f3d21df8, Linux Node v24.16.0; the proof installed the PR OpenClaw package plus the PR @openclaw/llama-cpp-provider package and verified local memory search resolved through the external plugin.
  • Known proof gaps: none for the reported package/update path.

Proceeding with direct pinned squash merge as requested.

@osolmaz osolmaz merged commit 3137110 into main Jun 9, 2026
164 of 165 checks passed
@osolmaz osolmaz deleted the codex/88705-node-llama-cpp-memory-search branch June 9, 2026 06:30
@osolmaz

osolmaz commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

Merged with direct pinned squash merge.

eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 12, 2026
…26.6.6) (#1040)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.5` → `2026.6.6` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.6.6`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202666)

[Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6)

##### Highlights

- Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#&#8203;91529](openclaw/openclaw#91529), [#&#8203;91618](openclaw/openclaw#91618), [#&#8203;91615](openclaw/openclaw#91615), [#&#8203;91619](openclaw/openclaw#91619), [#&#8203;91741](openclaw/openclaw#91741), [#&#8203;91745](openclaw/openclaw#91745), [#&#8203;91746](openclaw/openclaw#91746), [#&#8203;91748](openclaw/openclaw#91748), [#&#8203;91749](openclaw/openclaw#91749), [#&#8203;91750](openclaw/openclaw#91750), [#&#8203;91751](openclaw/openclaw#91751), [#&#8203;91752](openclaw/openclaw#91752), [#&#8203;91763](openclaw/openclaw#91763), [#&#8203;89938](openclaw/openclaw#89938)) Thanks [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;shakkernerd](https://github.com/shakkernerd), and [@&#8203;drobison00](https://github.com/drobison00).
- Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#&#8203;91189](openclaw/openclaw#91189), [#&#8203;88682](openclaw/openclaw#88682), [#&#8203;89588](openclaw/openclaw#89588), [#&#8203;90212](openclaw/openclaw#90212), [#&#8203;91876](openclaw/openclaw#91876), [#&#8203;91874](openclaw/openclaw#91874), [#&#8203;91904](openclaw/openclaw#91904), [#&#8203;91478](openclaw/openclaw#91478), [#&#8203;91915](openclaw/openclaw#91915)) Thanks [@&#8203;codysai001](https://github.com/codysai001), [@&#8203;alexzhu0](https://github.com/alexzhu0), [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;obviyus](https://github.com/obviyus), and [@&#8203;sallyom](https://github.com/sallyom).
- iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#&#8203;91335](openclaw/openclaw#91335), [#&#8203;91449](openclaw/openclaw#91449), [#&#8203;88969](openclaw/openclaw#88969), [#&#8203;88530](openclaw/openclaw#88530), [#&#8203;91783](openclaw/openclaw#91783), [#&#8203;91785](openclaw/openclaw#91785)) Thanks [@&#8203;omarshahine](https://github.com/omarshahine), [@&#8203;jmissig](https://github.com/jmissig), and [@&#8203;colmbrogan](https://github.com/colmbrogan).
- Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#&#8203;91422](openclaw/openclaw#91422), [#&#8203;89851](openclaw/openclaw#89851), [#&#8203;91736](openclaw/openclaw#91736), [#&#8203;91747](openclaw/openclaw#91747), [#&#8203;91451](openclaw/openclaw#91451), [#&#8203;80143](openclaw/openclaw#80143)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@&#8203;lifuyue](https://github.com/lifuyue), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;LiuwqGit](https://github.com/LiuwqGit), and [@&#8203;HemantSudarshan](https://github.com/HemantSudarshan).
- Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#&#8203;91531](openclaw/openclaw#91531), [#&#8203;91538](openclaw/openclaw#91538), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583), [#&#8203;91598](openclaw/openclaw#91598))
- Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#&#8203;91830](openclaw/openclaw#91830), [#&#8203;91882](openclaw/openclaw#91882), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;88768](openclaw/openclaw#88768), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;bdjben](https://github.com/bdjben), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).

##### Changes

- CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#&#8203;89834](openclaw/openclaw#89834), [#&#8203;90883](openclaw/openclaw#90883)) Thanks [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia).
- Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#&#8203;91256](openclaw/openclaw#91256), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#&#8203;91574](openclaw/openclaw#91574), [#&#8203;91591](openclaw/openclaw#91591), [#&#8203;90004](openclaw/openclaw#90004), [#&#8203;90927](openclaw/openclaw#90927), [#&#8203;90838](openclaw/openclaw#90838)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;brokemac79](https://github.com/brokemac79), and [@&#8203;lonexreb](https://github.com/lonexreb).
- Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#&#8203;91324](openclaw/openclaw#91324), [#&#8203;89138](openclaw/openclaw#89138), [#&#8203;90457](openclaw/openclaw#90457), [#&#8203;91837](openclaw/openclaw#91837), [#&#8203;91851](openclaw/openclaw#91851)) Thanks [@&#8203;osolmaz](https://github.com/osolmaz), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;ai-hpc](https://github.com/ai-hpc), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#&#8203;91423](openclaw/openclaw#91423), [#&#8203;91557](openclaw/openclaw#91557), [#&#8203;89909](openclaw/openclaw#89909)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh), [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin), and [@&#8203;baskduf](https://github.com/baskduf).
- Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#&#8203;90782](openclaw/openclaw#90782), [#&#8203;89978](openclaw/openclaw#89978), [#&#8203;91580](openclaw/openclaw#91580), [#&#8203;91531](openclaw/openclaw#91531)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa) and [@&#8203;ai-hpc](https://github.com/ai-hpc).

##### Fixes

- Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#&#8203;85679](openclaw/openclaw#85679), [#&#8203;91450](openclaw/openclaw#91450), [#&#8203;91566](openclaw/openclaw#91566), [#&#8203;91840](openclaw/openclaw#91840), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;91361](openclaw/openclaw#91361), [#&#8203;91895](openclaw/openclaw#91895)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;yetval](https://github.com/yetval), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;wangmiao0668000666](https://github.com/wangmiao0668000666), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#&#8203;89151](openclaw/openclaw#89151), [#&#8203;91422](openclaw/openclaw#91422), [#&#8203;91425](openclaw/openclaw#91425), [#&#8203;91529](openclaw/openclaw#91529), [#&#8203;90212](openclaw/openclaw#90212)) Thanks [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;snowzlm](https://github.com/snowzlm).
- Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#&#8203;85823](openclaw/openclaw#85823), [#&#8203;89659](openclaw/openclaw#89659), [#&#8203;91684](openclaw/openclaw#91684), [#&#8203;91649](openclaw/openclaw#91649), [#&#8203;90263](openclaw/openclaw#90263), [#&#8203;91686](openclaw/openclaw#91686), [#&#8203;90426](openclaw/openclaw#90426)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef), [@&#8203;ladygege](https://github.com/ladygege), [@&#8203;jacobtomlinson](https://github.com/jacobtomlinson), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), and [@&#8203;shushushv](https://github.com/shushushv).
- Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#&#8203;90666](openclaw/openclaw#90666), [#&#8203;90678](openclaw/openclaw#90678)) Thanks [@&#8203;ai-hpc](https://github.com/ai-hpc).
- Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#&#8203;87105](openclaw/openclaw#87105), [#&#8203;91551](openclaw/openclaw#91551), [#&#8203;91219](openclaw/openclaw#91219), [#&#8203;91614](openclaw/openclaw#91614), [#&#8203;91740](openclaw/openclaw#91740), [#&#8203;91978](openclaw/openclaw#91978)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev) and [@&#8203;scotthuang](https://github.com/scotthuang).
- Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#&#8203;91390](openclaw/openclaw#91390), [#&#8203;91709](openclaw/openclaw#91709), [#&#8203;91507](openclaw/openclaw#91507), [#&#8203;91567](openclaw/openclaw#91567), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819), [@&#8203;brokemac79](https://github.com/brokemac79), [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).
- Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#&#8203;91581](openclaw/openclaw#91581), [#&#8203;91599](openclaw/openclaw#91599), [#&#8203;91547](openclaw/openclaw#91547), [#&#8203;91591](openclaw/openclaw#91591)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#&#8203;91480](openclaw/openclaw#91480)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#&#8203;80082](openclaw/openclaw#80082)) Thanks [@&#8203;davelutztx](https://github.com/davelutztx).
- Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#&#8203;91550](openclaw/openclaw#91550)) Thanks [@&#8203;joshavant](https://github.com/joshavant).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands Command implementations dependencies-changed PR changes dependency-related files docs Improvements or additions to documentation extensions: memory-core Extension: memory-core gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. scripts Repository scripts size: L status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: npm updates drop node-llama-cpp, breaking local memory_search after every OpenClaw update

2 participants