memleaf 1.0.2__tar.gz → 1.0.3__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 (204) hide show
  1. {memleaf-1.0.2 → memleaf-1.0.3}/CHANGELOG.md +28 -0
  2. {memleaf-1.0.2/src/memleaf.egg-info → memleaf-1.0.3}/PKG-INFO +2 -2
  3. {memleaf-1.0.2 → memleaf-1.0.3}/README.en.md +1 -1
  4. {memleaf-1.0.2 → memleaf-1.0.3}/README.md +1 -1
  5. {memleaf-1.0.2 → memleaf-1.0.3}/docs/stability.md +16 -2
  6. {memleaf-1.0.2 → memleaf-1.0.3}/pyproject.toml +1 -1
  7. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/__init__.py +1 -1
  8. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/body_preservation.py +12 -3
  9. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/_shared.py +3 -0
  10. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/plugin.yaml +1 -1
  11. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_prompts.py +4 -3
  12. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_semantics.py +22 -3
  13. {memleaf-1.0.2 → memleaf-1.0.3/src/memleaf.egg-info}/PKG-INFO +2 -2
  14. {memleaf-1.0.2 → memleaf-1.0.3}/LICENSE +0 -0
  15. {memleaf-1.0.2 → memleaf-1.0.3}/MANIFEST.in +0 -0
  16. {memleaf-1.0.2 → memleaf-1.0.3}/docs/acceptance-evidence-guide.md +0 -0
  17. {memleaf-1.0.2 → memleaf-1.0.3}/docs/automatic-processing-route.md +0 -0
  18. {memleaf-1.0.2 → memleaf-1.0.3}/docs/body-compaction.md +0 -0
  19. {memleaf-1.0.2 → memleaf-1.0.3}/docs/candidate-reconciliation.md +0 -0
  20. {memleaf-1.0.2 → memleaf-1.0.3}/docs/capture-budget-design.md +0 -0
  21. {memleaf-1.0.2 → memleaf-1.0.3}/docs/config-migrations.md +0 -0
  22. {memleaf-1.0.2 → memleaf-1.0.3}/docs/core-refactor.md +0 -0
  23. {memleaf-1.0.2 → memleaf-1.0.3}/docs/development-closeout.md +0 -0
  24. {memleaf-1.0.2 → memleaf-1.0.3}/docs/evidence-retention.md +0 -0
  25. {memleaf-1.0.2 → memleaf-1.0.3}/docs/explicit-memory-update.md +0 -0
  26. {memleaf-1.0.2 → memleaf-1.0.3}/docs/extraction-latency.md +0 -0
  27. {memleaf-1.0.2 → memleaf-1.0.3}/docs/failed-run-recovery.md +0 -0
  28. {memleaf-1.0.2 → memleaf-1.0.3}/docs/gate-evidence-boundary.md +0 -0
  29. {memleaf-1.0.2 → memleaf-1.0.3}/docs/general-processing.md +0 -0
  30. {memleaf-1.0.2 → memleaf-1.0.3}/docs/hermes-mcp-runtime.md +0 -0
  31. {memleaf-1.0.2 → memleaf-1.0.3}/docs/hermes-provider-compatibility.md +0 -0
  32. {memleaf-1.0.2 → memleaf-1.0.3}/docs/hermes-source-comparison-context.md +0 -0
  33. {memleaf-1.0.2 → memleaf-1.0.3}/docs/host-acceptance-runbook.md +0 -0
  34. {memleaf-1.0.2 → memleaf-1.0.3}/docs/host-v2-contract.md +0 -0
  35. {memleaf-1.0.2 → memleaf-1.0.3}/docs/immutable-release-assets.md +0 -0
  36. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-commit-contract.md +0 -0
  37. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-execution.md +0 -0
  38. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-native-comparison.md +0 -0
  39. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-partial-recovery.md +0 -0
  40. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-planner-preview.md +0 -0
  41. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-runtime-contract.md +0 -0
  42. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-scope-registration.md +0 -0
  43. {memleaf-1.0.2 → memleaf-1.0.3}/docs/incremental-selected-retention.md +0 -0
  44. {memleaf-1.0.2 → memleaf-1.0.3}/docs/installed-artifact-verification.md +0 -0
  45. {memleaf-1.0.2 → memleaf-1.0.3}/docs/memory-lifecycle-tools.md +0 -0
  46. {memleaf-1.0.2 → memleaf-1.0.3}/docs/memory-state-contract.md +0 -0
  47. {memleaf-1.0.2 → memleaf-1.0.3}/docs/migration-preflight.md +0 -0
  48. {memleaf-1.0.2 → memleaf-1.0.3}/docs/processing-quality-acceptance.md +0 -0
  49. {memleaf-1.0.2 → memleaf-1.0.3}/docs/public-query-integrity.md +0 -0
  50. {memleaf-1.0.2 → memleaf-1.0.3}/docs/query-performance.md +0 -0
  51. {memleaf-1.0.2 → memleaf-1.0.3}/docs/remember-incremental-route.md +0 -0
  52. {memleaf-1.0.2 → memleaf-1.0.3}/docs/runtime-state-retention.md +0 -0
  53. {memleaf-1.0.2 → memleaf-1.0.3}/docs/semantic-extraction-protocol.md +0 -0
  54. {memleaf-1.0.2 → memleaf-1.0.3}/docs/source-work-contract.md +0 -0
  55. {memleaf-1.0.2 → memleaf-1.0.3}/docs/v0.2.26-processing-status.md +0 -0
  56. {memleaf-1.0.2 → memleaf-1.0.3}/examples/README.md +0 -0
  57. {memleaf-1.0.2 → memleaf-1.0.3}/examples/basic_usage.py +0 -0
  58. {memleaf-1.0.2 → memleaf-1.0.3}/examples/mcp_stdio.ndjson +0 -0
  59. {memleaf-1.0.2 → memleaf-1.0.3}/install.ps1 +0 -0
  60. {memleaf-1.0.2 → memleaf-1.0.3}/install.sh +0 -0
  61. {memleaf-1.0.2 → memleaf-1.0.3}/setup.cfg +0 -0
  62. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/__main__.py +0 -0
  63. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/adapters/__init__.py +0 -0
  64. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/adapters/antigravity.py +0 -0
  65. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/adapters/base.py +0 -0
  66. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/adapters/codex.py +0 -0
  67. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/adapters/hermes.py +0 -0
  68. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/admission.py +0 -0
  69. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/batch_review.py +0 -0
  70. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/budget.py +0 -0
  71. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/capture.py +0 -0
  72. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/cli.py +0 -0
  73. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/compaction.py +0 -0
  74. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/config.py +0 -0
  75. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/create_coordinator.py +0 -0
  76. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/credentials.py +0 -0
  77. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/evidence_budget.py +0 -0
  78. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/evidence_policy.py +0 -0
  79. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/evidence_structure.py +0 -0
  80. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/evidence_syntax.py +0 -0
  81. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/explicit_text_source.py +0 -0
  82. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/extraction_budget.py +0 -0
  83. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/extraction_capability.py +0 -0
  84. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/extraction_work_state.py +0 -0
  85. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/frontmatter.py +0 -0
  86. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/README.md +0 -0
  87. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/__init__.py +0 -0
  88. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/_mcp_client.py +0 -0
  89. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/_provider.py +0 -0
  90. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/evidence_budget.py +0 -0
  91. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_provider/provider_compatibility.py +0 -0
  92. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/hermes_runtime.py +0 -0
  93. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/historical_context.py +0 -0
  94. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_events.py +0 -0
  95. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_retention.py +0 -0
  96. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_runtime.py +0 -0
  97. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_turn_identity.py +0 -0
  98. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2.py +0 -0
  99. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_auth.py +0 -0
  100. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_cli.py +0 -0
  101. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_common.py +0 -0
  102. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/schemas/admin-records.schema.json +0 -0
  103. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/schemas/memleaf-host-v2.schema.json +0 -0
  104. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/schemas/read-integrity.schema.json +0 -0
  105. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/cancel_memory.json +0 -0
  106. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/forget_memory.json +0 -0
  107. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/memory_capabilities.json +0 -0
  108. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/memory_work.json +0 -0
  109. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/prepare_memory.json +0 -0
  110. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/resume_memory.json +0 -0
  111. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_contracts/tools/submit_memory.json +0 -0
  112. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_mcp.py +0 -0
  113. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_owner.py +0 -0
  114. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_proposal.py +0 -0
  115. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/host_v2_schema.py +0 -0
  116. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/inbox.py +0 -0
  117. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_commit.py +0 -0
  118. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_dates.py +0 -0
  119. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_execution.py +0 -0
  120. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_explicit.py +0 -0
  121. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_failed_recovery.py +0 -0
  122. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_journal.py +0 -0
  123. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_merge.py +0 -0
  124. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_native.py +0 -0
  125. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_partial.py +0 -0
  126. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_preview.py +0 -0
  127. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_protocol.py +0 -0
  128. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_recovery.py +0 -0
  129. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_run_state.py +0 -0
  130. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_runtime.py +0 -0
  131. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_scopes.py +0 -0
  132. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/incremental_selection.py +0 -0
  133. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/index.py +0 -0
  134. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/inspection.py +0 -0
  135. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/installer.py +0 -0
  136. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/legacy_update_journal.py +0 -0
  137. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/lifecycle_maintenance.py +0 -0
  138. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/__init__.py +0 -0
  139. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/base.py +0 -0
  140. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/claude_compatible.py +0 -0
  141. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/gemini.py +0 -0
  142. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/openai_compatible.py +0 -0
  143. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/router.py +0 -0
  144. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/llm/thinking.py +0 -0
  145. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/locking.py +0 -0
  146. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/mcp_server.py +0 -0
  147. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/memory_commit.py +0 -0
  148. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/memory_planner.py +0 -0
  149. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/memory_retraction.py +0 -0
  150. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/memory_update.py +0 -0
  151. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/memory_writer.py +0 -0
  152. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/migration.py +0 -0
  153. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/model_capabilities.py +0 -0
  154. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/model_discovery.py +0 -0
  155. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/model_execution.py +0 -0
  156. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/models.py +0 -0
  157. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/native_index.py +0 -0
  158. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/native_registration.py +0 -0
  159. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/parallel_model.py +0 -0
  160. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/planning_candidates.py +0 -0
  161. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/planning_context.py +0 -0
  162. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/process_common.py +0 -0
  163. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/process_jobs.py +0 -0
  164. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/process_journal.py +0 -0
  165. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/process_owner.py +0 -0
  166. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/processing.py +0 -0
  167. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/processing_route.py +0 -0
  168. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/prompts.py +0 -0
  169. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/provenance.py +0 -0
  170. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/provider_compatibility.py +0 -0
  171. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/query_clock.py +0 -0
  172. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/query_progress.py +0 -0
  173. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/query_scan.py +0 -0
  174. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/receipt_codec.py +0 -0
  175. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/recording_policy.py +0 -0
  176. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/redaction.py +0 -0
  177. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/remember_route.py +0 -0
  178. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/retention.py +0 -0
  179. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/retrieval.py +0 -0
  180. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/retrieval_gate.py +0 -0
  181. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/retrieval_lifecycle.py +0 -0
  182. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/runtime_retention.py +0 -0
  183. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/scope_maintenance.py +0 -0
  184. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/scope_state.py +0 -0
  185. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/semantic_maintenance.py +0 -0
  186. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/semantic_protocol.py +0 -0
  187. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/service.py +0 -0
  188. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/single_pass_memory_planner.py +0 -0
  189. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/single_pass_plan.py +0 -0
  190. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/source_policy.py +0 -0
  191. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/state_layout.py +0 -0
  192. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/subprocess_flags.py +0 -0
  193. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/summary_batch.py +0 -0
  194. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/target_reconciliation.py +0 -0
  195. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/turn_audit.py +0 -0
  196. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/turn_plan.py +0 -0
  197. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/update_coordinator.py +0 -0
  198. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/update_review.py +0 -0
  199. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/validation.py +0 -0
  200. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf/vault.py +0 -0
  201. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf.egg-info/SOURCES.txt +0 -0
  202. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf.egg-info/dependency_links.txt +0 -0
  203. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf.egg-info/entry_points.txt +0 -0
  204. {memleaf-1.0.2 → memleaf-1.0.3}/src/memleaf.egg-info/top_level.txt +0 -0
