mempalace-code 1.10.1__tar.gz → 1.10.2__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.10.1 → mempalace_code-1.10.2}/CHANGELOG.md +43 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/PKG-INFO +49 -13
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/README.md +48 -12
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/AGENT_INSTALL.md +5 -5
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/BACKLOG-archived.yaml +35 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/BACKLOG.yaml +11 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/BACKUP_RESTORE.md +155 -5
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/COMPARISON_GRAPHIFY.md +5 -5
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/HOW_SEARCH_WORKS.md +1 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/OFFLINE_USAGE.md +16 -11
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/UPSTREAM_HARDENING.md +3 -3
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/backup.py +10 -7
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli.py +53 -5
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/backup_restore.py +12 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/ingest.py +3 -3
- mempalace_code-1.10.2/mempalace_code/cli_commands/model.py +108 -0
- mempalace_code-1.10.2/mempalace_code/cli_commands/preflight.py +53 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/config.py +6 -2
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/orchestrator.py +1 -1
- mempalace_code-1.10.2/mempalace_code/mirror_preflight.py +342 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/spellcheck.py +2 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/storage.py +162 -10
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/watcher.py +245 -34
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/pyproject.toml +1 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_backup.py +113 -1
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_backup_cli.py +163 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_cli.py +340 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_cli_command_modules.py +83 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_miner.py +56 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_storage.py +324 -8
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_watcher.py +451 -0
- mempalace_code-1.10.1/mempalace_code/cli_commands/model.py +0 -53
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/prompts/codex-hardening-review.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/prompts/codex-plan-review.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/settings.json +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/_shared/commit-checkpoint.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/_shared/mode-classification.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/_shared/task-state.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/bench/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/doc-refresh/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/entropy-gc/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/mine/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/palace-health/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/release/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/release-prep/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/ship/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/start/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/start/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/status/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/task-hardening/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/task-plan/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.claude/skills/verify/SKILL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/workflows/ci.yml +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/workflows/dotnet-bench.yml +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.github/workflows/publish.yml +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.gitignore +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.pre-commit-config.yaml +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/.verify-state +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/AGENTS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/CLAUDE.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/CONTRIBUTING.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/LICENSE +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/NOTICE +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/assets/mempalace_banner.jpg +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/BENCHMARKS.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/HYBRID_MODE.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/README.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/code_retrieval_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/convomem_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/data/code_retrieval_queries.json +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/dotnet_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/embed_ab_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/locomo_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/longmemeval_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/membench_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/results_token_delta_mempalace.json +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/results_token_delta_wh40k.json +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/benchmarks/token_delta_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/BENCH_TOKEN_DELTA.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/LLM_USAGE_RULES.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/WHY_THIS_FORK.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/docs/refactoring/REFAC-MINER-MODULES/progress.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/examples/HOOKS_TUTORIAL.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/examples/basic_mining.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/examples/convo_import.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/examples/gemini_cli_setup.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/examples/mcp_setup.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/hooks/README.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/hooks/mempal_precompact_hook.sh +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/hooks/mempal_save_hook.sh +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace/mcp_server.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/README.md +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/__main__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/_chroma_store.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/_stdio.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/architecture.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/alias.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/common.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/diary.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/export_import.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/maintenance.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/query.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/version_check.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/cli_commands/watch.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/convo_miner.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/dialect.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/disk_budget.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/entity_detector.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/entity_registry.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/export.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/general_extractor.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/knowledge_graph.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/language_catalog.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/layers.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/dispatch.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/protocol_text.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/registry.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/runtime.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/architecture.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/diary.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/graph.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/kg.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/read.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/search.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp/tools/write.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp_server.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mcp_tool_profiles.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/migrate.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/miner.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/__init__.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/batching.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/chunkers.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/kg_extract.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/languages.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/projects.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/scanner.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/mining/symbols.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/normalize.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/onboarding.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/palace_graph.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/py.typed +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/reader.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/retrieval_rerank.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/room_detector_local.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/search_reranker.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/searcher.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/split_mega_files.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/treesitter.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/version.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/mempalace_code/version_check.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/scripts/bootstrap.sh +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/scripts/codex-review.sh +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/scripts/migrate_storage_smoke.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/scripts/nuke_wing.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/conftest.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/fixtures/unreasoned_suppression.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_architecture_extraction.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_chroma_compat.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_chroma_import_errors.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_chunking.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_code_retrieval_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_config.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_convo_miner.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_dialect.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_disk_budget.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_dotnet_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_dotnet_config.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_e2e.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_embed_ab_bench.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_entity_detector.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_entity_registry.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_export.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_general_extractor.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_kg_extract.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_knowledge_graph.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_lang_detect.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_language_catalog.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_layers.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_mcp_registry.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_mcp_server.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_mcp_tool_profiles.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_migrate.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_migrate_storage_smoke.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_miner_modules.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_normalize.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_offline.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_packaging_namespace.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_palace_graph.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_reader.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_retrieval_rerank.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_search_reranker.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_searcher.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_split_mega_files.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_stdio.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_storage_lance.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_symbol_extract.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_treesitter.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_type_suppressions.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_version_check.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/tests/test_version_consistency.py +0 -0
- {mempalace_code-1.10.1 → mempalace_code-1.10.2}/uv.lock +0 -0
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
No changes yet.
|
|
6
|
+
|
|
7
|
+
## v1.10.2 — 2026-06-04
|
|
8
|
+
|
|
9
|
+
Patch release for the local-first embedding path.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- `restore` now scopes KG writes to the `--palace` path instead of the global
|
|
14
|
+
default.
|
|
15
|
+
- `watch` now mines and watches an initialized root directory directly, and
|
|
16
|
+
emits a clear diagnostic when no projects are found.
|
|
17
|
+
- Cached `search`, `mine`, and MCP search paths now load the sentence-transformers
|
|
18
|
+
model with local-only resolution first, avoiding Hugging Face metadata requests
|
|
19
|
+
after the setup download has already populated the cache.
|
|
20
|
+
- Re-running `mempalace-code fetch-model` on an already cached model now verifies
|
|
21
|
+
the local cache instead of performing an online-capable Hub lookup.
|
|
22
|
+
- Suppressed third-party Hugging Face token warnings and weight-loading progress
|
|
23
|
+
during cached model resolution; MemPalace keeps only its own concise status
|
|
24
|
+
output.
|
|
25
|
+
- LanceDB optimize and cleanup now re-open the table and verify a fresh handle
|
|
26
|
+
after maintenance. This catches missing-fragment failures that only appear for
|
|
27
|
+
the next process instead of trusting a stale in-memory table handle.
|
|
28
|
+
- LanceDB upserts now retry once with a freshly opened table when Lance reports
|
|
29
|
+
a missing fragment from a stale handle during merge-insert.
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- `preflight mirror` CLI command and docs warning that delete-mode rsync against
|
|
34
|
+
palace state can silently remove remote-owned data.
|
|
35
|
+
- Regression tests for cached local model resolution, explicit offline mode,
|
|
36
|
+
local filesystem model paths, idempotent `fetch-model`, and forced re-download.
|
|
37
|
+
- Backlog item `STORE-HF-CACHED-SEARCH-SUBPROCESS-GUARD` for a future
|
|
38
|
+
socket-blocked subprocess guard covering CLI stdout/stderr and network calls.
|
|
39
|
+
|
|
40
|
+
### Verified
|
|
41
|
+
|
|
42
|
+
- Real CLI smokes for cached `fetch-model`, normal search, explicit-offline
|
|
43
|
+
search, and palace health.
|
|
44
|
+
- Focused storage and CLI command suites plus the network-marked offline gate.
|
|
45
|
+
|
|
3
46
|
## v1.10.1 — 2026-05-24
|
|
4
47
|
|
|
5
48
|
Patch release after the v1.10.0 publish. Focus: real CLI/MCP smoke fixes,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mempalace-code
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.2
|
|
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
|
|
@@ -112,7 +112,7 @@ Then ask your AI to read [`docs/AGENT_INSTALL.md`](docs/AGENT_INSTALL.md) — it
|
|
|
112
112
|
<summary>Or do it manually</summary>
|
|
113
113
|
|
|
114
114
|
```bash
|
|
115
|
-
mempalace-code init ~/projects/myapp # detect rooms,
|
|
115
|
+
mempalace-code init ~/projects/myapp # detect rooms, cache embedding model (~80 MB)
|
|
116
116
|
mempalace-code init ~/projects/myapp --detect-entities # optional people/project detection for notes/convos
|
|
117
117
|
mempalace-code mine ~/projects/myapp # index your codebase
|
|
118
118
|
claude mcp add mempalace-code -- python -m mempalace_code.mcp_server # connect Claude Code
|
|
@@ -305,11 +305,14 @@ uv tool inject mempalace-code watchfiles # or: pipx inject mempalace-code watch
|
|
|
305
305
|
```
|
|
306
306
|
|
|
307
307
|
```bash
|
|
308
|
-
mempalace-code watch ~/projects/
|
|
308
|
+
mempalace-code watch ~/projects/my-app # watch an initialized project (on commit)
|
|
309
|
+
mempalace-code watch ~/projects/ # watch all initialized projects in a parent directory
|
|
309
310
|
mempalace-code watch ~/projects/ --on-save # watch all file saves instead (noisier)
|
|
310
311
|
mempalace-code watch ~/projects/ schedule # print launchd/cron snippet for daemon
|
|
311
312
|
```
|
|
312
313
|
|
|
314
|
+
`watch` accepts either an **initialized project directory** (has `mempalace.yaml`) or a **parent directory** containing immediate initialized project subdirectories. Pointing it at a project root that has project files but no `mempalace.yaml` exits with the correct `mempalace-code init <dir>` command.
|
|
315
|
+
|
|
313
316
|
**Install as persistent daemon (macOS):**
|
|
314
317
|
|
|
315
318
|
```bash
|
|
@@ -632,6 +635,8 @@ Or in `~/.mempalace/config.json`: `{"backup_retain_count": 5}`. Retention only a
|
|
|
632
635
|
After a successful optimize and readability check, MemPalace also runs
|
|
633
636
|
best-effort verified Lance cleanup (`cleanup_stale_fragments` with
|
|
634
637
|
`unsafe_now=false`) so future backups do not keep archiving stale table versions.
|
|
638
|
+
Optimize and cleanup verification re-opens the Lance table, so it checks the
|
|
639
|
+
same fresh-handle path the next CLI, MCP server, or watcher process will use.
|
|
635
640
|
Use the manual `cleanup` command for older installations that already
|
|
636
641
|
accumulated stale versions or for emergency recovery.
|
|
637
642
|
|
|
@@ -676,6 +681,36 @@ Skips compaction entirely. Storage will grow with more fragments but avoids any
|
|
|
676
681
|
|
|
677
682
|
Also available: `mempalace-code export --only-manual` for JSONL export of manually-stored drawers.
|
|
678
683
|
|
|
684
|
+
**Remote mirror risk — backups vs file mirroring:**
|
|
685
|
+
|
|
686
|
+
Managed backups and Lance cleanup protect **local** palace state. They do not protect against
|
|
687
|
+
delete-mode rsync between independent hosts. `rsync --delete` syncing a whole MemPalace state
|
|
688
|
+
directory removes remote-owned drawers, diary entries, and KG triples that were never synced
|
|
689
|
+
back to the source — even when local backups are healthy.
|
|
690
|
+
|
|
691
|
+
Use these recommended excludes for any delete-mode state-directory mirror:
|
|
692
|
+
|
|
693
|
+
```bash
|
|
694
|
+
rsync -a --delete \
|
|
695
|
+
--exclude=palace/ \
|
|
696
|
+
--exclude=knowledge_graph.sqlite3 \
|
|
697
|
+
--exclude=config.json \
|
|
698
|
+
--exclude=backups/ \
|
|
699
|
+
~/.mempalace/ user@host:.mempalace/
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
Run a preflight check before installing a mirror job (the command is never executed):
|
|
703
|
+
|
|
704
|
+
```bash
|
|
705
|
+
mempalace-code preflight mirror --command \
|
|
706
|
+
"rsync -a --delete --exclude=palace/ --exclude=knowledge_graph.sqlite3 \
|
|
707
|
+
--exclude=config.json --exclude=backups/ ~/.mempalace/ user@host:.mempalace/"
|
|
708
|
+
# OK
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
See [docs/BACKUP_RESTORE.md](docs/BACKUP_RESTORE.md) for the full mirror-risk guidance and
|
|
712
|
+
the safer export/import alternative for cross-host transfer of non-regenerable content.
|
|
713
|
+
|
|
679
714
|
---
|
|
680
715
|
|
|
681
716
|
### Scan Excludes
|
|
@@ -730,7 +765,7 @@ exclusion rule.
|
|
|
730
765
|
mempalace-code health # probe palace for fragment corruption
|
|
731
766
|
mempalace-code health --json # machine-readable report
|
|
732
767
|
mempalace-code cleanup --older-than-days 7 # reclaim stale Lance versions
|
|
733
|
-
mempalace-code cleanup --unsafe-now # emergency
|
|
768
|
+
mempalace-code cleanup --unsafe-now # emergency only; stop MemPalace processes first
|
|
734
769
|
|
|
735
770
|
mempalace-code repair --dry-run # show what would be recovered
|
|
736
771
|
mempalace-code repair --rollback # roll back to last working version
|
|
@@ -749,9 +784,9 @@ mempalace-code repair --rollback # roll back to last working version
|
|
|
749
784
|
Use `--dry-run` first to see how many rows would be lost.
|
|
750
785
|
|
|
751
786
|
Normal optimize runs already prune verified stale Lance versions after a
|
|
752
|
-
successful compaction. Manual `cleanup` is still
|
|
753
|
-
large historical accumulations, or emergency disk
|
|
754
|
-
|
|
787
|
+
successful compaction and fresh-handle verification. Manual `cleanup` is still
|
|
788
|
+
useful after older installs, large historical accumulations, or emergency disk
|
|
789
|
+
recovery after stopping watchers, miners, maintenance commands, and MCP servers.
|
|
755
790
|
|
|
756
791
|
---
|
|
757
792
|
|
|
@@ -800,7 +835,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
|
|
|
800
835
|
| Upstream | This fork |
|
|
801
836
|
|---|---|
|
|
802
837
|
| ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
|
|
803
|
-
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace-code init` downloads model explicitly;
|
|
838
|
+
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace-code init` downloads the model explicitly once; cached mining/search use local-only model resolution first |
|
|
804
839
|
| "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
|
|
805
840
|
| ~30% test coverage | 2200+ tests, every feature acceptance-gated |
|
|
806
841
|
| No backup, no recovery | `backup` / `restore` / `export` / `import` |
|
|
@@ -860,7 +895,7 @@ pip install "mempalace-code[spellcheck]" # autocorrect for room/wing names
|
|
|
860
895
|
pip install "mempalace-code[dev]" # pytest + ruff + pyright
|
|
861
896
|
```
|
|
862
897
|
|
|
863
|
-
**Requirements:** Python 3.11+. ~80 MB embedding model
|
|
898
|
+
**Requirements:** Python 3.11+. ~80 MB embedding model cached once during `mempalace-code init` or `mempalace-code fetch-model`; repeated cached runs resolve the model locally.
|
|
864
899
|
|
|
865
900
|
</details>
|
|
866
901
|
|
|
@@ -881,8 +916,9 @@ mempalace-code mine <dir> --watch # auto-incremental on fil
|
|
|
881
916
|
mempalace-code mine-all <parent-dir> # sync all projects incrementally (one wing per project)
|
|
882
917
|
mempalace-code mine-all <parent-dir> --new-only # only mine projects not yet in the palace
|
|
883
918
|
|
|
884
|
-
# Watch (
|
|
885
|
-
mempalace-code watch <
|
|
919
|
+
# Watch (project auto-sync)
|
|
920
|
+
mempalace-code watch <initialized-project> # watch a single initialized project
|
|
921
|
+
mempalace-code watch <parent-dir> # watch all initialized projects in a parent directory
|
|
886
922
|
mempalace-code watch <parent-dir> schedule # print launchd/cron daemon snippet
|
|
887
923
|
mempalace-code watch <parent-dir> status # disk-budget + launchd state
|
|
888
924
|
|
|
@@ -908,7 +944,7 @@ mempalace-code wake-up --wing myapp # project-scoped
|
|
|
908
944
|
mempalace-code status # palace overview
|
|
909
945
|
|
|
910
946
|
# Model
|
|
911
|
-
mempalace-code fetch-model #
|
|
947
|
+
mempalace-code fetch-model # cache or verify model for offline use
|
|
912
948
|
```
|
|
913
949
|
|
|
914
950
|
</details>
|
|
@@ -966,7 +1002,7 @@ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')
|
|
|
966
1002
|
Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
967
1003
|
|
|
968
1004
|
<!-- Link Definitions -->
|
|
969
|
-
[version-shield]: https://img.shields.io/badge/version-1.10.
|
|
1005
|
+
[version-shield]: https://img.shields.io/badge/version-1.10.2-4dc9f6?style=flat-square&labelColor=0a0e14
|
|
970
1006
|
[release-link]: https://github.com/rergards/mempalace-code/releases
|
|
971
1007
|
[python-shield]: https://img.shields.io/badge/python-3.11+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
|
|
972
1008
|
[python-link]: https://www.python.org/
|
|
@@ -63,7 +63,7 @@ Then ask your AI to read [`docs/AGENT_INSTALL.md`](docs/AGENT_INSTALL.md) — it
|
|
|
63
63
|
<summary>Or do it manually</summary>
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
mempalace-code init ~/projects/myapp # detect rooms,
|
|
66
|
+
mempalace-code init ~/projects/myapp # detect rooms, cache embedding model (~80 MB)
|
|
67
67
|
mempalace-code init ~/projects/myapp --detect-entities # optional people/project detection for notes/convos
|
|
68
68
|
mempalace-code mine ~/projects/myapp # index your codebase
|
|
69
69
|
claude mcp add mempalace-code -- python -m mempalace_code.mcp_server # connect Claude Code
|
|
@@ -256,11 +256,14 @@ uv tool inject mempalace-code watchfiles # or: pipx inject mempalace-code watch
|
|
|
256
256
|
```
|
|
257
257
|
|
|
258
258
|
```bash
|
|
259
|
-
mempalace-code watch ~/projects/
|
|
259
|
+
mempalace-code watch ~/projects/my-app # watch an initialized project (on commit)
|
|
260
|
+
mempalace-code watch ~/projects/ # watch all initialized projects in a parent directory
|
|
260
261
|
mempalace-code watch ~/projects/ --on-save # watch all file saves instead (noisier)
|
|
261
262
|
mempalace-code watch ~/projects/ schedule # print launchd/cron snippet for daemon
|
|
262
263
|
```
|
|
263
264
|
|
|
265
|
+
`watch` accepts either an **initialized project directory** (has `mempalace.yaml`) or a **parent directory** containing immediate initialized project subdirectories. Pointing it at a project root that has project files but no `mempalace.yaml` exits with the correct `mempalace-code init <dir>` command.
|
|
266
|
+
|
|
264
267
|
**Install as persistent daemon (macOS):**
|
|
265
268
|
|
|
266
269
|
```bash
|
|
@@ -583,6 +586,8 @@ Or in `~/.mempalace/config.json`: `{"backup_retain_count": 5}`. Retention only a
|
|
|
583
586
|
After a successful optimize and readability check, MemPalace also runs
|
|
584
587
|
best-effort verified Lance cleanup (`cleanup_stale_fragments` with
|
|
585
588
|
`unsafe_now=false`) so future backups do not keep archiving stale table versions.
|
|
589
|
+
Optimize and cleanup verification re-opens the Lance table, so it checks the
|
|
590
|
+
same fresh-handle path the next CLI, MCP server, or watcher process will use.
|
|
586
591
|
Use the manual `cleanup` command for older installations that already
|
|
587
592
|
accumulated stale versions or for emergency recovery.
|
|
588
593
|
|
|
@@ -627,6 +632,36 @@ Skips compaction entirely. Storage will grow with more fragments but avoids any
|
|
|
627
632
|
|
|
628
633
|
Also available: `mempalace-code export --only-manual` for JSONL export of manually-stored drawers.
|
|
629
634
|
|
|
635
|
+
**Remote mirror risk — backups vs file mirroring:**
|
|
636
|
+
|
|
637
|
+
Managed backups and Lance cleanup protect **local** palace state. They do not protect against
|
|
638
|
+
delete-mode rsync between independent hosts. `rsync --delete` syncing a whole MemPalace state
|
|
639
|
+
directory removes remote-owned drawers, diary entries, and KG triples that were never synced
|
|
640
|
+
back to the source — even when local backups are healthy.
|
|
641
|
+
|
|
642
|
+
Use these recommended excludes for any delete-mode state-directory mirror:
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
rsync -a --delete \
|
|
646
|
+
--exclude=palace/ \
|
|
647
|
+
--exclude=knowledge_graph.sqlite3 \
|
|
648
|
+
--exclude=config.json \
|
|
649
|
+
--exclude=backups/ \
|
|
650
|
+
~/.mempalace/ user@host:.mempalace/
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
Run a preflight check before installing a mirror job (the command is never executed):
|
|
654
|
+
|
|
655
|
+
```bash
|
|
656
|
+
mempalace-code preflight mirror --command \
|
|
657
|
+
"rsync -a --delete --exclude=palace/ --exclude=knowledge_graph.sqlite3 \
|
|
658
|
+
--exclude=config.json --exclude=backups/ ~/.mempalace/ user@host:.mempalace/"
|
|
659
|
+
# OK
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
See [docs/BACKUP_RESTORE.md](docs/BACKUP_RESTORE.md) for the full mirror-risk guidance and
|
|
663
|
+
the safer export/import alternative for cross-host transfer of non-regenerable content.
|
|
664
|
+
|
|
630
665
|
---
|
|
631
666
|
|
|
632
667
|
### Scan Excludes
|
|
@@ -681,7 +716,7 @@ exclusion rule.
|
|
|
681
716
|
mempalace-code health # probe palace for fragment corruption
|
|
682
717
|
mempalace-code health --json # machine-readable report
|
|
683
718
|
mempalace-code cleanup --older-than-days 7 # reclaim stale Lance versions
|
|
684
|
-
mempalace-code cleanup --unsafe-now # emergency
|
|
719
|
+
mempalace-code cleanup --unsafe-now # emergency only; stop MemPalace processes first
|
|
685
720
|
|
|
686
721
|
mempalace-code repair --dry-run # show what would be recovered
|
|
687
722
|
mempalace-code repair --rollback # roll back to last working version
|
|
@@ -700,9 +735,9 @@ mempalace-code repair --rollback # roll back to last working version
|
|
|
700
735
|
Use `--dry-run` first to see how many rows would be lost.
|
|
701
736
|
|
|
702
737
|
Normal optimize runs already prune verified stale Lance versions after a
|
|
703
|
-
successful compaction. Manual `cleanup` is still
|
|
704
|
-
large historical accumulations, or emergency disk
|
|
705
|
-
|
|
738
|
+
successful compaction and fresh-handle verification. Manual `cleanup` is still
|
|
739
|
+
useful after older installs, large historical accumulations, or emergency disk
|
|
740
|
+
recovery after stopping watchers, miners, maintenance commands, and MCP servers.
|
|
706
741
|
|
|
707
742
|
---
|
|
708
743
|
|
|
@@ -751,7 +786,7 @@ This is a code-first fork of [milla-jovovich/mempalace](https://github.com/milla
|
|
|
751
786
|
| Upstream | This fork |
|
|
752
787
|
|---|---|
|
|
753
788
|
| ChromaDB — [silently deletes data on version bump](https://github.com/milla-jovovich/mempalace/issues/469) | LanceDB — crash-safe Arrow storage, no version-cliff |
|
|
754
|
-
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace-code init` downloads model explicitly;
|
|
789
|
+
| "No internet after install" — [false](https://github.com/milla-jovovich/mempalace/issues/524) | `mempalace-code init` downloads the model explicitly once; cached mining/search use local-only model resolution first |
|
|
755
790
|
| "100% R@5" — [unverifiable](https://github.com/milla-jovovich/mempalace/issues/27) | Number removed. Methodology caveats documented |
|
|
756
791
|
| ~30% test coverage | 2200+ tests, every feature acceptance-gated |
|
|
757
792
|
| No backup, no recovery | `backup` / `restore` / `export` / `import` |
|
|
@@ -811,7 +846,7 @@ pip install "mempalace-code[spellcheck]" # autocorrect for room/wing names
|
|
|
811
846
|
pip install "mempalace-code[dev]" # pytest + ruff + pyright
|
|
812
847
|
```
|
|
813
848
|
|
|
814
|
-
**Requirements:** Python 3.11+. ~80 MB embedding model
|
|
849
|
+
**Requirements:** Python 3.11+. ~80 MB embedding model cached once during `mempalace-code init` or `mempalace-code fetch-model`; repeated cached runs resolve the model locally.
|
|
815
850
|
|
|
816
851
|
</details>
|
|
817
852
|
|
|
@@ -832,8 +867,9 @@ mempalace-code mine <dir> --watch # auto-incremental on fil
|
|
|
832
867
|
mempalace-code mine-all <parent-dir> # sync all projects incrementally (one wing per project)
|
|
833
868
|
mempalace-code mine-all <parent-dir> --new-only # only mine projects not yet in the palace
|
|
834
869
|
|
|
835
|
-
# Watch (
|
|
836
|
-
mempalace-code watch <
|
|
870
|
+
# Watch (project auto-sync)
|
|
871
|
+
mempalace-code watch <initialized-project> # watch a single initialized project
|
|
872
|
+
mempalace-code watch <parent-dir> # watch all initialized projects in a parent directory
|
|
837
873
|
mempalace-code watch <parent-dir> schedule # print launchd/cron daemon snippet
|
|
838
874
|
mempalace-code watch <parent-dir> status # disk-budget + launchd state
|
|
839
875
|
|
|
@@ -859,7 +895,7 @@ mempalace-code wake-up --wing myapp # project-scoped
|
|
|
859
895
|
mempalace-code status # palace overview
|
|
860
896
|
|
|
861
897
|
# Model
|
|
862
|
-
mempalace-code fetch-model #
|
|
898
|
+
mempalace-code fetch-model # cache or verify model for offline use
|
|
863
899
|
```
|
|
864
900
|
|
|
865
901
|
</details>
|
|
@@ -917,7 +953,7 @@ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')
|
|
|
917
953
|
Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
918
954
|
|
|
919
955
|
<!-- Link Definitions -->
|
|
920
|
-
[version-shield]: https://img.shields.io/badge/version-1.10.
|
|
956
|
+
[version-shield]: https://img.shields.io/badge/version-1.10.2-4dc9f6?style=flat-square&labelColor=0a0e14
|
|
921
957
|
[release-link]: https://github.com/rergards/mempalace-code/releases
|
|
922
958
|
[python-shield]: https://img.shields.io/badge/python-3.11+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
|
|
923
959
|
[python-link]: https://www.python.org/
|
|
@@ -22,7 +22,7 @@ feature checklist, not an install step.
|
|
|
22
22
|
| Code/docs mining | `mempalace-code mine <dir>` indexes supported source, docs, prose, config, and data files into LanceDB |
|
|
23
23
|
| Conversation/log ingest | `mempalace-code mine <dir> --mode convos` ingests Claude Code JSONL, Codex CLI JSONL, Gemini CLI JSONL, Claude.ai JSON, ChatGPT JSON, Slack JSON, and plain text transcripts |
|
|
24
24
|
| Multi-project sync | `mempalace-code mine-all <parent>` assigns one wing per initialized project; `--new-only` skips already-known wings |
|
|
25
|
-
| Auto-watch | `mempalace-code watch <
|
|
25
|
+
| Auto-watch | `mempalace-code watch <initialized-project>` watches one project directly; `mempalace-code watch <parent>` watches all initialized projects in a parent directory; re-mines on commit by default; `--on-save` is available but noisier |
|
|
26
26
|
| MCP tools | 29 tools (default `full` profile): semantic search, code search, file context/read, manual drawers, KG, architecture retrieval, graph tunnels, diary, re-mine; named profiles (`minimal`, `kg`, `code`, `notes`) reduce the exposed subset at startup |
|
|
27
27
|
| KG / architecture | Temporal facts plus .NET/Python architecture extraction; .NET project/type graph tools require pre-mined symbols |
|
|
28
28
|
| Local-model fallback | `mempalace-code wake-up` emits memory layers for agents without MCP support |
|
|
@@ -177,7 +177,7 @@ Ask all five questions before acting. Record answers; they parameterize Sections
|
|
|
177
177
|
|
|
178
178
|
### Q3 — Model download consent
|
|
179
179
|
|
|
180
|
-
**ASK HUMAN:** "mempalace-code uses a local embedding model (~80 MB)
|
|
180
|
+
**ASK HUMAN:** "mempalace-code uses a local embedding model (~80 MB) cached once from HuggingFace. This requires internet access only if the model is not already cached; after that everything runs offline. Reply `yes` to cache/verify now, `no` to skip (you can run `mempalace-code fetch-model` later), or `offline` if this machine has no internet access."
|
|
181
181
|
|
|
182
182
|
**Parse response:**
|
|
183
183
|
- `yes` → Set `DOWNLOAD_MODEL=yes`.
|
|
@@ -427,7 +427,7 @@ Do not add the flag just because a directory is a source repo; code symbols are
|
|
|
427
427
|
|
|
428
428
|
---
|
|
429
429
|
|
|
430
|
-
### Step 4c:
|
|
430
|
+
### Step 4c: Cache or verify embedding model
|
|
431
431
|
|
|
432
432
|
**Condition:** `DOWNLOAD_MODEL=yes`
|
|
433
433
|
|
|
@@ -436,11 +436,11 @@ Run:
|
|
|
436
436
|
mempalace-code fetch-model
|
|
437
437
|
```
|
|
438
438
|
|
|
439
|
-
`fetch-model` is idempotent — if the model is already cached it
|
|
439
|
+
`fetch-model` is idempotent — if the model is already cached it verifies local-only model resolution from disk (no network call). Expected output ends with `Done — embedding model is ready for offline use.`
|
|
440
440
|
|
|
441
441
|
Exit code 0 = success. Set `MODEL_READY=true`. Continue to Step 4d.
|
|
442
442
|
|
|
443
|
-
**Fail →** Retry once. If still failing, **ASK HUMAN:** "Model
|
|
443
|
+
**Fail →** Retry once. If still failing, **ASK HUMAN:** "Model cache/verify failed (missing cache, network error, or HuggingFace unavailable). The palace will work without the model, but search quality will degrade until it is available. Reply `retry` to try again, or `continue` to proceed without the model (run `mempalace-code fetch-model` later)."
|
|
444
444
|
|
|
445
445
|
**Condition:** `DOWNLOAD_MODEL=no` → Set `MODEL_READY=false`. Note to human: run `mempalace-code fetch-model` before first search.
|
|
446
446
|
|
|
@@ -926,3 +926,38 @@ items:
|
|
|
926
926
|
resolution: '2026-05-24: completed in pipeline run (commit=b4d31bb, 9 files changed, 136 insertions(+), 1 deletion(-))'
|
|
927
927
|
archived_date: "2026-05-24"
|
|
928
928
|
done_summary: completed in pipeline run (commit=b4d31bb, 9 files changed, 136 insertions(+), 1 deletion(-))
|
|
929
|
+
- key: WATCH-LANCE-MISSING-FRAGMENT-ROLLBACK
|
|
930
|
+
summary: Make watch initial mine fail closed and recover from Lance missing-fragment write errors
|
|
931
|
+
resolution: '2026-05-29: Restored watcher rollback safety and fixed managed backup filename collisions; full test suite passed after manual provider repair.'
|
|
932
|
+
archived_date: "2026-05-29"
|
|
933
|
+
done_summary: Restored watcher rollback safety and fixed managed backup filename collisions; full test suite passed after manual provider repair.
|
|
934
|
+
- key: RESTORE-KG-PATH-SCOPING
|
|
935
|
+
summary: Avoid surprising global KG overwrite when restoring to an explicit palace path
|
|
936
|
+
resolution: '2026-05-29: completed in pipeline run (commit=98a7244, 17 files changed, 634 insertions(+), 2 deletions(-))'
|
|
937
|
+
archived_date: "2026-05-29"
|
|
938
|
+
done_summary: completed in pipeline run (commit=98a7244, 17 files changed, 634 insertions(+), 2 deletions(-))
|
|
939
|
+
- key: WATCH-INITIALIZED-ROOT-UX
|
|
940
|
+
summary: Clarify or support watch on a directory that is itself an initialized project
|
|
941
|
+
resolution: '2026-05-29: completed in pipeline run (commit=5fe84f9, 18 files changed, 755 insertions(+), 38 deletions(-))'
|
|
942
|
+
archived_date: "2026-05-29"
|
|
943
|
+
done_summary: completed in pipeline run (commit=5fe84f9, 18 files changed, 755 insertions(+), 38 deletions(-))
|
|
944
|
+
- key: WATCH-STALE-SWEEP-BULK-DELETE
|
|
945
|
+
summary: Make watch initial stale-file sweep delete in bulk instead of one Lance version per stale file
|
|
946
|
+
resolution: '2026-05-29: completed in pipeline run (commit=f6f3fa1, 14 files changed, 646 insertions(+), 1 deletion(-))'
|
|
947
|
+
archived_date: "2026-05-29"
|
|
948
|
+
done_summary: completed in pipeline run (commit=f6f3fa1, 14 files changed, 646 insertions(+), 1 deletion(-))
|
|
949
|
+
- key: REMOTE-MIRROR-SAFE-GUARDS
|
|
950
|
+
summary: Add safeguards and docs for remote mirror jobs that can delete live palace data
|
|
951
|
+
resolution: '2026-05-29: completed in pipeline run (commit=e7f524b, 22 files changed, 1654 insertions(+))'
|
|
952
|
+
archived_date: "2026-05-29"
|
|
953
|
+
done_summary: completed in pipeline run (commit=e7f524b, 22 files changed, 1654 insertions(+))
|
|
954
|
+
- key: MIRROR-PREFLIGHT-WRAPPER-DETECTION
|
|
955
|
+
summary: Detect wrapped destructive mirror commands in preflight mirror
|
|
956
|
+
resolution: '2026-05-29: completed in pipeline run (commit=867ef57, 12 files changed, 732 insertions(+), 9 deletions(-))'
|
|
957
|
+
archived_date: "2026-05-29"
|
|
958
|
+
done_summary: completed in pipeline run (commit=867ef57, 12 files changed, 732 insertions(+), 9 deletions(-))
|
|
959
|
+
- key: MIRROR-PREFLIGHT-SUDO-COMBINED-OPTS
|
|
960
|
+
summary: Detect sudo combined-option mirror wrapper forms
|
|
961
|
+
resolution: '2026-05-29: completed in pipeline run (commit=7588660, 9 files changed, 213 insertions(+), 1 deletion(-))'
|
|
962
|
+
archived_date: "2026-05-29"
|
|
963
|
+
done_summary: completed in pipeline run (commit=7588660, 9 files changed, 213 insertions(+), 1 deletion(-))
|
|
@@ -42,4 +42,14 @@ sections:
|
|
|
42
42
|
# ============================================================
|
|
43
43
|
# OPEN ITEMS
|
|
44
44
|
# ============================================================
|
|
45
|
-
items:
|
|
45
|
+
items:
|
|
46
|
+
- key: STORE-HF-CACHED-SEARCH-SUBPROCESS-GUARD
|
|
47
|
+
section: quality
|
|
48
|
+
status: open
|
|
49
|
+
priority: P2
|
|
50
|
+
summary: Add subprocess-level guard that cached model search/fetch never emits HuggingFace token warnings or performs network metadata calls after setup.
|
|
51
|
+
acceptance:
|
|
52
|
+
- Run a real CLI subprocess with a preseeded HuggingFace cache and network/socket access blocked or mocked.
|
|
53
|
+
- Assert `mempalace-code search` exits successfully without `HF_TOKEN`, `unauthenticated`, `huggingface.co`, or retry noise on stdout/stderr.
|
|
54
|
+
- Assert repeated `mempalace-code fetch-model` on a cached model uses local-only resolution and does not perform Hub metadata requests.
|
|
55
|
+
- Keep the existing network-marked download tests separate from this no-network regression guard.
|
|
@@ -157,6 +157,40 @@ mempalace-code restore ~/safe.tar.gz # restore (prompts before overwr
|
|
|
157
157
|
mempalace-code restore ~/safe.tar.gz --force # overwrite without prompt
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
+
### Tarball Restore — KG Destination
|
|
161
|
+
|
|
162
|
+
When a tarball archive includes `knowledge_graph.sqlite3`, the restore command decides
|
|
163
|
+
where to write it based on your invocation:
|
|
164
|
+
|
|
165
|
+
| Invocation | KG written to |
|
|
166
|
+
|------------|---------------|
|
|
167
|
+
| `mempalace-code restore FILE` | `~/.mempalace/knowledge_graph.sqlite3` (global default) |
|
|
168
|
+
| `mempalace-code --palace <dir> restore FILE` | `<dir>/knowledge_graph.sqlite3` (palace-scoped) |
|
|
169
|
+
| `mempalace-code --palace <dir> restore FILE --kg-path <path>` | `<path>` (explicit override) |
|
|
170
|
+
| `mempalace-code restore FILE --kg-path <path>` | `<path>` (explicit override) |
|
|
171
|
+
|
|
172
|
+
**Important:** When you restore to an explicit `--palace <dir>`, the archived KG data
|
|
173
|
+
is written to `<dir>/knowledge_graph.sqlite3` — not to the global default — to avoid
|
|
174
|
+
silently overwriting an unrelated knowledge graph.
|
|
175
|
+
|
|
176
|
+
Use `--kg-path` to direct the KG to any arbitrary destination, including the global
|
|
177
|
+
default path, a shared location, or a testing path:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Restore Lance data to a custom palace, KG to the custom palace (default scoping)
|
|
181
|
+
mempalace-code --palace ~/my_palace restore ~/backup.tar.gz
|
|
182
|
+
|
|
183
|
+
# Override the KG destination explicitly
|
|
184
|
+
mempalace-code --palace ~/my_palace restore ~/backup.tar.gz --kg-path ~/shared_kg.sqlite3
|
|
185
|
+
|
|
186
|
+
# Restore without --palace: KG goes to the global default (backward-compatible)
|
|
187
|
+
mempalace-code restore ~/backup.tar.gz
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
> **Note:** This tarball restore behavior is separate from JSONL import/export KG
|
|
191
|
+
> handling. The `--skip-kg` and `--with-kg` flags documented in the [Restore
|
|
192
|
+
> Procedure](#restore-procedure) section above apply to JSONL imports only.
|
|
193
|
+
|
|
160
194
|
### Scheduled Backups
|
|
161
195
|
|
|
162
196
|
```bash
|
|
@@ -174,6 +208,44 @@ Each backup has a kind that controls its filename prefix and per-kind retention:
|
|
|
174
208
|
| `manual` | `mempalace_backup_` | `backup create` (default) |
|
|
175
209
|
| `scheduled` | `scheduled_` | `backup create --kind scheduled` / cron |
|
|
176
210
|
| `pre_optimize` | `pre_optimize_` | Auto-backup before optimize |
|
|
211
|
+
| `pre_watch` | `pre_watch_` | Auto-backup before watcher initial mine |
|
|
212
|
+
|
|
213
|
+
### Watch Pre-Run Backups
|
|
214
|
+
|
|
215
|
+
When an existing palace is detected on watcher startup, `mempalace-code watch` (and
|
|
216
|
+
`mempalace-code mine --watch`) creates a `pre_watch` archive **before** the initial
|
|
217
|
+
incremental mine. The archive path is printed to stdout:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Pre-watch backup: /path/to/.mempalace/backups/pre_watch_20260101_120000.tar.gz
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
If the archive cannot be created (e.g. disk budget too low), the watcher **exits
|
|
224
|
+
immediately** — the initial mine is never run and the palace is not mutated.
|
|
225
|
+
|
|
226
|
+
### Degraded Startup Recovery
|
|
227
|
+
|
|
228
|
+
If the initial mine fails with a Lance missing-fragment error (a symptom of prior
|
|
229
|
+
cleanup/restore history leaving stale fragment references), the watcher:
|
|
230
|
+
|
|
231
|
+
1. Prints `DEGRADED` and the error context.
|
|
232
|
+
2. Attempts an automatic Lance version rollback to the most recent healthy version
|
|
233
|
+
(`repair --rollback`).
|
|
234
|
+
3. If rollback succeeds, retries the initial mine once. The watcher enters the
|
|
235
|
+
normal watch loop only after the retry succeeds.
|
|
236
|
+
4. If rollback finds no healthy candidate, or the retry still fails, the watcher
|
|
237
|
+
exits **before watching** and prints operator-safe recovery commands:
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
To diagnose and recover, run:
|
|
241
|
+
mempalace-code --palace /path/palace health
|
|
242
|
+
mempalace-code --palace /path/palace repair --rollback --dry-run
|
|
243
|
+
mempalace-code --palace /path/palace restore /path/pre_watch_20260101_120000.tar.gz --force
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
The `restore --force` command falls back to the `pre_watch` tarball when Lance
|
|
247
|
+
version rollback cannot recover. Manual review is required before running it (the
|
|
248
|
+
restore command overwrites the palace `lance/` directory).
|
|
177
249
|
|
|
178
250
|
### Auto-Backup Before Optimize
|
|
179
251
|
|
|
@@ -216,7 +288,9 @@ Archives written with explicit `--out` paths are never pruned.
|
|
|
216
288
|
|
|
217
289
|
After a successful optimize and readability check, MemPalace also runs
|
|
218
290
|
best-effort verified Lance cleanup so future backups do not keep archiving stale
|
|
219
|
-
table versions.
|
|
291
|
+
table versions. Optimize and cleanup verification re-opens the Lance table, so
|
|
292
|
+
it checks the same fresh-handle path the next CLI, MCP server, or watcher
|
|
293
|
+
process will use. Manual `cleanup` remains the recovery tool for older
|
|
220
294
|
installations that already accumulated stale versions or for emergency disk
|
|
221
295
|
recovery.
|
|
222
296
|
|
|
@@ -248,11 +322,12 @@ and managed `scheduled` backups keep the newest 14; `manual` backups stay
|
|
|
248
322
|
unbounded unless you set an explicit retain count.
|
|
249
323
|
|
|
250
324
|
If LanceDB stale versions/fragments are the problem rather than backup archives,
|
|
251
|
-
run storage cleanup after
|
|
325
|
+
run storage cleanup only after stopping MemPalace watchers, miners, maintenance
|
|
326
|
+
commands, and MCP servers:
|
|
252
327
|
|
|
253
328
|
```bash
|
|
254
329
|
mempalace-code cleanup --older-than-days 7
|
|
255
|
-
mempalace-code cleanup --unsafe-now # emergency only; no
|
|
330
|
+
mempalace-code cleanup --unsafe-now # emergency only; no MemPalace process may be running
|
|
256
331
|
```
|
|
257
332
|
|
|
258
333
|
---
|
|
@@ -377,8 +452,8 @@ written.
|
|
|
377
452
|
mempalace-code fetch-model
|
|
378
453
|
```
|
|
379
454
|
|
|
380
|
-
On an already-prefetched host, you can also force offline model resolution
|
|
381
|
-
|
|
455
|
+
On an already-prefetched host, you can also force offline model resolution to
|
|
456
|
+
verify the smoke does not need network access:
|
|
382
457
|
|
|
383
458
|
```bash
|
|
384
459
|
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 python scripts/migrate_storage_smoke.py --rows 3
|
|
@@ -441,6 +516,81 @@ regardless of exceptions. No files are written inside the repository.
|
|
|
441
516
|
|
|
442
517
|
---
|
|
443
518
|
|
|
519
|
+
## Remote Mirror Risk
|
|
520
|
+
|
|
521
|
+
Managed backups and Lance cleanup protect **local** palace state. They do not protect
|
|
522
|
+
against a separate class of operator risk: delete-mode file mirroring between independent
|
|
523
|
+
hosts (`rsync --delete`).
|
|
524
|
+
|
|
525
|
+
When `rsync --delete` syncs a whole MemPalace state directory from one host to another,
|
|
526
|
+
it removes files on the destination that are absent on the source. If the destination host
|
|
527
|
+
holds **remote-owned** drawers, diary entries, or KG triples that were never synced back
|
|
528
|
+
to the source, those are permanently deleted — even though local backups and Lance cleanup
|
|
529
|
+
are healthy.
|
|
530
|
+
|
|
531
|
+
### Why managed backups do not protect against this
|
|
532
|
+
|
|
533
|
+
- Backups archive the **source** palace. A delete-mode mirror of the source removes content
|
|
534
|
+
from the **destination** that the source never knew about.
|
|
535
|
+
- Backup retention and Lance cleanup run on the source; they have no visibility into remote
|
|
536
|
+
state or what `rsync --delete` will remove on the destination.
|
|
537
|
+
|
|
538
|
+
### Safe rsync with recommended excludes
|
|
539
|
+
|
|
540
|
+
If you must mirror the palace state directory between hosts, exclude the live palace data,
|
|
541
|
+
KG database, config, and managed backups directory so a delete sweep cannot remove
|
|
542
|
+
remote-owned content:
|
|
543
|
+
|
|
544
|
+
```bash
|
|
545
|
+
rsync -a --delete \
|
|
546
|
+
--exclude=palace/ \
|
|
547
|
+
--exclude=knowledge_graph.sqlite3 \
|
|
548
|
+
--exclude=config.json \
|
|
549
|
+
--exclude=backups/ \
|
|
550
|
+
~/.mempalace/ user@host:.mempalace/
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
Add `--exclude='*.log'` if you route MemPalace watch logs into the state directory
|
|
554
|
+
(by default, logs go to `/tmp/mempalace-watch.log` and do not need excluding).
|
|
555
|
+
|
|
556
|
+
### Preflight check before installing a mirror job
|
|
557
|
+
|
|
558
|
+
Before installing a launchd or cron mirror job, run the preflight command to verify your
|
|
559
|
+
rsync invocation is safe (the command is inspected only — it is never executed):
|
|
560
|
+
|
|
561
|
+
```bash
|
|
562
|
+
mempalace-code preflight mirror --command \
|
|
563
|
+
"rsync -a --delete --exclude=palace/ --exclude=knowledge_graph.sqlite3 \
|
|
564
|
+
--exclude=config.json --exclude=backups/ ~/.mempalace/ user@host:.mempalace/"
|
|
565
|
+
# OK
|
|
566
|
+
|
|
567
|
+
mempalace-code preflight mirror --command "rsync -a --delete ~/.mempalace/ user@host:.mempalace/"
|
|
568
|
+
# BLOCKED [delete-mode-state-mirror-missing-excludes]
|
|
569
|
+
# missing exclude: palace
|
|
570
|
+
# missing exclude: kg
|
|
571
|
+
# missing exclude: config
|
|
572
|
+
# missing exclude: backups
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Use `--json` for automation scripts that parse the result.
|
|
576
|
+
|
|
577
|
+
### Recommended alternative: export/import instead of whole-state mirrors
|
|
578
|
+
|
|
579
|
+
Whole-state mirrors transfer regenerable code-chunked drawers along with the irreplaceable
|
|
580
|
+
manual content. A safer cross-host transfer uses the export/import flow:
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
# On source host: export only manual drawers and KG (non-regenerable content)
|
|
584
|
+
mempalace-code export --only-manual --with-kg --out ~/transfer.jsonl
|
|
585
|
+
|
|
586
|
+
# Copy the JSONL to the destination host, then import
|
|
587
|
+
mempalace-code import ~/transfer.jsonl
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
This preserves remote-owned content on both sides and avoids delete-sweep risk entirely.
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
444
594
|
## Related
|
|
445
595
|
|
|
446
596
|
- Upstream data loss context: issue #469 in the original ChromaDB-based fork
|