Skip to content

fix: memory_search honors generic embedding providers - #97095

Merged
steipete merged 2 commits into
openclaw:mainfrom
849261680:fix/91902-memory-index-provider-key
Jul 3, 2026
Merged

steipete merged 2 commits into
openclaw:mainfrom
849261680:fix/91902-memory-index-provider-key

Conversation

@849261680

@849261680 849261680 commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Related: #91902

What Problem This Solves

Fixes an issue where users configuring memory search with a generic embedding provider would have memory_search resolve provider defaults from the memory-specific registry only, so providers registered through the generic embedding provider runtime could miss their configured model and transport metadata.

Why This Change Was Made

Memory-search config resolution now falls back to the generic embedding provider runtime after checking memory-specific providers. The helper returns only the small provider metadata surface needed for config resolution, so the runtime contracts for generic and memory embedding providers stay separate.

User Impact

Users with plugin-registered generic embedding providers can use memory_search without the config resolver silently ignoring that provider's default model or local/remote transport. This addresses the generic-provider resolver slice of the broader memory index identity issue.

Evidence

Behavior addressed: resolveMemorySearchConfig() now recognizes a generic local embedding provider registered through registerEmbeddingProvider() and uses its default model/transport metadata.

Real environment tested: local source checkout on Node 24.15.0.

Exact steps or command run after this patch:

pnpm docs:list
pnpm exec oxfmt --check src/agents/memory-search.ts src/agents/memory-search.test.ts
git diff --check
pnpm tsgo:core
OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-91902-memory OPENCLAW_VITEST_MAX_WORKERS=1 node node_modules/vitest/vitest.mjs run --config test/vitest/vitest.extension-memory.config.ts extensions/memory-core/src/memory/generic-embedding-provider.bridge.test.ts extensions/memory-core/src/memory/generic-embedding-provider.integration.test.ts
.agents/skills/autoreview/scripts/autoreview --mode uncommitted --base upstream/main --engine codex --no-web-search --output /tmp/openclaw-91902-autoreview.txt --json-output /tmp/openclaw-91902-autoreview.json

Evidence after fix: added src/agents/memory-search.test.ts coverage for a generic local provider registered outside the memory-specific registry; the existing memory-core generic provider bridge/integration proof passed with 2 files and 3 tests; pnpm tsgo:core passed; oxfmt --check and git diff --check passed; autoreview reported no accepted/actionable findings.

Observed result after fix: the new resolver path returns provider generic-local, model local-gguf-default, and leaves remote unset for local transport. The bridge proof also exercises a contract-declared generic embedding plugin registered through the plugin API, verifies it is not in the memory-specific registry, creates the memory embedding provider through the generic bridge, and performs query, batch, and structured document embedding calls. The integration proof exercises the core OpenAI-compatible generic provider through a local HTTP embedding server and verifies the memory bridge sends query/document requests with the expected model, dimensions, input types, and sanitized cache-key headers.

Terminal output from the generic provider bridge/integration proof:

RUN  v4.1.8 /Users/.../openclaw-91902

Test Files  2 passed (2)
     Tests  3 passed (3)
  Start at  03:25:27
  Duration  25.27s (transform 16.87s, setup 1.38s, import 23.12s, tests 220ms, environment 0ms)

What was not tested: no live DashScope/Voyage gateway run was performed; local Vitest wrapper attempts for src/agents/memory-search.test.ts hung or routed to no matching files in this checkout, so CI should be treated as the authoritative focused test run for that new source-level regression test.

Installed generic provider proof

I also ran an isolated real CLI proof with a temporary native plugin loaded through plugins.load.paths. The plugin declared contracts.embeddingProviders: ["proof-generic"] and registered the provider through api.registerEmbeddingProvider(), not api.registerMemoryEmbeddingProvider().

Exact steps or command run after this patch:

PROOF_ROOT=$(mktemp -d /tmp/openclaw-91902-proof.XXXXXX)
# create proof-generic-embedding plugin under $PROOF_ROOT/proof-generic-plugin
# create $PROOF_ROOT/workspace/MEMORY.md with a searchable proof phrase
# create $PROOF_ROOT/state/openclaw.json with:
#   plugins.load.paths = ["$PROOF_ROOT/proof-generic-plugin"]
#   agents.defaults.workspace = "$PROOF_ROOT/workspace"
#   agents.defaults.memorySearch.provider = "proof-generic"
#   agents.defaults.memorySearch.model = "proof-embedding-v1"
#   agents.defaults.memorySearch.fallback = "none"
#   agents.defaults.memorySearch.outputDimensionality = 3
OPENCLAW_CONFIG_PATH=$PROOF_ROOT/state/openclaw.json \
OPENCLAW_STATE_DIR=$PROOF_ROOT/state \
OPENCLAW_HOME=$PROOF_ROOT/home \
pnpm openclaw memory status --deep --index --verbose --agent main

