mempalace-code 1.2.0__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CHANGELOG.md +70 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CLAUDE.md +2 -1
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/PKG-INFO +53 -10
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/README.md +50 -9
- mempalace_code-1.4.0/benchmarks/results_token_delta_wh40k.json +610 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/AGENT_INSTALL.md +1 -1
- mempalace_code-1.4.0/docs/BACKLOG-archived.yaml +162 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BACKLOG.yaml +151 -107
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/COMPARISON_GRAPHIFY.md +5 -5
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/README.md +1 -1
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/cli.py +327 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/knowledge_graph.py +75 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/mcp_server.py +607 -4
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/miner.py +407 -21
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/room_detector_local.py +62 -13
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/searcher.py +16 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/storage.py +23 -2
- mempalace_code-1.4.0/mempalace/watcher.py +619 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/pyproject.toml +2 -1
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_cli.py +234 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_kg_extract.py +365 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_mcp_server.py +631 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_miner.py +446 -3
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_searcher.py +91 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_symbol_extract.py +35 -0
- mempalace_code-1.4.0/tests/test_watcher.py +490 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/prompts/codex-hardening-review.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/prompts/codex-plan-review.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/settings.json +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/mode-classification.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/task-state.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/bench/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/mine/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/palace-health/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/release/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/ship/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/start/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/status/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-hardening/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-plan/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/verify/SKILL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/workflows/ci.yml +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/workflows/publish.yml +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.gitignore +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.pre-commit-config.yaml +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CONTRIBUTING.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/LICENSE +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/NOTICE +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/assets/mempalace_banner.jpg +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/BENCHMARKS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/HYBRID_MODE.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/README.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/convomem_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/dotnet_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/embed_ab_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/locomo_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/longmemeval_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/membench_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/results_token_delta_mempalace.json +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/token_delta_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BACKUP_RESTORE.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BENCH_TOKEN_DELTA.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/HOW_SEARCH_WORKS.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/OFFLINE_USAGE.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/UPSTREAM_HARDENING.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/WHY_THIS_FORK.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/HOOKS_TUTORIAL.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/basic_mining.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/convo_import.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/gemini_cli_setup.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/mcp_setup.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/README.md +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/mempal_precompact_hook.sh +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/mempal_save_hook.sh +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/__init__.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/__main__.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/_chroma_store.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/backup.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/config.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/convo_miner.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/dialect.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/entity_detector.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/entity_registry.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/export.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/general_extractor.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/layers.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/migrate.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/normalize.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/onboarding.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/palace_graph.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/py.typed +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/spellcheck.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/split_mega_files.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/treesitter.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/version.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/bootstrap.sh +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/codex-review.sh +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/nuke_wing.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/conftest.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_backup.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_chroma_compat.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_chunking.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_config.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_convo_miner.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_dialect.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_dotnet_config.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_e2e.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_embed_ab_bench.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_export.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_knowledge_graph.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_lang_detect.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_migrate.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_normalize.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_offline.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_split_mega_files.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_storage.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_storage_lance.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_treesitter.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_version_consistency.py +0 -0
- {mempalace_code-1.2.0 → mempalace_code-1.4.0}/uv.lock +0 -0
|
@@ -1,5 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.4.0 — 2026-04-19
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **Watcher quiet mode** — re-mines suppress verbose output; only logs a one-line summary when drawers are actually filed; no-op commits produce zero log noise; optimize skipped on empty batches
|
|
7
|
+
- **Per-project `bin/` skip** — `bin/` no longer globally skipped; only excluded when .NET project markers (`.csproj`, `.sln`, `.fsproj`, `.vbproj`) are present (MINE-BIN-SKIP-DIRS)
|
|
8
|
+
- **Kotlin nested generic receiver** — `fun <T> List<Pair<K,V>>.ext()` now parsed correctly (MINE-KOTLIN-GENERIC-RECEIVER-NESTED)
|
|
9
|
+
- `mine()` now returns stats dict (`files_processed`, `drawers_filed`, `elapsed_secs`)
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **Watcher on-commit detection** — `watchfiles.DefaultFilter` ignores `.git/` by default; on-commit mode now passes `watch_filter=None` so `.git/refs/heads/` changes are detected
|
|
13
|
+
- **Watcher log buffering** — flush Python stdout/stderr before restoring file descriptors to prevent mine() output leaking to real stdout
|
|
14
|
+
- **HuggingFace/safetensors noise** — suppress BertModel LOAD REPORT and progress bars via OS fd-level redirect during model init
|
|
15
|
+
|
|
16
|
+
## v1.3.0 — 2026-04-19
|
|
17
|
+
|
|
18
|
+
First-class C#/.NET support — delivers [rergards/mempalace-code#1](https://github.com/rergards/mempalace-code/issues/1) in full.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **C# structural mining** — parse `.cs` files by namespace, class, interface, enum, record, method, property, event; partial class support, XML doc preservation (MINE-CSHARP)
|
|
22
|
+
- **.NET solution/project awareness** — `.sln` and `.csproj` parsing with project references, package references, target frameworks; queryable via KG (MINE-DOTNET)
|
|
23
|
+
- **F#, VB.NET, XAML mining** — `.fs`/`.fsi`, `.vb`, `.xaml` with structured symbol extraction and code-behind linking (MINE-DOTNET, MINE-XAML, MINE-XAML-NAME-ATTR)
|
|
24
|
+
- **Cross-project symbol relationships** — interface implementations, inheritance, type usage stored as KG triples (DOTNET-SYMBOL-GRAPH)
|
|
25
|
+
- **C# multi-line base-type declarations** — `class Foo :\n IBar, IBaz` now parsed correctly (DOTNET-CS-MULTILINE-BASE)
|
|
26
|
+
- **6 architecture MCP tools** — `find_implementations`, `find_references`, `show_project_graph`, `show_type_dependencies`, `explain_subsystem`, `extract_reusable` (MCP-ARCH-TOOLS, ARCH-RETRIEVAL, LOGIC-EXTRACTION)
|
|
27
|
+
- **Python type extraction to KG** — class inheritance and ABC/Protocol implementations (PY-TYPE-KG)
|
|
28
|
+
- **`mine-all` command** — batch mine all projects in a parent directory (MINE-MULTI)
|
|
29
|
+
- **`--watch` flag** — auto-incremental re-mining on file changes via watchdog (MINE-WATCH)
|
|
30
|
+
- **Auto-organize by .NET structure** — `.sln` creates wing, `.csproj` maps to room (REPO-STRUCTURE-DEFAULTS)
|
|
31
|
+
- **.NET benchmark suite** — 20-query R@5/R@10 benchmark targeting CleanArchitecture (BENCH-DOTNET)
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- `find_implementations` now includes Python ABC/Protocol subclasses (FIND-IMPL-INHERITS)
|
|
35
|
+
- `.gitignore` patterns respected in `--watch` mode (MINE-WATCH-GITIGNORE-CACHE)
|
|
36
|
+
|
|
37
|
+
### Stats
|
|
38
|
+
- 27 MCP tools (was 18)
|
|
39
|
+
- 1002 tests (was 527)
|
|
40
|
+
|
|
41
|
+
## 2026-04-19 · REPO-STRUCTURE-DEFAULTS
|
|
42
|
+
|
|
43
|
+
Auto-organize wings/rooms by .NET solution/project structure: mining a repo with `.sln` files now creates a wing named after the solution and maps each `.csproj` to a room, using KG project info for defaults and supporting configurable folder-based room detection.
|
|
44
|
+
|
|
45
|
+
## 2026-04-18 · FIND-IMPL-INHERITS
|
|
46
|
+
|
|
47
|
+
Fix `mempalace_find_implementations` to include Python ABC/Protocol subclasses: when the queried interface is itself abstract (has an outgoing `implements → ABC/ABCMeta/Protocol` edge), incoming `inherits` triples are now included alongside `implements` triples, so concrete subclasses are returned instead of an empty list.
|
|
48
|
+
|
|
49
|
+
## 2026-04-18 · MINE-WATCH
|
|
50
|
+
|
|
51
|
+
Add `--watch` flag to `mempalace mine` for auto-incremental re-indexing: uses `watchdog` to monitor file changes, debounces updates (5s), and only re-indexes modified files — keeping the palace in sync automatically with low CPU overhead when idle.
|
|
52
|
+
|
|
53
|
+
## 2026-04-18 · PY-TYPE-KG
|
|
54
|
+
|
|
55
|
+
Add Python type extraction to the knowledge graph in `miner.py`: class inheritance (`class Foo(Bar)` → `extends` triple) and ABC/Protocol implementations are now extracted for Python codebases, making architecture retrieval tools (`find_implementations`, `find_references`, `show_type_dependencies`, `extract_reusable`) functional for Python projects.
|
|
56
|
+
|
|
57
|
+
## 2026-04-18 · MINE-MULTI
|
|
58
|
+
|
|
59
|
+
Add `mempalace mine-all <parent-dir>` command for batch multi-project mining: scans immediate subdirectories for project markers (`.git`, `pyproject.toml`, `package.json`, `*.sln`, `go.mod`, `Cargo.toml`, `go.sum`), mines each detected project into its own wing, and reports per-project results with a summary table.
|
|
60
|
+
|
|
61
|
+
## 2026-04-18 · LOGIC-EXTRACTION
|
|
62
|
+
|
|
63
|
+
Add `mempalace_extract_reusable` MCP tool: classifies transitive dependencies of a symbol/subsystem as core, platform-specific, or glue, and identifies the minimal public interface needed for safe extraction.
|
|
64
|
+
|
|
65
|
+
## 2026-04-18 · ARCH-RETRIEVAL
|
|
66
|
+
|
|
67
|
+
Add `mempalace_explain_subsystem` MCP tool: combines semantic search with KG traversal to answer "how does this subsystem work?" queries, returning entry points, extracted symbols, and expanded relationships.
|
|
68
|
+
|
|
69
|
+
## 2026-04-18 · MCP-ARCH-TOOLS
|
|
70
|
+
|
|
71
|
+
Add 4 architecture-oriented MCP tools for .NET type analysis: `mempalace_find_implementations`, `mempalace_find_references`, `mempalace_show_project_graph`, and `mempalace_show_type_dependencies`.
|
|
72
|
+
|
|
3
73
|
## 2026-04-17 · SKILLS-HOOKS
|
|
4
74
|
|
|
5
75
|
Add Claude Code skills and hooks from wh40k workflow: 12 skills (`/start`, `/status`, `/verify`, `/palace-health`, `/task-plan`, `/task-hardening`, `/doc-refresh`, `/ship`, `/release`, `/entropy-gc`, `/mine`, `/bench`), 3 shared modules (mode-classification, task-state, commit-checkpoint), Codex review integration, pre-commit verification gate, and edit logging hooks.
|
|
@@ -72,7 +72,8 @@ Line length: 100. Target: py39. Quote style: double.
|
|
|
72
72
|
| `layers.py` | Tiered context loading — L0/L1/L2/L3 wake-up layers for local models |
|
|
73
73
|
| `palace_graph.py` | Graph traversal and tunnel detection across wings/rooms |
|
|
74
74
|
| `mcp_server.py` | MCP server — exposes palace tools to Claude Code and other MCP clients |
|
|
75
|
-
| `
|
|
75
|
+
| `watcher.py` | File watcher — `watch_and_mine`, `watch_all`, launchd/cron schedule rendering |
|
|
76
|
+
| `cli.py` | `mempalace` CLI entry point — init, mine, mine-all, watch, search, health, repair, backup |
|
|
76
77
|
|
|
77
78
|
## Architecture Principles
|
|
78
79
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mempalace-code
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Developer memory tool — mine codebases and conversations into a LanceDB-backed searchable palace. No API key required.
|
|
5
5
|
Project-URL: Homepage, https://github.com/rergards/mempalace-code
|
|
6
6
|
Project-URL: Repository, https://github.com/rergards/mempalace-code
|
|
@@ -42,6 +42,8 @@ Requires-Dist: tree-sitter-rust<0.26,>=0.23; extra == 'treesitter'
|
|
|
42
42
|
Requires-Dist: tree-sitter-typescript<0.26,>=0.23; extra == 'treesitter'
|
|
43
43
|
Requires-Dist: tree-sitter<0.24,>=0.22; (python_version < '3.10') and extra == 'treesitter'
|
|
44
44
|
Requires-Dist: tree-sitter<0.26,>=0.22; (python_version >= '3.10') and extra == 'treesitter'
|
|
45
|
+
Provides-Extra: watch
|
|
46
|
+
Requires-Dist: watchfiles>=1.0; extra == 'watch'
|
|
45
47
|
Description-Content-Type: text/markdown
|
|
46
48
|
|
|
47
49
|
<div align="center">
|
|
@@ -69,13 +71,13 @@ No cloud. No API keys. No subscription. Nothing leaves your machine.
|
|
|
69
71
|
<table>
|
|
70
72
|
<tr>
|
|
71
73
|
<td align="center"><strong>Tree-sitter AST Parsing</strong><br><sub>Chunks at function boundaries<br>not arbitrary line counts</sub></td>
|
|
72
|
-
<td align="center"><strong>
|
|
74
|
+
<td align="center"><strong>27 MCP Tools</strong><br><sub>Native Claude Code integration<br>search, store, traverse</sub></td>
|
|
73
75
|
<td align="center"><strong>Temporal Knowledge Graph</strong><br><sub>Facts that change over time<br>with validity windows</sub></td>
|
|
74
76
|
</tr>
|
|
75
77
|
<tr>
|
|
76
78
|
<td align="center"><strong>595x Token Savings</strong><br><sub>measured peak · median 80x<br><a href="docs/BENCH_TOKEN_DELTA.md">scales with project size</a></sub></td>
|
|
77
79
|
<td align="center"><strong>Cross-Project Tunnels</strong><br><sub>Search <code>auth</code> in one project<br>find it everywhere</sub></td>
|
|
78
|
-
<td align="center"><strong>
|
|
80
|
+
<td align="center"><strong>1008 Tests · $0 Cost</strong><br><sub>Every feature acceptance-gated<br>fully offline after install</sub></td>
|
|
79
81
|
</tr>
|
|
80
82
|
</table>
|
|
81
83
|
|
|
@@ -100,7 +102,7 @@ mempalace mine ~/projects/myapp # index your codebase
|
|
|
100
102
|
claude mcp add mempalace -- python -m mempalace.mcp_server # connect to Claude Code
|
|
101
103
|
```
|
|
102
104
|
|
|
103
|
-
This makes the
|
|
105
|
+
This makes the 27 tools available to your AI. For proactive search and storage (without you asking), you'll also need to add usage rules to your `CLAUDE.md` — see [`docs/AGENT_INSTALL.md`](docs/AGENT_INSTALL.md) Section 7.
|
|
104
106
|
|
|
105
107
|
</details>
|
|
106
108
|
|
|
@@ -137,7 +139,8 @@ You write code. You make decisions. You debug things. Between sessions, all that
|
|
|
137
139
|
mempalace-code **indexes it once** into a local vector store, then your AI finds it in milliseconds — using [595x fewer tokens](docs/BENCH_TOKEN_DELTA.md) than grep + read at measured peak (median 80x on a 19k-chunk project, and it keeps scaling). Think of it as `git log` for everything that *isn't* in the code: the *why*, the discussions, the dead ends, the decisions.
|
|
138
140
|
|
|
139
141
|
**What gets indexed:**
|
|
140
|
-
- Code files — functions, classes, modules (Python, TypeScript/JS, Go, Rust, C/C++, Markdown)
|
|
142
|
+
- Code files — functions, classes, modules (Python, TypeScript/JS, Go, Rust, C/C++, C#, F#, VB.NET, XAML, Java, Kotlin, Markdown)
|
|
143
|
+
- .NET solutions — `.sln`/`.csproj` project graphs, cross-project symbol relationships, interface implementations
|
|
141
144
|
- Conversation exports — Claude, ChatGPT, Slack
|
|
142
145
|
- Architecture notes, decisions, anything you store manually
|
|
143
146
|
|
|
@@ -172,10 +175,30 @@ Tree-sitter is optional (`pip install "mempalace-code[treesitter]"`). Without it
|
|
|
172
175
|
mempalace mine ~/projects/myapp # all supported file types
|
|
173
176
|
mempalace mine ~/projects/myapp --wing myapp # tag with a specific wing
|
|
174
177
|
mempalace mine ~/chats/ --mode convos # mine conversation exports
|
|
178
|
+
mempalace mine-all ~/projects/ # batch mine all projects in a directory
|
|
175
179
|
```
|
|
176
180
|
|
|
177
181
|
Mining is **incremental** by default — content-hash based, only changed files are re-chunked. Use `--full` to force a rebuild.
|
|
178
182
|
|
|
183
|
+
### Auto-Watch
|
|
184
|
+
|
|
185
|
+
Keep your palace in sync automatically. By default, watches `.git/refs/heads/` and re-mines only on **commit** — no noise from work-in-progress saves. Handles multiple branches and worktrees.
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
mempalace watch ~/projects/ # watch all projects (on commit, default)
|
|
189
|
+
mempalace watch ~/projects/ --on-save # watch all file saves instead (noisier)
|
|
190
|
+
mempalace watch ~/projects/ schedule # print launchd/cron snippet for daemon
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Install as persistent daemon (macOS):**
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
mempalace watch ~/projects/ schedule > ~/Library/LaunchAgents/com.mempalace.watch.plist
|
|
197
|
+
launchctl load ~/Library/LaunchAgents/com.mempalace.watch.plist
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Starts at login, restarts if crashed. Logs to `/tmp/mempalace-watch.log`.
|
|
201
|
+
|
|
179
202
|
---
|
|
180
203
|
|
|
181
204
|
### The Palace
|
|
@@ -212,7 +235,7 @@ mempalace-code organizes memories into a navigable structure — the same mental
|
|
|
212
235
|
|
|
213
236
|
---
|
|
214
237
|
|
|
215
|
-
### MCP Server —
|
|
238
|
+
### MCP Server — 27 Tools
|
|
216
239
|
|
|
217
240
|
```bash
|
|
218
241
|
claude mcp add mempalace -- python -m mempalace.mcp_server
|
|
@@ -257,6 +280,20 @@ claude mcp add mempalace -- python -m mempalace.mcp_server
|
|
|
257
280
|
|
|
258
281
|
</details>
|
|
259
282
|
|
|
283
|
+
<details>
|
|
284
|
+
<summary><strong>Architecture Retrieval</strong></summary>
|
|
285
|
+
|
|
286
|
+
| Tool | What |
|
|
287
|
+
|------|------|
|
|
288
|
+
| `mempalace_find_implementations` | Find all types implementing a given interface |
|
|
289
|
+
| `mempalace_find_references` | Find all usages of a type (implementors, subclasses, deps) |
|
|
290
|
+
| `mempalace_show_project_graph` | Project-level dependency graph, optionally filtered by solution |
|
|
291
|
+
| `mempalace_show_type_dependencies` | Inheritance/implementation chain (ancestors + descendants) |
|
|
292
|
+
| `mempalace_explain_subsystem` | Explain how a subsystem works: semantic search + KG expansion |
|
|
293
|
+
| `mempalace_extract_reusable` | Classify deps as core/platform/glue; identify extraction boundary |
|
|
294
|
+
|
|
295
|
+
</details>
|
|
296
|
+
|
|
260
297
|
<details>
|
|
261
298
|
<summary><strong>Navigation & Diary</strong></summary>
|
|
262
299
|
|
|
@@ -404,7 +441,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
|
|
|
404
441
|
| ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
|
|
405
442
|
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace init` downloads model explicitly; fully offline after |
|
|
406
443
|
| "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
|
|
407
|
-
| ~30% test coverage |
|
|
444
|
+
| ~30% test coverage | 1008 tests, every feature acceptance-gated |
|
|
408
445
|
| No backup, no recovery | `backup` / `restore` / `export` / `import` |
|
|
409
446
|
| No incremental mining | Content-hash incremental: only changed files re-chunked |
|
|
410
447
|
| No code-search | `code_search` — filter by language, symbol, glob |
|
|
@@ -476,6 +513,12 @@ mempalace mine <dir> # mine code project
|
|
|
476
513
|
mempalace mine <dir> --wing myapp # tag with wing
|
|
477
514
|
mempalace mine <dir> --mode convos # mine conversations
|
|
478
515
|
mempalace mine <dir> --full # force full rebuild
|
|
516
|
+
mempalace mine <dir> --watch # auto-incremental on file changes
|
|
517
|
+
mempalace mine-all <parent-dir> # batch mine all projects in a directory
|
|
518
|
+
|
|
519
|
+
# Watch (multi-project auto-sync)
|
|
520
|
+
mempalace watch <parent-dir> # watch all initialized projects
|
|
521
|
+
mempalace watch <parent-dir> schedule # print launchd/cron daemon snippet
|
|
479
522
|
|
|
480
523
|
# Search
|
|
481
524
|
mempalace search "query" # search everything
|
|
@@ -529,7 +572,7 @@ Two Claude Code hooks for automatic memory saving:
|
|
|
529
572
|
mempalace/
|
|
530
573
|
├── mempalace/
|
|
531
574
|
│ ├── cli.py ← CLI entry point
|
|
532
|
-
│ ├── mcp_server.py ← MCP server (
|
|
575
|
+
│ ├── mcp_server.py ← MCP server (27 tools)
|
|
533
576
|
│ ├── storage.py ← LanceDB vector storage
|
|
534
577
|
│ ├── miner.py ← language-aware code chunking
|
|
535
578
|
│ ├── convo_miner.py ← conversation ingest
|
|
@@ -540,7 +583,7 @@ mempalace/
|
|
|
540
583
|
├── benchmarks/ ← reproducible benchmark runners
|
|
541
584
|
├── hooks/ ← Claude Code auto-save hooks
|
|
542
585
|
├── examples/ ← usage examples
|
|
543
|
-
└── tests/ ←
|
|
586
|
+
└── tests/ ← 1008 tests
|
|
544
587
|
```
|
|
545
588
|
|
|
546
589
|
</details>
|
|
@@ -560,7 +603,7 @@ python -m pytest tests/ -x -q # full suite, all local, no network
|
|
|
560
603
|
Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
561
604
|
|
|
562
605
|
<!-- Link Definitions -->
|
|
563
|
-
[version-shield]: https://img.shields.io/badge/version-1.
|
|
606
|
+
[version-shield]: https://img.shields.io/badge/version-1.4.0-4dc9f6?style=flat-square&labelColor=0a0e14
|
|
564
607
|
[release-link]: https://github.com/rergards/mempalace-code/releases
|
|
565
608
|
[python-shield]: https://img.shields.io/badge/python-3.9+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
|
|
566
609
|
[python-link]: https://www.python.org/
|
|
@@ -23,13 +23,13 @@ No cloud. No API keys. No subscription. Nothing leaves your machine.
|
|
|
23
23
|
<table>
|
|
24
24
|
<tr>
|
|
25
25
|
<td align="center"><strong>Tree-sitter AST Parsing</strong><br><sub>Chunks at function boundaries<br>not arbitrary line counts</sub></td>
|
|
26
|
-
<td align="center"><strong>
|
|
26
|
+
<td align="center"><strong>27 MCP Tools</strong><br><sub>Native Claude Code integration<br>search, store, traverse</sub></td>
|
|
27
27
|
<td align="center"><strong>Temporal Knowledge Graph</strong><br><sub>Facts that change over time<br>with validity windows</sub></td>
|
|
28
28
|
</tr>
|
|
29
29
|
<tr>
|
|
30
30
|
<td align="center"><strong>595x Token Savings</strong><br><sub>measured peak · median 80x<br><a href="docs/BENCH_TOKEN_DELTA.md">scales with project size</a></sub></td>
|
|
31
31
|
<td align="center"><strong>Cross-Project Tunnels</strong><br><sub>Search <code>auth</code> in one project<br>find it everywhere</sub></td>
|
|
32
|
-
<td align="center"><strong>
|
|
32
|
+
<td align="center"><strong>1008 Tests · $0 Cost</strong><br><sub>Every feature acceptance-gated<br>fully offline after install</sub></td>
|
|
33
33
|
</tr>
|
|
34
34
|
</table>
|
|
35
35
|
|
|
@@ -54,7 +54,7 @@ mempalace mine ~/projects/myapp # index your codebase
|
|
|
54
54
|
claude mcp add mempalace -- python -m mempalace.mcp_server # connect to Claude Code
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
This makes the
|
|
57
|
+
This makes the 27 tools available to your AI. For proactive search and storage (without you asking), you'll also need to add usage rules to your `CLAUDE.md` — see [`docs/AGENT_INSTALL.md`](docs/AGENT_INSTALL.md) Section 7.
|
|
58
58
|
|
|
59
59
|
</details>
|
|
60
60
|
|
|
@@ -91,7 +91,8 @@ You write code. You make decisions. You debug things. Between sessions, all that
|
|
|
91
91
|
mempalace-code **indexes it once** into a local vector store, then your AI finds it in milliseconds — using [595x fewer tokens](docs/BENCH_TOKEN_DELTA.md) than grep + read at measured peak (median 80x on a 19k-chunk project, and it keeps scaling). Think of it as `git log` for everything that *isn't* in the code: the *why*, the discussions, the dead ends, the decisions.
|
|
92
92
|
|
|
93
93
|
**What gets indexed:**
|
|
94
|
-
- Code files — functions, classes, modules (Python, TypeScript/JS, Go, Rust, C/C++, Markdown)
|
|
94
|
+
- Code files — functions, classes, modules (Python, TypeScript/JS, Go, Rust, C/C++, C#, F#, VB.NET, XAML, Java, Kotlin, Markdown)
|
|
95
|
+
- .NET solutions — `.sln`/`.csproj` project graphs, cross-project symbol relationships, interface implementations
|
|
95
96
|
- Conversation exports — Claude, ChatGPT, Slack
|
|
96
97
|
- Architecture notes, decisions, anything you store manually
|
|
97
98
|
|
|
@@ -126,10 +127,30 @@ Tree-sitter is optional (`pip install "mempalace-code[treesitter]"`). Without it
|
|
|
126
127
|
mempalace mine ~/projects/myapp # all supported file types
|
|
127
128
|
mempalace mine ~/projects/myapp --wing myapp # tag with a specific wing
|
|
128
129
|
mempalace mine ~/chats/ --mode convos # mine conversation exports
|
|
130
|
+
mempalace mine-all ~/projects/ # batch mine all projects in a directory
|
|
129
131
|
```
|
|
130
132
|
|
|
131
133
|
Mining is **incremental** by default — content-hash based, only changed files are re-chunked. Use `--full` to force a rebuild.
|
|
132
134
|
|
|
135
|
+
### Auto-Watch
|
|
136
|
+
|
|
137
|
+
Keep your palace in sync automatically. By default, watches `.git/refs/heads/` and re-mines only on **commit** — no noise from work-in-progress saves. Handles multiple branches and worktrees.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
mempalace watch ~/projects/ # watch all projects (on commit, default)
|
|
141
|
+
mempalace watch ~/projects/ --on-save # watch all file saves instead (noisier)
|
|
142
|
+
mempalace watch ~/projects/ schedule # print launchd/cron snippet for daemon
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Install as persistent daemon (macOS):**
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
mempalace watch ~/projects/ schedule > ~/Library/LaunchAgents/com.mempalace.watch.plist
|
|
149
|
+
launchctl load ~/Library/LaunchAgents/com.mempalace.watch.plist
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Starts at login, restarts if crashed. Logs to `/tmp/mempalace-watch.log`.
|
|
153
|
+
|
|
133
154
|
---
|
|
134
155
|
|
|
135
156
|
### The Palace
|
|
@@ -166,7 +187,7 @@ mempalace-code organizes memories into a navigable structure — the same mental
|
|
|
166
187
|
|
|
167
188
|
---
|
|
168
189
|
|
|
169
|
-
### MCP Server —
|
|
190
|
+
### MCP Server — 27 Tools
|
|
170
191
|
|
|
171
192
|
```bash
|
|
172
193
|
claude mcp add mempalace -- python -m mempalace.mcp_server
|
|
@@ -211,6 +232,20 @@ claude mcp add mempalace -- python -m mempalace.mcp_server
|
|
|
211
232
|
|
|
212
233
|
</details>
|
|
213
234
|
|
|
235
|
+
<details>
|
|
236
|
+
<summary><strong>Architecture Retrieval</strong></summary>
|
|
237
|
+
|
|
238
|
+
| Tool | What |
|
|
239
|
+
|------|------|
|
|
240
|
+
| `mempalace_find_implementations` | Find all types implementing a given interface |
|
|
241
|
+
| `mempalace_find_references` | Find all usages of a type (implementors, subclasses, deps) |
|
|
242
|
+
| `mempalace_show_project_graph` | Project-level dependency graph, optionally filtered by solution |
|
|
243
|
+
| `mempalace_show_type_dependencies` | Inheritance/implementation chain (ancestors + descendants) |
|
|
244
|
+
| `mempalace_explain_subsystem` | Explain how a subsystem works: semantic search + KG expansion |
|
|
245
|
+
| `mempalace_extract_reusable` | Classify deps as core/platform/glue; identify extraction boundary |
|
|
246
|
+
|
|
247
|
+
</details>
|
|
248
|
+
|
|
214
249
|
<details>
|
|
215
250
|
<summary><strong>Navigation & Diary</strong></summary>
|
|
216
251
|
|
|
@@ -358,7 +393,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
|
|
|
358
393
|
| ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
|
|
359
394
|
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace init` downloads model explicitly; fully offline after |
|
|
360
395
|
| "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
|
|
361
|
-
| ~30% test coverage |
|
|
396
|
+
| ~30% test coverage | 1008 tests, every feature acceptance-gated |
|
|
362
397
|
| No backup, no recovery | `backup` / `restore` / `export` / `import` |
|
|
363
398
|
| No incremental mining | Content-hash incremental: only changed files re-chunked |
|
|
364
399
|
| No code-search | `code_search` — filter by language, symbol, glob |
|
|
@@ -430,6 +465,12 @@ mempalace mine <dir> # mine code project
|
|
|
430
465
|
mempalace mine <dir> --wing myapp # tag with wing
|
|
431
466
|
mempalace mine <dir> --mode convos # mine conversations
|
|
432
467
|
mempalace mine <dir> --full # force full rebuild
|
|
468
|
+
mempalace mine <dir> --watch # auto-incremental on file changes
|
|
469
|
+
mempalace mine-all <parent-dir> # batch mine all projects in a directory
|
|
470
|
+
|
|
471
|
+
# Watch (multi-project auto-sync)
|
|
472
|
+
mempalace watch <parent-dir> # watch all initialized projects
|
|
473
|
+
mempalace watch <parent-dir> schedule # print launchd/cron daemon snippet
|
|
433
474
|
|
|
434
475
|
# Search
|
|
435
476
|
mempalace search "query" # search everything
|
|
@@ -483,7 +524,7 @@ Two Claude Code hooks for automatic memory saving:
|
|
|
483
524
|
mempalace/
|
|
484
525
|
├── mempalace/
|
|
485
526
|
│ ├── cli.py ← CLI entry point
|
|
486
|
-
│ ├── mcp_server.py ← MCP server (
|
|
527
|
+
│ ├── mcp_server.py ← MCP server (27 tools)
|
|
487
528
|
│ ├── storage.py ← LanceDB vector storage
|
|
488
529
|
│ ├── miner.py ← language-aware code chunking
|
|
489
530
|
│ ├── convo_miner.py ← conversation ingest
|
|
@@ -494,7 +535,7 @@ mempalace/
|
|
|
494
535
|
├── benchmarks/ ← reproducible benchmark runners
|
|
495
536
|
├── hooks/ ← Claude Code auto-save hooks
|
|
496
537
|
├── examples/ ← usage examples
|
|
497
|
-
└── tests/ ←
|
|
538
|
+
└── tests/ ← 1008 tests
|
|
498
539
|
```
|
|
499
540
|
|
|
500
541
|
</details>
|
|
@@ -514,7 +555,7 @@ python -m pytest tests/ -x -q # full suite, all local, no network
|
|
|
514
555
|
Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
515
556
|
|
|
516
557
|
<!-- Link Definitions -->
|
|
517
|
-
[version-shield]: https://img.shields.io/badge/version-1.
|
|
558
|
+
[version-shield]: https://img.shields.io/badge/version-1.4.0-4dc9f6?style=flat-square&labelColor=0a0e14
|
|
518
559
|
[release-link]: https://github.com/rergards/mempalace-code/releases
|
|
519
560
|
[python-shield]: https://img.shields.io/badge/python-3.9+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
|
|
520
561
|
[python-link]: https://www.python.org/
|