Peter Steinberger
781b1c1e09
test(memory): dedupe voyage embedding provider test setup
2026-02-19 07:37:06 +00:00
Peter Steinberger
65ef7fb4a4
test: dedupe empty-input mmr assertions
2026-02-18 23:33:15 +00:00
Peter Steinberger
be1f2a1348
perf(test): drop timeout wrapper in async memory search test
2026-02-18 22:22:36 +00:00
Peter Steinberger
9c125c6c1f
perf(test): remove unnecessary qmd export delay
2026-02-18 17:31:59 +00:00
Peter Steinberger
82cb185881
refactor(core): unify bounded concurrency runner
2026-02-18 16:48:35 +00:00
Peter Steinberger
ff50d3303d
test(memory): dedupe model-auth mock setup
2026-02-18 13:17:44 +00:00
Peter Steinberger
c3472f6c54
test(memory): dedupe embeddings provider test fixtures
2026-02-18 12:28:25 +00:00
Peter Steinberger
8a9fddedc9
refactor: extract shared install and embedding utilities
2026-02-18 04:49:22 +00:00
Peter Steinberger
b8b43175c5
style: align formatting with oxfmt 0.33
2026-02-18 01:34:35 +00:00
Peter Steinberger
31f9be126c
style: run oxfmt and fix gate failures
2026-02-18 01:29:02 +00:00
Peter Steinberger
6dcc052bb4
fix: stabilize model catalog and pi discovery auth storage compatibility
2026-02-18 02:09:40 +01:00
Peter Steinberger
2e91552f09
feat(agents): add generic provider api key rotation ( #19587 )
2026-02-18 01:31:11 +01:00
Sebastian
bd1e7fadd5
test: cover cron telemetry and typed fetch mocks
2026-02-17 09:47:29 -05:00
Seb Slight
f44e3b2a34
revert: fix models set catalog validation ( #19194 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 7e3b2ff7af
Co-authored-by: sebslight <19554889+sebslight@users.noreply.github.com >
Co-authored-by: sebslight <19554889+sebslight@users.noreply.github.com >
Reviewed-by: @sebslight
2026-02-17 09:43:41 -05:00
Shakker
6bb9b0656f
Tests: fix fetch mock typings for type-aware checks
2026-02-17 14:34:41 +00:00
Sebastian
cc359d338e
test: add fetch mock helper and reaction coverage
2026-02-17 09:02:39 -05:00
cpojer
7b31e8fc59
chore: Fix types in tests 36/N.
2026-02-17 15:50:07 +09:00
cpojer
6e5df1dc0f
chore: Fix types in tests 25/N.
2026-02-17 14:31:02 +09:00
cpojer
d0cb8c19b2
chore: wtf.
2026-02-17 13:36:48 +09:00
Sebastian
ed11e93cf2
chore(format)
2026-02-16 23:20:16 -05:00
Sebastian
f7d2e15a2e
test: stabilize infra tests
2026-02-16 22:37:34 -05:00
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