@@ -5,6 +5,34 @@ All notable changes to memleaf are documented here.
5
5
  ## Unreleased
6
6
 
7
7
 
8
+ ## 1.0.3 — 2026-10-10
9
+
10
+ ### Conversation-based result maintenance
11
+
12
+ - Treat clearly reported assistant discoveries and executed results as
13
+ conversation evidence, without independently judging external business truth
14
+ or turning suggestions into user obligations.
15
+ - Match the specific item rather than just its contact/customer; distinguish
16
+ replying, registering and assigning from completing the underlying work.
17
+ Maintain superseded current-state prose while preserving independent facts.
18
+ - Let the existing semantic review remove a deadline misclassified as a state
19
+ effective time, only after the original source selection is validated.
20
+ Malformed, fabricated, unbound and historical citations remain protected.
21
+ Explicit future state changes retain their existing validation.
22
+ - Guide Hermes deferred-tool discovery through its existing `tool_call` bridge;
23
+ an unavailable tool is not evidence that memory search found no matches.
24
+ - Validation: 161 targeted deterministic checks passed, including nine new
25
+ boundary checks. An original saved proposal replay verified the time repair
26
+ with a fixed review verdict and no network. Six invented-dialogue scenarios
27
+ passed with the configured DeepSeek Flash route; validation used 14 calls and
28
+ 27,999 observed tokens, including initial incomplete candidate selection and
29
+ one rejected review corrected before acceptance. No product model call or
30
+ retry was added, and existing call limits remain unchanged.
31
+ - Original private-dialogue real-model replay requires destination approval and
32
+ was not performed. Production memories and host installation were not altered.
33
+ Historical date/responsibility assertions fail identically on the baseline
34
+ and are outside this patch; full historical-suite success is not claimed.
35
+
8
36
  ## 1.0.2 — 2026-10-08
