mempalace-code 1.2.0__tar.gz → 1.3.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.
Files changed (134) hide show
  1. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/CHANGELOG.md +57 -0
  2. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/PKG-INFO +29 -10
  3. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/README.md +26 -9
  4. mempalace_code-1.3.0/benchmarks/results_token_delta_wh40k.json +610 -0
  5. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/AGENT_INSTALL.md +1 -1
  6. mempalace_code-1.3.0/docs/BACKLOG-archived.yaml +150 -0
  7. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/BACKLOG.yaml +160 -75
  8. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/COMPARISON_GRAPHIFY.md +5 -5
  9. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/README.md +1 -1
  10. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/cli.py +217 -0
  11. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/knowledge_graph.py +75 -0
  12. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/mcp_server.py +607 -4
  13. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/miner.py +366 -16
  14. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/room_detector_local.py +62 -13
  15. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/searcher.py +16 -0
  16. mempalace_code-1.3.0/mempalace/watcher.py +240 -0
  17. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/pyproject.toml +2 -1
  18. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_cli.py +234 -0
  19. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_kg_extract.py +365 -0
  20. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_mcp_server.py +631 -0
  21. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_miner.py +401 -1
  22. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_searcher.py +91 -0
  23. mempalace_code-1.3.0/tests/test_watcher.py +490 -0
  24. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/prompts/codex-hardening-review.md +0 -0
  25. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/prompts/codex-plan-review.md +0 -0
  26. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/settings.json +0 -0
  27. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
  28. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/_shared/mode-classification.md +0 -0
  29. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/_shared/task-state.md +0 -0
  30. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/bench/SKILL.md +0 -0
  31. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
  32. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
  33. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
  34. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
  35. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/mine/SKILL.md +0 -0
  36. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/palace-health/SKILL.md +0 -0
  37. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/release/SKILL.md +0 -0
  38. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
  39. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/ship/SKILL.md +0 -0
  40. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
  41. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/start/SKILL.md +0 -0
  42. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/status/SKILL.md +0 -0
  43. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
  44. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/task-hardening/SKILL.md +0 -0
  45. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
  46. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/task-plan/SKILL.md +0 -0
  47. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
  48. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.claude/skills/verify/SKILL.md +0 -0
  49. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  50. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  51. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  52. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.github/workflows/ci.yml +0 -0
  53. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.github/workflows/publish.yml +0 -0
  54. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.gitignore +0 -0
  55. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/.pre-commit-config.yaml +0 -0
  56. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/CLAUDE.md +0 -0
  57. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/CONTRIBUTING.md +0 -0
  58. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/LICENSE +0 -0
  59. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/NOTICE +0 -0
  60. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/assets/mempalace_banner.jpg +0 -0
  61. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/BENCHMARKS.md +0 -0
  62. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/HYBRID_MODE.md +0 -0
  63. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/README.md +0 -0
  64. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/convomem_bench.py +0 -0
  65. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/dotnet_bench.py +0 -0
  66. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/embed_ab_bench.py +0 -0
  67. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/locomo_bench.py +0 -0
  68. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/longmemeval_bench.py +0 -0
  69. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/membench_bench.py +0 -0
  70. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
  71. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/results_token_delta_mempalace.json +0 -0
  72. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/benchmarks/token_delta_bench.py +0 -0
  73. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/BACKUP_RESTORE.md +0 -0
  74. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/BENCH_TOKEN_DELTA.md +0 -0
  75. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/HOW_SEARCH_WORKS.md +0 -0
  76. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/OFFLINE_USAGE.md +0 -0
  77. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/UPSTREAM_HARDENING.md +0 -0
  78. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/docs/WHY_THIS_FORK.md +0 -0
  79. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/examples/HOOKS_TUTORIAL.md +0 -0
  80. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/examples/basic_mining.py +0 -0
  81. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/examples/convo_import.py +0 -0
  82. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/examples/gemini_cli_setup.md +0 -0
  83. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/examples/mcp_setup.md +0 -0
  84. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/hooks/README.md +0 -0
  85. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/hooks/mempal_precompact_hook.sh +0 -0
  86. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/hooks/mempal_save_hook.sh +0 -0
  87. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/__init__.py +0 -0
  88. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/__main__.py +0 -0
  89. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/_chroma_store.py +0 -0
  90. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/backup.py +0 -0
  91. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/config.py +0 -0
  92. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/convo_miner.py +0 -0
  93. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/dialect.py +0 -0
  94. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/entity_detector.py +0 -0
  95. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/entity_registry.py +0 -0
  96. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/export.py +0 -0
  97. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/general_extractor.py +0 -0
  98. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/layers.py +0 -0
  99. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/migrate.py +0 -0
  100. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/normalize.py +0 -0
  101. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/onboarding.py +0 -0
  102. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/palace_graph.py +0 -0
  103. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/py.typed +0 -0
  104. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/spellcheck.py +0 -0
  105. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/split_mega_files.py +0 -0
  106. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/storage.py +0 -0
  107. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/treesitter.py +0 -0
  108. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/mempalace/version.py +0 -0
  109. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/scripts/bootstrap.sh +0 -0
  110. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/scripts/codex-review.sh +0 -0
  111. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/scripts/nuke_wing.py +0 -0
  112. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/conftest.py +0 -0
  113. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_backup.py +0 -0
  114. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_chroma_compat.py +0 -0
  115. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_chunking.py +0 -0
  116. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_config.py +0 -0
  117. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_convo_miner.py +0 -0
  118. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_dialect.py +0 -0
  119. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_dotnet_config.py +0 -0
  120. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_e2e.py +0 -0
  121. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_embed_ab_bench.py +0 -0
  122. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_export.py +0 -0
  123. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_knowledge_graph.py +0 -0
  124. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_lang_detect.py +0 -0
  125. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_migrate.py +0 -0
  126. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_normalize.py +0 -0
  127. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_offline.py +0 -0
  128. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_split_mega_files.py +0 -0
  129. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_storage.py +0 -0
  130. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_storage_lance.py +0 -0
  131. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_symbol_extract.py +0 -0
  132. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_treesitter.py +0 -0
  133. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/tests/test_version_consistency.py +0 -0
  134. {mempalace_code-1.2.0 → mempalace_code-1.3.0}/uv.lock +0 -0