OPENCLAW_CONFIG_PATH=$PROOF_ROOT/state/openclaw.json \
OPENCLAW_STATE_DIR=$PROOF_ROOT/state \
OPENCLAW_HOME=$PROOF_ROOT/home \
pnpm openclaw memory search --query "silver anchor proof" --agent main --max-results 5 --json

Evidence after fix:

[plugins] loading proof-generic-embedding from .../proof-generic-plugin/index.cjs
[plugins] loaded 1 plugin(s) (1 attempted) in 29.9ms
[memory] embeddings: batch start
[memory] sync: indexing memory files
[memory] embeddings: batch start
Memory index complete.
Memory Search (main)
Provider: proof-generic (requested: proof-generic)
Model: proof-embedding-v1
Sources: memory
Indexed: 1/1 files · 1 chunks
Dirty: no
Embeddings: ready
Vector dims: 3
FTS: ready
Embedding cache: enabled (1 entries)

Observed result after fix:

{
  "results": [
    {
      "path": "MEMORY.md",
      "startLine": 1,
      "endLine": 4,
      "score": 0.5715486190839927,
      "vectorScore": 0.8164965808391571,
      "textScore": 0.0000033749886094134435,
      "snippet": "# Memory\n\nThe proof-generic embedding provider indexes the silver anchor phrase for OpenClaw memory_search proof.\n",
      "source": "memory"
    }
  ]
}

Verification refresh (2026-07-02)

Refreshed proof on the current PR head f9f0e35c4867586a5bc9e2497691f9eaf07b7496.

Commands run:

node scripts/run-vitest.mjs src/agents/memory-search.test.ts
pnpm exec oxfmt --check src/agents/memory-search.ts src/agents/memory-search.test.ts
git diff --check
OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-97095-memory OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/memory-core/src/memory/generic-embedding-provider.bridge.test.ts extensions/memory-core/src/memory/generic-embedding-provider.integration.test.ts
# Isolated CLI proof with temporary plugin loaded through plugins.load.paths; plugin registers proof-generic only via api.registerEmbeddingProvider().
OPENCLAW_CONFIG_PATH=/tmp/.../state/openclaw.json OPENCLAW_STATE_DIR=/tmp/.../state OPENCLAW_HOME=/tmp/.../home pnpm openclaw memory status --deep --index --verbose --agent main
OPENCLAW_CONFIG_PATH=/tmp/.../state/openclaw.json OPENCLAW_STATE_DIR=/tmp/.../state OPENCLAW_HOME=/tmp/.../home pnpm openclaw memory search --query "silver anchor proof" --agent main --max-results 5 --json

Observed result after refresh:

src/agents/memory-search.test.ts: 1 file passed, 36 tests passed
oxfmt --check: All matched files use the correct format
git diff --check: passed
generic embedding bridge/integration: 2 files passed, 3 tests passed
[proof] registerEmbeddingProvider proof-generic
Memory index complete.
Provider: proof-generic (requested: proof-generic)
Model: proof-embedding-v1
Indexed: 1/1 files · 1 chunks
Dirty: no
Embeddings: ready
Vector dims: 3

memory search --json returned the indexed MEMORY.md chunk containing the silver anchor proof phrase with a positive score, proving the installed generic-provider path can index and search through the real CLI/plugin/config flow on this branch.

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: XS labels Jun 26, 2026
@clawsweeper

clawsweeper Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 3, 2026, 4:31 AM ET / 08:31 UTC.

Summary
The branch adds a generic embedding-provider fallback to memory-search config resolution and regression coverage for a provider registered only through the generic registry.

PR surface: Source +10, Tests +26. Total +36 across 2 files.

Reproducibility: yes. at source level: current main does not use the generic embedding-provider registry when deriving memory-search model and transport defaults, while the llama.cpp provider registers local through that generic API. I did not run commands because this was a read-only review, but the PR body includes real CLI/plugin proof for the branch runtime path.

Review metrics: 1 noteworthy metric.

  • Provider-resolution fallback: 1 added. The new fallback changes how memory search derives provider default model and transport metadata before runtime provider creation.

