atmem 2.2.7b1__tar.gz → 2.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {atmem-2.2.7b1/atmem.egg-info → atmem-2.3.2}/PKG-INFO +123 -30
- {atmem-2.2.7b1 → atmem-2.3.2}/README.md +117 -26
- atmem-2.3.2/atmem/adapters/evidence_profiles.py +98 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/cli.py +514 -4
- atmem-2.3.2/atmem/contracts/execution.py +114 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/versions.py +30 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.css +39 -7
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.html +98 -21
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.js +113 -44
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/atbot_service.py +7 -2
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/blackbox.py +125 -30
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/compat.py +7 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/manager.py +180 -9
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/server.py +122 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/store.py +498 -4
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/web.py +380 -5
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/keys.py +3 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/dashboard_daemon.py +5 -2
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/config.py +3 -1
- atmem-2.3.2/atmem/evidence/__init__.py +19 -0
- atmem-2.3.2/atmem/evidence/accounts.py +170 -0
- atmem-2.3.2/atmem/evidence/crypto.py +191 -0
- atmem-2.3.2/atmem/evidence/models.py +115 -0
- atmem-2.3.2/atmem/evidence/service.py +649 -0
- atmem-2.3.2/atmem/evidence/store.py +321 -0
- atmem-2.3.2/atmem/execution/__init__.py +6 -0
- atmem-2.3.2/atmem/execution/coverage.py +27 -0
- atmem-2.3.2/atmem/execution/events.py +65 -0
- atmem-2.3.2/atmem/execution/projection.py +76 -0
- atmem-2.3.2/atmem/execution/retention.py +14 -0
- atmem-2.3.2/atmem/execution/status.py +30 -0
- atmem-2.3.2/atmem/home/__init__.py +7 -0
- atmem-2.3.2/atmem/home/artifacts.py +219 -0
- atmem-2.3.2/atmem/home/layout.py +93 -0
- atmem-2.3.2/atmem/home/service.py +468 -0
- atmem-2.3.2/atmem/identity/__init__.py +6 -0
- atmem-2.3.2/atmem/identity/models.py +28 -0
- atmem-2.3.2/atmem/identity/service.py +390 -0
- atmem-2.3.2/atmem/identity/store.py +61 -0
- atmem-2.3.2/atmem/incidents/__init__.py +5 -0
- atmem-2.3.2/atmem/incidents/detect.py +100 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/mcp/server.py +1 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/memory.py +10 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/openclaw_install.py +1 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/lifecycle.py +3 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/rank.py +13 -3
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/capabilities.json +26 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/service/application.py +165 -0
- atmem-2.3.2/atmem/service/executions.py +37 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/sqlite.py +48 -1
- {atmem-2.2.7b1 → atmem-2.3.2/atmem.egg-info}/PKG-INFO +123 -30
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/SOURCES.txt +49 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/requires.txt +3 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/capabilities.json +35 -6
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/context-provider-adapters.md +11 -5
- atmem-2.3.2/docs/current-status.md +54 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/framework-adapters.md +5 -0
- atmem-2.3.2/docs/implementation-evidence/003/20260909T055300Z-04a063ce1e7b-publication.md +66 -0
- atmem-2.3.2/docs/implementation-evidence/003/20260910-storizon-published-2.2.6.md +52 -0
- atmem-2.3.2/docs/implementation-evidence/020/20260912-m0-investigation-preview.md +90 -0
- atmem-2.3.2/docs/implementation-evidence/020/20260912-release-candidate-correctness-hardening.md +84 -0
- atmem-2.3.2/docs/implementation-evidence/021/20260912-m0-findings-ui.md +30 -0
- atmem-2.3.2/docs/implementation-evidence/028/20260913-encrypted-evidence-access.md +104 -0
- atmem-2.3.2/docs/implementation-evidence/029/2026-09-13-local-user-management.md +49 -0
- atmem-2.3.2/docs/implementation-evidence/030/2026-09-13-portable-home.md +69 -0
- atmem-2.3.2/docs/release-roadmap.md +76 -0
- atmem-2.3.2/docs/releases/v2.2.6.md +103 -0
- atmem-2.3.2/docs/releases/v2.3.0.md +169 -0
- atmem-2.3.2/docs/releases/v2.3.0b1.md +98 -0
- atmem-2.3.2/docs/releases/v2.3.1.md +104 -0
- atmem-2.3.2/docs/releases/v2.3.2.md +112 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/README.md +9 -5
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/index.ts +266 -30
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/openclaw.plugin.json +5 -5
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/package-lock.json +2 -2
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/package.json +2 -2
- atmem-2.3.2/integrations/openclaw/src/execution-spool.ts +220 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/rpc-client.ts +1 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/types.ts +30 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/blackbox-diagnostics.mjs +1 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/dashboard-live.mjs +53 -4
- atmem-2.3.2/integrations/openclaw/test/execution-spool.mjs +52 -0
- atmem-2.3.2/integrations/openclaw/test/fixtures/hook-context/2026.9.4.json +397 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/hooks.mjs +146 -11
- {atmem-2.2.7b1 → atmem-2.3.2}/pyproject.toml +7 -4
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_atbot_service.py +1 -2
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_plane.py +51 -6
- atmem-2.3.2/tests/test_dashboard.py +152 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_context.py +6 -3
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_documentation.py +3 -3
- atmem-2.3.2/tests/test_evidence_protection.py +600 -0
- atmem-2.3.2/tests/test_execution_capture.py +356 -0
- atmem-2.3.2/tests/test_execution_identity.py +67 -0
- atmem-2.3.2/tests/test_home.py +395 -0
- atmem-2.3.2/tests/test_http_api.py +336 -0
- atmem-2.3.2/tests/test_incident_resolution.py +52 -0
- atmem-2.3.2/tests/test_local_identity.py +111 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_mem0_provider.py +2 -2
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_recall_evidence.py +29 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_quality.py +9 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_binding.py +17 -4
- atmem-2.3.2/tools/run_mem0_openclaw_live.py +176 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_delegated_package.py +1 -1
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_installed_package.py +1 -1
- atmem-2.3.2/tools/smoke_mem0_roleplay.py +62 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_upgrade_from_2_1.py +17 -9
- atmem-2.2.7b1/docs/current-status.md +0 -132
- atmem-2.2.7b1/docs/release-roadmap.md +0 -78
- atmem-2.2.7b1/docs/releases/v2.2.6.md +0 -73
- atmem-2.2.7b1/docs/releases/v2.2.7b1.md +0 -101
- atmem-2.2.7b1/tests/test_http_api.py +0 -50
- {atmem-2.2.7b1 → atmem-2.3.2}/LICENSE +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/MANIFEST.in +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/base.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/callbacks.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/crewai.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/google_adk.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/langgraph.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/microsoft_agent.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/openai_agents.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/pydantic_ai.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/smolagents.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/deterministic-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/mem0-oss-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/retrieval-calibration-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/retrieval-heldout-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/task-state-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/thresholds-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/external.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/profiles.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/retrieval.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/runner.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/client.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/task_state.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/atmem.jpg +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/atbot_companion.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/evidence.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/explain.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/hosts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/openclaw_native.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/openclaw_topology.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/state.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/topology.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/ui.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/verify.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/canonical.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/fact_keys.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/storage.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/time.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/canonical.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/client.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/service.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/transport.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/validation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/classify.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/context.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/review.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/rules.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/validation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/identity.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/maintenance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/store.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/traverse.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/export.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/importer.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/mem0.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/plan.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/attestation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/registry.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/report.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/verdict.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/investigate.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/invalidation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/maintenance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/service.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/maintenance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/mcp/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/access.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/index.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/invalidation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/processors.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/service.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/onboarding.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/onboarding_verify.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/langgraph.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/loading.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/mem0.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/pydantic_ai.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/runtime.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/server.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/signing.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/worker.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/cache.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/calibration-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/calibration.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/graph_signal.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/signals.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/support.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/admin-audit.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/benchmark-cases.schema.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/benchmark-report.schema.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/context-package.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/graph-path.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-lifecycle-request.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-observation-request.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-proposal-request.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/invariant-registry.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/media-observation.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-archive.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-lifecycle.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-proposal.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/onboarding-state.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/recall-request.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/retrieval-decision.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/scope.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/semantic-health.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-job.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-key.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-principal.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/source-capture.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-context-package.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-profile.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-session-binding.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-start-request.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-state-proposal.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-state.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-transition-decision.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/unified-health.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/health.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/index.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/models.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/pgvector.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/providers.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/qdrant.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/admin_audit.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/auth.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/cache_policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/config.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/jobs.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/observability.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/recovery.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/repositories.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/service/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/health.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/postgres.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/binding.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/context.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/enablement.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/enforcement.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/governance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/guards.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/host_boundary.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/models.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/observability.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/profiles.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/provenance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/service.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/telemetry/__init__.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem/telemetry/retrieval.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/dependency_links.txt +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/entry_points.txt +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/top_level.txt +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/agent-blackbox.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/atbot-release.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/audit-log-spec.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/audit-search.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/auditing-guide.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/benchmarks.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/inject.next-turn-same-nonce.valid.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/inject.valid.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/test-vectors.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/trust.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/withhold.valid.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1.schema.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-request-v1.schema.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-request-auth-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-request-auth-v1.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/control-plane.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/dashboard-design-language.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/data-storage-and-backup.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/delegated-context-provider.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/entity-relationship-memory.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/benchmark-deterministic-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/longmemeval-s-retrieval-12-v1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/longmemeval-s-support-ranking-2026-09-02.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/http.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/langgraph.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/openclaw.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/pydantic-ai.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/generic-adapter.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/governed-task-state.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/http-api.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T043658Z-740c5c89d63c-host-compatibility.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/020/20260909-progress-card-observations.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/020/20260909-selective-context-and-precise-time.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/022/20260909-dashboard-usability.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/README.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/integration-guide.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/invariants.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/memory-extraction.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/memory-interchange.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/multimodal-observations.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/onboarding.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/openclaw-setup.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/production-service.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v1.0.0.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.0.0.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.0.1.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.1.0.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.0.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.1.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.2.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.3.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.4.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.5.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b1.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b10.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b11.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b2.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b3.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b4.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b5.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b8.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b9.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/retrieval-quality.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/saas-integration.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/security/production-threat-model.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/semantic-search.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/spec-kit.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/docs/storage-performance.md +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/delegated-identity.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/setup.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/task-tools.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-errors.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-observations.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-result-comparison.ts +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-context-contract.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-identity.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-journey.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.7.1-2.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.8.1.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.9.2.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.9.3.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/hook-context-compat.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/lib/hook-context-shape.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/lib/record-hook-context.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/manifest.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/setup.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/smoke.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/task-journey.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/task-tools.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/tool-observations.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/tool-result-comparison.mjs +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/tsconfig.json +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/setup.cfg +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_idempotency.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_upgrade.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_atbot_companion.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_auditability.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_cli.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_external.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_runner.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_blackbox.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_cli.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_cli_guidance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_contracts_v1.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_evidence.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_verify.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_dashboard_daemon.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_control.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_transport.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_encryption.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_proposals.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_upgrade.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_feature_surfaces.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_forget_verification.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapter_conformance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapter_packaging.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapters.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_delegated_adapters.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_generic_control.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_aliases.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_lifecycle.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_quality.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_host_adapter.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_interchange.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_langgraph_provider.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_layers.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_lifecycle.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_lifecycle_migration.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_maintenance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_mcp.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_governance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_observations.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_packaging.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_memory.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_onboarding.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_onboarding_recovery.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_compat.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_control.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_install.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_topology.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_cli.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_integration.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_packaging.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_performance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_runtime.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_server.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_pydantic_provider.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_release_metadata.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_restore_receipt.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_adapter_conformance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_benchmark.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_cache.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_signals_and_cache.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieve.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_sdk_packaging.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_health.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_parity.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_policy_invalidation.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_profiles.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_rebuild.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_schema.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_search.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_setup.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_spec_task_inventory.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_storage_packaging.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_store_transactions.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_supporting_evidence.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_adapters.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_atbot.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_benchmark.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_cli.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_clock.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_context.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_dashboard.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_deletion.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_expiry.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_governance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_guards.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_host_boundary.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_host_contracts.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_observability.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_performance.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_policy.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_prerequisites.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_schemas.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_service.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_session_binding.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_store.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_tamper.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_upgrade.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_walking_skeleton.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/benchmark_storage.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/check_invariants.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/check_spec_tasks.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/release_metadata.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/run_longmemeval_retrieval.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_delegated_transport.py +0 -0
- {atmem-2.2.7b1 → atmem-2.3.2}/tools/verify_audit.py +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atmem
|
|
3
|
-
Version: 2.2
|
|
3
|
+
Version: 2.3.2
|
|
4
4
|
Summary: Host-neutral Agent Black Box and reversible memory control plane.
|
|
5
|
-
Author-email:
|
|
6
|
-
Maintainer-email:
|
|
5
|
+
Author-email: Javad Taghia <taghia.javad@gmail.com>
|
|
6
|
+
Maintainer-email: Aetna / AtMem <aetna000@gmail.com>
|
|
7
7
|
License-Expression: Apache-2.0
|
|
8
8
|
Project-URL: Homepage, https://github.com/aetna000/atmem
|
|
9
9
|
Project-URL: Repository, https://github.com/aetna000/atmem
|
|
10
10
|
Project-URL: Issues, https://github.com/aetna000/atmem/issues
|
|
11
11
|
Project-URL: Documentation, https://github.com/aetna000/atmem#readme
|
|
12
12
|
Keywords: agent-black-box,agent-memory,audit,mcp,provenance,sqlite
|
|
13
|
-
Classifier: Development Status ::
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -65,6 +65,8 @@ Requires-Dist: psycopg<4,>=3.2; extra == "pgvector"
|
|
|
65
65
|
Requires-Dist: pgvector<1,>=0.4; extra == "pgvector"
|
|
66
66
|
Provides-Extra: qdrant
|
|
67
67
|
Requires-Dist: qdrant-client<2,>=1.15; extra == "qdrant"
|
|
68
|
+
Provides-Extra: post-quantum
|
|
69
|
+
Requires-Dist: pqcrypto<2,>=1; extra == "post-quantum"
|
|
68
70
|
Provides-Extra: storage-backends
|
|
69
71
|
Requires-Dist: psycopg<4,>=3.2; extra == "storage-backends"
|
|
70
72
|
Requires-Dist: pgvector<1,>=0.4; extra == "storage-backends"
|
|
@@ -73,11 +75,18 @@ Dynamic: license-file
|
|
|
73
75
|
|
|
74
76
|
# AtMem
|
|
75
77
|
|
|
76
|
-
[](./docs/releases/v2.3.2.md)
|
|
77
79
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
78
80
|
|
|
79
81
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
80
82
|
|
|
83
|
+
> **Release status:** AtMem 2.3.2 is the stable encrypted Agent Black Box release.
|
|
84
|
+
> It records exact host-observed text and supported multimodal boundaries by default,
|
|
85
|
+
> while keeping every claim limited to what the connected agent actually supplied.
|
|
86
|
+
|
|
87
|
+
Created and maintained by [Javad Taghia](https://github.com/javadtaghia)
|
|
88
|
+
([@JavadTaghia](https://x.com/JavadTaghia)).
|
|
89
|
+
|
|
81
90
|
Install AtMem once and give OpenClaw, Pydantic AI, LangChain/LangGraph, or a
|
|
82
91
|
custom agent governed long-term memory. **AtBot is installed automatically** as
|
|
83
92
|
AtMem's private intelligence companion: AtBot proposes and ranks; AtMem alone
|
|
@@ -88,9 +97,10 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
|
88
97
|
### 1. Install AtMem and choose memory intelligence
|
|
89
98
|
|
|
90
99
|
```bash
|
|
91
|
-
python -m pip install --upgrade atmem==2.2
|
|
100
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
92
101
|
atmem atbot setup
|
|
93
102
|
atmem atbot doctor
|
|
103
|
+
atmem init
|
|
94
104
|
atmem dashboard
|
|
95
105
|
```
|
|
96
106
|
|
|
@@ -120,7 +130,7 @@ package yourself.
|
|
|
120
130
|
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
121
131
|
|
|
122
132
|
```bash
|
|
123
|
-
python -m pip install --upgrade atmem==2.2
|
|
133
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
124
134
|
atmem openclaw upgrade
|
|
125
135
|
atmem control verify
|
|
126
136
|
```
|
|
@@ -143,7 +153,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
|
|
|
143
153
|
#### Pydantic AI — native capability
|
|
144
154
|
|
|
145
155
|
```bash
|
|
146
|
-
python -m pip install 'atmem[pydantic-ai]==2.2
|
|
156
|
+
python -m pip install 'atmem[pydantic-ai]==2.3.2'
|
|
147
157
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
148
158
|
```
|
|
149
159
|
|
|
@@ -168,7 +178,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
|
168
178
|
#### LangChain/LangGraph — native middleware
|
|
169
179
|
|
|
170
180
|
```bash
|
|
171
|
-
python -m pip install 'atmem[langgraph]==2.2
|
|
181
|
+
python -m pip install 'atmem[langgraph]==2.3.2'
|
|
172
182
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
173
183
|
```
|
|
174
184
|
|
|
@@ -195,14 +205,14 @@ context injection, exposure proof, and turn/tool evidence. When an enabled
|
|
|
195
205
|
delegated-provider registration matches the complete scope, they instead carry
|
|
196
206
|
the exact HMAC-authenticated provider workflow through the Pydantic AI or
|
|
197
207
|
LangChain/LangGraph model boundary, without also using native AtMem context.
|
|
198
|
-
This delegated host path is packaged in 2.2.
|
|
208
|
+
This delegated host path is packaged in 2.2.6. The adapters do not replace
|
|
199
209
|
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
200
210
|
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
201
211
|
multi-agent, and low-level `StateGraph` integration.
|
|
202
212
|
|
|
203
213
|
### Spec 007 milestone: govern work in progress
|
|
204
214
|
|
|
205
|
-
AtMem 2.2.
|
|
215
|
+
AtMem 2.2.6 includes Governed Task State: a separate, revisioned authority
|
|
206
216
|
plane for what an agent is doing now, what remains, what is blocked, and
|
|
207
217
|
whether completion is allowed. It is **disabled by default** and never turns
|
|
208
218
|
temporary task progress into long-term personal memory.
|
|
@@ -232,7 +242,7 @@ open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
|
|
|
232
242
|
|
|
233
243
|
See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
|
|
234
244
|
correction, provenance, expiry, benchmark, and automation examples, and read
|
|
235
|
-
the [2.2
|
|
245
|
+
the [2.3.2 release notes](docs/releases/v2.3.2.md) before upgrading.
|
|
236
246
|
|
|
237
247
|
### Prove memory quality locally
|
|
238
248
|
|
|
@@ -264,19 +274,19 @@ If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
|
264
274
|
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
265
275
|
on a hosted model.
|
|
266
276
|
|
|
267
|
-
> **
|
|
268
|
-
>
|
|
269
|
-
>
|
|
277
|
+
> **Companion boundary:** AtBot is a separately packaged, headless component
|
|
278
|
+
> installed and managed by AtMem. It is not an independent agent or a second
|
|
279
|
+
> memory authority.
|
|
270
280
|
|
|
271
281
|
### Optional: delegate context authority
|
|
272
282
|
|
|
273
|
-
|
|
283
|
+
Delegated HTTP transport requires per-instance HMAC request credentials for context and
|
|
274
284
|
health. See the
|
|
275
285
|
[shared profile and beta migration](docs/contracts/delegated-request-auth-v1.md)
|
|
276
286
|
before enabling an older delegated registration.
|
|
277
287
|
|
|
278
|
-
AtMem uses its own governed retrieval by default.
|
|
279
|
-
explicit, provider-neutral delegated mode
|
|
288
|
+
AtMem uses its own governed retrieval by default. Introduced in 2.2.6, its
|
|
289
|
+
explicit, provider-neutral delegated mode supports deployments where another
|
|
280
290
|
compatible provider must make the context decision while AtMem owns
|
|
281
291
|
host integration and flight evidence.
|
|
282
292
|
|
|
@@ -330,7 +340,7 @@ and restores it exactly.
|
|
|
330
340
|
## Installation details
|
|
331
341
|
|
|
332
342
|
```bash
|
|
333
|
-
python -m pip install atmem==2.2
|
|
343
|
+
python -m pip install atmem==2.3.2
|
|
334
344
|
atmem --version
|
|
335
345
|
```
|
|
336
346
|
|
|
@@ -340,7 +350,7 @@ embedding model, while the semantic extra adds local sentence-transformer
|
|
|
340
350
|
choices:
|
|
341
351
|
|
|
342
352
|
```bash
|
|
343
|
-
python -m pip install 'atmem[semantic]==2.2
|
|
353
|
+
python -m pip install 'atmem[semantic]==2.3.2'
|
|
344
354
|
```
|
|
345
355
|
|
|
346
356
|
For repository development, install both workspace packages:
|
|
@@ -423,6 +433,13 @@ atmem blackbox verify RUN_ID
|
|
|
423
433
|
atmem blackbox export RUN_ID --format json --output flight.json
|
|
424
434
|
atmem blackbox ack RUN_ID ATTENTION_CODE
|
|
425
435
|
|
|
436
|
+
# Initialize local sign-in and manage encrypted evidence privileges.
|
|
437
|
+
atmem init
|
|
438
|
+
atmem users create audit.viewer viewer
|
|
439
|
+
atmem users create incident.team investigator
|
|
440
|
+
atmem users create evidence.team evidence_collector
|
|
441
|
+
atmem evidence status
|
|
442
|
+
|
|
426
443
|
# Explicit influence control.
|
|
427
444
|
atmem control activate
|
|
428
445
|
atmem control restore
|
|
@@ -469,8 +486,9 @@ verification, activation, and return-to-shadow use the same operations as the
|
|
|
469
486
|
CLI. The canonical dashboard API is `/api/memory/*`; legacy `/api/mirror/*`
|
|
470
487
|
paths remain aliases for older local clients.
|
|
471
488
|
|
|
472
|
-
The dashboard binds only to loopback
|
|
473
|
-
mutations, and should not be placed
|
|
489
|
+
The dashboard binds only to loopback and requires a local AtMem account. It uses
|
|
490
|
+
HttpOnly sessions, checks origin and CSRF on mutations, and should not be placed
|
|
491
|
+
behind a public reverse proxy.
|
|
474
492
|
|
|
475
493
|
## Multiple agents and workspaces
|
|
476
494
|
|
|
@@ -520,7 +538,7 @@ atmem control restore
|
|
|
520
538
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
521
539
|
|
|
522
540
|
```bash
|
|
523
|
-
python -m pip install --upgrade atmem==2.2
|
|
541
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
524
542
|
atmem openclaw upgrade
|
|
525
543
|
atmem control verify
|
|
526
544
|
```
|
|
@@ -539,7 +557,77 @@ See [OpenClaw setup](docs/openclaw-setup.md), the
|
|
|
539
557
|
[OpenClaw control-plane guarantees](docs/control-plane.md), and the
|
|
540
558
|
[OpenClaw bridge package](integrations/openclaw/README.md).
|
|
541
559
|
|
|
542
|
-
## Agent Black Box evidence
|
|
560
|
+
## Encrypted Agent Black Box evidence
|
|
561
|
+
|
|
562
|
+
When the recorder is configured, new capture defaults to encrypted full fidelity:
|
|
563
|
+
exact text, context, model exchange, tool arguments/results and ordered file,
|
|
564
|
+
image, audio and video parts are sealed in the protected evidence vault. The
|
|
565
|
+
legacy evidence table retains compatible digests and bounded operational
|
|
566
|
+
projections; it never receives the exact reserved payload. New and migrated control
|
|
567
|
+
stores are application-encrypted as a whole, so those projections and their metadata
|
|
568
|
+
are not readable by opening the file as SQLite. Other historical or external
|
|
569
|
+
plaintext sources must still pass the inventory and verified-cleanup gate before an
|
|
570
|
+
installation claims complete metadata-at-rest protection.
|
|
571
|
+
|
|
572
|
+
The Settings page presents this as one compact **Evidence protection** row.
|
|
573
|
+
Turning **Data** off retains encrypted metadata and labels new runs not
|
|
574
|
+
reconstructable. Turning the **Recorder** off stores no new evidence. Neither
|
|
575
|
+
control creates plaintext storage.
|
|
576
|
+
|
|
577
|
+
Evidence privileges are deliberately separate from agent/API admin headers:
|
|
578
|
+
|
|
579
|
+
- **Viewer** sees content-free metadata, hashes, integrity and coverage only.
|
|
580
|
+
- **Investigator** can decrypt, view, play and reconstruct exact evidence inside AtMem.
|
|
581
|
+
- **Evidence Collector** can additionally export plaintext after exact
|
|
582
|
+
confirmation and manage evidence settings. Viewer and Investigator plaintext
|
|
583
|
+
export always fails.
|
|
584
|
+
- **Administrator** has ultimate local evidence access and manages local users,
|
|
585
|
+
roles and password resets.
|
|
586
|
+
|
|
587
|
+
`atmem init` prints the first Administrator's temporary password once. The
|
|
588
|
+
dashboard uses username/password sign-in and forces that password to change.
|
|
589
|
+
`create-test-accounts` remains a compatibility command for automated tests;
|
|
590
|
+
its bearer tokens are not the normal dashboard experience.
|
|
591
|
+
|
|
592
|
+
### Portable AtMem Home
|
|
593
|
+
|
|
594
|
+
All new durable state resolves from one AtMem Home (`ATMEM_HOME`, otherwise
|
|
595
|
+
`~/.atmem`). New installations use `config/`, `identity/`, `memory/`, `evidence/`,
|
|
596
|
+
`artifacts/`, `migrations/` and disposable `runtime/`/`indexes/` directories under
|
|
597
|
+
that root. Exact media is retained twice inside AtMem's encrypted boundary: in the
|
|
598
|
+
protected evidence document as the disaster-recovery authority and in the
|
|
599
|
+
content-addressed artifact vault for verification and deduplication.
|
|
600
|
+
|
|
601
|
+
```bash
|
|
602
|
+
atmem home status
|
|
603
|
+
atmem home verify
|
|
604
|
+
atmem restore /path/to/copied-atmem-home
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
On another computer, `atmem restore` opens the copied home against a disposable
|
|
608
|
+
runtime binding. Sign in with an Administrator account contained in that copy; the
|
|
609
|
+
source agent, OpenClaw media directory and host logs are not required. Restore/open
|
|
610
|
+
does not silently migrate evidence. Existing 2.3 prerelease layouts use an explicit,
|
|
611
|
+
copy-first conversion:
|
|
612
|
+
|
|
613
|
+
```bash
|
|
614
|
+
atmem home migrate --home ~/.atmem /path/to/new-portable-home
|
|
615
|
+
atmem home verify --home /path/to/new-portable-home
|
|
616
|
+
atmem home migrate --home ~/.atmem /path/to/new-portable-home --commit
|
|
617
|
+
atmem home adopt --home /path/to/new-portable-home
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
Stop AtMem and connected agent writers before copying or migrating. Migration
|
|
621
|
+
streams an inventory, copies and verifies each known durable store, journals its
|
|
622
|
+
phase and never deletes the source. Adoption requires the copied Administrator,
|
|
623
|
+
rotates sessions and changes only machine-local bindings; historical evidence IDs,
|
|
624
|
+
hashes and artifact bytes are not rewritten.
|
|
625
|
+
|
|
626
|
+
### Legacy evidence projection
|
|
627
|
+
|
|
628
|
+
The table below describes the compatible content-minimizing projection. By
|
|
629
|
+
itself it is not sufficient to replay or reconstruct a run after the originating
|
|
630
|
+
agent/logs are lost; authorized reconstruction reads the encrypted vault.
|
|
543
631
|
|
|
544
632
|
The runtime can record these content-minimizing event types:
|
|
545
633
|
|
|
@@ -557,8 +645,10 @@ the runtime reported. It does not prove that a hook was truthful, semantically
|
|
|
557
645
|
validate an answer, or prove email delivery, payment settlement, or a database
|
|
558
646
|
change without independent system-of-record evidence.
|
|
559
647
|
|
|
560
|
-
Raw prompts, replies, tool parameters
|
|
561
|
-
|
|
648
|
+
Raw prompts, replies, tool parameters and tool results are not stored in this
|
|
649
|
+
legacy projection. SHA-256 digests are fingerprints, not encryption or
|
|
650
|
+
anonymization. Exact values are available only through authorized AtMem evidence
|
|
651
|
+
operations when the protected full-fidelity boundary captured them.
|
|
562
652
|
See the [Agent Black Box guide](docs/agent-blackbox.md).
|
|
563
653
|
|
|
564
654
|
## Use the memory engine directly
|
|
@@ -599,7 +689,10 @@ and [multimodal observations](docs/multimodal-observations.md).
|
|
|
599
689
|
vector match is checked against canonical scope, status, digest, exclusions,
|
|
600
690
|
sensitivity, and generation before use. Higher-quality embedding libraries
|
|
601
691
|
and model downloads remain optional.
|
|
602
|
-
-
|
|
692
|
+
- In full capture mode, available external media bytes are copied into encrypted
|
|
693
|
+
AtMem evidence and its content-addressed artifact vault before capture is claimed;
|
|
694
|
+
the host reference is provenance, not a recovery dependency. Metadata/off modes
|
|
695
|
+
are visibly non-reconstructable.
|
|
603
696
|
- External observations remain quarantined until an operator approves them.
|
|
604
697
|
- Rejected, superseded, or tombstoned memory is excluded from ordinary search and recall.
|
|
605
698
|
- Forget cascades through canonical, graph, media, and vector-derived state and returns a receipt.
|
|
@@ -673,9 +766,9 @@ npm test
|
|
|
673
766
|
npm run smoke
|
|
674
767
|
```
|
|
675
768
|
|
|
676
|
-
Current repository metadata is version **2.2
|
|
677
|
-
bridge **2.2
|
|
678
|
-
AtBot retains its independent compatible version **0.1.0**.
|
|
769
|
+
Current repository metadata is version **2.3.2**, with the matched OpenClaw
|
|
770
|
+
bridge **2.3.2**. Release validation requires exact Python/bridge alignment;
|
|
771
|
+
AtBot retains its independent stable compatible version **0.1.0**.
|
|
679
772
|
|
|
680
773
|
## License
|
|
681
774
|
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
# AtMem
|
|
2
2
|
|
|
3
|
-
[](./docs/releases/v2.3.2.md)
|
|
4
4
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
7
7
|
|
|
8
|
+
> **Release status:** AtMem 2.3.2 is the stable encrypted Agent Black Box release.
|
|
9
|
+
> It records exact host-observed text and supported multimodal boundaries by default,
|
|
10
|
+
> while keeping every claim limited to what the connected agent actually supplied.
|
|
11
|
+
|
|
12
|
+
Created and maintained by [Javad Taghia](https://github.com/javadtaghia)
|
|
13
|
+
([@JavadTaghia](https://x.com/JavadTaghia)).
|
|
14
|
+
|
|
8
15
|
Install AtMem once and give OpenClaw, Pydantic AI, LangChain/LangGraph, or a
|
|
9
16
|
custom agent governed long-term memory. **AtBot is installed automatically** as
|
|
10
17
|
AtMem's private intelligence companion: AtBot proposes and ranks; AtMem alone
|
|
@@ -15,9 +22,10 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
|
15
22
|
### 1. Install AtMem and choose memory intelligence
|
|
16
23
|
|
|
17
24
|
```bash
|
|
18
|
-
python -m pip install --upgrade atmem==2.2
|
|
25
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
19
26
|
atmem atbot setup
|
|
20
27
|
atmem atbot doctor
|
|
28
|
+
atmem init
|
|
21
29
|
atmem dashboard
|
|
22
30
|
```
|
|
23
31
|
|
|
@@ -47,7 +55,7 @@ package yourself.
|
|
|
47
55
|
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
48
56
|
|
|
49
57
|
```bash
|
|
50
|
-
python -m pip install --upgrade atmem==2.2
|
|
58
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
51
59
|
atmem openclaw upgrade
|
|
52
60
|
atmem control verify
|
|
53
61
|
```
|
|
@@ -70,7 +78,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
|
|
|
70
78
|
#### Pydantic AI — native capability
|
|
71
79
|
|
|
72
80
|
```bash
|
|
73
|
-
python -m pip install 'atmem[pydantic-ai]==2.2
|
|
81
|
+
python -m pip install 'atmem[pydantic-ai]==2.3.2'
|
|
74
82
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
75
83
|
```
|
|
76
84
|
|
|
@@ -95,7 +103,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
|
95
103
|
#### LangChain/LangGraph — native middleware
|
|
96
104
|
|
|
97
105
|
```bash
|
|
98
|
-
python -m pip install 'atmem[langgraph]==2.2
|
|
106
|
+
python -m pip install 'atmem[langgraph]==2.3.2'
|
|
99
107
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
100
108
|
```
|
|
101
109
|
|
|
@@ -122,14 +130,14 @@ context injection, exposure proof, and turn/tool evidence. When an enabled
|
|
|
122
130
|
delegated-provider registration matches the complete scope, they instead carry
|
|
123
131
|
the exact HMAC-authenticated provider workflow through the Pydantic AI or
|
|
124
132
|
LangChain/LangGraph model boundary, without also using native AtMem context.
|
|
125
|
-
This delegated host path is packaged in 2.2.
|
|
133
|
+
This delegated host path is packaged in 2.2.6. The adapters do not replace
|
|
126
134
|
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
127
135
|
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
128
136
|
multi-agent, and low-level `StateGraph` integration.
|
|
129
137
|
|
|
130
138
|
### Spec 007 milestone: govern work in progress
|
|
131
139
|
|
|
132
|
-
AtMem 2.2.
|
|
140
|
+
AtMem 2.2.6 includes Governed Task State: a separate, revisioned authority
|
|
133
141
|
plane for what an agent is doing now, what remains, what is blocked, and
|
|
134
142
|
whether completion is allowed. It is **disabled by default** and never turns
|
|
135
143
|
temporary task progress into long-term personal memory.
|
|
@@ -159,7 +167,7 @@ open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
|
|
|
159
167
|
|
|
160
168
|
See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
|
|
161
169
|
correction, provenance, expiry, benchmark, and automation examples, and read
|
|
162
|
-
the [2.2
|
|
170
|
+
the [2.3.2 release notes](docs/releases/v2.3.2.md) before upgrading.
|
|
163
171
|
|
|
164
172
|
### Prove memory quality locally
|
|
165
173
|
|
|
@@ -191,19 +199,19 @@ If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
|
191
199
|
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
192
200
|
on a hosted model.
|
|
193
201
|
|
|
194
|
-
> **
|
|
195
|
-
>
|
|
196
|
-
>
|
|
202
|
+
> **Companion boundary:** AtBot is a separately packaged, headless component
|
|
203
|
+
> installed and managed by AtMem. It is not an independent agent or a second
|
|
204
|
+
> memory authority.
|
|
197
205
|
|
|
198
206
|
### Optional: delegate context authority
|
|
199
207
|
|
|
200
|
-
|
|
208
|
+
Delegated HTTP transport requires per-instance HMAC request credentials for context and
|
|
201
209
|
health. See the
|
|
202
210
|
[shared profile and beta migration](docs/contracts/delegated-request-auth-v1.md)
|
|
203
211
|
before enabling an older delegated registration.
|
|
204
212
|
|
|
205
|
-
AtMem uses its own governed retrieval by default.
|
|
206
|
-
explicit, provider-neutral delegated mode
|
|
213
|
+
AtMem uses its own governed retrieval by default. Introduced in 2.2.6, its
|
|
214
|
+
explicit, provider-neutral delegated mode supports deployments where another
|
|
207
215
|
compatible provider must make the context decision while AtMem owns
|
|
208
216
|
host integration and flight evidence.
|
|
209
217
|
|
|
@@ -257,7 +265,7 @@ and restores it exactly.
|
|
|
257
265
|
## Installation details
|
|
258
266
|
|
|
259
267
|
```bash
|
|
260
|
-
python -m pip install atmem==2.2
|
|
268
|
+
python -m pip install atmem==2.3.2
|
|
261
269
|
atmem --version
|
|
262
270
|
```
|
|
263
271
|
|
|
@@ -267,7 +275,7 @@ embedding model, while the semantic extra adds local sentence-transformer
|
|
|
267
275
|
choices:
|
|
268
276
|
|
|
269
277
|
```bash
|
|
270
|
-
python -m pip install 'atmem[semantic]==2.2
|
|
278
|
+
python -m pip install 'atmem[semantic]==2.3.2'
|
|
271
279
|
```
|
|
272
280
|
|
|
273
281
|
For repository development, install both workspace packages:
|
|
@@ -350,6 +358,13 @@ atmem blackbox verify RUN_ID
|
|
|
350
358
|
atmem blackbox export RUN_ID --format json --output flight.json
|
|
351
359
|
atmem blackbox ack RUN_ID ATTENTION_CODE
|
|
352
360
|
|
|
361
|
+
# Initialize local sign-in and manage encrypted evidence privileges.
|
|
362
|
+
atmem init
|
|
363
|
+
atmem users create audit.viewer viewer
|
|
364
|
+
atmem users create incident.team investigator
|
|
365
|
+
atmem users create evidence.team evidence_collector
|
|
366
|
+
atmem evidence status
|
|
367
|
+
|
|
353
368
|
# Explicit influence control.
|
|
354
369
|
atmem control activate
|
|
355
370
|
atmem control restore
|
|
@@ -396,8 +411,9 @@ verification, activation, and return-to-shadow use the same operations as the
|
|
|
396
411
|
CLI. The canonical dashboard API is `/api/memory/*`; legacy `/api/mirror/*`
|
|
397
412
|
paths remain aliases for older local clients.
|
|
398
413
|
|
|
399
|
-
The dashboard binds only to loopback
|
|
400
|
-
mutations, and should not be placed
|
|
414
|
+
The dashboard binds only to loopback and requires a local AtMem account. It uses
|
|
415
|
+
HttpOnly sessions, checks origin and CSRF on mutations, and should not be placed
|
|
416
|
+
behind a public reverse proxy.
|
|
401
417
|
|
|
402
418
|
## Multiple agents and workspaces
|
|
403
419
|
|
|
@@ -447,7 +463,7 @@ atmem control restore
|
|
|
447
463
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
448
464
|
|
|
449
465
|
```bash
|
|
450
|
-
python -m pip install --upgrade atmem==2.2
|
|
466
|
+
python -m pip install --upgrade atmem==2.3.2
|
|
451
467
|
atmem openclaw upgrade
|
|
452
468
|
atmem control verify
|
|
453
469
|
```
|
|
@@ -466,7 +482,77 @@ See [OpenClaw setup](docs/openclaw-setup.md), the
|
|
|
466
482
|
[OpenClaw control-plane guarantees](docs/control-plane.md), and the
|
|
467
483
|
[OpenClaw bridge package](integrations/openclaw/README.md).
|
|
468
484
|
|
|
469
|
-
## Agent Black Box evidence
|
|
485
|
+
## Encrypted Agent Black Box evidence
|
|
486
|
+
|
|
487
|
+
When the recorder is configured, new capture defaults to encrypted full fidelity:
|
|
488
|
+
exact text, context, model exchange, tool arguments/results and ordered file,
|
|
489
|
+
image, audio and video parts are sealed in the protected evidence vault. The
|
|
490
|
+
legacy evidence table retains compatible digests and bounded operational
|
|
491
|
+
projections; it never receives the exact reserved payload. New and migrated control
|
|
492
|
+
stores are application-encrypted as a whole, so those projections and their metadata
|
|
493
|
+
are not readable by opening the file as SQLite. Other historical or external
|
|
494
|
+
plaintext sources must still pass the inventory and verified-cleanup gate before an
|
|
495
|
+
installation claims complete metadata-at-rest protection.
|
|
496
|
+
|
|
497
|
+
The Settings page presents this as one compact **Evidence protection** row.
|
|
498
|
+
Turning **Data** off retains encrypted metadata and labels new runs not
|
|
499
|
+
reconstructable. Turning the **Recorder** off stores no new evidence. Neither
|
|
500
|
+
control creates plaintext storage.
|
|
501
|
+
|
|
502
|
+
Evidence privileges are deliberately separate from agent/API admin headers:
|
|
503
|
+
|
|
504
|
+
- **Viewer** sees content-free metadata, hashes, integrity and coverage only.
|
|
505
|
+
- **Investigator** can decrypt, view, play and reconstruct exact evidence inside AtMem.
|
|
506
|
+
- **Evidence Collector** can additionally export plaintext after exact
|
|
507
|
+
confirmation and manage evidence settings. Viewer and Investigator plaintext
|
|
508
|
+
export always fails.
|
|
509
|
+
- **Administrator** has ultimate local evidence access and manages local users,
|
|
510
|
+
roles and password resets.
|
|
511
|
+
|
|
512
|
+
`atmem init` prints the first Administrator's temporary password once. The
|
|
513
|
+
dashboard uses username/password sign-in and forces that password to change.
|
|
514
|
+
`create-test-accounts` remains a compatibility command for automated tests;
|
|
515
|
+
its bearer tokens are not the normal dashboard experience.
|
|
516
|
+
|
|
517
|
+
### Portable AtMem Home
|
|
518
|
+
|
|
519
|
+
All new durable state resolves from one AtMem Home (`ATMEM_HOME`, otherwise
|
|
520
|
+
`~/.atmem`). New installations use `config/`, `identity/`, `memory/`, `evidence/`,
|
|
521
|
+
`artifacts/`, `migrations/` and disposable `runtime/`/`indexes/` directories under
|
|
522
|
+
that root. Exact media is retained twice inside AtMem's encrypted boundary: in the
|
|
523
|
+
protected evidence document as the disaster-recovery authority and in the
|
|
524
|
+
content-addressed artifact vault for verification and deduplication.
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
atmem home status
|
|
528
|
+
atmem home verify
|
|
529
|
+
atmem restore /path/to/copied-atmem-home
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
On another computer, `atmem restore` opens the copied home against a disposable
|
|
533
|
+
runtime binding. Sign in with an Administrator account contained in that copy; the
|
|
534
|
+
source agent, OpenClaw media directory and host logs are not required. Restore/open
|
|
535
|
+
does not silently migrate evidence. Existing 2.3 prerelease layouts use an explicit,
|
|
536
|
+
copy-first conversion:
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
atmem home migrate --home ~/.atmem /path/to/new-portable-home
|
|
540
|
+
atmem home verify --home /path/to/new-portable-home
|
|
541
|
+
atmem home migrate --home ~/.atmem /path/to/new-portable-home --commit
|
|
542
|
+
atmem home adopt --home /path/to/new-portable-home
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
Stop AtMem and connected agent writers before copying or migrating. Migration
|
|
546
|
+
streams an inventory, copies and verifies each known durable store, journals its
|
|
547
|
+
phase and never deletes the source. Adoption requires the copied Administrator,
|
|
548
|
+
rotates sessions and changes only machine-local bindings; historical evidence IDs,
|
|
549
|
+
hashes and artifact bytes are not rewritten.
|
|
550
|
+
|
|
551
|
+
### Legacy evidence projection
|
|
552
|
+
|
|
553
|
+
The table below describes the compatible content-minimizing projection. By
|
|
554
|
+
itself it is not sufficient to replay or reconstruct a run after the originating
|
|
555
|
+
agent/logs are lost; authorized reconstruction reads the encrypted vault.
|
|
470
556
|
|
|
471
557
|
The runtime can record these content-minimizing event types:
|
|
472
558
|
|
|
@@ -484,8 +570,10 @@ the runtime reported. It does not prove that a hook was truthful, semantically
|
|
|
484
570
|
validate an answer, or prove email delivery, payment settlement, or a database
|
|
485
571
|
change without independent system-of-record evidence.
|
|
486
572
|
|
|
487
|
-
Raw prompts, replies, tool parameters
|
|
488
|
-
|
|
573
|
+
Raw prompts, replies, tool parameters and tool results are not stored in this
|
|
574
|
+
legacy projection. SHA-256 digests are fingerprints, not encryption or
|
|
575
|
+
anonymization. Exact values are available only through authorized AtMem evidence
|
|
576
|
+
operations when the protected full-fidelity boundary captured them.
|
|
489
577
|
See the [Agent Black Box guide](docs/agent-blackbox.md).
|
|
490
578
|
|
|
491
579
|
## Use the memory engine directly
|
|
@@ -526,7 +614,10 @@ and [multimodal observations](docs/multimodal-observations.md).
|
|
|
526
614
|
vector match is checked against canonical scope, status, digest, exclusions,
|
|
527
615
|
sensitivity, and generation before use. Higher-quality embedding libraries
|
|
528
616
|
and model downloads remain optional.
|
|
529
|
-
-
|
|
617
|
+
- In full capture mode, available external media bytes are copied into encrypted
|
|
618
|
+
AtMem evidence and its content-addressed artifact vault before capture is claimed;
|
|
619
|
+
the host reference is provenance, not a recovery dependency. Metadata/off modes
|
|
620
|
+
are visibly non-reconstructable.
|
|
530
621
|
- External observations remain quarantined until an operator approves them.
|
|
531
622
|
- Rejected, superseded, or tombstoned memory is excluded from ordinary search and recall.
|
|
532
623
|
- Forget cascades through canonical, graph, media, and vector-derived state and returns a receipt.
|
|
@@ -600,9 +691,9 @@ npm test
|
|
|
600
691
|
npm run smoke
|
|
601
692
|
```
|
|
602
693
|
|
|
603
|
-
Current repository metadata is version **2.2
|
|
604
|
-
bridge **2.2
|
|
605
|
-
AtBot retains its independent compatible version **0.1.0**.
|
|
694
|
+
Current repository metadata is version **2.3.2**, with the matched OpenClaw
|
|
695
|
+
bridge **2.3.2**. Release validation requires exact Python/bridge alignment;
|
|
696
|
+
AtBot retains its independent stable compatible version **0.1.0**.
|
|
606
697
|
|
|
607
698
|
## License
|
|
608
699
|
|