memleaf 0.2.14__tar.gz → 0.2.15__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 (104) hide show
  1. {memleaf-0.2.14 → memleaf-0.2.15}/CHANGELOG.md +12 -0
  2. {memleaf-0.2.14/src/memleaf.egg-info → memleaf-0.2.15}/PKG-INFO +3 -3
  3. {memleaf-0.2.14 → memleaf-0.2.15}/README.en.md +2 -2
  4. {memleaf-0.2.14 → memleaf-0.2.15}/README.md +2 -2
  5. {memleaf-0.2.14 → memleaf-0.2.15}/pyproject.toml +1 -1
  6. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/__init__.py +1 -1
  7. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/hermes_provider/plugin.yaml +1 -1
  8. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/processing.py +364 -166
  9. {memleaf-0.2.14 → memleaf-0.2.15/src/memleaf.egg-info}/PKG-INFO +3 -3
  10. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf.egg-info/SOURCES.txt +1 -0
  11. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_hermes_provider.py +4 -4
  12. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_pypi_install.py +5 -5
  13. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b2a.py +13 -11
  14. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_c1_mcp.py +1 -1
  15. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_c3_packaging.py +1 -1
  16. memleaf-0.2.15/tests/test_update_target_recovery.py +896 -0
  17. {memleaf-0.2.14 → memleaf-0.2.15}/IMPLEMENTATION_PLAN.md +0 -0
  18. {memleaf-0.2.14 → memleaf-0.2.15}/LICENSE +0 -0
  19. {memleaf-0.2.14 → memleaf-0.2.15}/MANIFEST.in +0 -0
  20. {memleaf-0.2.14 → memleaf-0.2.15}/RELEASE_CHECKLIST.md +0 -0
  21. {memleaf-0.2.14 → memleaf-0.2.15}/examples/README.md +0 -0
  22. {memleaf-0.2.14 → memleaf-0.2.15}/examples/basic_usage.py +0 -0
  23. {memleaf-0.2.14 → memleaf-0.2.15}/examples/mcp_stdio.ndjson +0 -0
  24. {memleaf-0.2.14 → memleaf-0.2.15}/install.ps1 +0 -0
  25. {memleaf-0.2.14 → memleaf-0.2.15}/install.sh +0 -0
  26. {memleaf-0.2.14 → memleaf-0.2.15}/setup.cfg +0 -0
  27. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/__main__.py +0 -0
  28. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/adapters/__init__.py +0 -0
  29. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/adapters/antigravity.py +0 -0
  30. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/adapters/base.py +0 -0
  31. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/adapters/codex.py +0 -0
  32. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/adapters/hermes.py +0 -0
  33. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/budget.py +0 -0
  34. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/capture.py +0 -0
  35. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/cli.py +0 -0
  36. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/compaction.py +0 -0
  37. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/config.py +0 -0
  38. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/credentials.py +0 -0
  39. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/frontmatter.py +0 -0
  40. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/hermes_provider/README.md +0 -0
  41. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/hermes_provider/__init__.py +0 -0
  42. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/host_events.py +0 -0
  43. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/host_runtime.py +0 -0
  44. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/inbox.py +0 -0
  45. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/index.py +0 -0
  46. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/installer.py +0 -0
  47. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/__init__.py +0 -0
  48. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/base.py +0 -0
  49. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/claude_compatible.py +0 -0
  50. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/gemini.py +0 -0
  51. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/openai_compatible.py +0 -0
  52. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/llm/router.py +0 -0
  53. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/locking.py +0 -0
  54. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/mcp_server.py +0 -0
  55. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/memory_writer.py +0 -0
  56. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/model_discovery.py +0 -0
  57. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/models.py +0 -0
  58. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/native_index.py +0 -0
  59. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/prompts.py +0 -0
  60. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/redaction.py +0 -0
  61. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/retrieval.py +0 -0
  62. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/retrieval_gate.py +0 -0
  63. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/scope_maintenance.py +0 -0
  64. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/scope_state.py +0 -0
  65. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/service.py +0 -0
  66. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/validation.py +0 -0
  67. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf/vault.py +0 -0
  68. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf.egg-info/dependency_links.txt +0 -0
  69. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf.egg-info/entry_points.txt +0 -0
  70. {memleaf-0.2.14 → memleaf-0.2.15}/src/memleaf.egg-info/top_level.txt +0 -0
  71. {memleaf-0.2.14 → memleaf-0.2.15}/tests/__init__.py +0 -0
  72. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_admission_noise.py +0 -0
  73. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_codex_install.py +0 -0
  74. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_codex_native_cli.py +0 -0
  75. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_context_budget.py +0 -0
  76. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_credential_safety.py +0 -0
  77. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_cross_host_acceptance.py +0 -0
  78. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_extraction_quality_regressions.py +0 -0
  79. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_hermes_stdio_transport.py +0 -0
  80. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_host_events.py +0 -0
  81. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_host_runtime_contract.py +0 -0
  82. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_install.py +0 -0
  83. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_maintenance_v2.py +0 -0
  84. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_model_discovery.py +0 -0
  85. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_retrieval_gate.py +0 -0
  86. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_retrieval_v2.py +0 -0
  87. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_session_lineage.py +0 -0
  88. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_a.py +0 -0
  89. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b1.py +0 -0
  90. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b2b.py +0 -0
  91. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3a_commit.py +0 -0
  92. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3a_contract.py +0 -0
  93. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3b_native_context.py +0 -0
  94. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3b_native_index.py +0 -0
  95. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3b_scope.py +0 -0
  96. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3c_retrieval.py +0 -0
  97. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_b3d_scope_maintenance.py +0 -0
  98. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_stage_c2_init.py +0 -0
  99. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_upgrade_preserves_vault.py +0 -0
  100. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_v2_gate_limits.py +0 -0
  101. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_v2_host_flow.py +0 -0
  102. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_v2_mcp_flow.py +0 -0
  103. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_v2_nomatch_semantics.py +0 -0
  104. {memleaf-0.2.14 → memleaf-0.2.15}/tests/test_v2_search_gate_acceptance.py +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to memleaf are documented here.