Stored data model
Persistent data-model change detected: unknown-data-model-change: src/agents/memory-search.test.ts, vector/embedding metadata: src/agents/memory-search.test.ts, vector/embedding metadata: src/agents/memory-search.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #94316
Summary: This PR is a candidate fix for the generic embedding-provider resolver gap reported by the local llama.cpp memory_search issue; a same-root open PR exists, while the broader providerKey identity issue remains only partially overlapping.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

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:

  • [P2] Move the generic fallback after configured memory-owner lookup and add a dual-registration alias regression test.
  • [P2] After the fix, rerun node scripts/run-vitest.mjs src/agents/memory-search.test.ts and keep one resolver PR as the landing branch.

Risk before merge

  • [P2] The fallback changes default model and local/remote transport resolution for existing memorySearch.provider values backed only by generic embedding providers, so upgrade behavior should remain explicit before merge.
  • [P1] As written, configured provider aliases can resolve generic metadata before the memory runtime's legacy-owner path, causing config-derived model/transport values to diverge from the provider the runtime creates.
  • [P1] fix(agents): fall back to generic embedding provider registry in memory-search config resolution #96724 remains an open same-root implementation, so maintainers should land one branch and close the other after the resolver path is fixed.

Maintainer options:

  1. Preserve legacy alias precedence (recommended)
    Move the generic fallback after the configured ownerApi memory-provider lookup and add a dual-registration alias regression test before merge.
  2. Accept generic alias precedence
    Maintainers can intentionally let generic providers win for configured aliases, but that should be documented because it differs from memory-core runtime precedence.
  3. Pick one resolver branch after repair
    After this branch or fix(agents): fall back to generic embedding provider registry in memory-search config resolution #96724 has the precedence fix, land one and close the duplicate to avoid parallel resolver policy.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Move the generic embedding-provider fallback in getConfiguredMemoryEmbeddingProvider after the configured ownerApi memory-provider lookup, preserve direct memory-provider precedence, and add a regression test where a models.providers alias points to an owner with both memory-specific and generic adapters so memory-specific metadata remains authoritative.

Next step before merge

  • [P2] Queue a narrow PR-branch repair for the resolver precedence bug and regression test; the remaining blocker is mechanical rather than product judgment.

Security
Cleared: The diff only changes provider metadata lookup order and focused tests; it does not alter secrets, dependencies, CI, packaging, or code-execution surfaces.

Review findings

  • [P2] Preserve memory-owner alias precedence — src/agents/memory-search.ts:192-194
Review details

Best possible solution:

Land one resolver fix that preserves memory-runtime lookup precedence for configured aliases, then close or retire duplicate resolver PRs while leaving broader providerKey work to its canonical issue.

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

Yes at source level: current main does not use the generic embedding-provider registry when deriving memory-search model and transport defaults, while the llama.cpp provider registers local through that generic API. I did not run commands because this was a read-only review, but the PR body includes real CLI/plugin proof for the branch runtime path.

Is this the best way to solve the issue?

No as written: the fallback belongs in this resolver, but it should preserve the runtime's configured memory-owner precedence before trying generic aliases. The safer fix is a narrow reorder plus dual-registration alias coverage.

Full review comments:

  • [P2] Preserve memory-owner alias precedence — src/agents/memory-search.ts:192-194
    This calls getEmbeddingProvider(providerId, cfg) before the existing models.providers.<id>.api memory-owner lookup runs. The memory runtime resolves config aliases through the memory provider path first, and its tests keep memory-specific providers authoritative during dual registration. With a custom alias whose API owner has both memory-specific and generic adapters, config can now derive the generic model/transport while runtime creates the legacy memory provider; move this fallback after the ownerApi memory lookup and cover that dual-registration alias case.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 1fef99962edf.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes redacted terminal output from an isolated real CLI proof with a temporary installed plugin that registers only through api.registerEmbeddingProvider() and successfully indexes and searches memory; the current head only adds test registry-state restoration.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The PR body includes redacted terminal output from an isolated real CLI proof with a temporary installed plugin that registers only through api.registerEmbeddingProvider() and successfully indexes and searches memory; the current head only adds test registry-state restoration.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove status: 🔁 re-review loop: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P2: This is a normal-priority memory/provider routing bug fix limited to configured generic embedding providers.
  • merge-risk: 🚨 compatibility: The diff changes fallback resolution for existing memorySearch.provider configurations backed by generic embedding providers or aliases.
  • merge-risk: 🚨 auth-provider: The resolver can change which embedding adapter, default model, and transport classification memory search uses for a configured provider.
  • 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 (terminal): The PR body includes redacted terminal output from an isolated real CLI proof with a temporary installed plugin that registers only through api.registerEmbeddingProvider() and successfully indexes and searches memory; the current head only adds test registry-state restoration.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes redacted terminal output from an isolated real CLI proof with a temporary installed plugin that registers only through api.registerEmbeddingProvider() and successfully indexes and searches memory; the current head only adds test registry-state restoration.