@@ -1,5 +1,62 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.3.0 — 2026-04-19
4
+
5
+ First-class C#/.NET support — delivers [rergards/mempalace-code#1](https://github.com/rergards/mempalace-code/issues/1) in full.
6
+
7
+ ### Added
8
+ - **C# structural mining** — parse `.cs` files by namespace, class, interface, enum, record, method, property, event; partial class support, XML doc preservation (MINE-CSHARP)
9
+ - **.NET solution/project awareness** — `.sln` and `.csproj` parsing with project references, package references, target frameworks; queryable via KG (MINE-DOTNET)
10
+ - **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)
11
+ - **Cross-project symbol relationships** — interface implementations, inheritance, type usage stored as KG triples (DOTNET-SYMBOL-GRAPH)
12
+ - **C# multi-line base-type declarations** — `class Foo :\n IBar, IBaz` now parsed correctly (DOTNET-CS-MULTILINE-BASE)
13
+ - **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)
14
+ - **Python type extraction to KG** — class inheritance and ABC/Protocol implementations (PY-TYPE-KG)
15
+ - **`mine-all` command** — batch mine all projects in a parent directory (MINE-MULTI)
16
+ - **`--watch` flag** — auto-incremental re-mining on file changes via watchdog (MINE-WATCH)
17
+ - **Auto-organize by .NET structure** — `.sln` creates wing, `.csproj` maps to room (REPO-STRUCTURE-DEFAULTS)
18
+ - **.NET benchmark suite** — 20-query R@5/R@10 benchmark targeting CleanArchitecture (BENCH-DOTNET)
19
+
20
+ ### Fixed
21
+ - `find_implementations` now includes Python ABC/Protocol subclasses (FIND-IMPL-INHERITS)
22
+ - `.gitignore` patterns respected in `--watch` mode (MINE-WATCH-GITIGNORE-CACHE)
23
+
24
+ ### Stats
25
+ - 27 MCP tools (was 18)
26
+ - 1002 tests (was 527)
27
+
28
+ ## 2026-04-19 · REPO-STRUCTURE-DEFAULTS
29
+
30
+ 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.
31
+
32
+ ## 2026-04-18 · FIND-IMPL-INHERITS
33
+
34
+ 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.
35
+
36
+ ## 2026-04-18 · MINE-WATCH
37
+
38
+ 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.
39
+
40
+ ## 2026-04-18 · PY-TYPE-KG
41
+
42
+ 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.
43
+
44
+ ## 2026-04-18 · MINE-MULTI
45
+
46
+ 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.
47
+
48
+ ## 2026-04-18 · LOGIC-EXTRACTION
49
+
50
+ 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.
51
+
52
+ ## 2026-04-18 · ARCH-RETRIEVAL
53
+
54
+ 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.
55
+
56
+ ## 2026-04-18 · MCP-ARCH-TOOLS
57
+
58
+ 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`.
59
+
3
60
  ## 2026-04-17 · SKILLS-HOOKS
4
61
 
5
62
  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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mempalace-code
3
- Version: 1.2.0
3
+ Version: 1.3.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>18 MCP Tools</strong><br><sub>Native Claude Code integration<br>search, store, traverse</sub></td>
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>848 Tests · $0 Cost</strong><br><sub>Every feature acceptance-gated<br>fully offline after install</sub></td>
80
+ <td align="center"><strong>1002 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 18 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.
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
 
@@ -212,7 +215,7 @@ mempalace-code organizes memories into a navigable structure — the same mental
212
215
 
213
216
  ---
214
217
 
215
- ### MCP Server — 18 Tools
218
+ ### MCP Server — 27 Tools
216
219
 
217
220
  ```bash