4
4
 
5
+ ## 0.2.15 — 2026-09-02
6
+
7
+ - Recover a candidate whose `update_memory_id` has the wrong type at the
8
+ candidate level after bounded gate retries, without blocking unrelated
9
+ candidates or changing the active target's immutable type.
10
+ - Require candidate-local Scope membership and future-use relevance before
11
+ accepting a duplicate or update target, keeping cross-project targets
12
+ deferred and preventing unsafe overwrites.
13
+ - Keep duplicate validation independent from UPDATE type validation, and
14
+ safely defer unknown or same-use type-mismatch targets instead of creating
15
+ a sibling memory or failing the whole inbox turn.
16
+
5
17
  ## 0.2.14 — 2026-09-02
6
18
 
7
19
  - Reject a permanent-memory candidate that combines a durable project rule or
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memleaf
3
- Version: 0.2.14
3
+ Version: 0.2.15
4
4
  Summary: A local-first Markdown memory core for AI agents
5
5
  Author: memleaf contributors
6
6
  License-Expression: MIT
@@ -23,8 +23,8 @@ Dynamic: license-file
23
23
 
24
24
  [English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
25
25
 
26
- > **当前版本:0.2.14。**
27
- > 核心库、Vault、stdio MCP Server、初始化 CLI、模型路由、提炼流程、受控检索协议和宿主适配器已经实现。memleaf 0.2.14 通过 PyPI 分发。
26
+ > **当前版本:0.2.15。**
27
+ > 核心库、Vault、stdio MCP Server、初始化 CLI、模型路由、提炼流程、受控检索协议和宿主适配器已经实现。memleaf 0.2.15 通过 PyPI 分发。
28
28
  > **当前版本支持 Hermes 和 Codex。** Antigravity(反重力)不检测、不安装、不配置。
29
29
 
30
30
  ## 项目定位
@@ -4,8 +4,8 @@
4
4
 
5
5
  [中文](README.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
6
6
 
7
- > **Version: 0.2.14.**
8
- > The core library, Vault, stdio MCP server, initialization CLI, model routing, memory extraction, controlled retrieval protocol, and host adapters are implemented. memleaf 0.2.14 is distributed through PyPI.
7
+ > **Version: 0.2.15.**
8
+ > The core library, Vault, stdio MCP server, initialization CLI, model routing, memory extraction, controlled retrieval protocol, and host adapters are implemented. memleaf 0.2.15 is distributed through PyPI.
9
9
  > **The current release supports Hermes and Codex.** Antigravity is not detected, installed, or configured.
10
10
 
11
11
  ## Project scope
@@ -4,8 +4,8 @@
4
4
 
5
5
  [English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
6
6
 
7
- > **当前版本:0.2.14。**
8
- > 核心库、Vault、stdio MCP Server、初始化 CLI、模型路由、提炼流程、受控检索协议和宿主适配器已经实现。memleaf 0.2.14 通过 PyPI 分发。
7
+ > **当前版本:0.2.15。**
8
+ > 核心库、Vault、stdio MCP Server、初始化 CLI、模型路由、提炼流程、受控检索协议和宿主适配器已经实现。memleaf 0.2.15 通过 PyPI 分发。
9
9
  > **当前版本支持 Hermes 和 Codex。** Antigravity(反重力)不检测、不安装、不配置。
10
10
 
11
11
  ## 项目定位
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "memleaf"
7
- version = "0.2.14"
7
+ version = "0.2.15"
8
8
  description = "A local-first Markdown memory core for AI agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  """Local-first Markdown memory core for AI agents."""
2
2
 
3
- __version__ = "0.2.14"
3
+ __version__ = "0.2.15"
4
4
 
5
5
  from .config import DEFAULT_CONFIG, default_config, load_config, save_config
6
6
  from .frontmatter import FrontmatterError, dump_frontmatter, dump_yaml, load_yaml, parse_frontmatter
@@ -1,5 +1,5 @@
1
1
  name: memleaf
2
- version: 0.2.14
2
+ version: 0.2.15
3
3
  description: "Hermes-native external MemoryProvider for local-first Markdown memory shared with the memleaf MCP server."
4
4
  hooks:
5
5
  - prefetch