Evidence reviewed

PR surface:

Source +10, Tests +26. Total +36 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 11 1 +10
Tests 1 26 0 +26
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 37 1 +36

Acceptance criteria:

  • [P1] node scripts/run-vitest.mjs src/agents/memory-search.test.ts.
  • [P1] OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-97095-memory OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/memory-core/src/memory/generic-embedding-provider.bridge.test.ts extensions/memory-core/src/memory/generic-embedding-provider.integration.test.ts.
  • [P1] pnpm exec oxfmt --check src/agents/memory-search.ts src/agents/memory-search.test.ts.
  • [P1] git diff --check.

What I checked:

Likely related people:

  • steipete: Authored the April memory-embeddings provider-plugin refactor, is assigned to this PR, and added the latest test-state restoration commit on the branch. (role: recent area contributor and current assignee; confidence: high; commits: 77e6e4cf87f7, afe1f443e25b; files: src/agents/memory-search.ts, extensions/memory-core/src/memory/embeddings.ts, src/agents/memory-search.test.ts)
  • gumadeiras: Authored the focused change that kept memory-search config resolution from cold-loading plugin runtime in agent tests, directly adjacent to this resolver boundary. (role: adjacent owner for memory-search hot-path behavior; confidence: medium; commits: d6c90b5af121; files: src/agents/memory-search.ts)
  • osolmaz: Moved the local llama.cpp runtime into the provider plugin, where it registers through the generic embedding-provider API that exposes this resolver gap. (role: introduced related plugin registration behavior; confidence: medium; commits: 31371101678d; files: extensions/llama-cpp/index.ts, extensions/llama-cpp/src/embedding-provider.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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 26, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 26, 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.

@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. label Jun 26, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@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. 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. 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. 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. labels Jun 26, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Current PR body now includes refreshed 2026-07-02 real behavior proof for head f9f0e35c4867586a5bc9e2497691f9eaf07b7496: focused memory-search tests, formatting/diff checks, generic embedding bridge/integration tests, and an isolated CLI proof where a temporary plugin loaded via plugins.load.paths registers proof-generic only through api.registerEmbeddingProvider(). The CLI proof shows memory status --index resolving Provider: proof-generic (requested: proof-generic), Model: proof-embedding-v1, Indexed: 1/1, Embeddings: ready, and memory search --json returning the indexed chunk.

@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. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jul 2, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 2, 2026
@steipete steipete self-assigned this Jul 3, 2026
@steipete
steipete force-pushed the fix/91902-memory-index-provider-key branch from f9f0e35 to afe1f44 Compare July 3, 2026 08:16
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. labels Jul 3, 2026
@steipete

steipete commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Land-ready verification for exact head afe1f443e25b0111cd5bd68ab08da377175d6fcd:

  • Memory config resolution now follows the runtime owner chain: legacy memory provider, generic embedding provider, then configured legacy API owner.
  • Tightened the regression to snapshot and restore the process-global embedding registry instead of clearing unrelated registrations.
  • Focused memory-search tests — 36 passed; generic bridge/integration tests — 3 passed.
  • Real installed-plugin CLI proof — a generic-only deterministic provider indexed one 3-dimensional memory chunk and memory search returned the expected silver anchor content.
  • Fresh local and full-branch structured autoreviews — clean.
  • Repo-native prepare gate — exact-head hosted CI/Testbox passed.

No screenshot attached: the user-visible evidence is CLI index/search output, not a visual UI. The broader provider-key identity work in #91902 remains out of scope. Thanks @849261680 for the fix.

@steipete
steipete merged commit 76cf1b0 into openclaw:main Jul 3, 2026
121 of 128 checks passed
@steipete

steipete commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 4, 2026
* fix(agents): resolve generic memory embedding providers

* test(agents): restore generic embedding registry state

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: XS 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.

2 participants