# Changelog ## 1.0.26 **Access Reinforcement for Time Decay** - **Feat**: Access reinforcement — frequently *manually recalled* memories decay more slowly (spaced-repetition style) - **New**: `AccessTracker` with debounced metadata write-back (records accessCount / lastAccessedAt) - **New**: Config options under `retrieval`: `reinforcementFactor` (default: 0.5) and `maxHalfLifeMultiplier` (default: 3) - **New**: `MemoryStore.getById()` pure-read helper for efficient metadata lookup PR: #37 Breaking changes: None. Backward compatible (set `reinforcementFactor: 0` to disable). --- ## 1.0.22 **Storage Path Validation & Better Error Messages** - **Fix**: Validate `dbPath` at startup — resolve symlinks, auto-create missing directories, check write permissions (#26, #27) - **Fix**: Write/connection failures now include `errno`, resolved path, and actionable fix suggestions instead of generic errors (#28) - **New**: Exported `validateStoragePath()` utility for external tooling and diagnostics Breaking changes: None. Backward compatible. --- ## 1.0.21 **Long Context Chunking** - **Feats**: Added automatic chunking for documents exceeding embedding context limits - **Feats**: Smart semantic-aware chunking at sentence boundaries with configurable overlap - **Feats**: Chunking adapts to different embedding model context limits (Jina, OpenAI, Gemini, etc.) - **Feats**: Parallel chunk embedding with averaged result for better semantic preservation - **Fixes**: Handles "Input length exceeds context length" errors gracefully - **Docs**: Added comprehensive documentation in docs/long-context-chunking.md Breaking changes: None. Backward compatible with existing configurations. --- ## 1.0.20 - Fix: reduce auto-capture noise by skipping memory-management prompts (delete/forget/cleanup memory entries). - Improve: broaden English decision triggers so statements like "we decided / going forward we will use" are captured as decisions. ## 1.0.19 - UX: show memory IDs in `memory-pro list` and `memory-pro search` output, so users can delete entries without switching to JSON. - UX: include IDs in agent tool outputs (`memory_recall`, `memory_list`) for easier debugging and `memory_forget` follow-ups. ## 1.0.18 - Fix: sync `openclaw.plugin.json` version with `package.json`, so the OpenClaw plugin info shows the correct version. ## 1.0.17 - Fix: adaptive-retrieval now strips OpenClaw-injected timestamp prefixes like `[Mon YYYY-MM-DD HH:MM ...] ...` to avoid skewing length-based heuristics. - Improve: expanded SKIP/FORCE keyword patterns with Traditional Chinese variants. ## 1.0.16 - Feat: expand memory capture triggers to support Traditional Chinese (繁體中文) in addition to Simplified Chinese, and improve category detection keywords. ## 1.0.15 - Docs: add troubleshooting note for LanceDB/Arrow returning `BigInt` numeric columns, and confirm the plugin coerces numeric fields via `Number(...)` for compatibility. ## 1.0.14 - Fix: coerce LanceDB/Arrow numeric columns that may arrive as `BigInt` (`timestamp`, `importance`, `_distance`, `_score`) into `Number(...)` to avoid runtime errors like "Cannot mix BigInt and other types" on LanceDB 0.26+. ## 1.0.13 - Fix: Force `encoding_format: "float"` for OpenAI-compatible embedding requests to avoid base64/float ambiguity and dimension mismatch issues with some providers/gateways. - Feat: Add Voyage AI (`voyage`) as a supported rerank provider, using `top_k` and `Authorization: Bearer` header. - Refactor: Harden rerank response parser to accept both `results[]`/`data[]` payload shapes and `relevance_score`/`score` field names across all providers. ## 1.0.12 - Fix: ghost memories stuck in autoRecall after deletion (#15). BM25-only results from stale FTS index are now validated via `store.hasId()` before inclusion in fused results. Removed the BM25-only floor score of 0.5 that allowed deleted entries to survive `hardMinScore` filtering. - Fix: HEARTBEAT pattern now matches anywhere in the prompt (not just at start), preventing autoRecall from triggering on prefixed HEARTBEAT messages. - Add: `autoRecallMinLength` config option to set a custom minimum prompt length for autoRecall (default: 15 chars English, 6 CJK). Prompts shorter than this threshold are skipped. - Add: `ping`, `pong`, `test`, `debug` added to skip patterns in adaptive retrieval. ## 1.0.11 - Change: set `autoRecall` default to `false` to avoid the model echoing injected `` blocks. ## 1.0.10 - Fix: avoid blocking OpenClaw gateway startup on external network calls by running startup self-checks in the background with timeouts. ## 1.0.9 - Change: update default `retrieval.rerankModel` to `jina-reranker-v3` (still fully configurable). ## 1.0.8 - Add: JSONL distill extractor supports optional agent allowlist via env var `OPENCLAW_JSONL_DISTILL_ALLOWED_AGENT_IDS` (default off / compatible). ## 1.0.7 - Fix: resolve `agentId` from hook context (`ctx?.agentId`) for `before_agent_start` and `agent_end`, restoring per-agent scope isolation when using multi-agent setups. ## 1.0.6 - Fix: auto-recall injection now correctly skips cron prompts wrapped as `[cron:...] run ...` (reduces token usage for cron jobs). - Fix: JSONL distill extractor filters more transcript/system noise (BOOT.md, HEARTBEAT, CLAUDE_CODE_DONE, queued blocks) to avoid polluting distillation batches. ## 1.0.5 - Add: optional JSONL session distillation workflow (incremental cursor + batch format) via `scripts/jsonl_distill.py`. - Docs: document the JSONL distiller setup in README (EN) and README_CN (ZH). ## 1.0.4 - Fix: `embedding.dimensions` is now parsed robustly (number / numeric string / env-var string), so it properly overrides hardcoded model dims (fixes Ollama `nomic-embed-text` dimension mismatch). ## 1.0.3 - Fix: `memory-pro reembed` no longer crashes (missing `clampInt` helper). ## 1.0.2 - Fix: pass through `embedding.dimensions` to the OpenAI-compatible `/embeddings` request payload when explicitly configured. - Chore: unify plugin version fields (`openclaw.plugin.json` now matches `package.json`). ## 1.0.1 - Fix: CLI command namespace updated to `memory-pro`. ## 1.0.0 - Initial npm release.