9
37
 
10
38
  ### Reliable host recovery and Codex todo retrieval
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memleaf
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A local-first Markdown memory core for AI agents
5
5
  Author: memleaf contributors
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Dynamic: license-file
24
24
 
25
25
  [English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
26
26
 
27
- > **稳定版:1.0.2。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
27
+ > **稳定版:1.0.3。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
28
28
  > **Codex 可通过 `--profile host` 使用当前宿主模型完成记忆闭环,无需另配 Memleaf 模型 API Key。** 本地 Owner 仍需配置客户端身份、读写权限及来源信任;客户端主动调用工具,不代表每轮自动记忆。
29
29
  > host profile 支持独立于内容类型的 `actionable` 和结构化 `waiting_on`,每份 work 默认最多三次被接受的 submit;Memleaf 负责确定性校验、落盘与恢复。
30
30
  > 默认 `model` profile 和 Hermes 原生接入继续使用独立 Model Route,提炼与语义复核共用每份工作的最多五次模型请求。旧接口、现有记忆和默认入口保留,升级无需正式 Vault 迁移。Antigravity(反重力)当前不支持。
@@ -4,7 +4,7 @@
4
4
 
5
5
  [中文](README.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
6
6
 
7
- > **Stable release: 1.0.2.** Hermes and Codex are supported; see the [stability policy](docs/stability.md) for compatibility scope.
7
+ > **Stable release: 1.0.3.** Hermes and Codex are supported; see the [stability policy](docs/stability.md) for compatibility scope.
8
8
  > **Codex can complete the memory workflow with its current host model through `--profile host`, without a separate Memleaf model API key.** A local Owner still configures client identity, permissions and source trust. Clients invoke the tools deliberately; this does not enable automatic memory on every turn.
9
9
  > The host profile supports `actionable` independently of content type and structured `waiting_on`, with at most three accepted submits per work by default. Memleaf validates, persists and recovers deterministically.
10
10
  > The default `model` profile and native Hermes integration retain their independent Model Route and shared five-request extraction/review budget. Existing interfaces, memories and default entry points remain; no formal Vault migration is required. Antigravity is not supported.
@@ -4,7 +4,7 @@
4
4
 
5
5
  [English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
6
6
 
7
- > **稳定版:1.0.2。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
7
+ > **稳定版:1.0.3。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
8
8
  > **Codex 可通过 `--profile host` 使用当前宿主模型完成记忆闭环,无需另配 Memleaf 模型 API Key。** 本地 Owner 仍需配置客户端身份、读写权限及来源信任;客户端主动调用工具,不代表每轮自动记忆。
9
9
  > host profile 支持独立于内容类型的 `actionable` 和结构化 `waiting_on`,每份 work 默认最多三次被接受的 submit;Memleaf 负责确定性校验、落盘与恢复。
10
10
  > 默认 `model` profile 和 Hermes 原生接入继续使用独立 Model Route,提炼与语义复核共用每份工作的最多五次模型请求。旧接口、现有记忆和默认入口保留,升级无需正式 Vault 迁移。Antigravity(反重力)当前不支持。
@@ -30,15 +30,21 @@ scope. An internal protocol change may fence pending model responses and require
30
30
  an explicit recovery action; it must not silently reinterpret saved work, erase
31
31
  unresolved outcomes or reset consumed request budgets.
32
32
 
33
- ## Upgrade to 1.0.2
33
+ ## Upgrade to 1.0.3
34
34
 
35
- The 1.0.2 release preserves the 1.0.0 public interfaces, existing Model Routes,
35
+ The 1.0.3 release preserves the 1.0.0 public interfaces, existing Model Routes,
36
36
  default entry points and Markdown/history formats. The new host-model MCP route
37
37
  is optional and selected with `--profile host`; upgrading does not convert an
38
38
  existing Codex or Hermes connection to it. No formal Vault migration is required.
39
39
  The host contract identifier remains `memleaf-host-v2.0-rc1`; protocol identity
40
40
  and package release numbers are separate.
41
41
 
42
+ Version 1.0.3 maintains clearly reported assistant results as conversation
43
+ sources, improves item matching and separates deadlines from actual state
44
+ effective times. It preserves source/permission checks and existing model-call
45
+ limits. Updating the installed Hermes provider requires rerunning its installer;
46
+ a package upgrade alone does not replace host plugin files.
47
+
42
48
  Version 1.0.2 fixes incomplete host freezing/recovery, multiline evidence
43
49
  serialization and Codex todo retrieval Hooks. Complete older frozen groups
44
50
  remain recoverable; incomplete groups and impossible saved receipts fail closed
@@ -110,3 +116,11 @@ For 1.0.2, 24 new deterministic regressions and all 152 existing host checks
110
116
  passed, including isolated installed-package and real stdio/Hook subprocess
111
117
  checks. No new real Codex/Hermes model session or production-Vault migration was
112
118
  performed for this patch; those scopes remain distinct from native package CI.
119
+
120
+ For 1.0.3, 161 targeted deterministic checks passed. Six invented-dialogue
121
+ scenarios passed through the configured DeepSeek Flash route, with 14 total
122
+ validation requests and 27,999 observed tokens. The original saved-proposal
123
+ replay used a fixed review verdict without network; it is not original-dialogue
124
+ real-model acceptance. Original private-dialogue transmission remains subject
125
+ to destination approval. Production-Vault and fresh native Hermes acceptance
126
+ were not performed for this patch.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "memleaf"
7
- version = "1.0.2"
7
+ version = "1.0.3"
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__ = "1.0.2"
3
+ __version__ = "1.0.3"
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
@@ -78,14 +78,23 @@ def covered(row, original, coverage=None):
78
78
  return False
79
79
  elif set(proof) == {"target", "old", "source"}:
80
80
  selection = proof["source"]
81
- if not isinstance(selection, dict) or set(selection) != {"ref", "text"}:
81
+ if not isinstance(selection, dict) or set(selection) not in ({"ref", "text"}, {"ref", "text", "kind"}):
82
82
  return False
83
83
  if not isinstance(selection["ref"], str):
84
84
  return False
85
85
  event = evidence.get(selection.get("ref"))
86
86
  quote = selection.get("text")
87
- # An assistant suggestion cannot authorize discarding user facts.
88
- if (event is None or event.get("use") != "new" or event.get("role") != "user"
87
+ reported = selection.get("kind") == "reported_result"
88
+ # Only the existing semantic reviewer may classify an exact cited
89
+ # assistant result as a superseding observation. This does not
90
+ # authorize retraction, nor turn a suggestion into a user request.
91
+ role_allowed = event is not None and (
92
+ event.get("role") == "user" and "kind" not in selection
93
+ or event.get("role") == "assistant" and reported
94
+ and row["patch"].get("validity") != "retracted"
95
+ and any(e.get("role") == "user" and e.get("use") == "new"
96
+ and e.get("ref") in row.get("evidence", []) for e in evidence.values()))
97
+ if (event is None or event.get("use") != "new" or not role_allowed
89
98
  or event["ref"] not in row.get("evidence", [])
90
99
  or not isinstance(quote, str) or not quote.strip() or quote not in event.get("text", "")):
91
100
  return False
@@ -313,6 +313,9 @@ def _scope_context(
313
313
  "this map. Use list_todos instead of relevance search for global current-todo questions. "
314
314
  "Search/list_todos return directories; read only the selected memory when needed for ordinary "
315
315
  "relevance queries; for global todo queries, read every matching todo item. A no-match result is valid.\n"
316
+ "Discover deferred memleaf tools with tool_search, then invoke the exact returned name through "
317
+ "tool_call: {\"calls\":[{\"name\":\"mcp__memleaf__search\",\"arguments\":{\"query\":\"business subject\"}}]}. "
318
+ "Put the turn token inside arguments when required below; never treat an unavailable tool as no-match.\n"
316
319
  )
317
320
  if host_bound:
318
321
  prefix += ("Hermes binds retrieval and retention identity at tool dispatch. "
@@ -1,5 +1,5 @@
1
1
  name: memleaf
2
- version: 1.0.2
2
+ version: 1.0.3
3
3
  description: "Hermes-native external MemoryProvider for local-first Markdown memory shared with the memleaf MCP server."
4
4
  hooks:
5
5
  - prefetch
@@ -5,11 +5,12 @@ INCREMENTAL_SYSTEM = """从完整可见对话提炼长期记忆,返回严格 J
5
5
  先判断每个候选是否应该存在,再选操作与字段:
6
6
  - 用户明确撤回旧事实或偏好:UPDATE 原 target,patch.validity=retracted;撤回说明转入历史,不作为仍有效的偏好保留。用户明确给出替代事实/新偏好:UPDATE 原 target 为新的有效内容。撤回后“需要时另说”不代表已建立替代偏好。
7
7
  - user 的已确认事实、决定、持续目标、责任、期限、进展、偏好可保留。临时操作请求及普通应答不自动产生长期待办。
8
- - assistant 仅能解释已确认事实、报告有依据的已执行结果。assistant 的建议、计划、推测、额外安排不产生用户/第三人义务、承诺、偏好或期限;用户确认一件事不等于确认回复的其他建议。不要把“建议以后做”改写成“需要做”。
9
- - 逐分句核验正文:assistant 增加的原因、影响、条件或后续步骤,user 未确认则省略;其余已确认事实保留。
8
+ - assistant 明确报告的查询发现、已执行结果和状态可作为对话事实,必须引用该 assistant 原文,不能归到 user 来源;不要求 user 再确认,也不自行查证外部业务真实性。assistant 的建议、计划、推测、额外安排不产生用户/第三人义务、承诺、偏好或期限;用户确认一件事不等于确认回复的其他建议。不要把“建议以后做”改写成“需要做”。
9
+ - 逐分句核验正文:保留对话明确报告的事实,保持不确定性;assistant 的建议、推测和未执行步骤不能变成既成结果或用户决定。新增结果覆盖同一事项的旧状态,旧内容已过时则替换,不把新旧矛盾并列为当前事实。
10
10
  - use=new 是本轮变化依据;context、旧目标、explicit_writes 仅供比较,不能独立产生新事实。逐项核对证据是否支持拟写事实、归属、执行人和日期。
11
11
 
12
12
  比较 new 与目标 observed 的先后;已被较新 context/目标覆盖的变化不重放,无变化 NO_CHANGE,不借 context 清空 deadline。按身份/编号、主体、目标和业务上下文比较全部候选,包含已完成项和跨会话来源。补编号、纠正状态、补有依据的结构字段均 UPDATE 原目标;完整覆盖才 NO_CHANGE。独立新事项 CREATE;同一变化同步维护全部相关候选,旧职责不可遗漏。项目与独立任务各保留生命周期;确为同一事项的重复记录才 MERGE,不凭标题相似合并。保留其余有效旧事实,正文表达当前状态,不追加日志。
13
+ 更新前核对具体事项:同一个人或客户不代表同一封邮件、请求或工作。用户使用“那个/其他/都”等指代时,结合本轮完整回复确定范围;范围仍不明确则 DEFERRED,不能挑同名旧目标更新。回复邮件、登记问题、分配任务等操作完成,不等于邮件涉及的修复或被分配任务已经完成;各自只更新自己的生命周期。用户明确批量完成的范围应维护全部对应候选,不能仅因某一条无变化就忽略其余。
13
14
 
14
15
  动作:
15
16
  CREATE:action、非空 evidence、memory;memory 必填 type/scope/title/body。
@@ -33,7 +34,7 @@ scope 采用输入引用;通用为 global,归属未知为 unscoped;只有
33
34
  patch 只含 title/body/scope/status/actionable/assignee/deadline/validity;type 沿用目标。
34
35
  新增/变更非空 assignee 必须提供 responsibility_basis:{"assignee":{"ref":"e1","text":"确立执行人的原文"}};放行级或对应 memory/patch 内均可,不能冲突。ref 必须在 evidence,text 是实际原文;新增用户执行责任必须引用 user 原文,assistant 不能赋予用户新义务。原文必须确立这个实际行动的责任,引用另一件事的请求不算。沿用无需重复引用;冗余引用仍须有效,但不刷新旧依据。
35
36
 
36
- 日期:有明确期限时放 memory.deadline 或 patch.deadline:{"ref":"e1","text":"期限原文"},不能只留正文。没有期限变更时省略 deadline。负责人交接、等待验收、尚未完成不能取消旧期限。取消期限用 {"ref":"e1","clear":true,"text":"取消期限原文"};new 未取消时保留原期限。source_time 只用于解释相对日,不补造发生日;每个相对日按其自己的消息时间解析。无来源时间保持未知,不借处理时间。正文日期与期限、材料日期、发生日期区分;无日期也能记完成事实。CREATE/UPDATE 可给 effective:{"ref":"e1","text":"生效时间原文"}。
37
+ 日期:有明确期限时放 memory.deadline 或 patch.deadline:{"ref":"e1","text":"期限原文"},不能只留正文。没有期限变更时省略 deadline。负责人交接、等待验收、尚未完成不能取消旧期限。取消期限用 {"ref":"e1","clear":true,"text":"取消期限原文"};new 未取消时保留原期限。source_time 只用于解释相对日,不补造发生日;每个相对日按其自己的消息时间解析。无来源时间保持未知,不借处理时间。正文日期与期限、材料日期、发生日期区分;无日期也能记完成事实。effective 仅在原文明确该状态的实际生效/发生时间时提供 {"ref":"e1","text":"该时间的最小原文"},否则省略;不能把任务截止日期或包含截止日期的整个请求作为操作完成的 effective。
37
38
 
38
39
  撤回沿用原 target,UPDATE.patch.validity=retracted,body 可空;说明可写 body,系统转存审计说明并清空有效正文。恢复用 validity=valid,需要较新明确依据和当前 body。
39
40
  request_kind=explicit_remember:所选 new 有保留授权,仍按用户实际要求选择内容并整理去重,不得 NO_MEMORY;独立不被要求保留的内容不强行建项。
@@ -16,8 +16,10 @@ REVIEW_SYSTEM = """核验拟写入的记忆及持续行动。original_input 是
16
16
  存在 body_omissions 时,keep:true 的 UPDATE/MERGE 必须逐项说明省略的去向;仅 body:true 不足以通过。body_omissions 按 item 列出拟议正文中不再原样出现的旧片段(比较辅助,不表示已经失效)。逐项核对完整含义,不能因主题相同、进展重复或用户未再次提及就删除。需要补回或修正文句时,直接在 decision 增加 body(修正后的完整正文字符串),field_support.body=true;不必复制 action、target、evidence,也不要把该 target 放入 updates。Core 沿用该候选的身份、证据和其他字段;已有 replace 方式仍可用,但不能同时使用 body 和 replace。对最终 UPDATE/MERGE(包括 body、replace 和 updates 修正)的剩余省略片段,在对应 decision/updates 项增加 body_coverage 数组:每项 {"target":"旧目标ref","old":"旧片段原文","body":"最终正文中完整承接该片段含义的逐字引文"},或 {"target":"旧目标ref","old":"旧片段原文","source":{"ref":"new用户证据ref","text":"明确纠正/撤回该内容的逐字引文"}}。body 引文必须完整等价且真实存在于最终正文;不能只引用旧目标中的文字却忘了将它写入修正正文。source 不能引用旧上下文或助手建议。修正后原样保留的片段无需列入。MERGE 对所有被合并目标逐项核对,撤回整个目标也需明确用户依据。无法确认则 keep:false;不要猜测或提供主题相符但实际无关的引文。没有剩余省略时省略 body_coverage。
17
17
  每个 draft.items 都必须有且只有一个 decision,item 是从 0 开始的位置。keep 判断该事项本身是否由原文确立且持续值得保留。临时操作及助手额外建议不能产生用户长期待办,原话只证明另一个操作时 keep:false。独立事实不因其他候选有误而拒绝。
18
18
  keep:true 时,field_support 必须逐个列出候选 memory/patch 中的业务字段,每个布尔值判断该字段的拟议值是否受来源支持;不列 responsibility_basis、effective、at、reopen 等引用/控制字段。没有 replace 的 NO_CHANGE/DEFERRED/NO_MEMORY 的 field_support 为 {}。keep:false 时 field_support 为 {}。unverified_fields 是系统发现未能验证引用的可选责任字段,必须判为 false;不能补造引用。这不影响其他有依据的事实或任务。归属/客户尚未确定不自动表示行动被阻塞。
19
- 不能仅检查引文存在:必须判断原话是否确立该具体行动、责任、状态和期限。assistant 的建议/计划不能赋予 user 新义务。转发、协调、记录不等于本人执行;支持旧任务不等于接受新安排。
20
- body 必须逐个事实分句核验;assistant 自行增加的原因、影响判断、条件或后续步骤不受 user 原话支持,不能因整段主题相符就判 true。剔除无依据分句,保留其余已确认事实,可用 replace 修正 CREATE 的 title/body;没有修正时 body:false。title 只标识事项,交期/发生日/进度放正文与结构字段;名称固有的年度等身份信息保留。UPDATE/NO_CHANGE 的旧标题仍含交期时,在现有 replace/updates 中一起维护。
19
+ 不能仅检查引文存在:必须判断原话是否确立该具体行动、责任、状态和期限。同名联系人/客户不证明是同一事项;核对具体对象、邮件主题、编号和请求范围,不能将回复/登记/分配完成扩大成另一项修复完成。批量完成应核对所有对应候选;对象范围不明确就保留未知。assistant 的建议/计划不能赋予 user 新义务。转发、协调、记录不等于本人执行;支持旧任务不等于接受新安排。
20
+ body 必须逐个事实分句核验;assistant 明确报告的查询发现、已执行结果和状态是可用的对话来源,应引用该 assistant,不能伪装成 user 提供;不要求 user 再确认,不核验外部业务真假。建议、推测、原因分析或未执行后续步骤不能变成既成事实、用户决定或新义务。保留不确定性,剔除无依据分句,可用 replace 修正 CREATE 的 title/body;没有修正时 body:false。title 只标识事项,交期/发生日/进度放正文与结构字段;名称固有的年度等身份信息保留。UPDATE/NO_CHANGE 的旧标题仍含交期时,在现有 replace/updates 中一起维护。
21
+ 旧正文的事实状态被本轮 assistant 明确报告的新结果覆盖时,可用 body_coverage.source:{"ref":"new助手证据ref","text":"明确报告结果的逐字引文","kind":"reported_result"},且该行 evidence 必须同时引用本轮 user 与 assistant。只用于替换同一事项的过时正文,不授权整条撤回、删除用户要求或采纳助手建议。不能为通过审查保留互相矛盾的新旧当前状态;无关旧事实仍须完整保留。
22
+ 仅当原候选行含 effective 控制字段时,才可在对应 decision 输出 effective_support(布尔值);候选仅有 deadline 或正文日期时禁止输出该键。逐项核对 effective 是否表示实际状态生效时间。截止日、目标完成日或含日期的整个操作请求不证明实际生效时间,可用 effective_support:false 仅移除误分类的 effective;明确生效时间用 true 保留,不能为放行未来状态而丢弃。不能增加候选原本没有的 effective。
21
23
  尤其检查拟改 deadline:依赖条件、交接执行人、进度、尚未完成都不证明原期限已取消;只有明确取消/替换这个期限才支持变更。没有明确期限变化时 deadline:false,原期限沿用。卡点和等待条件仅在正文中维护,并清除已经解决的旧卡点。
22
24
  新引用只能来自 new;context 和旧目标只供比较,不能重新推动旧变化。候选若仅重新陈述旧目标已覆盖的内容,不应作为新 UPDATE。同一事项补充/纠正维护原目标,独立事项允许 CREATE,不能凭标题相似合并。
23
25
  逐字段判断后输出 decisions;对共同事实变更,检查所有候选记忆中是否仍有旧职责或旧状态,不能认可只更新一条而遗留冲突。确认 MERGE 各方确为同一事项且完整保留有效内容;独立生命周期的项目/任务不可合并。
@@ -176,7 +178,7 @@ def apply_review(request, response):
176
178
  rejected.append(deepcopy(row))
177
179
  for decision in decisions:
178
180
  if (not isinstance(decision, dict) or not {"item", "keep", "field_support"} <= set(decision)
179
- or set(decision) - {"item", "keep", "field_support", "replace", "body", "body_coverage"}):
181
+ or set(decision) - {"item", "keep", "field_support", "replace", "body", "body_coverage", "effective_support"}):
180
182
  raise ValueError
181
183
  i = decision["item"]
182
184
  if type(i) is not int or not 0 <= i < len(rows) or i in positions or type(decision["keep"]) is not bool:
@@ -232,6 +234,23 @@ def apply_review(request, response):
232
234
  for name in data.get("unverified_fields", [[] for _ in rows])[i]:
233
235
  if name in support:
234
236
  support[name] = False
237
+ if "effective_support" in decision:
238
+ if (type(decision["effective_support"]) is not bool or "effective" not in row
239
+ or row.get("action") not in {"CREATE", "UPDATE"} or not decision["keep"]):
240
+ raise ValueError
241
+ if decision["effective_support"] is False:
242
+ # Repair classification only after validating the original
243
+ # source selection. Otherwise removing it would conceal a
244
+ # malformed or fabricated citation from the row compiler.
245
+ from .incremental_protocol import _selected
246
+ evidence = {e["ref"]: e for e in data["original_input"]["evidence"]}
247
+ try:
248
+ _selected(row["effective"], evidence, row.get("evidence", []))
249
+ fresh = evidence[row["effective"]["ref"]]["use"] == "new"
250
+ except (ValueError, TypeError, KeyError):
251
+ fresh = False
252
+ if fresh:
253
+ row.pop("effective")
235
254
  if isinstance(row, dict) and row.get("action") in {"NO_CHANGE", "NO_MEMORY", "DEFERRED"}:
236
255
  continue # Review cannot erase an unresolved control disposition.
237
256
  if not decision["keep"] or any(not support.get(k, True) for k in _REQUIRED.get(row["action"].upper(), set())):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memleaf
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A local-first Markdown memory core for AI agents
5
5
  Author: memleaf contributors
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Dynamic: license-file
24
24
 
25
25
  [English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
26
26
 
27
- > **稳定版:1.0.2。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
27
+ > **稳定版:1.0.3。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
28
28
  > **Codex 可通过 `--profile host` 使用当前宿主模型完成记忆闭环,无需另配 Memleaf 模型 API Key。** 本地 Owner 仍需配置客户端身份、读写权限及来源信任;客户端主动调用工具,不代表每轮自动记忆。
29
29
  > host profile 支持独立于内容类型的 `actionable` 和结构化 `waiting_on`,每份 work 默认最多三次被接受的 submit;Memleaf 负责确定性校验、落盘与恢复。
30
30
  > 默认 `model` profile 和 Hermes 原生接入继续使用独立 Model Route,提炼与语义复核共用每份工作的最多五次模型请求。旧接口、现有记忆和默认入口保留,升级无需正式 Vault 迁移。Antigravity(反重力)当前不支持。
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes