v0.4.0 — session import
The session-import release. Facts that only ever lived in session transcripts — never promoted to curated memory — become recallable, without letting a single pasted key reach the index.
What's new
munin import(opt-in) — converts Claude Code session transcripts (*.jsonl) into dated markdown under gitignoreddata/imported/, indexed at the lowest source weight. Nothing is imported unless you add folders toimportSources; re-runs are incremental, and the import ledger is written only after a fully successful run.- Safety by construction — only conversation text is imported: tool calls, tool output, and thinking are dropped before scrubbing, so terminal output never reaches the pipeline. Every turn carries an inline date, and quoted markdown headings are escaped so imported text can't forge chunk structure.
- Secret scrubber — provider key prefixes (
sk-/sk_, GitHub, Slack, AWS, Google, npm), JWTs, PEM private-key blocks, URL credentials, andkey: valueassignments including env-style names (GITHUB_TOKEN=) andBearervalues, plus a catch-all for long opaque tokens (git SHAs are eaten by design). Stress-tested adversarially; five confirmed gaps fixed test-first before release. - New config keys —
importSources(default[]) andimportedWeight(default 0.25).
Verification
- 52/52 tests passing.
- Real-world import: 89 sessions (221 MB of JSONL → 2.7 MB of markdown), zero failures.
- Golden question set: 10/10 with the imported corpus indexed — the honesty probe still returns "No confident match." against ~2600 imported chunks.
- Secret sweep over all imported output: zero live-shaped tokens.
Transcripts contain other people's words too (collaborators, quoted web content) — imported text stays local in gitignored data/ and ranks below curated memory. See the README for details.