diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 68d530b82..12100d4fa 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "8e512076266c84ad31c140cc9e650fd4de94ab19", - "syncedAt": "2026-04-05T14:40:54.390Z" + "sha": "9408f682f6ec7321cdc72c037ab3f880631d7293", + "syncedAt": "2026-04-05T14:48:05.312Z" } diff --git a/docs/cli/memory.md b/docs/cli/memory.md index 29db96ce2..3dc6c8d01 100644 --- a/docs/cli/memory.md +++ b/docs/cli/memory.md @@ -99,8 +99,10 @@ Dreaming is the overnight reflection pass for memory. It is called "dreaming" be - You can toggle modes from chat with `/dreaming off|core|rem|deep`. Run `/dreaming` (or `/dreaming options`) to see what each mode does. - When enabled, `memory-core` automatically creates and maintains a managed cron job. - Set `dreaming.limit` to `0` if you want dreaming enabled but automatic promotion effectively paused. -- Ranking uses weighted signals: recall frequency, retrieval relevance, query diversity, and temporal recency (recent recalls decay over time). +- Ranking uses weighted signals: recall frequency, retrieval relevance, query diversity, temporal recency, cross-day consolidation, and derived concept richness. - Promotion into `MEMORY.md` only happens when quality thresholds are met, so long-term memory stays high signal instead of collecting one-off details. +- Automatic runs fan out across configured memory workspaces, so one agent's sessions consolidate into that agent's memory workspace instead of only the default session. +- Promotion re-reads the live daily note before writing to `MEMORY.md`, so edited or deleted short-term snippets do not get promoted from stale recall-store snapshots. Default mode presets: @@ -132,5 +134,5 @@ Notes: - `memory status` includes any extra paths configured via `memorySearch.extraPaths`. - If effectively active memory remote API key fields are configured as SecretRefs, the command resolves those values from the active gateway snapshot. If gateway is unavailable, the command fails fast. - Gateway version skew note: this command path requires a gateway that supports `secrets.resolve`; older gateways return an unknown-method error. -- Dreaming cadence defaults to each mode's preset schedule. Override cadence with `plugins.entries.memory-core.config.dreaming.frequency` as a cron expression (for example `0 3 * * *`) and fine-tune with `timezone`, `limit`, `minScore`, `minRecallCount`, and `minUniqueQueries`. +- Dreaming cadence defaults to each mode's preset schedule. Override cadence with `plugins.entries.memory-core.config.dreaming.cron` as a cron expression (for example `0 3 * * *`) and fine-tune with `timezone`, `limit`, `minScore`, `minRecallCount`, and `minUniqueQueries`. - Set `plugins.entries.memory-core.config.dreaming.verboseLogging` to `true` to emit per-run candidate and apply details into the normal gateway logs while tuning the feature. diff --git a/docs/concepts/memory-dreaming.md b/docs/concepts/memory-dreaming.md index 53edf7a84..8d70d639f 100644 --- a/docs/concepts/memory-dreaming.md +++ b/docs/concepts/memory-dreaming.md @@ -28,34 +28,43 @@ one-off details. ## Promotion signals -Dreaming combines four signals: +Dreaming combines six signals: - **Frequency**: how often the same candidate was recalled. - **Relevance**: how strong recall scores were when it was retrieved. - **Query diversity**: how many distinct query intents surfaced it. - **Recency**: temporal weighting over recent recalls. +- **Consolidation**: whether recalls repeated across distinct days instead of one burst. +- **Conceptual richness**: derived concept tags from the note path and snippet text. Promotion requires all configured threshold gates to pass, not just one signal. ### Signal weights -| Signal | Weight | Description | -| --------- | ------ | ------------------------------------------------ | -| Frequency | 0.35 | How often the same entry was recalled | -| Relevance | 0.35 | Average recall scores when retrieved | -| Diversity | 0.15 | Count of distinct query intents that surfaced it | -| Recency | 0.15 | Temporal decay (14-day half-life) | +| Signal | Weight | Description | +| ------------------- | ------ | ------------------------------------------------ | +| Frequency | 0.24 | How often the same entry was recalled | +| Relevance | 0.30 | Average recall scores when retrieved | +| Query diversity | 0.15 | Count of distinct query intents that surfaced it | +| Recency | 0.15 | Temporal decay (14-day half-life) | +| Consolidation | 0.10 | Reward recalls repeated across multiple days | +| Conceptual richness | 0.06 | Reward entries with richer derived concept tags | ## How it works 1. **Recall tracking** -- Every `memory_search` hit is recorded to - `memory/.dreams/short-term-recall.json` with recall count, scores, and query - hash. + `memory/.dreams/short-term-recall.json` with recall count, scores, query + hash, recall days, and concept tags. 2. **Scheduled scoring** -- On the configured cadence, candidates are ranked using weighted signals. All threshold gates must pass simultaneously. -3. **Promotion** -- Qualifying entries are appended to `MEMORY.md` with a - promoted timestamp. -4. **Cleanup** -- Already-promoted entries are filtered from future cycles. A +3. **Workspace fan-out** -- Each dreaming cycle runs once per configured memory + workspace, so one agent's sessions consolidate into that agent's memory + workspace. +4. **Promotion** -- Before appending anything, dreaming re-reads the current + daily note and skips candidates whose source snippet no longer exists. + Qualifying live entries are appended to `MEMORY.md` with a promoted + timestamp. +5. **Cleanup** -- Already-promoted entries are filtered from future cycles. A file lock prevents concurrent runs. ## Modes @@ -76,7 +85,7 @@ automatically. You do not need to manually create a cron job for this feature. You can still tune behavior with explicit overrides such as: -- `dreaming.frequency` (cron expression) +- `dreaming.cron` (cron expression) - `dreaming.timezone` - `dreaming.limit` - `dreaming.minScore` @@ -142,7 +151,8 @@ See [memory CLI](/cli/memory) for the full flag reference. When dreaming is enabled, the Gateway sidebar shows a **Dreams** tab with memory stats (short-term count, long-term count, promoted count) and the next -scheduled cycle time. +scheduled cycle time. Daily counters honor `dreaming.timezone` when set and +otherwise fall back to the configured user timezone. ## Further reading