Critical fixes:
- C1: Pin/dream update_memory now reads content first via get_memory
before updating, preventing metadata-only calls that wipe content
- C2: SessionStart memory count uses GET /v3/memories/?page_size=1 for
real count from pagination envelope instead of search limit=100
- C3: on_task_completed.sh uses ${MEM0_PROJECT_ID:-unknown} to avoid
crash when identity resolution fails under set -u
Important fixes:
- I1: session_stats.py tracks recent_ids (memory IDs + timestamps) for
/mem0:forget undo support. Capped at 50 entries.
- I2: /mem0:health --deep mode adds memory quality analysis: duplicate
detection, stale entry scan, contradiction flags, orphan tagging
- I3: /mem0:stats ASCII histogram for category distribution with bar
chart, sorted by count descending
- I4: mem0-mcp skill documents access counter pattern: get_memory then
update_memory to track which memories are actually used
- I5: on_pre_commit.py reads COMMIT_EDITMSG first (current commit),
falls back to HEAD only if EDITMSG unavailable
Tests: 91 -> 94 (3 new for recent_ids tracking)
83 lines
2.5 KiB
Markdown
83 lines
2.5 KiB
Markdown
---
|
|
name: mem0-stats
|
|
description: >
|
|
Show memory statistics for the current session and project lifetime.
|
|
Combines local session counters with API-fetched totals.
|
|
TRIGGER: user runs /mem0:stats, or asks "how many memories", "mem0 stats",
|
|
"memory usage", "show memory count".
|
|
---
|
|
|
|
# Mem0 Stats
|
|
|
|
Show session and lifetime memory statistics.
|
|
|
|
## Execution
|
|
|
|
### Step 1: Gather session stats
|
|
|
|
Run the session stats reporter:
|
|
|
|
```bash
|
|
SCRIPT_DIR="${CLAUDE_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:-${CURSOR_PLUGIN_ROOT:-}}}/scripts"
|
|
python3 "$SCRIPT_DIR/session_stats.py" peek 2>/dev/null || echo "{}"
|
|
```
|
|
|
|
The `peek` command returns JSON without clearing the stats file (unlike `report`).
|
|
|
|
If the script returns empty or errors, note "No session data available" and continue.
|
|
|
|
### Step 2: Fetch lifetime stats from API
|
|
|
|
Call `get_memories` with:
|
|
- `user_id=<active_user_id>`
|
|
- `app_id=<active_project_id>`
|
|
- `page_size=100`
|
|
|
|
Count the returned memories. Group them by:
|
|
1. `categories[0]` (platform-assigned) — primary grouping
|
|
2. `metadata.type` (agent-assigned) — secondary if no categories
|
|
3. `created_at` date — for age analysis
|
|
|
|
Also run a `search_memories` call with `query="project"`, `limit=1` to measure round-trip latency (time the call).
|
|
|
|
### Step 3: Display
|
|
|
|
Print a compact dashboard with an ASCII histogram for category distribution:
|
|
|
|
```
|
|
## mem0 Stats
|
|
|
|
### This Session
|
|
Memories written: <N>
|
|
Searches run: <N>
|
|
Categories touched: <list>
|
|
|
|
### Project Lifetime (<project_id>)
|
|
Total memories: <N>
|
|
|
|
By category:
|
|
decision ████████████████ 24
|
|
convention ██████████░░░░░░ 15
|
|
anti_pattern ████░░░░░░░░░░░░ 6
|
|
task_learning ███░░░░░░░░░░░░░ 5
|
|
user_preference ██░░░░░░░░░░░░░░ 3
|
|
session_state █░░░░░░░░░░░░░░░ 2
|
|
|
|
Oldest memory: <date>
|
|
Newest memory: <date>
|
|
|
|
### Health
|
|
API latency: <N>ms
|
|
User: <user_id>
|
|
Project: <project_id>
|
|
Branch: <branch>
|
|
```
|
|
|
|
**Histogram rules:**
|
|
- Max bar width: 16 characters. Scale all bars relative to the highest count.
|
|
- Use `█` for filled and `░` for empty. Right-align the count number.
|
|
- Sort categories by count descending. Omit categories with 0 memories.
|
|
- If only 1-2 categories exist, still show the histogram — it provides visual context.
|
|
|
|
Skip any section with zero data.
|