218
221
  claude mcp add mempalace -- python -m mempalace.mcp_server
@@ -257,6 +260,20 @@ claude mcp add mempalace -- python -m mempalace.mcp_server
257
260
 
258
261
  </details>
259
262
 
263
+ <details>
264
+ <summary><strong>Architecture Retrieval</strong></summary>
265
+
266
+ | Tool | What |
267
+ |------|------|
268
+ | `mempalace_find_implementations` | Find all types implementing a given interface |
269
+ | `mempalace_find_references` | Find all usages of a type (implementors, subclasses, deps) |
270
+ | `mempalace_show_project_graph` | Project-level dependency graph, optionally filtered by solution |
271
+ | `mempalace_show_type_dependencies` | Inheritance/implementation chain (ancestors + descendants) |
272
+ | `mempalace_explain_subsystem` | Explain how a subsystem works: semantic search + KG expansion |
273
+ | `mempalace_extract_reusable` | Classify deps as core/platform/glue; identify extraction boundary |
274
+
275
+ </details>
276
+
260
277
  <details>
261
278
  <summary><strong>Navigation & Diary</strong></summary>
262
279
 
@@ -404,7 +421,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
404
421
  | ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
405
422
  | "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace init` downloads model explicitly; fully offline after |
406
423
  | "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
407
- | ~30% test coverage | 527 tests, every feature acceptance-gated |
424
+ | ~30% test coverage | 1002 tests, every feature acceptance-gated |
408
425
  | No backup, no recovery | `backup` / `restore` / `export` / `import` |
409
426
  | No incremental mining | Content-hash incremental: only changed files re-chunked |
410
427
  | No code-search | `code_search` — filter by language, symbol, glob |
@@ -476,6 +493,8 @@ mempalace mine <dir> # mine code project
476
493
  mempalace mine <dir> --wing myapp # tag with wing
477
494
  mempalace mine <dir> --mode convos # mine conversations
478
495
  mempalace mine <dir> --full # force full rebuild
496
+ mempalace mine <dir> --watch # auto-incremental on file changes
497
+ mempalace mine-all <parent-dir> # batch mine all projects in a directory
479
498
 
480
499
  # Search
481
500
  mempalace search "query" # search everything
@@ -529,7 +548,7 @@ Two Claude Code hooks for automatic memory saving:
529
548
  mempalace/
530
549
  ├── mempalace/
531
550
  │ ├── cli.py ← CLI entry point
532
- │ ├── mcp_server.py ← MCP server (18 tools)
551
+ │ ├── mcp_server.py ← MCP server (27 tools)
533
552
  │ ├── storage.py ← LanceDB vector storage
534
553
  │ ├── miner.py ← language-aware code chunking
535
554
  │ ├── convo_miner.py ← conversation ingest
@@ -540,7 +559,7 @@ mempalace/
540
559
  ├── benchmarks/ ← reproducible benchmark runners
541
560
  ├── hooks/ ← Claude Code auto-save hooks
542
561
  ├── examples/ ← usage examples
