memleaf 0.2.96__tar.gz → 1.0.1__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.96 → memleaf-1.0.1}/CHANGELOG.md +77 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/MANIFEST.in +2 -3
- {memleaf-0.2.96/src/memleaf.egg-info → memleaf-1.0.1}/PKG-INFO +57 -17
- {memleaf-0.2.96 → memleaf-1.0.1}/README.en.md +55 -16
- {memleaf-0.2.96 → memleaf-1.0.1}/README.md +55 -16
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/acceptance-evidence-guide.md +12 -18
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/host-acceptance-runbook.md +4 -7
- memleaf-1.0.1/docs/host-v2-contract.md +72 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/installed-artifact-verification.md +5 -2
- memleaf-1.0.1/docs/processing-quality-acceptance.md +33 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/query-performance.md +7 -8
- memleaf-1.0.1/docs/stability.md +98 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/pyproject.toml +3 -1
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/__init__.py +1 -1
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/cli.py +14 -2
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/plugin.yaml +1 -1
- memleaf-1.0.1/src/memleaf/host_v2.py +959 -0
- memleaf-1.0.1/src/memleaf/host_v2_auth.py +396 -0
- memleaf-1.0.1/src/memleaf/host_v2_cli.py +92 -0
- memleaf-1.0.1/src/memleaf/host_v2_common.py +45 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/schemas/admin-records.schema.json +208 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/schemas/memleaf-host-v2.schema.json +4865 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/schemas/read-integrity.schema.json +92 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/cancel_memory.json +1007 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/forget_memory.json +1215 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/memory_capabilities.json +1427 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/memory_work.json +1695 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/prepare_memory.json +1531 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/resume_memory.json +1000 -0
- memleaf-1.0.1/src/memleaf/host_v2_contracts/tools/submit_memory.json +2032 -0
- memleaf-1.0.1/src/memleaf/host_v2_mcp.py +125 -0
- memleaf-1.0.1/src/memleaf/host_v2_owner.py +466 -0
- memleaf-1.0.1/src/memleaf/host_v2_proposal.py +644 -0
- memleaf-1.0.1/src/memleaf/host_v2_schema.py +423 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/mcp_server.py +50 -6
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/memory_writer.py +14 -4
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/service.py +63 -7
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/state_layout.py +7 -3
- {memleaf-0.2.96 → memleaf-1.0.1/src/memleaf.egg-info}/PKG-INFO +57 -17
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf.egg-info/SOURCES.txt +20 -3
- memleaf-0.2.96/docs/processing-quality-acceptance.md +0 -189
- memleaf-0.2.96/examples/incremental_acceptance.json +0 -747
- memleaf-0.2.96/examples/query_benchmark.py +0 -133
- memleaf-0.2.96/src/memleaf/acceptance.py +0 -477
- {memleaf-0.2.96 → memleaf-1.0.1}/LICENSE +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/automatic-processing-route.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/body-compaction.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/candidate-reconciliation.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/capture-budget-design.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/config-migrations.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/core-refactor.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/development-closeout.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/evidence-retention.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/explicit-memory-update.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/extraction-latency.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/failed-run-recovery.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/gate-evidence-boundary.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/general-processing.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/hermes-mcp-runtime.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/hermes-provider-compatibility.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/hermes-source-comparison-context.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/immutable-release-assets.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-commit-contract.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-execution.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-native-comparison.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-partial-recovery.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-planner-preview.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-runtime-contract.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-scope-registration.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/incremental-selected-retention.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/memory-lifecycle-tools.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/memory-state-contract.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/migration-preflight.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/public-query-integrity.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/remember-incremental-route.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/runtime-state-retention.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/semantic-extraction-protocol.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/source-work-contract.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/docs/v0.2.26-processing-status.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/examples/README.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/examples/basic_usage.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/examples/mcp_stdio.ndjson +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/install.ps1 +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/install.sh +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/setup.cfg +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/__main__.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/adapters/__init__.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/adapters/antigravity.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/adapters/base.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/adapters/codex.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/adapters/hermes.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/admission.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/batch_review.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/body_preservation.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/budget.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/capture.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/compaction.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/config.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/create_coordinator.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/credentials.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/evidence_budget.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/evidence_policy.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/evidence_structure.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/evidence_syntax.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/explicit_text_source.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/extraction_budget.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/extraction_capability.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/extraction_work_state.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/frontmatter.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/README.md +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/__init__.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/_mcp_client.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/_provider.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/_shared.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/evidence_budget.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_provider/provider_compatibility.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/hermes_runtime.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/historical_context.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/host_events.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/host_retention.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/host_runtime.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/host_turn_identity.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/inbox.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_commit.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_dates.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_execution.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_explicit.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_failed_recovery.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_journal.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_merge.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_native.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_partial.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_preview.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_prompts.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_protocol.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_recovery.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_run_state.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_runtime.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_scopes.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_selection.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/incremental_semantics.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/index.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/inspection.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/installer.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/legacy_update_journal.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/lifecycle_maintenance.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/__init__.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/base.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/claude_compatible.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/gemini.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/openai_compatible.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/router.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/llm/thinking.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/locking.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/memory_commit.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/memory_planner.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/memory_retraction.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/memory_update.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/migration.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/model_capabilities.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/model_discovery.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/model_execution.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/models.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/native_index.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/native_registration.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/parallel_model.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/planning_candidates.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/planning_context.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/process_common.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/process_jobs.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/process_journal.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/process_owner.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/processing.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/processing_route.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/prompts.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/provenance.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/provider_compatibility.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/query_clock.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/query_progress.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/query_scan.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/receipt_codec.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/recording_policy.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/redaction.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/remember_route.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/retention.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/retrieval.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/retrieval_gate.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/retrieval_lifecycle.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/runtime_retention.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/scope_maintenance.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/scope_state.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/semantic_maintenance.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/semantic_protocol.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/single_pass_memory_planner.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/single_pass_plan.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/source_policy.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/subprocess_flags.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/summary_batch.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/target_reconciliation.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/turn_audit.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/turn_plan.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/update_coordinator.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/update_review.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/validation.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf/vault.py +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf.egg-info/dependency_links.txt +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf.egg-info/entry_points.txt +0 -0
- {memleaf-0.2.96 → memleaf-1.0.1}/src/memleaf.egg-info/top_level.txt +0 -0
|
@@ -5,6 +5,83 @@ All notable changes to memleaf are documented here.
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
## 1.0.1 — 2026-10-08
|
|
9
|
+
|
|
10
|
+
### Optional host-model MCP workflow for Codex
|
|
11
|
+
|
|
12
|
+
- Add an explicit `--profile host` route that lets Codex and other compatible
|
|
13
|
+
MCP hosts use their running model to propose memory changes. Memleaf performs
|
|
14
|
+
deterministic validation, persistence and recovery with no independent model
|
|
15
|
+
API key, model discovery, sampling or fallback model calls. The existing
|
|
16
|
+
`model` profile remains the default; native Hermes processing retains its
|
|
17
|
+
independent Model Route and shared five-request extraction/review budget.
|
|
18
|
+
- Add seven host tools for capabilities, preparation, paged work inspection,
|
|
19
|
+
submission, recovery, cancellation and approved forgetting. Local Owner
|
|
20
|
+
commands bind credentials, permissions, scopes and acceptable source trust;
|
|
21
|
+
`host-grant` returns MCP configuration without modifying Codex defaults.
|
|
22
|
+
This route requires deliberate tool calls and does not automatically capture
|
|
23
|
+
or process every conversation turn.
|
|
24
|
+
- Persist source-bound work, cumulative receipts and a default limit of three
|
|
25
|
+
accepted submits per work. Preserve successful items during partial repair,
|
|
26
|
+
request idempotency and target revisions during replay, and frozen operation
|
|
27
|
+
identities during interrupted I/O recovery. Changed connections or request IDs
|
|
28
|
+
do not reset source budgets; new processing budgets require exact Owner approval.
|
|
29
|
+
- Support action tracking independently of content type, including projects;
|
|
30
|
+
distinguish `assignee` from `waiting_on` and retain unknown fields without
|
|
31
|
+
invented evidence. Include source-checked updates, retraction/restoration,
|
|
32
|
+
preserve-union MERGE and approved COMPACT/delete operations. Check permissions
|
|
33
|
+
on every work view, query page, replay and historical deletion target.
|
|
34
|
+
- Render client input schemas without local references or object-union display
|
|
35
|
+
branches, with concise construction examples and safe field-level errors.
|
|
36
|
+
This display adaptation does not relax the original Core contract validation
|
|
37
|
+
or add runtime dependencies. Preserve existing public interfaces, default
|
|
38
|
+
entry points, Markdown memories and history; no formal Vault migration is required.
|
|
39
|
+
|
|
40
|
+
### Validation and supported scope
|
|
41
|
+
|
|
42
|
+
- All 152 added deterministic checks passed, covering contract shapes, real
|
|
43
|
+
stdio MCP, authorization, source evidence, CAS, recovery, retention and legacy
|
|
44
|
+
data compatibility. Existing affected regression checks were compared with
|
|
45
|
+
their prior baseline; this is not a claim that all historical tests passed.
|
|
46
|
+
- Live macOS acceptance used Codex CLI 0.162.0-alpha.2 with GPT-6.1 Sol and
|
|
47
|
+
Hermes CLI 0.21.5 with DeepSeek v4.1 Flash. Both clients completed eight basic
|
|
48
|
+
behaviors, including independent-process search/read and distinct memories
|
|
49
|
+
with identical titles. Codex also verified preserve-union MERGE, reopening
|
|
50
|
+
and cancelling a project, whole-memory retraction/restoration with the same
|
|
51
|
+
ID, and precisely approved COMPACT: six advanced changes were saved, applied
|
|
52
|
+
and settled. Acceptance included corrective submits and Owner-approved new
|
|
53
|
+
processing budgets; it does not establish universal first-pass success.
|
|
54
|
+
- Memleaf made zero independent model calls in these host runs. Host usage was
|
|
55
|
+
recorded separately: Codex model request counts were unavailable, while
|
|
56
|
+
Hermes reported actual request/token usage. MCP call counts are not model
|
|
57
|
+
request counts, and reusing the host model does not mean zero host usage.
|
|
58
|
+
- These live results do not certify every model or MCP client, Windows/Linux
|
|
59
|
+
real-model behavior, or a formal production-Vault migration/rollback exercise.
|
|
60
|
+
Installed-artifact CI and real-model acceptance remain separate release gates.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## 1.0.0 — 2026-10-06
|
|
64
|
+
|
|
65
|
+
### Stable public interfaces and production-only distributions
|
|
66
|
+
|
|
67
|
+
- Define the 1.x compatibility scope for documented Python exports, CLI entry
|
|
68
|
+
points, MCP tools, configuration and persisted memory formats. Preserve the
|
|
69
|
+
0.2.96 production runtime, prompts, existing storage/recovery contracts and
|
|
70
|
+
five-request budget; no model request or Vault migration is added.
|
|
71
|
+
- Move the isolated acceptance harness, synthetic acceptance suite and query
|
|
72
|
+
benchmark into the ignored local development directory. Remove the former
|
|
73
|
+
`python -m memleaf.acceptance` developer entry point from public artifacts;
|
|
74
|
+
normal Python/CLI/MCP interfaces and usage/discovery examples remain.
|
|
75
|
+
- Remove obsolete packaged-tool instructions and prevent developer/private files
|
|
76
|
+
from re-entering wheel or source distributions through the release CI. Keep
|
|
77
|
+
the existing five-cell native installation matrix and publish verified bytes.
|
|
78
|
+
- The 0.2.96 installed Hermes acceptance remains evidence for the unchanged
|
|
79
|
+
production runtime: four successful turns, eight Memleaf requests and 42,518
|
|
80
|
+
observed tokens. The 1.0.0 release verifies interface compatibility, isolated
|
|
81
|
+
installed regressions and clean artifact payloads separately; a stable version
|
|
82
|
+
is not a guarantee of perfect future model responses.
|
|
83
|
+
|
|
84
|
+
|
|
8
85
|
## 0.2.96 — 2026-10-06
|
|
9
86
|
|
|
10
87
|
### Preserve existing information when replacing memory bodies
|
|
@@ -5,9 +5,8 @@ include install.ps1
|
|
|
5
5
|
include README.md
|
|
6
6
|
include README.en.md
|
|
7
7
|
recursive-include examples *.md *.ndjson *.py
|
|
8
|
-
recursive-exclude examples *_acceptance.py
|
|
8
|
+
recursive-exclude examples *_acceptance.py query_benchmark.py incremental_acceptance.json
|
|
9
9
|
prune tests
|
|
10
|
+
prune tests_public
|
|
10
11
|
|
|
11
12
|
include docs/*.md
|
|
12
|
-
|
|
13
|
-
include examples/incremental_acceptance.json
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memleaf
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: A local-first Markdown memory core for AI agents
|
|
5
5
|
Author: memleaf contributors
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Keywords: ai-agents,local-first,markdown,memory
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
8
9
|
Classifier: Intended Audience :: Developers
|
|
9
10
|
Classifier: Programming Language :: Python :: 3
|
|
10
11
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -23,12 +24,10 @@ Dynamic: license-file
|
|
|
23
24
|
|
|
24
25
|
[English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
|
|
25
26
|
|
|
26
|
-
>
|
|
27
|
-
>
|
|
28
|
-
>
|
|
29
|
-
>
|
|
30
|
-
> 待办 `due_date` 只表示待办动作本身明确声明的截止日;属于待办主题或预期结果的日期不会被误作截止日。项目归属由模型按语义判断,不要求项目名在证据里逐字出现。复核阶段会保留首轮已选定的更新目标,避免“状态变更”被降级成新增记忆。Markdown 仍是唯一事实源。
|
|
31
|
-
> **当前版本支持 Hermes 和 Codex。** Antigravity(反重力)不检测、不安装、不配置。
|
|
27
|
+
> **稳定版:1.0.1。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
|
|
28
|
+
> **Codex 可通过 `--profile host` 使用当前宿主模型完成记忆闭环,无需另配 Memleaf 模型 API Key。** 本地 Owner 仍需配置客户端身份、读写权限及来源信任;客户端主动调用工具,不代表每轮自动记忆。
|
|
29
|
+
> host profile 支持独立于内容类型的 `actionable` 和结构化 `waiting_on`,每份 work 默认最多三次被接受的 submit;Memleaf 负责确定性校验、落盘与恢复。
|
|
30
|
+
> 默认 `model` profile 和 Hermes 原生接入继续使用独立 Model Route,提炼与语义复核共用每份工作的最多五次模型请求。旧接口、现有记忆和默认入口保留,升级无需正式 Vault 迁移。Antigravity(反重力)当前不支持。
|
|
32
31
|
|
|
33
32
|
## 项目定位
|
|
34
33
|
|
|
@@ -45,6 +44,8 @@ memleaf 不会把整个 Vault 或整段历史对话自动塞进模型上下文
|
|
|
45
44
|
|
|
46
45
|
## 当前工作流
|
|
47
46
|
|
|
47
|
+
原有 `model` profile / Hermes 原生工作流:
|
|
48
|
+
|
|
48
49
|
```text
|
|
49
50
|
可见的 user/assistant 对话
|
|
50
51
|
│
|
|
@@ -89,6 +90,16 @@ Hermes 使用原生 MemoryProvider 维护生命周期,并通过 MCP 获取 Sco
|
|
|
89
90
|
|
|
90
91
|
## 记忆提炼规则
|
|
91
92
|
|
|
93
|
+
以下规则适用于原有 `model` profile / Hermes 原生自动提炼;host profile 的动作、字段与预算见下文 [Codex host 接入](#codex)。
|
|
94
|
+
|
|
95
|
+
自动提炼和复核共用同一条“未来记忆价值”标准:模型综合未来复用、信息增量、再次读取时的直接可用性和忘记成本,只保留对未来理解、判断或行动有实质影响的最小核心;没有明确价值的信息不提炼,不按具体业务场景硬编码排除。
|
|
96
|
+
|
|
97
|
+
提炼先比较旧事项中的编号、目标、进展、责任和期限;补全未知信息也应维护原事项,另建独立待办不能替代项目事实更新。确认重复的记忆在现有处理请求中合并,保留历史与来源;项目和独立任务保持各自生命周期,Core 不按标题强行合并。
|
|
98
|
+
|
|
99
|
+
新请求兼容等价的字段表示;未知执行人保持 `null`,新增或变更负责人和期限需要真实来源;等待条件在正文维护,不再提炼 `waiting_on`。行动及相关字段经过有界语义复核,提炼与复核共用每份工作的最多五次模型请求额度,成功即停止;复核失败不写入。来源时间用于解析相对日期,不补造事实日期。
|
|
100
|
+
|
|
101
|
+
待办 `due_date` 只表示待办动作本身明确声明的截止日;属于待办主题或预期结果的日期不会被误作截止日。项目归属由模型按语义判断,不要求项目名在证据里逐字出现。复核阶段会保留首轮已选定的更新目标,避免“状态变更”被降级成新增记忆。Markdown 仍是唯一事实源。
|
|
102
|
+
|
|
92
103
|
**10 秒是自动提炼的性能目标,不是失败阈值。** HTTP 请求遵循 `llm.request_timeout`(默认 120 秒);正常返回且通过 Core 校验的结果不会仅因超过 10 秒而丢弃。模型单次请求、有限修复和逐轮提交保留,耗时与是否完成分别统计。详见 [提炼耗时与超时](docs/extraction-latency.md)。
|
|
93
104
|
|
|
94
105
|
memleaf 不把每句话都保存为记忆。处理一轮完整的 user + assistant 可见文本时,模型先判断是否存在明确的未来复用价值:
|
|
@@ -111,7 +122,7 @@ memleaf 不把每句话都保存为记忆。处理一轮完整的 user + assista
|
|
|
111
122
|
|
|
112
123
|
## 安装
|
|
113
124
|
|
|
114
|
-
要求 Python 3.11
|
|
125
|
+
要求 Python 3.11+。Hermes 是默认安装目标;Codex 可明确选择下述 host MCP 接入,或保留原有 model profile 自动提炼接入。
|
|
115
126
|
|
|
116
127
|
### Windows
|
|
117
128
|
|
|
@@ -180,6 +191,35 @@ Hermes 显式保存使用 MCP `save_turn`:先绑定本轮并排队,轮次完
|
|
|
180
191
|
|
|
181
192
|
### Codex
|
|
182
193
|
|
|
194
|
+
#### 复用 Codex 当前模型:host profile
|
|
195
|
+
|
|
196
|
+
安装包后,由本地 Owner 为客户端创建授权:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
python -m pip install -U memleaf
|
|
200
|
+
python -m memleaf host-grant --vault /path/to/vault --principal codex --accept-caller-asserted --json
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`host-grant` 输出 `mcpServers` 的 `command`/`args` 和本地凭据文件路径,不会自动修改 Codex 配置。凭据用于本地授权,是以 `0600` 创建的文件,不是模型 Key;默认路径为 `<vault>/_state/host_credentials/codex.token`,也可通过 `--credential-file` 指定新路径。已有凭据文件不会被覆盖。
|
|
204
|
+
|
|
205
|
+
默认读写范围为 `global`;需要其他范围时,在创建授权的命令上重复传入 `--read-scope` 和 `--write-scope`。`--accept-caller-asserted` 表示 Owner 信任该客户端如实提交可见对话,不代表 Memleaf 独立验证了用户决定。省略该选项时,应先通过 Owner 确认来源或使用可靠绑定的来源。维护、永久删除等能力需要各自权限和精确审批,详见 [host-v2 合同](docs/host-v2-contract.md)。
|
|
206
|
+
|
|
207
|
+
将输出中的实际 Python、Vault 和凭据绝对路径显式注册到 Codex,例如:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
codex mcp add memleaf-host -- /absolute/path/to/python -m memleaf.mcp_server --vault /path/to/vault --profile host --token-file /path/to/credential.token
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
注册后重启或重新连接 Codex MCP。`memleaf-host` 是示例服务名;已有接入应先核对其 profile,避免同时配置两条处理同一来源的路线。Memleaf 不读取或复制 Codex 的模型 Key;推理使用正在运行的宿主模型,并计入该宿主自身的用量。
|
|
214
|
+
|
|
215
|
+
客户端先调用 `memory_capabilities`,再以 `prepare_memory → memory_work(按需分页 sources/targets)→ submit_memory` 完成保存,仅在保存项的 receipt 中 `applied=true` 且 `settled=true` 时确认已保存。部分成功后只在同一 work 内修正未完成项;I/O 中断用 `resume_memory` 恢复。后续会话使用 `search → read` 读取正式 Markdown。host profile 允许项目等非 `todo` 内容携带行动属性,`assignee` 与 `waiting_on` 分别表示执行人和依赖方;未知事实保持未知,变化字段需来源依据。
|
|
216
|
+
|
|
217
|
+
每份 work 默认最多三次被接受的 submit,错误提案也可能消耗预算;这不是三次模型 API 请求额度。换 request ID、连接或重交同一来源不会重置预算。host profile 提供七个 v2 工具、`capture` 和查询工具;客户端需要主动执行闭环,旧 Model Route Hook 不会自动替它处理每轮记忆。
|
|
218
|
+
|
|
219
|
+
#### 原有自动提炼接入:model profile
|
|
220
|
+
|
|
221
|
+
以下安装与 Hook 流程继续使用独立 Memleaf Model Route:
|
|
222
|
+
|
|
183
223
|
先安装或升级 memleaf,再明确选择 Codex:
|
|
184
224
|
|
|
185
225
|
```bash
|
|
@@ -190,7 +230,7 @@ python -m pip install -U memleaf && python -m memleaf install --host codex
|
|
|
190
230
|
|
|
191
231
|
安装后打开 Codex,运行 `/hooks`,审核并信任 memleaf Hook。完成授权前,MCP 可用不等于自动捕获、检索门控和提炼已经激活;安装结果会明确显示 `pending_user_review`,不会把待审核状态报告为已启用。
|
|
192
232
|
|
|
193
|
-
Codex 只作为宿主,不作为 memleaf 的提炼模型来源。已有的独立 memleaf Model Route 会继续复用;如果当前 Vault 还没有完整 Model Route,Codex 安装仍可完成 MCP/Hook 配置,但结果会明确返回 `processing_status=model_route_required`,在配置模型前不能把“自动记忆提炼”视为已就绪。memleaf 不读取、不复制也不修改 Codex 的 `model`、`model_provider`、`base_url` 或认证信息,也不会为了提炼偷偷消耗 Codex 会话额度。Codex-only 用户可针对同一个 Vault 运行:
|
|
233
|
+
在这条原有 model 路线中,Codex 只作为宿主,不作为 memleaf 的提炼模型来源。已有的独立 memleaf Model Route 会继续复用;如果当前 Vault 还没有完整 Model Route,Codex 安装仍可完成 MCP/Hook 配置,但结果会明确返回 `processing_status=model_route_required`,在配置模型前不能把“自动记忆提炼”视为已就绪。memleaf 不读取、不复制也不修改 Codex 的 `model`、`model_provider`、`base_url` 或认证信息,也不会为了提炼偷偷消耗 Codex 会话额度。Codex-only 用户可针对同一个 Vault 运行:
|
|
194
234
|
|
|
195
235
|
```bash
|
|
196
236
|
python -m memleaf init --no-hermes --vault /path/to/the/same/vault
|
|
@@ -223,9 +263,9 @@ memleaf init --no-model-discovery
|
|
|
223
263
|
memleaf init --json
|
|
224
264
|
```
|
|
225
265
|
|
|
226
|
-
`init` 下的 `--no-codex` 和 `--no-antigravity`
|
|
266
|
+
`init` 下的 `--no-codex` 和 `--no-antigravity` 为兼容保留的无操作参数;原有 model profile 的 Codex 接入使用 `install --host codex`;host profile 使用上面的显式 MCP 注册。宿主配置只会在检测证据可靠、结构可识别且没有冲突时修改;修改前会创建备份,未知或冲突配置保持不变。
|
|
227
267
|
|
|
228
|
-
## Codex 使用方式
|
|
268
|
+
## Codex 原有 model profile 使用方式
|
|
229
269
|
|
|
230
270
|
- `UserPromptSubmit` 只注入有界 Scope Map 和当前轮次的检索协议,不注入记忆标题或正文;
|
|
231
271
|
- `PreToolUse` / `PostToolUse` 将 memleaf `search` 和 `read` 绑定到当前 `retrieval_id`,记录真实检索结果与读取预算;
|
|
@@ -235,7 +275,7 @@ memleaf init --json
|
|
|
235
275
|
|
|
236
276
|
Codex Hook 必须经过用户审核和信任。若 Hook 未激活、被禁用或 Codex 版本不支持对应生命周期事件,自动捕获和自动提炼不会生效;MCP 主动工具与 Hook 生命周期是两个独立状态。
|
|
237
277
|
|
|
238
|
-
## Hermes
|
|
278
|
+
## Hermes 原生接入使用方式
|
|
239
279
|
|
|
240
280
|
Hermes 的原生 Provider 和 MCP Server 是两个不同入口,但共用同一个 `$HOME/.memleaf`:
|
|
241
281
|
|
|
@@ -271,7 +311,7 @@ python -m memleaf.mcp_server --vault "$HOME/.memleaf"
|
|
|
271
311
|
|
|
272
312
|
不传 `--vault` 时默认使用 `~/.memleaf`;也可以设置 `MEMLEAF_VAULT`。正常情况下不需要手工常驻,Hermes 或 Codex 会按需启动它。stdout 只输出 JSON-RPC,日志不会污染协议通道。
|
|
273
313
|
|
|
274
|
-
|
|
314
|
+
未传 `--profile` 时使用兼容保留的 `model` profile,其工具如下;host profile 的工具和授权流程见上文。
|
|
275
315
|
|
|
276
316
|
| 工具 | 用途 |
|
|
277
317
|
| --- | --- |
|
|
@@ -357,7 +397,7 @@ python -m memleaf.mcp_server --vault /path/to/your/vault \
|
|
|
357
397
|
< examples/mcp_stdio.ndjson
|
|
358
398
|
```
|
|
359
399
|
|
|
360
|
-
##
|
|
400
|
+
## 原有 model profile 的模型路由
|
|
361
401
|
|
|
362
402
|
捕获、索引、目录检索和读取可离线运行;`process()`、`remember()` 和 `compact()` 需要可用的模型能力。
|
|
363
403
|
|
|
@@ -491,12 +531,12 @@ python -m build --wheel --sdist
|
|
|
491
531
|
|
|
492
532
|
以下内容不应被 README 或安装结果误解为已交付能力:
|
|
493
533
|
|
|
494
|
-
- Windows、macOS 和 Linux 都提供 Hermes 安装入口;Codex
|
|
534
|
+
- Windows、macOS 和 Linux 都提供 Hermes 安装入口;Codex 明确选择 host MCP 或 `memleaf install --host codex` 原有 model 接入;源码 `install.sh` 仅保留给开发、离线源码安装和故障排查;
|
|
495
535
|
- 当前支持 Hermes 和 Codex;Antigravity(反重力)不检测、不安装、不配置;
|
|
496
536
|
- Codex 生命周期 Hook 需要用户在 `/hooks` 中审核并信任,安装程序不能代替用户完成授权;
|
|
497
537
|
- Hermes 的检索门控是 Soft Gate,不保证阻止所有未检索回答;
|
|
498
|
-
-
|
|
499
|
-
-
|
|
538
|
+
- 原有 model profile / Hermes 原生处理需要 Model Route;host profile 无需独立模型 Key,但仍需 Owner 授权和可接受来源,并由宿主主动执行记忆闭环;
|
|
539
|
+
- 1.0.1 在 macOS 实机验证了 Codex CLI 与 Hermes CLI 的基础 host 行为,以及 Codex 的高级维护行为;该证据不代表所有模型、所有 MCP 客户端或 Windows 真实模型验收;真实宿主长期效果仍取决于本机版本、配置和模型可用性;
|
|
500
540
|
- 不提供 Obsidian 插件、Web 管理界面、云同步或透明加密层;
|
|
501
541
|
- 普通只读检索不会触发保留策略写入;历史淘汰和关闭待办退休只在正常处理/维护生命周期中执行。
|
|
502
542
|
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
[中文](README.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
|
|
6
6
|
|
|
7
|
-
> **
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
>
|
|
11
|
-
> A todo's `due_date` means only the explicit deadline of the todo action; dates describing its subject or desired outcome are not deadlines. Project ownership remains the model's semantic judgement and needs no literal name match. The review stage now keeps the update target chosen by the first pass, so a state change is no longer downgraded into a new memory. Markdown remains the sole source of truth.
|
|
12
|
-
> **The current release supports Hermes and Codex.** Antigravity is not detected, installed, or configured.
|
|
7
|
+
> **Stable release: 1.0.1.** Hermes and Codex are supported; see the [stability policy](docs/stability.md) for compatibility scope.
|
|
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
|
+
> 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
|
+
> 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.
|
|
13
11
|
|
|
14
12
|
## Project scope
|
|
15
13
|
|
|
@@ -26,6 +24,8 @@ memleaf does not automatically put the entire Vault or a whole conversation hist
|
|
|
26
24
|
|
|
27
25
|
## Current workflow
|
|
28
26
|
|
|
27
|
+
Original `model` profile / native Hermes workflow:
|
|
28
|
+
|
|
29
29
|
```text
|
|
30
30
|
Visible user/assistant conversation
|
|
31
31
|
│
|
|
@@ -67,6 +67,16 @@ Hermes uses a native MemoryProvider for lifecycle handling and obtains the Scope
|
|
|
67
67
|
|
|
68
68
|
## Memory admission and maintenance
|
|
69
69
|
|
|
70
|
+
The following rules apply to the original `model` profile and native Hermes automatic processing. See [Codex host setup](#codex) below for host actions, fields and budgets.
|
|
71
|
+
|
|
72
|
+
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.
|
|
73
|
+
|
|
74
|
+
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.
|
|
75
|
+
|
|
76
|
+
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.
|
|
77
|
+
|
|
78
|
+
A todo's `due_date` means only the explicit deadline of the todo action; dates describing its subject or desired outcome are not deadlines. Project ownership remains the model's semantic judgement and needs no literal name match. The review stage now keeps the update target chosen by the first pass, so a state change is no longer downgraded into a new memory. Markdown remains the sole source of truth.
|
|
79
|
+
|
|
70
80
|
**Ten seconds is an extraction performance target, not a failure deadline.** HTTP requests honor `llm.request_timeout` (120 seconds by default). A valid, Core-checked response is not discarded just because processing exceeds ten seconds. Single-pass planning, bounded repair and per-turn commits remain; completion and latency are measured separately. See [extraction latency and timeouts](docs/extraction-latency.md).
|
|
71
81
|
|
|
72
82
|
memleaf does not save every sentence. When a complete visible user + assistant turn is processed, the model first evaluates whether it has concrete future reuse value:
|
|
@@ -92,7 +102,7 @@ For current todos, all unfinished work, urgent items, or work due in a date rang
|
|
|
92
102
|
|
|
93
103
|
## Installation
|
|
94
104
|
|
|
95
|
-
Python 3.11+ is required.
|
|
105
|
+
Python 3.11+ is required. Hermes is the default install target. For Codex, explicitly select the host MCP setup below or retain the original model profile with automatic processing.
|
|
96
106
|
|
|
97
107
|
### Windows
|
|
98
108
|
|
|
@@ -161,6 +171,35 @@ The repository `install.sh` remains for source development, offline source insta
|
|
|
161
171
|
|
|
162
172
|
### Codex
|
|
163
173
|
|
|
174
|
+
#### Reuse the current Codex model: host profile
|
|
175
|
+
|
|
176
|
+
Install the package, then have the local Owner authorize the client:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
python -m pip install -U memleaf
|
|
180
|
+
python -m memleaf host-grant --vault /path/to/vault --principal codex --accept-caller-asserted --json
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`host-grant` returns the `mcpServers` command/arguments and a local credential file path; it does not automatically change Codex configuration. The credential binds local authorization, is created with mode `0600`, and is not a model key. Its default path is `<vault>/_state/host_credentials/codex.token`; `--credential-file` can select a new path. Existing credential files are preserved.
|
|
184
|
+
|
|
185
|
+
Read/write scopes default to `global`. Repeat `--read-scope` and `--write-scope` in the grant command for other scopes. `--accept-caller-asserted` means the Owner trusts the client to report visible conversation accurately; it does not independently verify a user decision. Without that option, use Owner-confirmed or reliably bound sources. Maintenance and permanent deletion require their respective permissions and exact approvals; see the [host-v2 contract](docs/host-v2-contract.md).
|
|
186
|
+
|
|
187
|
+
Explicitly register the actual Python, Vault and credential absolute paths from the output with Codex, for example:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
codex mcp add memleaf-host -- /absolute/path/to/python -m memleaf.mcp_server --vault /path/to/vault --profile host --token-file /path/to/credential.token
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Restart or reconnect Codex MCP after registration. `memleaf-host` is an example server name; check the profile of any existing connection before configuring two routes to process the same sources. Memleaf does not read or copy Codex model keys. Reasoning uses the running host model and counts toward that host's usage.
|
|
194
|
+
|
|
195
|
+
Call `memory_capabilities`, then run `prepare_memory → memory_work` (page sources/targets as needed) `→ submit_memory`. Confirm a save only when its receipt has `applied=true` and `settled=true`. Repair only unresolved items in the same work after partial success; use `resume_memory` for interrupted I/O. Later sessions retrieve the committed Markdown with `search → read`. Non-`todo` content, including projects, can carry action fields; `assignee` identifies the executor and `waiting_on` the dependency. Unknown facts remain unknown and field changes require source evidence.
|
|
196
|
+
|
|
197
|
+
Each work permits at most three accepted submits by default; invalid proposals can consume an attempt. This is not a three-call model API budget. Changing the request ID or connection, or replaying the same sources, does not reset it. The host profile exposes seven v2 tools, `capture` and query tools. Clients invoke the workflow deliberately; existing Model Route hooks do not automatically process every turn through this profile.
|
|
198
|
+
|
|
199
|
+
#### Original automatic processing: model profile
|
|
200
|
+
|
|
201
|
+
The following installer and hook flow retains the independent Memleaf Model Route:
|
|
202
|
+
|
|
164
203
|
Install or upgrade memleaf, then explicitly select Codex:
|
|
165
204
|
|
|
166
205
|
```bash
|
|
@@ -171,7 +210,7 @@ This command reuses the one Vault already configured for Hermes or Codex, or cre
|
|
|
171
210
|
|
|
172
211
|
After installation, open Codex, run `/hooks`, and review and trust the memleaf hooks. Until that approval is complete, an available MCP server does not mean that automatic capture, retrieval gating, and processing are active. The installer reports `pending_user_review` instead of claiming that unreviewed hooks are enabled.
|
|
173
212
|
|
|
174
|
-
Codex is a host, not memleaf's extraction-model source. An existing independent memleaf Model Route is reused. If the selected Vault has no complete Model Route yet, Codex MCP/hooks can still be configured, but installation explicitly returns `processing_status=model_route_required`; automatic memory extraction is not ready until that route is configured. memleaf does not read, copy, or modify Codex `model`, `model_provider`, `base_url`, or credentials, and it does not silently spend Codex session quota for extraction. A Codex-only user can configure the same Vault with:
|
|
213
|
+
In this original model route, Codex is a host, not memleaf's extraction-model source. An existing independent memleaf Model Route is reused. If the selected Vault has no complete Model Route yet, Codex MCP/hooks can still be configured, but installation explicitly returns `processing_status=model_route_required`; automatic memory extraction is not ready until that route is configured. memleaf does not read, copy, or modify Codex `model`, `model_provider`, `base_url`, or credentials, and it does not silently spend Codex session quota for extraction. A Codex-only user can configure the same Vault with:
|
|
175
214
|
|
|
176
215
|
```bash
|
|
177
216
|
python -m memleaf init --no-hermes --vault /path/to/the/same/vault
|
|
@@ -204,9 +243,9 @@ memleaf init --no-model-discovery
|
|
|
204
243
|
memleaf init --json
|
|
205
244
|
```
|
|
206
245
|
|
|
207
|
-
Under `init`, `--no-codex` and `--no-antigravity` remain compatibility no-ops
|
|
246
|
+
Under `init`, `--no-codex` and `--no-antigravity` remain compatibility no-ops. The original model profile uses `install --host codex`; the host profile uses the explicit MCP registration above. Host configuration is changed only when detection evidence is reliable, the structure is understood, and there is no conflict. Backups are created before changes; unknown or conflicting configuration is left unchanged.
|
|
208
247
|
|
|
209
|
-
## Codex integration
|
|
248
|
+
## Original Codex model profile integration
|
|
210
249
|
|
|
211
250
|
- `UserPromptSubmit` injects only a bounded Scope Map and the current-turn retrieval protocol, never memory titles or bodies.
|
|
212
251
|
- `PreToolUse` / `PostToolUse` bind memleaf `search` and `read` to the current `retrieval_id` and record the real search result and read budget.
|
|
@@ -216,7 +255,7 @@ Under `init`, `--no-codex` and `--no-antigravity` remain compatibility no-ops; C
|
|
|
216
255
|
|
|
217
256
|
Codex hooks require user review and trust. If the hooks are pending, disabled, or unsupported by the installed Codex version, automatic capture and processing are inactive; MCP tool availability and hook lifecycle activation are separate states.
|
|
218
257
|
|
|
219
|
-
## Hermes integration
|
|
258
|
+
## Native Hermes integration
|
|
220
259
|
|
|
221
260
|
Hermes' native Provider and the MCP server are separate entry points, but they share the same `$HOME/.memleaf` Vault:
|
|
222
261
|
|
|
@@ -252,7 +291,7 @@ python -m memleaf.mcp_server --vault "$HOME/.memleaf"
|
|
|
252
291
|
|
|
253
292
|
Without `--vault`, the server uses `~/.memleaf`; `MEMLEAF_VAULT` can also specify the Vault. In normal use the server does not need to be kept running manually: Hermes or Codex starts it on demand. stdout contains only JSON-RPC messages so logs do not corrupt the protocol stream.
|
|
254
293
|
|
|
255
|
-
|
|
294
|
+
Without `--profile`, the server retains the original `model` profile and the tools below. See the host setup above for its tools and authorization flow.
|
|
256
295
|
|
|
257
296
|
| Tool | Purpose |
|
|
258
297
|
| --- | --- |
|
|
@@ -339,7 +378,7 @@ python -m memleaf.mcp_server --vault /path/to/your/vault \
|
|
|
339
378
|
< examples/mcp_stdio.ndjson
|
|
340
379
|
```
|
|
341
380
|
|
|
342
|
-
##
|
|
381
|
+
## Original model profile routing
|
|
343
382
|
|
|
344
383
|
Capture, indexing, directory retrieval, and reading work offline. `process()`, `remember()`, and `compact()` require a usable model route.
|
|
345
384
|
|
|
@@ -471,12 +510,12 @@ python -m build --wheel --sdist
|
|
|
471
510
|
|
|
472
511
|
The following should not be interpreted as delivered capabilities:
|
|
473
512
|
|
|
474
|
-
- Windows, macOS, and Linux provide a Hermes installation entry point; Codex
|
|
513
|
+
- Windows, macOS, and Linux provide a Hermes installation entry point; Codex explicitly selects host MCP or the original model setup with `memleaf install --host codex`. The source `install.sh` remains only for development, offline source installation, and troubleshooting.
|
|
475
514
|
- The current release supports Hermes and Codex. Antigravity is not detected, installed, or configured.
|
|
476
515
|
- Codex lifecycle hooks require user review and trust through `/hooks`; the installer cannot approve them on the user's behalf.
|
|
477
516
|
- Hermes retrieval gating is a Soft Gate and does not guarantee that every answer performed retrieval.
|
|
478
|
-
-
|
|
479
|
-
- Long-running
|
|
517
|
+
- The original model profile and native Hermes processing require a Model Route. The host profile requires no independent model key, but still needs Owner authorization, acceptable sources and deliberate execution by the host.
|
|
518
|
+
- On macOS, 1.0.1 has live Codex CLI and Hermes CLI evidence for basic host behavior, plus advanced Codex maintenance behavior. This does not establish support for every model or MCP client, or live Windows model acceptance. Long-running behavior still depends on local versions, configuration and model availability.
|
|
480
519
|
- There is no Obsidian plugin, web management UI, cloud sync, or transparent encryption layer.
|
|
481
520
|
- Routine read-only retrieval never performs retention writes; history pruning and closed-todo retirement run only during normal processing/maintenance lifecycle calls.
|
|
482
521
|
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
[English](README.en.md) · [PyPI](https://pypi.org/project/memleaf/) · [GitHub](https://github.com/miffyblueboo/memleaf)
|
|
6
6
|
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
>
|
|
11
|
-
> 待办 `due_date` 只表示待办动作本身明确声明的截止日;属于待办主题或预期结果的日期不会被误作截止日。项目归属由模型按语义判断,不要求项目名在证据里逐字出现。复核阶段会保留首轮已选定的更新目标,避免“状态变更”被降级成新增记忆。Markdown 仍是唯一事实源。
|
|
12
|
-
> **当前版本支持 Hermes 和 Codex。** Antigravity(反重力)不检测、不安装、不配置。
|
|
7
|
+
> **稳定版:1.0.1。** 支持 Hermes 和 Codex;版本与兼容范围见[稳定性约定](docs/stability.md)。
|
|
8
|
+
> **Codex 可通过 `--profile host` 使用当前宿主模型完成记忆闭环,无需另配 Memleaf 模型 API Key。** 本地 Owner 仍需配置客户端身份、读写权限及来源信任;客户端主动调用工具,不代表每轮自动记忆。
|
|
9
|
+
> host profile 支持独立于内容类型的 `actionable` 和结构化 `waiting_on`,每份 work 默认最多三次被接受的 submit;Memleaf 负责确定性校验、落盘与恢复。
|
|
10
|
+
> 默认 `model` profile 和 Hermes 原生接入继续使用独立 Model Route,提炼与语义复核共用每份工作的最多五次模型请求。旧接口、现有记忆和默认入口保留,升级无需正式 Vault 迁移。Antigravity(反重力)当前不支持。
|
|
13
11
|
|
|
14
12
|
## 项目定位
|
|
15
13
|
|
|
@@ -26,6 +24,8 @@ memleaf 不会把整个 Vault 或整段历史对话自动塞进模型上下文
|
|
|
26
24
|
|
|
27
25
|
## 当前工作流
|
|
28
26
|
|
|
27
|
+
原有 `model` profile / Hermes 原生工作流:
|
|
28
|
+
|
|
29
29
|
```text
|
|
30
30
|
可见的 user/assistant 对话
|
|
31
31
|
│
|
|
@@ -70,6 +70,16 @@ Hermes 使用原生 MemoryProvider 维护生命周期,并通过 MCP 获取 Sco
|
|
|
70
70
|
|
|
71
71
|
## 记忆提炼规则
|
|
72
72
|
|
|
73
|
+
以下规则适用于原有 `model` profile / Hermes 原生自动提炼;host profile 的动作、字段与预算见下文 [Codex host 接入](#codex)。
|
|
74
|
+
|
|
75
|
+
自动提炼和复核共用同一条“未来记忆价值”标准:模型综合未来复用、信息增量、再次读取时的直接可用性和忘记成本,只保留对未来理解、判断或行动有实质影响的最小核心;没有明确价值的信息不提炼,不按具体业务场景硬编码排除。
|
|
76
|
+
|
|
77
|
+
提炼先比较旧事项中的编号、目标、进展、责任和期限;补全未知信息也应维护原事项,另建独立待办不能替代项目事实更新。确认重复的记忆在现有处理请求中合并,保留历史与来源;项目和独立任务保持各自生命周期,Core 不按标题强行合并。
|
|
78
|
+
|
|
79
|
+
新请求兼容等价的字段表示;未知执行人保持 `null`,新增或变更负责人和期限需要真实来源;等待条件在正文维护,不再提炼 `waiting_on`。行动及相关字段经过有界语义复核,提炼与复核共用每份工作的最多五次模型请求额度,成功即停止;复核失败不写入。来源时间用于解析相对日期,不补造事实日期。
|
|
80
|
+
|
|
81
|
+
待办 `due_date` 只表示待办动作本身明确声明的截止日;属于待办主题或预期结果的日期不会被误作截止日。项目归属由模型按语义判断,不要求项目名在证据里逐字出现。复核阶段会保留首轮已选定的更新目标,避免“状态变更”被降级成新增记忆。Markdown 仍是唯一事实源。
|
|
82
|
+
|
|
73
83
|
**10 秒是自动提炼的性能目标,不是失败阈值。** HTTP 请求遵循 `llm.request_timeout`(默认 120 秒);正常返回且通过 Core 校验的结果不会仅因超过 10 秒而丢弃。模型单次请求、有限修复和逐轮提交保留,耗时与是否完成分别统计。详见 [提炼耗时与超时](docs/extraction-latency.md)。
|
|
74
84
|
|
|
75
85
|
memleaf 不把每句话都保存为记忆。处理一轮完整的 user + assistant 可见文本时,模型先判断是否存在明确的未来复用价值:
|
|
@@ -92,7 +102,7 @@ memleaf 不把每句话都保存为记忆。处理一轮完整的 user + assista
|
|
|
92
102
|
|
|
93
103
|
## 安装
|
|
94
104
|
|
|
95
|
-
要求 Python 3.11
|
|
105
|
+
要求 Python 3.11+。Hermes 是默认安装目标;Codex 可明确选择下述 host MCP 接入,或保留原有 model profile 自动提炼接入。
|
|
96
106
|
|
|
97
107
|
### Windows
|
|
98
108
|
|
|
@@ -161,6 +171,35 @@ Hermes 显式保存使用 MCP `save_turn`:先绑定本轮并排队,轮次完
|
|
|
161
171
|
|
|
162
172
|
### Codex
|
|
163
173
|
|
|
174
|
+
#### 复用 Codex 当前模型:host profile
|
|
175
|
+
|
|
176
|
+
安装包后,由本地 Owner 为客户端创建授权:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
python -m pip install -U memleaf
|
|
180
|
+
python -m memleaf host-grant --vault /path/to/vault --principal codex --accept-caller-asserted --json
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`host-grant` 输出 `mcpServers` 的 `command`/`args` 和本地凭据文件路径,不会自动修改 Codex 配置。凭据用于本地授权,是以 `0600` 创建的文件,不是模型 Key;默认路径为 `<vault>/_state/host_credentials/codex.token`,也可通过 `--credential-file` 指定新路径。已有凭据文件不会被覆盖。
|
|
184
|
+
|
|
185
|
+
默认读写范围为 `global`;需要其他范围时,在创建授权的命令上重复传入 `--read-scope` 和 `--write-scope`。`--accept-caller-asserted` 表示 Owner 信任该客户端如实提交可见对话,不代表 Memleaf 独立验证了用户决定。省略该选项时,应先通过 Owner 确认来源或使用可靠绑定的来源。维护、永久删除等能力需要各自权限和精确审批,详见 [host-v2 合同](docs/host-v2-contract.md)。
|
|
186
|
+
|
|
187
|
+
将输出中的实际 Python、Vault 和凭据绝对路径显式注册到 Codex,例如:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
codex mcp add memleaf-host -- /absolute/path/to/python -m memleaf.mcp_server --vault /path/to/vault --profile host --token-file /path/to/credential.token
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
注册后重启或重新连接 Codex MCP。`memleaf-host` 是示例服务名;已有接入应先核对其 profile,避免同时配置两条处理同一来源的路线。Memleaf 不读取或复制 Codex 的模型 Key;推理使用正在运行的宿主模型,并计入该宿主自身的用量。
|
|
194
|
+
|
|
195
|
+
客户端先调用 `memory_capabilities`,再以 `prepare_memory → memory_work(按需分页 sources/targets)→ submit_memory` 完成保存,仅在保存项的 receipt 中 `applied=true` 且 `settled=true` 时确认已保存。部分成功后只在同一 work 内修正未完成项;I/O 中断用 `resume_memory` 恢复。后续会话使用 `search → read` 读取正式 Markdown。host profile 允许项目等非 `todo` 内容携带行动属性,`assignee` 与 `waiting_on` 分别表示执行人和依赖方;未知事实保持未知,变化字段需来源依据。
|
|
196
|
+
|
|
197
|
+
每份 work 默认最多三次被接受的 submit,错误提案也可能消耗预算;这不是三次模型 API 请求额度。换 request ID、连接或重交同一来源不会重置预算。host profile 提供七个 v2 工具、`capture` 和查询工具;客户端需要主动执行闭环,旧 Model Route Hook 不会自动替它处理每轮记忆。
|
|
198
|
+
|
|
199
|
+
#### 原有自动提炼接入:model profile
|
|
200
|
+
|
|
201
|
+
以下安装与 Hook 流程继续使用独立 Memleaf Model Route:
|
|
202
|
+
|
|
164
203
|
先安装或升级 memleaf,再明确选择 Codex:
|
|
165
204
|
|
|
166
205
|
```bash
|
|
@@ -171,7 +210,7 @@ python -m pip install -U memleaf && python -m memleaf install --host codex
|
|
|
171
210
|
|
|
172
211
|
安装后打开 Codex,运行 `/hooks`,审核并信任 memleaf Hook。完成授权前,MCP 可用不等于自动捕获、检索门控和提炼已经激活;安装结果会明确显示 `pending_user_review`,不会把待审核状态报告为已启用。
|
|
173
212
|
|
|
174
|
-
Codex 只作为宿主,不作为 memleaf 的提炼模型来源。已有的独立 memleaf Model Route 会继续复用;如果当前 Vault 还没有完整 Model Route,Codex 安装仍可完成 MCP/Hook 配置,但结果会明确返回 `processing_status=model_route_required`,在配置模型前不能把“自动记忆提炼”视为已就绪。memleaf 不读取、不复制也不修改 Codex 的 `model`、`model_provider`、`base_url` 或认证信息,也不会为了提炼偷偷消耗 Codex 会话额度。Codex-only 用户可针对同一个 Vault 运行:
|
|
213
|
+
在这条原有 model 路线中,Codex 只作为宿主,不作为 memleaf 的提炼模型来源。已有的独立 memleaf Model Route 会继续复用;如果当前 Vault 还没有完整 Model Route,Codex 安装仍可完成 MCP/Hook 配置,但结果会明确返回 `processing_status=model_route_required`,在配置模型前不能把“自动记忆提炼”视为已就绪。memleaf 不读取、不复制也不修改 Codex 的 `model`、`model_provider`、`base_url` 或认证信息,也不会为了提炼偷偷消耗 Codex 会话额度。Codex-only 用户可针对同一个 Vault 运行:
|
|
175
214
|
|
|
176
215
|
```bash
|
|
177
216
|
python -m memleaf init --no-hermes --vault /path/to/the/same/vault
|
|
@@ -204,9 +243,9 @@ memleaf init --no-model-discovery
|
|
|
204
243
|
memleaf init --json
|
|
205
244
|
```
|
|
206
245
|
|
|
207
|
-
`init` 下的 `--no-codex` 和 `--no-antigravity`
|
|
246
|
+
`init` 下的 `--no-codex` 和 `--no-antigravity` 为兼容保留的无操作参数;原有 model profile 的 Codex 接入使用 `install --host codex`;host profile 使用上面的显式 MCP 注册。宿主配置只会在检测证据可靠、结构可识别且没有冲突时修改;修改前会创建备份,未知或冲突配置保持不变。
|
|
208
247
|
|
|
209
|
-
## Codex 使用方式
|
|
248
|
+
## Codex 原有 model profile 使用方式
|
|
210
249
|
|
|
211
250
|
- `UserPromptSubmit` 只注入有界 Scope Map 和当前轮次的检索协议,不注入记忆标题或正文;
|
|
212
251
|
- `PreToolUse` / `PostToolUse` 将 memleaf `search` 和 `read` 绑定到当前 `retrieval_id`,记录真实检索结果与读取预算;
|
|
@@ -216,7 +255,7 @@ memleaf init --json
|
|
|
216
255
|
|
|
217
256
|
Codex Hook 必须经过用户审核和信任。若 Hook 未激活、被禁用或 Codex 版本不支持对应生命周期事件,自动捕获和自动提炼不会生效;MCP 主动工具与 Hook 生命周期是两个独立状态。
|
|
218
257
|
|
|
219
|
-
## Hermes
|
|
258
|
+
## Hermes 原生接入使用方式
|
|
220
259
|
|
|
221
260
|
Hermes 的原生 Provider 和 MCP Server 是两个不同入口,但共用同一个 `$HOME/.memleaf`:
|
|
222
261
|
|
|
@@ -252,7 +291,7 @@ python -m memleaf.mcp_server --vault "$HOME/.memleaf"
|
|
|
252
291
|
|
|
253
292
|
不传 `--vault` 时默认使用 `~/.memleaf`;也可以设置 `MEMLEAF_VAULT`。正常情况下不需要手工常驻,Hermes 或 Codex 会按需启动它。stdout 只输出 JSON-RPC,日志不会污染协议通道。
|
|
254
293
|
|
|
255
|
-
|
|
294
|
+
未传 `--profile` 时使用兼容保留的 `model` profile,其工具如下;host profile 的工具和授权流程见上文。
|
|
256
295
|
|
|
257
296
|
| 工具 | 用途 |
|
|
258
297
|
| --- | --- |
|
|
@@ -338,7 +377,7 @@ python -m memleaf.mcp_server --vault /path/to/your/vault \
|
|
|
338
377
|
< examples/mcp_stdio.ndjson
|
|
339
378
|
```
|
|
340
379
|
|
|
341
|
-
##
|
|
380
|
+
## 原有 model profile 的模型路由
|
|
342
381
|
|
|
343
382
|
捕获、索引、目录检索和读取可离线运行;`process()`、`remember()` 和 `compact()` 需要可用的模型能力。
|
|
344
383
|
|
|
@@ -472,12 +511,12 @@ python -m build --wheel --sdist
|
|
|
472
511
|
|
|
473
512
|
以下内容不应被 README 或安装结果误解为已交付能力:
|
|
474
513
|
|
|
475
|
-
- Windows、macOS 和 Linux 都提供 Hermes 安装入口;Codex
|
|
514
|
+
- Windows、macOS 和 Linux 都提供 Hermes 安装入口;Codex 明确选择 host MCP 或 `memleaf install --host codex` 原有 model 接入;源码 `install.sh` 仅保留给开发、离线源码安装和故障排查;
|
|
476
515
|
- 当前支持 Hermes 和 Codex;Antigravity(反重力)不检测、不安装、不配置;
|
|
477
516
|
- Codex 生命周期 Hook 需要用户在 `/hooks` 中审核并信任,安装程序不能代替用户完成授权;
|
|
478
517
|
- Hermes 的检索门控是 Soft Gate,不保证阻止所有未检索回答;
|
|
479
|
-
-
|
|
480
|
-
-
|
|
518
|
+
- 原有 model profile / Hermes 原生处理需要 Model Route;host profile 无需独立模型 Key,但仍需 Owner 授权和可接受来源,并由宿主主动执行记忆闭环;
|
|
519
|
+
- 1.0.1 在 macOS 实机验证了 Codex CLI 与 Hermes CLI 的基础 host 行为,以及 Codex 的高级维护行为;该证据不代表所有模型、所有 MCP 客户端或 Windows 真实模型验收;真实宿主长期效果仍取决于本机版本、配置和模型可用性;
|
|
481
520
|
- 不提供 Obsidian 插件、Web 管理界面、云同步或透明加密层;
|
|
482
521
|
- 普通只读检索不会触发保留策略写入;历史淘汰和关闭待办退休只在正常处理/维护生命周期中执行。
|
|
483
522
|
|