memleaf 0.2.92__tar.gz → 0.2.93__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.
- {memleaf-0.2.92 → memleaf-0.2.93}/CHANGELOG.md +18 -0
- {memleaf-0.2.92/src/memleaf.egg-info → memleaf-0.2.93}/PKG-INFO +2 -2
- {memleaf-0.2.92 → memleaf-0.2.93}/README.en.md +1 -1
- {memleaf-0.2.92 → memleaf-0.2.93}/README.md +1 -1
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/body-compaction.md +10 -3
- {memleaf-0.2.92 → memleaf-0.2.93}/pyproject.toml +1 -1
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/__init__.py +1 -1
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/compaction.py +5 -2
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/plugin.yaml +1 -1
- {memleaf-0.2.92 → memleaf-0.2.93/src/memleaf.egg-info}/PKG-INFO +2 -2
- {memleaf-0.2.92 → memleaf-0.2.93}/LICENSE +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/MANIFEST.in +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/acceptance-evidence-guide.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/automatic-processing-route.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/candidate-reconciliation.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/capture-budget-design.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/config-migrations.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/core-refactor.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/development-closeout.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/evidence-retention.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/explicit-memory-update.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/extraction-latency.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/failed-run-recovery.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/gate-evidence-boundary.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/general-processing.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/hermes-mcp-runtime.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/hermes-provider-compatibility.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/hermes-source-comparison-context.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/host-acceptance-runbook.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/immutable-release-assets.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-commit-contract.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-execution.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-native-comparison.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-partial-recovery.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-planner-preview.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-runtime-contract.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-scope-registration.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/incremental-selected-retention.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/installed-artifact-verification.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/memory-lifecycle-tools.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/memory-state-contract.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/migration-preflight.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/processing-quality-acceptance.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/public-query-integrity.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/query-performance.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/remember-incremental-route.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/runtime-state-retention.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/semantic-extraction-protocol.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/source-work-contract.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/docs/v0.2.26-processing-status.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/examples/README.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/examples/basic_usage.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/examples/incremental_acceptance.json +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/examples/mcp_stdio.ndjson +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/examples/query_benchmark.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/install.ps1 +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/install.sh +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/setup.cfg +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/__main__.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/acceptance.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/adapters/__init__.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/adapters/antigravity.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/adapters/base.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/adapters/codex.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/adapters/hermes.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/admission.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/batch_review.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/budget.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/capture.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/cli.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/config.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/create_coordinator.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/credentials.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/evidence_budget.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/evidence_policy.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/evidence_structure.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/evidence_syntax.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/explicit_text_source.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/extraction_budget.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/extraction_capability.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/extraction_work_state.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/frontmatter.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/README.md +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/__init__.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/_mcp_client.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/_provider.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/_shared.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/evidence_budget.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_provider/provider_compatibility.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/hermes_runtime.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/historical_context.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/host_events.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/host_retention.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/host_runtime.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/host_turn_identity.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/inbox.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_commit.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_dates.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_execution.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_explicit.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_failed_recovery.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_journal.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_merge.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_native.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_partial.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_preview.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_prompts.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_protocol.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_recovery.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_run_state.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_runtime.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_scopes.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_selection.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/incremental_semantics.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/index.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/inspection.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/installer.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/legacy_update_journal.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/lifecycle_maintenance.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/__init__.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/base.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/claude_compatible.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/gemini.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/openai_compatible.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/router.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/llm/thinking.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/locking.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/mcp_server.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/memory_commit.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/memory_planner.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/memory_retraction.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/memory_update.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/memory_writer.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/migration.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/model_capabilities.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/model_discovery.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/model_execution.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/models.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/native_index.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/native_registration.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/parallel_model.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/planning_candidates.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/planning_context.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/process_common.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/process_jobs.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/process_journal.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/process_owner.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/processing.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/processing_route.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/prompts.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/provenance.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/provider_compatibility.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/query_clock.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/query_progress.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/query_scan.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/receipt_codec.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/recording_policy.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/redaction.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/remember_route.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/retention.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/retrieval.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/retrieval_gate.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/retrieval_lifecycle.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/runtime_retention.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/scope_maintenance.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/scope_state.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/semantic_maintenance.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/semantic_protocol.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/service.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/single_pass_memory_planner.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/single_pass_plan.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/source_policy.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/state_layout.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/subprocess_flags.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/summary_batch.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/target_reconciliation.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/turn_audit.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/turn_plan.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/update_coordinator.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/update_review.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/validation.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf/vault.py +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf.egg-info/SOURCES.txt +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf.egg-info/dependency_links.txt +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf.egg-info/entry_points.txt +0 -0
- {memleaf-0.2.92 → memleaf-0.2.93}/src/memleaf.egg-info/top_level.txt +0 -0
|
@@ -5,6 +5,24 @@ All notable changes to memleaf are documented here.
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
## 0.2.93 — 2026-10-05
|
|
9
|
+
|
|
10
|
+
### Keep useful body compaction when another candidate has no net savings
|
|
11
|
+
|
|
12
|
+
- Skip each valid compaction proposal that does not reduce both the content
|
|
13
|
+
estimate and stored record bytes, including maintenance metadata. Other safe
|
|
14
|
+
proposals in the same response can still commit; all-no-gain batches return
|
|
15
|
+
noop without writing history or a compaction journal.
|
|
16
|
+
- Keep strict whole-response validation, protected metadata, selected-source
|
|
17
|
+
snapshot checks and transactional recovery. Invalid identities, duplicate rows,
|
|
18
|
+
multi-ID merges and extra business fields still reject the batch.
|
|
19
|
+
- Add no model request or retry. Automatic maintenance keeps its existing
|
|
20
|
+
durable budget and input deduplication, including across restarts.
|
|
21
|
+
- Validation: 58 focused regressions and 12 isolated replays of saved real
|
|
22
|
+
DeepSeek responses passed. The original mixed-gain case now shortens its useful
|
|
23
|
+
record while keeping the other file byte-for-byte unchanged. Replays made no
|
|
24
|
+
external model calls; they are not a new live-model run.
|
|
25
|
+
|
|
8
26
|
## 0.2.92 — 2026-10-05
|
|
9
27
|
|
|
10
28
|
### Preserve unresolved review outcomes and schedule bounded lifecycle maintenance
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memleaf
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.93
|
|
4
4
|
Summary: A local-first Markdown memory core for AI agents
|
|
5
5
|
Author: memleaf contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -23,7 +23,7 @@ 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.
|
|
26
|
+
> **版本:0.2.93。**
|
|
27
27
|
> 自动提炼和复核共用同一条“未来记忆价值”标准:模型综合未来复用、信息增量、再次读取时的直接可用性和忘记成本,只保留对未来理解、判断或行动有实质影响的最小核心;没有明确价值的信息不提炼,不按具体业务场景硬编码排除。
|
|
28
28
|
> 提炼先比较旧事项中的编号、目标、进展、责任和期限;补全未知信息也应维护原事项,另建独立待办不能替代项目事实更新。确认重复的记忆在现有处理请求中合并,保留历史与来源;项目和独立任务保持各自生命周期,Core 不按标题强行合并。
|
|
29
29
|
> 新请求兼容等价的字段表示;未知执行人保持 `null`,新增或变更负责人和期限需要真实来源;等待条件在正文维护,不再提炼 `waiting_on`。行动及相关字段经过有界语义复核,提炼与复核共用每份工作的最多五次模型请求额度,成功即停止;复核失败不写入。来源时间用于解析相对日期,不补造事实日期。
|
|
@@ -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
|
-
> **Version: 0.2.
|
|
7
|
+
> **Version: 0.2.93.**
|
|
8
8
|
> Automatic extraction and review share one future-value standard: the model weighs likely reuse, information gain, direct usability when read again, and the cost of forgetting. It keeps only the smallest core that can materially help future understanding, decisions, or actions; information without clear value is not extracted, and no business-specific exclusion rule is hard-coded.
|
|
9
9
|
> Extraction compares existing identifiers, objectives, progress, responsibility and deadlines first. Filling an unknown also maintains the original item; a separate task does not replace updating shared project facts. Confirmed duplicates can be merged in the existing processing requests with their sources and history preserved. Independent project and task lifecycles remain separate; Core does not merge matching titles.
|
|
10
10
|
> New requests accept equivalent field representations. Unknown executors remain `null`; new or changed responsibility and deadlines require actual source evidence. Dependencies belong in the body; `waiting_on` is no longer extracted. Proposed actions and related fields undergo bounded semantic verification within a shared five-request limit per work item, stopping on success; failed verification blocks writes. Source time resolves relative dates without inventing factual dates.
|
|
@@ -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
|
-
> **版本:0.2.
|
|
7
|
+
> **版本:0.2.93。**
|
|
8
8
|
> 自动提炼和复核共用同一条“未来记忆价值”标准:模型综合未来复用、信息增量、再次读取时的直接可用性和忘记成本,只保留对未来理解、判断或行动有实质影响的最小核心;没有明确价值的信息不提炼,不按具体业务场景硬编码排除。
|
|
9
9
|
> 提炼先比较旧事项中的编号、目标、进展、责任和期限;补全未知信息也应维护原事项,另建独立待办不能替代项目事实更新。确认重复的记忆在现有处理请求中合并,保留历史与来源;项目和独立任务保持各自生命周期,Core 不按标题强行合并。
|
|
10
10
|
> 新请求兼容等价的字段表示;未知执行人保持 `null`,新增或变更负责人和期限需要真实来源;等待条件在正文维护,不再提炼 `waiting_on`。行动及相关字段经过有界语义复核,提炼与复核共用每份工作的最多五次模型请求额度,成功即停止;复核失败不写入。来源时间用于解析相对日期,不补造事实日期。
|
|
@@ -7,8 +7,9 @@ extraction, a task-state update, or a multi-ID deduplication service.
|
|
|
7
7
|
## One existing entry, one narrower model job
|
|
8
8
|
|
|
9
9
|
`service.compact(model=..., router=...)` keeps the existing explicit maintenance
|
|
10
|
-
entry and threshold/low-priority candidate selection.
|
|
11
|
-
|
|
10
|
+
entry and threshold/low-priority candidate selection. Completed `process` and
|
|
11
|
+
`remember` calls can also schedule threshold-driven body maintenance within the
|
|
12
|
+
source turn's remaining request budget. The configured threshold is a local storage
|
|
12
13
|
estimate, not a claim about a model's context capacity. No default route,
|
|
13
14
|
package version, incremental prompt or automatic request allowance changes.
|
|
14
15
|
|
|
@@ -58,7 +59,13 @@ counts this invocation boundary, not independently observed provider billing or
|
|
|
58
59
|
hidden transport retries within an externally supplied backend.
|
|
59
60
|
|
|
60
61
|
The output must reduce both the existing content estimate and the actual stored
|
|
61
|
-
record bytes.
|
|
62
|
+
record bytes, including new maintenance metadata. Each valid proposal with no
|
|
63
|
+
net savings is skipped independently; other safe proposals in the same response
|
|
64
|
+
can still be committed. If none have savings, the result is `noop` with no
|
|
65
|
+
history or journal writes. All rows are validated before applying this filter;
|
|
66
|
+
invalid structure, identities or protected fields still reject the batch.
|
|
67
|
+
Skipping a row does not trigger another model call. Results expose
|
|
68
|
+
`record_bytes_before` and `record_bytes_after` for
|
|
62
69
|
changed records; these exclude the retained historical copy and are not total
|
|
63
70
|
Vault-disk savings. `active_tokens_*` remain local estimates, not tokenizer or
|
|
64
71
|
latency measurements. A more concise body is not proof of semantic equivalence:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Local-first Markdown memory core for AI agents."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.2.
|
|
3
|
+
__version__ = "0.2.93"
|
|
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
|
|
@@ -546,10 +546,13 @@ class Compactor:
|
|
|
546
546
|
if summary["body"] == source_candidates[0].memory.body:
|
|
547
547
|
continue
|
|
548
548
|
replacement = self._build_replacement(summary, source_candidates, now=now)
|
|
549
|
+
# A valid proposal without net savings is a per-record no-op.
|
|
550
|
+
# Include maintenance metadata in byte cost; other safe rows may
|
|
551
|
+
# still be useful. Protocol and snapshot errors remain batch errors.
|
|
549
552
|
if len(replacement.raw.encode("utf-8")) >= len(source_candidates[0].raw.encode("utf-8")):
|
|
550
|
-
|
|
553
|
+
continue
|
|
551
554
|
if replacement.replacement_tokens >= replacement.source_tokens:
|
|
552
|
-
|
|
555
|
+
continue
|
|
553
556
|
replacements.append(replacement)
|
|
554
557
|
return replacements
|
|
555
558
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memleaf
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.93
|
|
4
4
|
Summary: A local-first Markdown memory core for AI agents
|
|
5
5
|
Author: memleaf contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -23,7 +23,7 @@ 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.
|
|
26
|
+
> **版本:0.2.93。**
|
|
27
27
|
> 自动提炼和复核共用同一条“未来记忆价值”标准:模型综合未来复用、信息增量、再次读取时的直接可用性和忘记成本,只保留对未来理解、判断或行动有实质影响的最小核心;没有明确价值的信息不提炼,不按具体业务场景硬编码排除。
|
|
28
28
|
> 提炼先比较旧事项中的编号、目标、进展、责任和期限;补全未知信息也应维护原事项,另建独立待办不能替代项目事实更新。确认重复的记忆在现有处理请求中合并,保留历史与来源;项目和独立任务保持各自生命周期,Core 不按标题强行合并。
|
|
29
29
|
> 新请求兼容等价的字段表示;未知执行人保持 `null`,新增或变更负责人和期限需要真实来源;等待条件在正文维护,不再提炼 `waiting_on`。行动及相关字段经过有界语义复核,提炼与复核共用每份工作的最多五次模型请求额度,成功即停止;复核失败不写入。来源时间用于解析相对日期,不补造事实日期。
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|