cpojer
43c97d18aa
chore: Fix types in tests 17/N.
2026-02-17 12:00:29 +09:00
cpojer
003d6c45d6
chore: Fix types in tests 6/N.
2026-02-17 10:57:31 +09:00
Peter Steinberger
13ae1ae056
fix(memory): tighten embedding manager inheritance types
2026-02-17 00:59:54 +00:00
Peter Steinberger
5115f6fdf3
style: normalize imports for oxfmt 0.33
2026-02-17 00:59:54 +00:00
Peter Steinberger
ddef3cadba
refactor: replace memory manager prototype mixing
2026-02-17 01:50:04 +01:00
cpojer
1dc9bb8d62
chore: Fix more type issues.
2026-02-17 09:29:47 +09:00
cpojer
90ef2d6bdf
chore: Update formatting.
2026-02-17 09:18:40 +09:00
Peter Steinberger
9bfd3ca195
refactor(memory): consolidate embeddings and batch helpers
2026-02-17 00:11:02 +00:00
Rodrigo Uroz
65ad9a4262
Memory: fix MMR tie-break and temporal timestamp dedupe
2026-02-16 23:59:19 +01:00
Rodrigo Uroz
33cf27a52a
fix: MMR default disabled, tie-break null guard, correct docs URL
...
- DEFAULT_MMR_CONFIG.enabled = false (opt-in, was incorrectly true)
- Tie-break: handle bestItem === null so first candidate always wins
- CHANGELOG URL: docs.clawd.bot → docs.openclaw.ai
- Tests updated to pass enabled: true explicitly where needed
2026-02-16 23:59:19 +01:00
Rodrigo Uroz
6b3e0710f4
feat(memory): Add opt-in temporal decay for hybrid search scoring
...
Exponential decay (half-life configurable, default 30 days) applied
before MMR re-ranking. Dated daily files (memory/YYYY-MM-DD.md) use
filename date; evergreen files (MEMORY.md, topic files) are not
decayed; other sources fall back to file mtime.
Config: memorySearch.query.hybrid.temporalDecay.{enabled, halfLifeDays}
Default: disabled (backwards compatible, opt-in).
2026-02-16 23:59:19 +01:00
Rodrigo Uroz
fa9420069a
feat(memory): Add MMR re-ranking for search result diversity
...
Adds Maximal Marginal Relevance (MMR) re-ranking to hybrid search results.
- New mmr.ts with tokenization, Jaccard similarity, and MMR algorithm
- Integrated into mergeHybridResults() with optional mmr config
- 40 comprehensive tests covering edge cases and diversity behavior
- Configurable lambda parameter (default 0.7) to balance relevance vs diversity
- Updated CHANGELOG.md and memory docs
This helps avoid redundant results when multiple chunks contain similar content.
2026-02-16 23:59:19 +01:00
康熙
bcab2469de
feat: LLM-based query expansion for FTS mode
...
When searching in FTS-only mode (no embedding provider), extract meaningful
keywords from conversational queries using LLM to improve search results.
Changes:
- New query-expansion module with keyword extraction
- Supports English and Chinese stop word filtering
- Null safety guards for FTS-only mode (provider can be null)
- Lint compliance fixes for string iteration
This helps users find relevant memory entries even with vague queries.
2026-02-16 23:53:21 +01:00
康熙
65aedac20e
fix: enable FTS fallback when no embedding provider available ( #17725 )
...
When no embedding provider is available (e.g., OAuth mode without API keys),
memory_search now falls back to FTS-only mode instead of returning disabled: true.
Changes:
- embeddings.ts: return null provider with reason instead of throwing
- manager.ts: handle null provider, use FTS-only search mode
- manager-search.ts: allow searching all models when provider is undefined
- memory-tool.ts: expose search mode in results
The search results now include a 'mode' field indicating 'hybrid' or 'fts-only'.
2026-02-16 23:53:21 +01:00
康熙
153794080e
fix: support OAuth for Gemini media understanding
...
Extract parseGeminiAuth() to shared infra module and use it in both
embeddings-gemini.ts and inline-data.ts.
Previously, inline-data.ts directly set x-goog-api-key header without
handling OAuth JSON format. Now it properly supports both traditional
API keys and OAuth tokens.
2026-02-16 23:53:21 +01:00
康熙
3379b9d341
fix: support OAuth for Gemini embedding API
...
Add parseGeminiAuth() to detect OAuth JSON format ({"token": "...", "projectId": "..."})
and use Bearer token authentication instead of x-goog-api-key header.
This allows OAuth users (using gemini-cli-auth extension) to use memory_search
with Gemini embedding API.
2026-02-16 23:53:21 +01:00
Peter Steinberger
04892ee230
refactor(core): dedupe shared config and runtime helpers
2026-02-16 14:59:30 +00:00
Peter Steinberger
ceddb4a593
style(memory): format flaky ci test files
2026-02-16 05:32:42 +01:00
Vignesh Natarajan
b32ae6fa0c
fix (memory/qmd): isolate managed collections per agent
2026-02-15 20:14:45 -08:00
Peter Steinberger
b4a9eacd76
chore: format qmd-manager test
2026-02-16 04:18:42 +01:00
Vignesh Natarajan
501e893676
fix (memory/search): support unicode tokens in FTS query builder
2026-02-15 19:17:03 -08:00
Vignesh Natarajan
85430c8495
fix (memory/qmd): rebind drifted managed collection paths
2026-02-15 19:03:55 -08:00
Peter Steinberger
9805ce0097
refactor(memory): reuse cached embedding collector
2026-02-16 02:32:59 +00:00
Peter Steinberger
58cf37ceeb
refactor(memory): reuse batch utils in gemini
2026-02-16 00:34:10 +00:00
Peter Steinberger
d8691ff4ec
refactor(memory): share sync progress helpers
2026-02-16 00:29:01 +00:00
Peter Steinberger
8251f7c235
refactor(memory): dedupe batch helpers
2026-02-16 00:26:03 +00:00
Peter Steinberger
92f8c0fac3
perf(test): speed up suites and reduce fs churn
2026-02-15 19:29:27 +00:00
Peter Steinberger
a4b958efcd
perf(test): cover embedding chunk limits without indexing
2026-02-15 19:29:27 +00:00
Gustavo Madeira Santana
2e64cbd1b8
chore(memory): tighten embedding harness types
2026-02-15 10:30:19 -05:00
Peter Steinberger
71c1d09f22
refactor(test): share memory embedding fixture
2026-02-15 15:07:09 +00:00
Peter Steinberger
a7b6555195
refactor(test): share memory embedding mocks
2026-02-15 14:48:23 +00:00
Peter Steinberger
0d47bea3bf
refactor(memory): dedupe embedding batch runner options
2026-02-15 13:37:42 +00:00
Peter Steinberger
ebb54d71ef
refactor(memory): share batch create retry
2026-02-15 06:43:20 +00:00
Vignesh Natarajan
46a3c16066
test (memory/qmd): cover per-collection query fallback behavior
2026-02-14 19:02:44 -08:00
Vignesh Natarajan
04a88a6ee6
fix (memory/qmd): avoid multi-collection query ranking corruption
2026-02-14 19:02:41 -08:00
Vignesh Natarajan
44bbb4ddf4
chore (memory): add status dirty rebound regression test
2026-02-14 18:48:58 -08:00
Vignesh Natarajan
7addb519da
fix (memory/builtin): keep status dirty state stable across invocations
2026-02-14 18:48:58 -08:00
Peter Steinberger
f9bb748a6c
fix(memory): prevent QMD scope deny bypass
2026-02-15 02:41:45 +00:00
Vignesh Natarajan
df820f0315
Memory/QMD: add null-byte collection repair regressions
2026-02-14 18:09:12 -08:00
Vignesh Natarajan
2dfbb407ba
Memory/QMD: self-heal null-byte collection metadata on update
2026-02-14 18:09:12 -08:00
Peter Steinberger
075b335ba6
refactor(memory): dedupe batch embedding glue
2026-02-15 01:46:51 +00:00
Vignesh Natarajan
decf2b518a
Memory: reduce watcher FD pressure for markdown sync
2026-02-14 17:25:07 -08:00
Peter Steinberger
161222f6fe
perf(test): speed up qmd manager suite
2026-02-15 01:15:47 +00:00
Peter Steinberger
10a52ac294
refactor(memory): share sync indexing helper
2026-02-15 01:15:43 +00:00
Peter Steinberger
ef91cd8479
perf(test): drop recursive mkdir in qmd manager suite
2026-02-15 00:26:41 +00:00
Peter Steinberger
ae1214140e
perf(test): drop polling waits in qmd manager suite
2026-02-15 00:26:41 +00:00
Peter Steinberger
bfbe12d9f5
perf(test): reduce memory suite resets
2026-02-15 00:26:41 +00:00
Peter Steinberger
27eef96380
fix: improve sqlite missing runtime error
2026-02-15 01:18:53 +01:00
Vignesh Natarajan
53a8f474ee
Memory/QMD: handle fallback init failures gracefully
2026-02-14 15:42:02 -08:00
Vignesh Natarajan
c4dbcc3444
Memory/QMD: make status checks side-effect free
2026-02-14 15:42:02 -08:00