mempalace-code 1.6.2__tar.gz → 1.7.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.7.0/.github/workflows/ci.yml +92 -0
- mempalace_code-1.7.0/.github/workflows/dotnet-bench.yml +73 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/CHANGELOG.md +99 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/CLAUDE.md +6 -6
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/PKG-INFO +192 -87
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/README.md +190 -85
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/BENCHMARKS.md +22 -14
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/README.md +49 -15
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/code_retrieval_bench.py +3 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/convomem_bench.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/data/code_retrieval_queries.json +29 -29
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/dotnet_bench.py +21 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/embed_ab_bench.py +3 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/locomo_bench.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/longmemeval_bench.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/token_delta_bench.py +4 -4
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/AGENT_INSTALL.md +102 -71
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/BACKLOG-archived.yaml +125 -0
- mempalace_code-1.7.0/docs/BACKLOG.yaml +231 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/BACKUP_RESTORE.md +29 -29
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/BENCH_TOKEN_DELTA.md +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/COMPARISON_GRAPHIFY.md +12 -12
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/HOW_SEARCH_WORKS.md +24 -5
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/OFFLINE_USAGE.md +13 -13
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/UPSTREAM_HARDENING.md +30 -24
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/WHY_THIS_FORK.md +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/examples/basic_mining.py +3 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/examples/convo_import.py +3 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/examples/gemini_cli_setup.md +6 -6
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/examples/mcp_setup.md +2 -2
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/hooks/README.md +5 -5
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/hooks/mempal_precompact_hook.sh +8 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/hooks/mempal_save_hook.sh +8 -3
- mempalace_code-1.7.0/mempalace/__init__.py +12 -0
- mempalace_code-1.7.0/mempalace/mcp_server.py +10 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/README.md +2 -2
- mempalace_code-1.7.0/mempalace_code/__main__.py +5 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/_chroma_store.py +3 -3
- mempalace_code-1.7.0/mempalace_code/architecture.py +396 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/backup.py +8 -5
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/cli.py +206 -71
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/config.py +46 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/convo_miner.py +3 -3
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/entity_detector.py +2 -2
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/entity_registry.py +2 -2
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/export.py +2 -2
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/knowledge_graph.py +126 -7
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/layers.py +1 -1
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/mcp_server.py +82 -38
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/migrate.py +1 -1
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/miner.py +229 -12
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/normalize.py +1 -1
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/onboarding.py +11 -7
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/room_detector_local.py +10 -7
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/searcher.py +3 -3
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/spellcheck.py +2 -2
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/storage.py +67 -21
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/watcher.py +137 -24
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/pyproject.toml +7 -7
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/scripts/bootstrap.sh +32 -21
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/scripts/nuke_wing.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/conftest.py +4 -4
- mempalace_code-1.7.0/tests/test_architecture_extraction.py +1057 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_backup.py +26 -19
- mempalace_code-1.7.0/tests/test_backup_cli.py +139 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_chroma_compat.py +104 -8
- mempalace_code-1.7.0/tests/test_chroma_import_errors.py +44 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_chunking.py +85 -9
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_cli.py +668 -64
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_config.py +74 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_convo_miner.py +10 -10
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_dialect.py +1 -1
- mempalace_code-1.7.0/tests/test_dotnet_bench.py +141 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_e2e.py +278 -18
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_entity_detector.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_export.py +87 -3
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_general_extractor.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_kg_extract.py +68 -23
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_lang_detect.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_language_catalog.py +2 -2
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_mcp_server.py +404 -136
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_migrate.py +4 -4
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_miner.py +545 -14
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_normalize.py +3 -3
- mempalace_code-1.7.0/tests/test_offline.py +87 -0
- mempalace_code-1.7.0/tests/test_packaging_namespace.py +31 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_searcher.py +8 -8
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_split_mega_files.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_storage.py +141 -12
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_storage_lance.py +144 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_symbol_extract.py +1 -1
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_treesitter.py +2 -2
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_version_consistency.py +2 -2
- mempalace_code-1.7.0/tests/test_watcher.py +946 -0
- mempalace_code-1.6.2/.github/workflows/ci.yml +0 -29
- mempalace_code-1.6.2/docs/BACKLOG.yaml +0 -745
- mempalace_code-1.6.2/mempalace/__main__.py +0 -5
- mempalace_code-1.6.2/tests/test_offline.py +0 -44
- mempalace_code-1.6.2/tests/test_watcher.py +0 -499
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/prompts/codex-hardening-review.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/prompts/codex-plan-review.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/settings.json +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/_shared/mode-classification.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/_shared/task-state.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/bench/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/mine/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/palace-health/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/release/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/release-prep/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/ship/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/start/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/status/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/task-hardening/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/task-plan/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.claude/skills/verify/SKILL.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.github/workflows/publish.yml +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.gitignore +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.pre-commit-config.yaml +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/.verify-state +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/AGENTS.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/CONTRIBUTING.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/LICENSE +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/NOTICE +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/assets/mempalace_banner.jpg +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/HYBRID_MODE.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/membench_bench.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/results_token_delta_mempalace.json +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/benchmarks/results_token_delta_wh40k.json +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/docs/LLM_USAGE_RULES.md +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/examples/HOOKS_TUTORIAL.md +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/__init__.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/dialect.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/general_extractor.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/language_catalog.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/palace_graph.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/py.typed +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/split_mega_files.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/treesitter.py +0 -0
- {mempalace_code-1.6.2/mempalace → mempalace_code-1.7.0/mempalace_code}/version.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/scripts/codex-review.sh +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_code_retrieval_bench.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_dotnet_config.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_embed_ab_bench.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/tests/test_knowledge_graph.py +0 -0
- {mempalace_code-1.6.2 → mempalace_code-1.7.0}/uv.lock +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
model_tests:
|
|
11
|
+
description: "Run needs_network model-backed tests with HuggingFace cache"
|
|
12
|
+
required: false
|
|
13
|
+
default: "false"
|
|
14
|
+
type: choice
|
|
15
|
+
options:
|
|
16
|
+
- "false"
|
|
17
|
+
- "true"
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v5
|
|
24
|
+
- uses: actions/setup-python@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.13"
|
|
27
|
+
cache: pip
|
|
28
|
+
cache-dependency-path: |
|
|
29
|
+
pyproject.toml
|
|
30
|
+
uv.lock
|
|
31
|
+
- run: pip install -e ".[dev,treesitter]"
|
|
32
|
+
- run: python3 -m pytest tests/ -v -m "not needs_network"
|
|
33
|
+
|
|
34
|
+
chroma-compat:
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v5
|
|
38
|
+
- uses: actions/setup-python@v6
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.13"
|
|
41
|
+
cache: pip
|
|
42
|
+
cache-dependency-path: |
|
|
43
|
+
pyproject.toml
|
|
44
|
+
uv.lock
|
|
45
|
+
- run: pip install -e ".[dev,chroma]"
|
|
46
|
+
- name: ChromaStore compatibility tests
|
|
47
|
+
run: python -m pytest tests/test_chroma_compat.py -v
|
|
48
|
+
- run: python -m pytest tests/ -v -m "not needs_network"
|
|
49
|
+
|
|
50
|
+
lint:
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v5
|
|
54
|
+
- uses: actions/setup-python@v6
|
|
55
|
+
with:
|
|
56
|
+
python-version: "3.13"
|
|
57
|
+
cache: pip
|
|
58
|
+
cache-dependency-path: |
|
|
59
|
+
pyproject.toml
|
|
60
|
+
uv.lock
|
|
61
|
+
- run: pip install ruff
|
|
62
|
+
- run: ruff check mempalace_code/ tests/
|
|
63
|
+
- run: ruff format --check mempalace_code/ tests/
|
|
64
|
+
|
|
65
|
+
model-tests:
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
if: github.event_name == 'workflow_dispatch' && github.event.inputs.model_tests == 'true'
|
|
68
|
+
env:
|
|
69
|
+
HF_HOME: ${{ github.workspace }}/.cache/huggingface
|
|
70
|
+
MEMPALACE_TEST_HF_HOME: ${{ github.workspace }}/.cache/huggingface
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@v5
|
|
73
|
+
- uses: actions/setup-python@v6
|
|
74
|
+
with:
|
|
75
|
+
python-version: "3.13"
|
|
76
|
+
cache: pip
|
|
77
|
+
cache-dependency-path: |
|
|
78
|
+
pyproject.toml
|
|
79
|
+
uv.lock
|
|
80
|
+
- name: Restore HuggingFace model cache
|
|
81
|
+
id: hf-cache
|
|
82
|
+
uses: actions/cache@v4
|
|
83
|
+
with:
|
|
84
|
+
path: ${{ github.workspace }}/.cache/huggingface/hub/models--sentence-transformers--all-MiniLM-L6-v2
|
|
85
|
+
key: hf-${{ runner.os }}-py3.13-minilm-all-MiniLM-L6-v2-${{ hashFiles('pyproject.toml', 'uv.lock') }}
|
|
86
|
+
restore-keys: |
|
|
87
|
+
hf-${{ runner.os }}-py3.13-minilm-all-MiniLM-L6-v2-
|
|
88
|
+
- run: pip install -e ".[dev,treesitter]"
|
|
89
|
+
- name: Fetch embedding model (no-op on cache hit)
|
|
90
|
+
run: mempalace-code fetch-model
|
|
91
|
+
- name: Run model-backed tests
|
|
92
|
+
run: python -m pytest tests/ -v -m needs_network
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: .NET Benchmark
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
dotnet-bench:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
if: ${{ !(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'skip-bench')) }}
|
|
14
|
+
env:
|
|
15
|
+
HF_HOME: ${{ github.workspace }}/.cache/huggingface
|
|
16
|
+
CLEAN_ARCHITECTURE_COMMIT: 5a600ab8749c110384bc3bd436b9c67f3067b489
|
|
17
|
+
R5_THRESHOLD: "0.800"
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v5
|
|
20
|
+
|
|
21
|
+
- uses: actions/setup-python@v6
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.13"
|
|
24
|
+
cache: pip
|
|
25
|
+
cache-dependency-path: |
|
|
26
|
+
pyproject.toml
|
|
27
|
+
uv.lock
|
|
28
|
+
|
|
29
|
+
- name: Restore HuggingFace model cache
|
|
30
|
+
id: hf-cache
|
|
31
|
+
uses: actions/cache@v4
|
|
32
|
+
with:
|
|
33
|
+
path: ${{ github.workspace }}/.cache/huggingface/hub/models--sentence-transformers--all-MiniLM-L6-v2
|
|
34
|
+
key: hf-${{ runner.os }}-py3.13-minilm-all-MiniLM-L6-v2-${{ hashFiles('pyproject.toml', 'uv.lock') }}
|
|
35
|
+
restore-keys: |
|
|
36
|
+
hf-${{ runner.os }}-py3.13-minilm-all-MiniLM-L6-v2-
|
|
37
|
+
|
|
38
|
+
- run: pip install -e ".[dev,treesitter]"
|
|
39
|
+
|
|
40
|
+
- name: Fetch embedding model (no-op on cache hit)
|
|
41
|
+
run: mempalace-code fetch-model
|
|
42
|
+
|
|
43
|
+
- name: Fetch CleanArchitecture at pinned commit
|
|
44
|
+
run: |
|
|
45
|
+
git init /tmp/CleanArchitecture
|
|
46
|
+
git -C /tmp/CleanArchitecture remote add origin https://github.com/jasontaylordev/CleanArchitecture.git
|
|
47
|
+
git -C /tmp/CleanArchitecture fetch --depth=1 origin "$CLEAN_ARCHITECTURE_COMMIT"
|
|
48
|
+
git -C /tmp/CleanArchitecture checkout --detach FETCH_HEAD
|
|
49
|
+
ACTUAL=$(git -C /tmp/CleanArchitecture rev-parse HEAD)
|
|
50
|
+
if [ "$ACTUAL" != "$CLEAN_ARCHITECTURE_COMMIT" ]; then
|
|
51
|
+
echo "Commit mismatch: expected $CLEAN_ARCHITECTURE_COMMIT got $ACTUAL"
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
- name: Validate benchmark query set
|
|
56
|
+
run: |
|
|
57
|
+
python benchmarks/dotnet_bench.py \
|
|
58
|
+
--repo-dir /tmp/CleanArchitecture \
|
|
59
|
+
--validate-queries
|
|
60
|
+
|
|
61
|
+
- name: Run .NET retrieval benchmark with R@5 gate
|
|
62
|
+
run: |
|
|
63
|
+
python benchmarks/dotnet_bench.py \
|
|
64
|
+
--repo-dir /tmp/CleanArchitecture \
|
|
65
|
+
--out benchmarks/results_dotnet_bench_ci.json \
|
|
66
|
+
--fail-under-r5 ${{ env.R5_THRESHOLD }}
|
|
67
|
+
|
|
68
|
+
- name: Upload benchmark report
|
|
69
|
+
if: always()
|
|
70
|
+
uses: actions/upload-artifact@v4
|
|
71
|
+
with:
|
|
72
|
+
name: dotnet-bench-results
|
|
73
|
+
path: benchmarks/results_dotnet_bench_ci.json
|
|
@@ -1,5 +1,104 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
Current command/package names: the CLI is `mempalace-code`, the import package is
|
|
4
|
+
`mempalace_code`, and the MCP module is `python -m mempalace_code.mcp_server`.
|
|
5
|
+
Older historical entries may mention legacy `mempalace` names that were valid
|
|
6
|
+
when those changes landed.
|
|
7
|
+
|
|
8
|
+
## v1.7.0 — 2026-05-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Architecture extraction mode: `mempalace-code mine` now emits higher-level KG
|
|
13
|
+
facts for .NET (C#, F#, VB.NET) and Python projects, including pattern, layer,
|
|
14
|
+
namespace, and project membership facts.
|
|
15
|
+
- Architecture fact refresh is now wing-scoped, so re-mining one project no
|
|
16
|
+
longer invalidates architecture KG facts from other projects in the same
|
|
17
|
+
palace.
|
|
18
|
+
- Multi-repo palace sync: `mempalace-code mine-all` now mines multiple initialized
|
|
19
|
+
projects into one palace with one wing per project, explicit `wing:` overrides,
|
|
20
|
+
git-remote/folder wing auto-naming, duplicate-wing rejection before mining, and
|
|
21
|
+
incremental per-repo re-mining by default.
|
|
22
|
+
- Release-grade coverage for backup/restore CLI dispatch, storage migration CLI
|
|
23
|
+
passthrough/error handling, Python multi-import dependency extraction,
|
|
24
|
+
devops/config file scanning, benchmark CI gates, watcher rule reloads, and
|
|
25
|
+
tree-sitter detached-comment behavior.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- The shipped Python import namespace is `mempalace_code`; docs and generated
|
|
30
|
+
scheduler snippets prefer `mempalace-code` / `python -m mempalace_code` while
|
|
31
|
+
preserving the source-checkout `mempalace.mcp_server` compatibility shim.
|
|
32
|
+
- Package metadata now matches the Python 3.11+ support floor.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Watchers reload `scan_skip_dirs`, `scan_skip_files`, and `scan_skip_globs`
|
|
37
|
+
without restarting `mempalace-code watch`.
|
|
38
|
+
- Generated backup/watch scheduler fallbacks no longer reference the legacy
|
|
39
|
+
`python -m mempalace` module path.
|
|
40
|
+
|
|
41
|
+
## 2026-05-02 · ARCH-EXTRACTION-MODE
|
|
42
|
+
|
|
43
|
+
Architecture extraction mode: `mempalace-code mine` now runs a post-mining pass
|
|
44
|
+
that emits higher-level KG facts for .NET (C#, F#, VB.NET) and Python projects.
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- `mempalace_code/architecture.py` — new module with pattern detection
|
|
49
|
+
(`is_pattern`: Service, Repository, Controller, ViewModel, Factory), layer
|
|
50
|
+
classification (`is_layer`: UI, Business, Data, Infrastructure), namespace
|
|
51
|
+
tagging (`in_namespace`), and project membership (`in_project`).
|
|
52
|
+
- `KnowledgeGraph.invalidate_by_source_file` gains an optional `predicates`
|
|
53
|
+
parameter so architecture facts can be refreshed without expiring type
|
|
54
|
+
dependency facts (implements, inherits, depends_on, etc.).
|
|
55
|
+
- Architecture config block in `mempalace.yaml` under `architecture:` — supports
|
|
56
|
+
custom `patterns` (name, suffixes, explicit `type_names`) and `layers`
|
|
57
|
+
(name, namespace_globs, type_suffixes, priority). Invalid rule entries are
|
|
58
|
+
silently ignored; the pass continues with built-in defaults.
|
|
59
|
+
- KG queries: `entity="Service", direction="incoming"` shows all services;
|
|
60
|
+
`entity="Data", direction="incoming"` shows all data-layer types.
|
|
61
|
+
|
|
62
|
+
## 2026-05-02 · FUT-MULTI-REPO
|
|
63
|
+
|
|
64
|
+
Multi-repo palace sync: `mine-all` command mines multiple project directories into one palace with per-repo wing isolation, wing auto-naming from git remote/folder, and incremental per-repo re-mining.
|
|
65
|
+
|
|
66
|
+
## 2026-05-01 · Recent completed task review
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- `MINE-SCAN-RULES-LIVE-RELOAD`: watcher loops now reload `scan_skip_dirs`,
|
|
71
|
+
`scan_skip_files`, and `scan_skip_globs` between scan cycles, so app-level
|
|
72
|
+
exclude changes take effect without restarting `mempalace-code watch`.
|
|
73
|
+
- `QUAL-E2E-REMAINING-MODULES`: end-to-end coverage now includes `convo_miner`,
|
|
74
|
+
`layers`, and `palace_graph` scenarios, including idempotent conversation
|
|
75
|
+
re-mining, tiered context loading, tunnel detection, traversal, and missing-room
|
|
76
|
+
boundary behavior.
|
|
77
|
+
|
|
78
|
+
### Changed
|
|
79
|
+
|
|
80
|
+
- `CLEAN-ONBOARDING`: `mempalace-code init` is config-file-first by default;
|
|
81
|
+
interactive guided setup is routed through explicit onboarding paths instead
|
|
82
|
+
of blocking the normal init flow.
|
|
83
|
+
- The shipped Python import namespace is now `mempalace_code`. Packaged
|
|
84
|
+
`mempalace-code` installs no longer claim the top-level `mempalace` module,
|
|
85
|
+
allowing same-environment coexistence with upstream/vanilla MemPalace.
|
|
86
|
+
- New MCP setup examples use `python -m mempalace_code.mcp_server`. Source
|
|
87
|
+
checkouts keep a minimal `mempalace.mcp_server` shim so older repo-local
|
|
88
|
+
Codex/Autopilot configs with checkout `PYTHONPATH` continue to start.
|
|
89
|
+
|
|
90
|
+
### Fixed
|
|
91
|
+
|
|
92
|
+
- `MINE-SCAN-GLOB-DIR-PRUNE`: glob rules that cover an entire generated
|
|
93
|
+
directory now prune that subtree during the walk instead of filtering only
|
|
94
|
+
after file discovery.
|
|
95
|
+
- Legacy hook fallbacks and active docs now call `mempalace-code` or
|
|
96
|
+
`python -m mempalace_code`, matching the renamed package.
|
|
97
|
+
|
|
98
|
+
## 2026-05-01 · MINE-APP-SCAN-EXCLUDES-PR4
|
|
99
|
+
|
|
100
|
+
App-level scan excludes (`scan_skip_dirs`, `scan_skip_files`, `scan_skip_globs`) implemented in miner and watcher with hardened, tested outputs.
|
|
101
|
+
|
|
3
102
|
## v1.6.2 — 2026-05-01
|
|
4
103
|
|
|
5
104
|
### Added
|
|
@@ -45,16 +45,16 @@ python -m pytest tests/test_convo_miner.py -v
|
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
# Check
|
|
48
|
-
ruff check
|
|
48
|
+
ruff check mempalace_code/ tests/
|
|
49
49
|
|
|
50
50
|
# Format check
|
|
51
|
-
ruff format --check
|
|
51
|
+
ruff format --check mempalace_code/ tests/
|
|
52
52
|
|
|
53
53
|
# Auto-fix lint
|
|
54
|
-
ruff check --fix
|
|
54
|
+
ruff check --fix mempalace_code/ tests/
|
|
55
55
|
|
|
56
56
|
# Auto-fix format
|
|
57
|
-
ruff format
|
|
57
|
+
ruff format mempalace_code/ tests/
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Line length: 100. Target: py39. Quote style: double.
|
|
@@ -64,7 +64,7 @@ Line length: 100. Target: py39. Quote style: double.
|
|
|
64
64
|
| Module | Purpose |
|
|
65
65
|
|--------|---------|
|
|
66
66
|
| `storage.py` | LanceDB vector storage — add, search, delete, health_check, recover |
|
|
67
|
-
| `backup.py` | Tarball backup/restore — `mempalace backup`, scheduled backups |
|
|
67
|
+
| `backup.py` | Tarball backup/restore — `mempalace-code backup`, scheduled backups |
|
|
68
68
|
| `miner.py` | Code project miner — walks source files, extracts drawers |
|
|
69
69
|
| `convo_miner.py` | Conversation miner — ingests Claude/ChatGPT/Slack exports |
|
|
70
70
|
| `searcher.py` | Semantic search — query palace with optional wing/room filters |
|
|
@@ -73,7 +73,7 @@ Line length: 100. Target: py39. Quote style: double.
|
|
|
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
|
+
| `cli.py` | `mempalace-code` CLI entry point — init, mine, mine-all, watch, search, health, repair, backup |
|
|
77
77
|
|
|
78
78
|
## Architecture Principles
|
|
79
79
|
|