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.
Files changed (134) hide show
  1. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CHANGELOG.md +70 -0
  2. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CLAUDE.md +2 -1
  3. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/PKG-INFO +53 -10
  4. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/README.md +50 -9
  5. mempalace_code-1.4.0/benchmarks/results_token_delta_wh40k.json +610 -0
  6. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/AGENT_INSTALL.md +1 -1
  7. mempalace_code-1.4.0/docs/BACKLOG-archived.yaml +162 -0
  8. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BACKLOG.yaml +151 -107
  9. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/COMPARISON_GRAPHIFY.md +5 -5
  10. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/README.md +1 -1
  11. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/cli.py +327 -0
  12. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/knowledge_graph.py +75 -0
  13. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/mcp_server.py +607 -4
  14. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/miner.py +407 -21
  15. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/room_detector_local.py +62 -13
  16. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/searcher.py +16 -0
  17. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/storage.py +23 -2
  18. mempalace_code-1.4.0/mempalace/watcher.py +619 -0
  19. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/pyproject.toml +2 -1
  20. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_cli.py +234 -0
  21. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_kg_extract.py +365 -0
  22. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_mcp_server.py +631 -0
  23. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_miner.py +446 -3
  24. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_searcher.py +91 -0
  25. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_symbol_extract.py +35 -0
  26. mempalace_code-1.4.0/tests/test_watcher.py +490 -0
  27. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/prompts/codex-hardening-review.md +0 -0
  28. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/prompts/codex-plan-review.md +0 -0
  29. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/settings.json +0 -0
  30. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
  31. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/mode-classification.md +0 -0
  32. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/_shared/task-state.md +0 -0
  33. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/bench/SKILL.md +0 -0
  34. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
  35. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
  36. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
  37. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
  38. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/mine/SKILL.md +0 -0
  39. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/palace-health/SKILL.md +0 -0
  40. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/release/SKILL.md +0 -0
  41. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
  42. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/ship/SKILL.md +0 -0
  43. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
  44. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/start/SKILL.md +0 -0
  45. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/status/SKILL.md +0 -0
  46. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
  47. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-hardening/SKILL.md +0 -0
  48. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
  49. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/task-plan/SKILL.md +0 -0
  50. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
  51. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.claude/skills/verify/SKILL.md +0 -0
  52. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  53. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  54. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  55. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/workflows/ci.yml +0 -0
  56. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.github/workflows/publish.yml +0 -0
  57. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.gitignore +0 -0
  58. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/.pre-commit-config.yaml +0 -0
  59. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/CONTRIBUTING.md +0 -0
  60. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/LICENSE +0 -0
  61. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/NOTICE +0 -0
  62. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/assets/mempalace_banner.jpg +0 -0
  63. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/BENCHMARKS.md +0 -0
  64. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/HYBRID_MODE.md +0 -0
  65. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/README.md +0 -0
  66. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/convomem_bench.py +0 -0
  67. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/dotnet_bench.py +0 -0
  68. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/embed_ab_bench.py +0 -0
  69. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/locomo_bench.py +0 -0
  70. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/longmemeval_bench.py +0 -0
  71. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/membench_bench.py +0 -0
  72. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
  73. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/results_token_delta_mempalace.json +0 -0
  74. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/benchmarks/token_delta_bench.py +0 -0
  75. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BACKUP_RESTORE.md +0 -0
  76. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/BENCH_TOKEN_DELTA.md +0 -0
  77. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/HOW_SEARCH_WORKS.md +0 -0
  78. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/OFFLINE_USAGE.md +0 -0
  79. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/UPSTREAM_HARDENING.md +0 -0
  80. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/docs/WHY_THIS_FORK.md +0 -0
  81. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/HOOKS_TUTORIAL.md +0 -0
  82. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/basic_mining.py +0 -0
  83. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/convo_import.py +0 -0
  84. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/gemini_cli_setup.md +0 -0
  85. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/examples/mcp_setup.md +0 -0
  86. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/README.md +0 -0
  87. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/mempal_precompact_hook.sh +0 -0
  88. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/hooks/mempal_save_hook.sh +0 -0
  89. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/__init__.py +0 -0
  90. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/__main__.py +0 -0
  91. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/_chroma_store.py +0 -0
  92. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/backup.py +0 -0
  93. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/config.py +0 -0
  94. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/convo_miner.py +0 -0
  95. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/dialect.py +0 -0
  96. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/entity_detector.py +0 -0
  97. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/entity_registry.py +0 -0
  98. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/export.py +0 -0
  99. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/general_extractor.py +0 -0
  100. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/layers.py +0 -0
  101. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/migrate.py +0 -0
  102. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/normalize.py +0 -0
  103. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/onboarding.py +0 -0
  104. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/palace_graph.py +0 -0
  105. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/py.typed +0 -0
  106. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/spellcheck.py +0 -0
  107. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/split_mega_files.py +0 -0
  108. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/treesitter.py +0 -0
  109. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/mempalace/version.py +0 -0
  110. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/bootstrap.sh +0 -0
  111. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/codex-review.sh +0 -0
  112. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/scripts/nuke_wing.py +0 -0
  113. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/conftest.py +0 -0
  114. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_backup.py +0 -0
  115. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_chroma_compat.py +0 -0
  116. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_chunking.py +0 -0
  117. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_config.py +0 -0
  118. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_convo_miner.py +0 -0
  119. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_dialect.py +0 -0
  120. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_dotnet_config.py +0 -0
  121. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_e2e.py +0 -0
  122. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_embed_ab_bench.py +0 -0
  123. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_export.py +0 -0
  124. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_knowledge_graph.py +0 -0
  125. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_lang_detect.py +0 -0
  126. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_migrate.py +0 -0
  127. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_normalize.py +0 -0
  128. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_offline.py +0 -0
  129. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_split_mega_files.py +0 -0
  130. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_storage.py +0 -0
  131. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_storage_lance.py +0 -0
  132. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_treesitter.py +0 -0
  133. {mempalace_code-1.2.0 → mempalace_code-1.4.0}/tests/test_version_consistency.py +0 -0
  134. {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
- | `cli.py` | `mempalace` CLI entry point init, mine, search, health, repair, backup |
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.2.0
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>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>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 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
 
@@ -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 — 18 Tools
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 | 527 tests, every feature acceptance-gated |
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 (18 tools)
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/ ← 527 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.1.1-4dc9f6?style=flat-square&labelColor=0a0e14
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>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>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 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
 
@@ -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 — 18 Tools
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 | 527 tests, every feature acceptance-gated |
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 (18 tools)
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/ ← 527 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.1.1-4dc9f6?style=flat-square&labelColor=0a0e14
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/