You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+38Lines changed: 38 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,44 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
7
7
---
8
8
9
+
## [3.3.3] — 2026-04-23
10
+
11
+
### Bug Fixes
12
+
13
+
-**Install regression** — `mempalace-mcp` console script is now declared in `pyproject.toml` alongside `.claude-plugin/plugin.json`'s reference to it. In v3.3.2 the two drifted apart (plugin.json shipped the new `"command": "mempalace-mcp"` form before the matching entry point landed), so every fresh `pip install mempalace==3.3.2` produced a Claude Code plugin config pointing at a binary that wasn't installed. (#1093, #340)
14
+
- Restore silent-save visibility after the Claude Code 2.1.114 client regression — production transcript saves were failing silently until this PR. (#1021)
15
+
- Paginate `status`-path metadata fetches so large palaces don't trip SQLite variable limits. (#851)
16
+
- Resolve the Claude plugin hook runner across platform / plugin-dir variations; previously broke on Windows and some macOS layouts. (#942)
17
+
- Real `python3` resolution for `.sh` hooks with a `MEMPAL_PYTHON` override path. (#833)
18
+
- Add optional `wing` parameter to `tool_diary_write` / `tool_diary_read` and derive per-project wing from the Claude Code transcript path when writing from the stop hook — diary entries from different projects no longer collapse into a shared default wing. (#659)
19
+
- Treat empty string as "no filter" in `mempalace_search``wing`/`room`; LLM agents that default to filling every optional parameter with `""` no longer get bounced with `must be a non-empty string`. (#1097, #1084)
20
+
- Broaden `_wing_from_transcript_path` to handle Claude Code project folders without a `-Projects-` segment (e.g. `~/dev/<parent>/<project>`, `~/code/<project>`). The project name is now derived from the final dash-separated token of the encoded folder, so Linux users with code outside `~/Projects/` get per-project diary scoping instead of falling through to `wing_sessions`. (#1145, follow-up to #659)
21
+
-`mempalace_diary_read(wing="")` now returns diary entries from every wing this agent has written to, matching the #1097 "empty-string as no filter" pattern. Previously defaulted to `wing_<agent>`, siloing entries that hooks wrote to project-derived wings. (#1145)
22
+
-`mempalace mine` now skips the generated `entities.json` file so its contents aren't re-ingested as project content. (#1175)
23
+
24
+
### Improvements
25
+
26
+
-**Deterministic hook saves.** Save hook now uses a silent Python API path, so successive hook invocations produce reproducible results and zero data loss on the hot path. (#673)
27
+
-**Graph cache with write-invalidation** inside `build_graph()` — warm-path calls no longer rebuild the palace-graph per request. (#661)
28
+
-**`mempalace init` entity detection overhaul.** Canonical project names now come from package manifests (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`) and real people come from git commit authors, rather than being inferred from prose. Includes union-find dedup across name/email aliases, bot filtering that keeps `@users.noreply.github.com` humans, and automatic "mine" flagging by contribution share. (#1148)
29
+
-**Regex detector accuracy.** CamelCase extraction so `MemPalace`, `ChromaDB`, `OpenAI` aren't fragmented; tighter versioned/hyphenated pattern kills `context-manager` / `multi-word` false positives; dialogue `^NAME:\s` requires ≥2 hits so `Created: <date>` metadata stops classifying field names as people; expanded stopwords for common English participles and descriptors; high-pronoun signal classifies as person rather than dumping to uncertain. (#1148)
30
+
-**Init → miner wire-up.** Confirmed entities merge into `~/.mempalace/known_entities.json` on init, which the miner reads to tag drawer metadata for entity-filtered search. Previously init's output was not consumed by the miner; the per-project `entities.json` is kept as an audit trail. (#1157)
31
+
-**Case-insensitive project dedup** across manifest, git, and convo sources so casing variants of the same project name collapse into one review entry. (#1175)
32
+
33
+
### Added
34
+
35
+
- i18n: Belarusian translation. (#1051)
36
+
- i18n: entity detection for German, Spanish, and French locales. (#1001)
37
+
- i18n: Traditional + Simplified Chinese entity detection. (#945)
38
+
-**`mempalace init --llm`**: optional LLM-assisted entity classification. Defaults to local Ollama (zero-API); also supports any OpenAI-compatible endpoint (LM Studio, llama.cpp server, vLLM, OpenRouter, etc.) and the Anthropic Messages API. Runs interactively with a progress indicator; Ctrl-C cancels cleanly and returns partial results. Useful for prose-heavy folders where the regex detector struggles (diaries, transcripts, research notes). Opt-in only — default init path remains zero-API. (#1150)
39
+
-**Claude Code conversation scanner.**`~/.claude/projects/<slug>/` directories now contribute project entities using each session's authoritative `cwd` metadata, avoiding slug-decoding ambiguity. (#1150)
40
+
41
+
### Known — deferred to v3.3.4
42
+
43
+
- HNSW parallel-insert SIGSEGV when `hnsw:num_threads` is unset on collection creation (#974) — fix in-flight as #976, awaiting rebase against develop.
Copy file name to clipboardExpand all lines: examples/HOOKS_TUTORIAL.md
+24-1Lines changed: 24 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,4 +25,27 @@ Add this to your configuration file to enable automatic background saving:
25
25
}
26
26
]
27
27
}
28
-
}
28
+
}
29
+
```
30
+
31
+
### 3. What changed (v3.1.0+)
32
+
33
+
Both hooks now have **two-layer capture**:
34
+
35
+
1.**Auto-mine**: Before blocking the AI, the hook runs the normalizer on the JSONL transcript and upserts chunks directly into the palace. This captures raw tool output (Bash results, search findings, build errors) that the AI would otherwise summarize away.
36
+
37
+
2.**Updated reason messages**: The block reason now explicitly tells the AI to save tool output verbatim — not just topics and decisions.
38
+
39
+
### 4. Backfill past conversations (one-time)
40
+
41
+
The hooks capture conversations going forward, but you probably have months of past sessions. Run this once to mine them all:
42
+
43
+
```bash
44
+
mempalace mine ~/.claude/projects/ --mode convos
45
+
```
46
+
47
+
### 5. Configuration
48
+
49
+
-**`SAVE_INTERVAL=15`** — How many human messages between saves
50
+
-**`MEMPALACE_PYTHON`** — Python interpreter with mempalace + chromadb. Auto-detects: env var → repo venv → system python3
51
+
-**`MEMPAL_DIR`** — Optional directory for auto-ingest via `mempalace mine`
0 commit comments