543
- └── tests/ ← 527 tests
562
+ └── tests/ ← 1002 tests
544
563
  ```
545
564
 
546
565
  </details>
@@ -560,7 +579,7 @@ python -m pytest tests/ -x -q # full suite, all local, no network
560
579
  Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
561
580
 
562
581
  <!-- Link Definitions -->
563
- [version-shield]: https://img.shields.io/badge/version-1.1.1-4dc9f6?style=flat-square&labelColor=0a0e14
582
+ [version-shield]: https://img.shields.io/badge/version-1.3.0-4dc9f6?style=flat-square&labelColor=0a0e14
564
583
  [release-link]: https://github.com/rergards/mempalace-code/releases
565
584
  [python-shield]: https://img.shields.io/badge/python-3.9+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
566
585
  [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>18 MCP Tools</strong><br><sub>Native Claude Code integration<br>search, store, traverse</sub></td>
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>848 Tests · $0 Cost</strong><br><sub>Every feature acceptance-gated<br>fully offline after install</sub></td>
32
+ <td align="center"><strong>1002 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 18 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.
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
 
@@ -166,7 +167,7 @@ mempalace-code organizes memories into a navigable structure — the same mental
166
167
 
167
168
  ---
168
169
 
169
- ### MCP Server — 18 Tools
170
+ ### MCP Server — 27 Tools
170
171
 
171
172
  ```bash
172
173
  claude mcp add mempalace -- python -m mempalace.mcp_server
@@ -211,6 +212,20 @@ claude mcp add mempalace -- python -m mempalace.mcp_server
211
212
 
212
213
  </details>
213
214
 
215
+ <details>
216
+ <summary><strong>Architecture Retrieval</strong></summary>
217
+
218
+ | Tool | What |
219
+ |------|------|
220
+ | `mempalace_find_implementations` | Find all types implementing a given interface |
221
+ | `mempalace_find_references` | Find all usages of a type (implementors, subclasses, deps) |
222
+ | `mempalace_show_project_graph` | Project-level dependency graph, optionally filtered by solution |
223
+ | `mempalace_show_type_dependencies` | Inheritance/implementation chain (ancestors + descendants) |
224
+ | `mempalace_explain_subsystem` | Explain how a subsystem works: semantic search + KG expansion |
225
+ | `mempalace_extract_reusable` | Classify deps as core/platform/glue; identify extraction boundary |
226
+
227
+ </details>
228
+
214
229
  <details>
215
230
  <summary><strong>Navigation & Diary</strong></summary>
216
231
 
@@ -358,7 +373,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
358
373
  | ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
359
374
  | "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace init` downloads model explicitly; fully offline after |
360
375
  | "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
361
- | ~30% test coverage | 527 tests, every feature acceptance-gated |
376
+ | ~30% test coverage | 1002 tests, every feature acceptance-gated |
362
377
  | No backup, no recovery | `backup` / `restore` / `export` / `import` |
363
378
  | No incremental mining | Content-hash incremental: only changed files re-chunked |
364
379
  | No code-search | `code_search` — filter by language, symbol, glob |
@@ -430,6 +445,8 @@ mempalace mine <dir> # mine code project
430
445
  mempalace mine <dir> --wing myapp # tag with wing
431
446
  mempalace mine <dir> --mode convos # mine conversations
432
447
  mempalace mine <dir> --full # force full rebuild
448
+ mempalace mine <dir> --watch # auto-incremental on file changes
449
+ mempalace mine-all <parent-dir> # batch mine all projects in a directory
433
450
 
434
451
  # Search
435
452
  mempalace search "query" # search everything
@@ -483,7 +500,7 @@ Two Claude Code hooks for automatic memory saving:
483
500
  mempalace/
484
501
  ├── mempalace/
485
502
  │ ├── cli.py ← CLI entry point
486
- │ ├── mcp_server.py ← MCP server (18 tools)
503
+ │ ├── mcp_server.py ← MCP server (27 tools)
487
504
  │ ├── storage.py ← LanceDB vector storage
488
505
  │ ├── miner.py ← language-aware code chunking
489
506
  │ ├── convo_miner.py ← conversation ingest
@@ -494,7 +511,7 @@ mempalace/
494
511
  ├── benchmarks/ ← reproducible benchmark runners
495
512
  ├── hooks/ ← Claude Code auto-save hooks
496
513
  ├── examples/ ← usage examples
497
- └── tests/ ← 527 tests
514
+ └── tests/ ← 1002 tests
498
515
  ```
499
516
 
500
517
  </details>
@@ -514,7 +531,7 @@ python -m pytest tests/ -x -q # full suite, all local, no network
514
531
  Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
515
532
 
516
533
  <!-- Link Definitions -->
517
- [version-shield]: https://img.shields.io/badge/version-1.1.1-4dc9f6?style=flat-square&labelColor=0a0e14
534
+ [version-shield]: https://img.shields.io/badge/version-1.3.0-4dc9f6?style=flat-square&labelColor=0a0e14
518
535
  [release-link]: https://github.com/rergards/mempalace-code/releases
519
536
  [python-shield]: https://img.shields.io/badge/python-3.9+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
520
537
  [python-link]: https://www.python.org/