atmem 2.2.4__tar.gz → 2.2.6__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.4 → atmem-2.2.6}/PKG-INFO +164 -22
- atmem-2.2.4/atmem.egg-info/PKG-INFO → atmem-2.2.6/README.md +132 -63
- atmem-2.2.6/atmem/adapters/__init__.py +6 -0
- atmem-2.2.6/atmem/adapters/base.py +571 -0
- atmem-2.2.6/atmem/adapters/callbacks.py +83 -0
- atmem-2.2.6/atmem/adapters/crewai.py +7 -0
- atmem-2.2.6/atmem/adapters/google_adk.py +7 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/adapters/langgraph.py +67 -3
- atmem-2.2.6/atmem/adapters/microsoft_agent.py +7 -0
- atmem-2.2.6/atmem/adapters/openai_agents.py +7 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/adapters/pydantic_ai.py +66 -6
- atmem-2.2.6/atmem/adapters/smolagents.py +7 -0
- atmem-2.2.6/atmem/benchmark/__init__.py +22 -0
- atmem-2.2.6/atmem/benchmark/contracts.py +143 -0
- atmem-2.2.6/atmem/benchmark/data/deterministic-v1.json +443 -0
- atmem-2.2.6/atmem/benchmark/data/mem0-oss-v1.json +12 -0
- atmem-2.2.6/atmem/benchmark/data/retrieval-calibration-v1.json +11 -0
- atmem-2.2.6/atmem/benchmark/data/retrieval-heldout-v1.json +47 -0
- atmem-2.2.6/atmem/benchmark/data/task-state-v1.json +17 -0
- atmem-2.2.6/atmem/benchmark/data/thresholds-v1.json +17 -0
- atmem-2.2.6/atmem/benchmark/external.py +220 -0
- atmem-2.2.6/atmem/benchmark/profiles.py +104 -0
- atmem-2.2.6/atmem/benchmark/retrieval.py +52 -0
- atmem-2.2.6/atmem/benchmark/runner.py +506 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/cli.py +1886 -0
- atmem-2.2.6/atmem/client.py +27 -0
- atmem-2.2.6/atmem/contracts/__init__.py +91 -0
- atmem-2.2.6/atmem/contracts/task_state.py +1284 -0
- atmem-2.2.6/atmem/contracts/versions.py +80 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.css +45 -7
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.html +102 -11
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.js +215 -33
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/atbot_companion.py +104 -4
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/atbot_service.py +1 -1
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/blackbox.py +107 -6
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/compat.py +15 -1
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/evidence.py +48 -0
- atmem-2.2.6/atmem/control/explain.py +8 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/manager.py +1206 -2
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/server.py +194 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/store.py +270 -2
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/topology.py +12 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/web.py +345 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/storage.py +71 -1
- atmem-2.2.6/atmem/core/time.py +106 -0
- atmem-2.2.6/atmem/delegated/__init__.py +22 -0
- atmem-2.2.6/atmem/delegated/canonical.py +89 -0
- atmem-2.2.6/atmem/delegated/client.py +88 -0
- atmem-2.2.6/atmem/delegated/config.py +284 -0
- atmem-2.2.6/atmem/delegated/contracts.py +169 -0
- atmem-2.2.6/atmem/delegated/service.py +392 -0
- atmem-2.2.6/atmem/delegated/transport.py +319 -0
- atmem-2.2.6/atmem/delegated/validation.py +266 -0
- atmem-2.2.6/atmem/extract/__init__.py +62 -0
- atmem-2.2.6/atmem/extract/classify.py +202 -0
- atmem-2.2.6/atmem/extract/context.py +279 -0
- atmem-2.2.6/atmem/extract/models.py +151 -0
- atmem-2.2.6/atmem/extract/review.py +364 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/extract/rules.py +53 -15
- atmem-2.2.6/atmem/extract/validation.py +514 -0
- atmem-2.2.6/atmem/graph/identity.py +90 -0
- atmem-2.2.6/atmem/graph/maintenance.py +9 -0
- atmem-2.2.6/atmem/graph/models.py +62 -0
- atmem-2.2.6/atmem/graph/store.py +31 -0
- atmem-2.2.6/atmem/graph/traverse.py +26 -0
- atmem-2.2.6/atmem/interchange/__init__.py +9 -0
- atmem-2.2.6/atmem/interchange/export.py +55 -0
- atmem-2.2.6/atmem/interchange/importer.py +71 -0
- atmem-2.2.6/atmem/interchange/mem0.py +34 -0
- atmem-2.2.6/atmem/interchange/models.py +69 -0
- atmem-2.2.6/atmem/interchange/plan.py +35 -0
- atmem-2.2.6/atmem/invariants/__init__.py +26 -0
- atmem-2.2.6/atmem/invariants/attestation.py +36 -0
- atmem-2.2.6/atmem/invariants/models.py +115 -0
- atmem-2.2.6/atmem/invariants/registry.py +53 -0
- atmem-2.2.6/atmem/invariants/report.py +17 -0
- atmem-2.2.6/atmem/invariants/verdict.py +48 -0
- atmem-2.2.6/atmem/lifecycle/__init__.py +7 -0
- atmem-2.2.6/atmem/lifecycle/invalidation.py +47 -0
- atmem-2.2.6/atmem/lifecycle/maintenance.py +14 -0
- atmem-2.2.6/atmem/lifecycle/models.py +77 -0
- atmem-2.2.6/atmem/lifecycle/policy.py +30 -0
- atmem-2.2.6/atmem/lifecycle/service.py +119 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/maintenance.py +44 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/mcp/server.py +63 -2
- atmem-2.2.6/atmem/media/access.py +31 -0
- atmem-2.2.6/atmem/media/index.py +25 -0
- atmem-2.2.6/atmem/media/invalidation.py +13 -0
- atmem-2.2.6/atmem/media/models.py +45 -0
- atmem-2.2.6/atmem/media/processors.py +35 -0
- atmem-2.2.6/atmem/media/service.py +39 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/memory.py +406 -26
- atmem-2.2.6/atmem/onboarding.py +60 -0
- atmem-2.2.6/atmem/onboarding_verify.py +11 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/openclaw_install.py +1 -1
- atmem-2.2.6/atmem/provider_adapters/__init__.py +12 -0
- atmem-2.2.6/atmem/provider_adapters/langgraph.py +43 -0
- atmem-2.2.6/atmem/provider_adapters/lifecycle.py +320 -0
- atmem-2.2.6/atmem/provider_adapters/loading.py +23 -0
- atmem-2.2.6/atmem/provider_adapters/mem0.py +75 -0
- atmem-2.2.6/atmem/provider_adapters/models.py +132 -0
- atmem-2.2.6/atmem/provider_adapters/pydantic_ai.py +76 -0
- atmem-2.2.6/atmem/provider_adapters/runtime.py +142 -0
- atmem-2.2.6/atmem/provider_adapters/server.py +115 -0
- atmem-2.2.6/atmem/provider_adapters/signing.py +125 -0
- atmem-2.2.6/atmem/provider_adapters/worker.py +20 -0
- atmem-2.2.6/atmem/retrieve/__init__.py +44 -0
- atmem-2.2.6/atmem/retrieve/cache.py +105 -0
- atmem-2.2.6/atmem/retrieve/calibration-v1.json +9 -0
- atmem-2.2.6/atmem/retrieve/calibration.py +27 -0
- atmem-2.2.6/atmem/retrieve/graph_signal.py +21 -0
- atmem-2.2.6/atmem/retrieve/models.py +75 -0
- atmem-2.2.6/atmem/retrieve/rank.py +381 -0
- atmem-2.2.6/atmem/retrieve/signals.py +100 -0
- atmem-2.2.6/atmem/retrieve/support.py +171 -0
- atmem-2.2.6/atmem/schemas/v1/admin-audit.json +1 -0
- atmem-2.2.6/atmem/schemas/v1/benchmark-cases.schema.json +29 -0
- atmem-2.2.6/atmem/schemas/v1/benchmark-report.schema.json +16 -0
- atmem-2.2.6/atmem/schemas/v1/capabilities.json +100 -0
- atmem-2.2.6/atmem/schemas/v1/graph-path.json +15 -0
- atmem-2.2.6/atmem/schemas/v1/host-task-lifecycle-request.json +88 -0
- atmem-2.2.6/atmem/schemas/v1/host-task-observation-request.json +125 -0
- atmem-2.2.6/atmem/schemas/v1/host-task-proposal-request.json +134 -0
- atmem-2.2.6/atmem/schemas/v1/invariant-registry.json +37 -0
- atmem-2.2.6/atmem/schemas/v1/media-observation.json +10 -0
- atmem-2.2.6/atmem/schemas/v1/memory-archive.json +13 -0
- atmem-2.2.6/atmem/schemas/v1/memory-lifecycle.json +18 -0
- atmem-2.2.6/atmem/schemas/v1/memory-proposal.json +78 -0
- atmem-2.2.6/atmem/schemas/v1/onboarding-state.json +1 -0
- atmem-2.2.6/atmem/schemas/v1/retrieval-decision.json +46 -0
- atmem-2.2.6/atmem/schemas/v1/semantic-health.json +42 -0
- atmem-2.2.6/atmem/schemas/v1/service-job.json +1 -0
- atmem-2.2.6/atmem/schemas/v1/service-key.json +1 -0
- atmem-2.2.6/atmem/schemas/v1/service-principal.json +1 -0
- atmem-2.2.6/atmem/schemas/v1/task-context-package.json +99 -0
- atmem-2.2.6/atmem/schemas/v1/task-profile.json +126 -0
- atmem-2.2.6/atmem/schemas/v1/task-session-binding.json +171 -0
- atmem-2.2.6/atmem/schemas/v1/task-start-request.json +127 -0
- atmem-2.2.6/atmem/schemas/v1/task-state-proposal.json +259 -0
- atmem-2.2.6/atmem/schemas/v1/task-state.json +256 -0
- atmem-2.2.6/atmem/schemas/v1/task-transition-decision.json +207 -0
- atmem-2.2.6/atmem/schemas/v1/unified-health.json +1 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/__init__.py +20 -0
- atmem-2.2.6/atmem/semantic/health.py +441 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/index.py +386 -130
- atmem-2.2.6/atmem/semantic/models.json +95 -0
- atmem-2.2.6/atmem/semantic/pgvector.py +34 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/providers.py +115 -8
- atmem-2.2.6/atmem/semantic/qdrant.py +30 -0
- atmem-2.2.6/atmem/server/__init__.py +4 -0
- atmem-2.2.6/atmem/server/admin_audit.py +15 -0
- atmem-2.2.6/atmem/server/auth.py +37 -0
- atmem-2.2.6/atmem/server/cache_policy.py +6 -0
- atmem-2.2.6/atmem/server/config.py +18 -0
- atmem-2.2.6/atmem/server/jobs.py +33 -0
- atmem-2.2.6/atmem/server/observability.py +6 -0
- atmem-2.2.6/atmem/server/recovery.py +15 -0
- atmem-2.2.6/atmem/server/repositories.py +11 -0
- atmem-2.2.6/atmem/service/__init__.py +5 -0
- atmem-2.2.6/atmem/service/application.py +206 -0
- atmem-2.2.6/atmem/store/health.py +49 -0
- atmem-2.2.6/atmem/store/postgres.py +127 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/store/sqlite.py +2081 -118
- atmem-2.2.6/atmem/task_state/__init__.py +97 -0
- atmem-2.2.6/atmem/task_state/binding.py +278 -0
- atmem-2.2.6/atmem/task_state/context.py +275 -0
- atmem-2.2.6/atmem/task_state/enablement.py +116 -0
- atmem-2.2.6/atmem/task_state/enforcement.py +165 -0
- atmem-2.2.6/atmem/task_state/governance.py +134 -0
- atmem-2.2.6/atmem/task_state/guards.py +155 -0
- atmem-2.2.6/atmem/task_state/host_boundary.py +279 -0
- atmem-2.2.6/atmem/task_state/models.py +289 -0
- atmem-2.2.6/atmem/task_state/observability.py +260 -0
- atmem-2.2.6/atmem/task_state/policy.py +341 -0
- atmem-2.2.6/atmem/task_state/profiles.py +212 -0
- atmem-2.2.6/atmem/task_state/provenance.py +195 -0
- atmem-2.2.6/atmem/task_state/service.py +1092 -0
- atmem-2.2.6/atmem/telemetry/__init__.py +5 -0
- atmem-2.2.6/atmem/telemetry/retrieval.py +36 -0
- atmem-2.2.4/README.md → atmem-2.2.6/atmem.egg-info/PKG-INFO +205 -19
- atmem-2.2.6/atmem.egg-info/SOURCES.txt +443 -0
- atmem-2.2.6/atmem.egg-info/requires.txt +65 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/atbot-release.md +7 -1
- atmem-2.2.6/docs/benchmarks.md +222 -0
- atmem-2.2.6/docs/capabilities.json +150 -0
- atmem-2.2.6/docs/context-provider-adapters.md +174 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1/inject.next-turn-same-nonce.valid.json +42 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1/inject.valid.json +42 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1/test-vectors.json +126 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1/trust.json +11 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1/withhold.valid.json +39 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1.md +327 -0
- atmem-2.2.6/docs/contracts/delegated-context-provider-v1.schema.json +126 -0
- atmem-2.2.6/docs/contracts/delegated-context-request-v1.schema.json +31 -0
- atmem-2.2.6/docs/contracts/delegated-request-auth-v1.json +40 -0
- atmem-2.2.6/docs/contracts/delegated-request-auth-v1.md +150 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/current-status.md +48 -15
- {atmem-2.2.4 → atmem-2.2.6}/docs/dashboard-design-language.md +107 -8
- atmem-2.2.6/docs/delegated-context-provider.md +281 -0
- atmem-2.2.6/docs/entity-relationship-memory.md +17 -0
- atmem-2.2.6/docs/examples/benchmark-deterministic-v1.json +36 -0
- atmem-2.2.6/docs/examples/longmemeval-s-retrieval-12-v1.json +75 -0
- atmem-2.2.6/docs/examples/longmemeval-s-support-ranking-2026-09-02.json +80 -0
- atmem-2.2.6/docs/examples/onboarding/http.md +5 -0
- atmem-2.2.6/docs/examples/onboarding/langgraph.md +5 -0
- atmem-2.2.6/docs/examples/onboarding/openclaw.md +4 -0
- atmem-2.2.6/docs/examples/onboarding/pydantic-ai.md +4 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/framework-adapters.md +38 -1
- {atmem-2.2.4 → atmem-2.2.6}/docs/generic-adapter.md +19 -0
- atmem-2.2.6/docs/governed-task-state.md +498 -0
- atmem-2.2.6/docs/http-api.md +21 -0
- atmem-2.2.6/docs/implementation-evidence/003/20260909T043658Z-740c5c89d63c-host-compatibility.md +118 -0
- atmem-2.2.6/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.json +504 -0
- atmem-2.2.6/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.md +218 -0
- atmem-2.2.6/docs/implementation-evidence/README.md +32 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/integration-guide.md +2 -1
- atmem-2.2.6/docs/invariants.md +19 -0
- atmem-2.2.6/docs/memory-extraction.md +162 -0
- atmem-2.2.6/docs/memory-interchange.md +22 -0
- atmem-2.2.6/docs/multimodal-observations.md +24 -0
- atmem-2.2.6/docs/onboarding.md +13 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/openclaw-setup.md +34 -2
- atmem-2.2.6/docs/production-service.md +13 -0
- atmem-2.2.6/docs/release-roadmap.md +72 -0
- atmem-2.2.6/docs/releases/v2.2.5.md +34 -0
- atmem-2.2.6/docs/releases/v2.2.6.md +102 -0
- atmem-2.2.6/docs/releases/v2.2.6b1.md +29 -0
- atmem-2.2.6/docs/releases/v2.2.6b10.md +87 -0
- atmem-2.2.6/docs/releases/v2.2.6b11.md +111 -0
- atmem-2.2.6/docs/releases/v2.2.6b2.md +33 -0
- atmem-2.2.6/docs/releases/v2.2.6b3.md +44 -0
- atmem-2.2.6/docs/releases/v2.2.6b4.md +101 -0
- atmem-2.2.6/docs/releases/v2.2.6b5.md +105 -0
- atmem-2.2.6/docs/releases/v2.2.6b8.md +233 -0
- atmem-2.2.6/docs/releases/v2.2.6b9.md +73 -0
- atmem-2.2.6/docs/retrieval-quality.md +72 -0
- atmem-2.2.6/docs/security/production-threat-model.md +13 -0
- atmem-2.2.6/docs/semantic-search.md +149 -0
- atmem-2.2.6/docs/spec-kit.md +59 -0
- atmem-2.2.6/docs/storage-performance.md +25 -0
- atmem-2.2.6/integrations/openclaw/README.md +56 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/index.ts +524 -40
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/openclaw.plugin.json +34 -2
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/package-lock.json +2 -2
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/package.json +6 -4
- atmem-2.2.6/integrations/openclaw/src/delegated-identity.ts +78 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/rpc-client.ts +1 -1
- atmem-2.2.6/integrations/openclaw/src/task-tools.ts +136 -0
- atmem-2.2.6/integrations/openclaw/src/tool-observations.ts +123 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/types.ts +44 -0
- atmem-2.2.6/integrations/openclaw/test/delegated-context-contract.mjs +510 -0
- atmem-2.2.6/integrations/openclaw/test/delegated-identity.mjs +56 -0
- atmem-2.2.6/integrations/openclaw/test/delegated-journey.mjs +123 -0
- atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.7.1-2.json +341 -0
- atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.8.1.json +393 -0
- atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.9.2.json +393 -0
- atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.9.3.json +393 -0
- atmem-2.2.6/integrations/openclaw/test/hook-context-compat.mjs +141 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/hooks.mjs +312 -2
- atmem-2.2.6/integrations/openclaw/test/lib/hook-context-shape.mjs +217 -0
- atmem-2.2.6/integrations/openclaw/test/lib/record-hook-context.mjs +22 -0
- atmem-2.2.6/integrations/openclaw/test/manifest.mjs +82 -0
- atmem-2.2.6/integrations/openclaw/test/task-journey.mjs +274 -0
- atmem-2.2.6/integrations/openclaw/test/task-tools.mjs +182 -0
- atmem-2.2.6/integrations/openclaw/test/tool-observations.mjs +61 -0
- {atmem-2.2.4 → atmem-2.2.6}/pyproject.toml +37 -3
- atmem-2.2.6/tests/test_api_contracts.py +25 -0
- atmem-2.2.6/tests/test_api_idempotency.py +13 -0
- atmem-2.2.6/tests/test_api_upgrade.py +3 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_atbot_companion.py +85 -2
- atmem-2.2.6/tests/test_benchmark_cli.py +68 -0
- atmem-2.2.6/tests/test_benchmark_contracts.py +53 -0
- atmem-2.2.6/tests/test_benchmark_external.py +148 -0
- atmem-2.2.6/tests/test_benchmark_runner.py +137 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_blackbox.py +138 -6
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_cli.py +44 -0
- atmem-2.2.6/tests/test_cli_guidance.py +257 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_contracts_v1.py +134 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_plane.py +300 -4
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_dashboard_daemon.py +48 -4
- atmem-2.2.6/tests/test_delegated_context.py +694 -0
- atmem-2.2.6/tests/test_delegated_control.py +196 -0
- atmem-2.2.6/tests/test_delegated_transport.py +416 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_documentation.py +141 -5
- atmem-2.2.6/tests/test_extract_contracts.py +93 -0
- atmem-2.2.6/tests/test_extract_proposals.py +612 -0
- atmem-2.2.6/tests/test_extract_upgrade.py +228 -0
- atmem-2.2.6/tests/test_feature_surfaces.py +5 -0
- atmem-2.2.6/tests/test_forget_verification.py +7 -0
- atmem-2.2.6/tests/test_framework_adapter_conformance.py +36 -0
- atmem-2.2.6/tests/test_framework_adapter_packaging.py +13 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_framework_adapters.py +129 -2
- atmem-2.2.6/tests/test_framework_delegated_adapters.py +494 -0
- atmem-2.2.6/tests/test_graph_aliases.py +31 -0
- atmem-2.2.6/tests/test_graph_lifecycle.py +23 -0
- atmem-2.2.6/tests/test_graph_quality.py +24 -0
- atmem-2.2.6/tests/test_http_api.py +50 -0
- atmem-2.2.6/tests/test_interchange.py +60 -0
- atmem-2.2.6/tests/test_langgraph_provider.py +37 -0
- atmem-2.2.6/tests/test_lifecycle.py +31 -0
- atmem-2.2.6/tests/test_lifecycle_migration.py +3 -0
- atmem-2.2.6/tests/test_media_governance.py +55 -0
- atmem-2.2.6/tests/test_media_packaging.py +7 -0
- atmem-2.2.6/tests/test_mem0_provider.py +69 -0
- atmem-2.2.6/tests/test_onboarding.py +6 -0
- atmem-2.2.6/tests/test_onboarding_recovery.py +11 -0
- atmem-2.2.6/tests/test_openclaw_compat.py +89 -0
- atmem-2.2.6/tests/test_provider_cli.py +79 -0
- atmem-2.2.6/tests/test_provider_integration.py +60 -0
- atmem-2.2.6/tests/test_provider_packaging.py +16 -0
- atmem-2.2.6/tests/test_provider_performance.py +32 -0
- atmem-2.2.6/tests/test_provider_runtime.py +79 -0
- atmem-2.2.6/tests/test_provider_server.py +105 -0
- atmem-2.2.6/tests/test_pydantic_provider.py +32 -0
- atmem-2.2.6/tests/test_release_metadata.py +30 -0
- atmem-2.2.6/tests/test_retrieval_adapter_conformance.py +109 -0
- atmem-2.2.6/tests/test_retrieval_benchmark.py +24 -0
- atmem-2.2.6/tests/test_retrieval_cache.py +33 -0
- atmem-2.2.6/tests/test_retrieval_quality.py +279 -0
- atmem-2.2.6/tests/test_retrieval_signals_and_cache.py +53 -0
- atmem-2.2.6/tests/test_sdk_packaging.py +10 -0
- atmem-2.2.6/tests/test_semantic_health.py +183 -0
- atmem-2.2.6/tests/test_semantic_parity.py +146 -0
- atmem-2.2.6/tests/test_semantic_policy_invalidation.py +142 -0
- atmem-2.2.6/tests/test_semantic_profiles.py +92 -0
- atmem-2.2.6/tests/test_semantic_rebuild.py +138 -0
- atmem-2.2.6/tests/test_semantic_schema.py +176 -0
- atmem-2.2.6/tests/test_semantic_setup.py +253 -0
- atmem-2.2.6/tests/test_spec_task_inventory.py +38 -0
- atmem-2.2.6/tests/test_storage_packaging.py +10 -0
- atmem-2.2.6/tests/test_supporting_evidence.py +104 -0
- atmem-2.2.6/tests/test_task_state_adapters.py +570 -0
- atmem-2.2.6/tests/test_task_state_atbot.py +570 -0
- atmem-2.2.6/tests/test_task_state_benchmark.py +24 -0
- atmem-2.2.6/tests/test_task_state_binding.py +213 -0
- atmem-2.2.6/tests/test_task_state_cli.py +509 -0
- atmem-2.2.6/tests/test_task_state_clock.py +94 -0
- atmem-2.2.6/tests/test_task_state_context.py +530 -0
- atmem-2.2.6/tests/test_task_state_contracts.py +461 -0
- atmem-2.2.6/tests/test_task_state_dashboard.py +511 -0
- atmem-2.2.6/tests/test_task_state_deletion.py +406 -0
- atmem-2.2.6/tests/test_task_state_expiry.py +645 -0
- atmem-2.2.6/tests/test_task_state_governance.py +264 -0
- atmem-2.2.6/tests/test_task_state_guards.py +397 -0
- atmem-2.2.6/tests/test_task_state_host_boundary.py +452 -0
- atmem-2.2.6/tests/test_task_state_host_contracts.py +333 -0
- atmem-2.2.6/tests/test_task_state_observability.py +403 -0
- atmem-2.2.6/tests/test_task_state_performance.py +235 -0
- atmem-2.2.6/tests/test_task_state_policy.py +671 -0
- atmem-2.2.6/tests/test_task_state_prerequisites.py +196 -0
- atmem-2.2.6/tests/test_task_state_schemas.py +331 -0
- atmem-2.2.6/tests/test_task_state_service.py +850 -0
- atmem-2.2.6/tests/test_task_state_session_binding.py +285 -0
- atmem-2.2.6/tests/test_task_state_store.py +477 -0
- atmem-2.2.6/tests/test_task_state_tamper.py +416 -0
- atmem-2.2.6/tests/test_task_state_upgrade.py +287 -0
- atmem-2.2.6/tests/test_task_state_walking_skeleton.py +183 -0
- atmem-2.2.6/tools/benchmark_storage.py +63 -0
- atmem-2.2.6/tools/check_invariants.py +21 -0
- atmem-2.2.6/tools/check_spec_tasks.py +74 -0
- atmem-2.2.6/tools/release_metadata.py +57 -0
- atmem-2.2.6/tools/run_longmemeval_retrieval.py +380 -0
- atmem-2.2.6/tools/run_mem0_openclaw_live.py +176 -0
- atmem-2.2.6/tools/smoke_delegated_package.py +77 -0
- atmem-2.2.6/tools/smoke_delegated_transport.py +132 -0
- {atmem-2.2.4 → atmem-2.2.6}/tools/smoke_installed_package.py +5 -2
- atmem-2.2.6/tools/smoke_mem0_roleplay.py +62 -0
- {atmem-2.2.4 → atmem-2.2.6}/tools/smoke_upgrade_from_2_1.py +6 -6
- atmem-2.2.4/atmem/adapters/__init__.py +0 -5
- atmem-2.2.4/atmem/adapters/base.py +0 -267
- atmem-2.2.4/atmem/contracts/__init__.py +0 -37
- atmem-2.2.4/atmem/contracts/versions.py +0 -27
- atmem-2.2.4/atmem/extract/__init__.py +0 -12
- atmem-2.2.4/atmem/retrieve/__init__.py +0 -15
- atmem-2.2.4/atmem/retrieve/rank.py +0 -157
- atmem-2.2.4/atmem/schemas/v1/capabilities.json +0 -15
- atmem-2.2.4/atmem/schemas/v1/memory-proposal.json +0 -24
- atmem-2.2.4/atmem.egg-info/SOURCES.txt +0 -145
- atmem-2.2.4/atmem.egg-info/requires.txt +0 -24
- atmem-2.2.4/docs/capabilities.json +0 -48
- atmem-2.2.4/docs/multimodal-observations.md +0 -26
- atmem-2.2.4/docs/semantic-search.md +0 -52
- atmem-2.2.4/integrations/openclaw/README.md +0 -22
- atmem-2.2.4/tests/test_cli_guidance.py +0 -92
- {atmem-2.2.4 → atmem-2.2.6}/LICENSE +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/MANIFEST.in +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/contracts/models.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/atmem.jpg +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/hosts.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/models.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/openclaw_native.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/openclaw_topology.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/state.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/ui.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/control/verify.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/canonical.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/fact_keys.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/keys.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/core/policy.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/dashboard_daemon.py +0 -0
- /atmem-2.2.4/atmem/graph.py → /atmem-2.2.6/atmem/graph/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/investigate.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/mcp/__init__.py +0 -0
- /atmem-2.2.4/atmem/media.py → /atmem-2.2.6/atmem/media/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/context-package.json +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/recall-request.json +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/scope.json +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/source-capture.json +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem/store/__init__.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/dependency_links.txt +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/entry_points.txt +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/top_level.txt +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/agent-blackbox.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/audit-log-spec.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/audit-search.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/auditing-guide.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/control-plane.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/data-storage-and-backup.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v1.0.0.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.0.0.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.0.1.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.1.0.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.0.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.1.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.2.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.3.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.4.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/docs/saas-integration.md +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/setup.ts +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/setup.mjs +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/smoke.mjs +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/tsconfig.json +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/setup.cfg +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_atbot_service.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_auditability.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_evidence.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_verify.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_encryption.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_extract.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_generic_control.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_graph.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_host_adapter.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_layers.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_maintenance.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_mcp.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_media_observations.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_memory.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_control.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_install.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_topology.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_policy.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_recall_evidence.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_restore_receipt.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_retrieve.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_semantic_search.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tests/test_store_transactions.py +0 -0
- {atmem-2.2.4 → atmem-2.2.6}/tools/verify_audit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atmem
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.6
|
|
4
4
|
Summary: Host-neutral Agent Black Box and reversible memory control plane.
|
|
5
5
|
Author-email: aetna000 <aetna000@gmail.com>
|
|
6
6
|
Maintainer-email: aetna000 <aetna000@gmail.com>
|
|
@@ -10,7 +10,7 @@ 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 :: 4 - Beta
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -24,12 +24,20 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
24
24
|
Requires-Python: >=3.10
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
26
|
License-File: LICENSE
|
|
27
|
-
Requires-Dist: atmem-atbot==0.1.
|
|
27
|
+
Requires-Dist: atmem-atbot==0.1.0a6
|
|
28
|
+
Requires-Dist: cryptography<49,>=42
|
|
28
29
|
Provides-Extra: dev
|
|
29
30
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
30
31
|
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
|
|
31
32
|
Provides-Extra: semantic
|
|
32
33
|
Requires-Dist: sentence-transformers<6.0.0,>=5.0.0; extra == "semantic"
|
|
34
|
+
Provides-Extra: mem0
|
|
35
|
+
Requires-Dist: mem0ai<3,>=2.0.20; extra == "mem0"
|
|
36
|
+
Provides-Extra: langgraph-provider
|
|
37
|
+
Requires-Dist: langgraph<2,>=1.1.5; extra == "langgraph-provider"
|
|
38
|
+
Provides-Extra: pydantic-provider
|
|
39
|
+
Requires-Dist: pydantic-ai-slim<3,>=2.0; extra == "pydantic-provider"
|
|
40
|
+
Requires-Dist: pydantic<3,>=2.0; extra == "pydantic-provider"
|
|
33
41
|
Provides-Extra: atbot
|
|
34
42
|
Provides-Extra: pydantic-ai
|
|
35
43
|
Requires-Dist: pydantic-ai-slim<3,>=2.0; extra == "pydantic-ai"
|
|
@@ -40,11 +48,32 @@ Provides-Extra: frameworks
|
|
|
40
48
|
Requires-Dist: pydantic-ai-slim<3,>=2.0; extra == "frameworks"
|
|
41
49
|
Requires-Dist: langgraph<2,>=1.1.5; extra == "frameworks"
|
|
42
50
|
Requires-Dist: langchain<2,>=1.0; extra == "frameworks"
|
|
51
|
+
Provides-Extra: openai-agents
|
|
52
|
+
Requires-Dist: openai-agents<1,>=0.2; extra == "openai-agents"
|
|
53
|
+
Provides-Extra: microsoft-agent
|
|
54
|
+
Requires-Dist: agent-framework<2,>=1.0.0b1; extra == "microsoft-agent"
|
|
55
|
+
Provides-Extra: google-adk
|
|
56
|
+
Requires-Dist: google-adk<2,>=1; extra == "google-adk"
|
|
57
|
+
Provides-Extra: smolagents
|
|
58
|
+
Requires-Dist: smolagents<2,>=1; extra == "smolagents"
|
|
59
|
+
Provides-Extra: crewai
|
|
60
|
+
Requires-Dist: crewai<2,>=0.100; extra == "crewai"
|
|
61
|
+
Provides-Extra: postgres
|
|
62
|
+
Requires-Dist: psycopg<4,>=3.2; extra == "postgres"
|
|
63
|
+
Provides-Extra: pgvector
|
|
64
|
+
Requires-Dist: psycopg<4,>=3.2; extra == "pgvector"
|
|
65
|
+
Requires-Dist: pgvector<1,>=0.4; extra == "pgvector"
|
|
66
|
+
Provides-Extra: qdrant
|
|
67
|
+
Requires-Dist: qdrant-client<2,>=1.15; extra == "qdrant"
|
|
68
|
+
Provides-Extra: storage-backends
|
|
69
|
+
Requires-Dist: psycopg<4,>=3.2; extra == "storage-backends"
|
|
70
|
+
Requires-Dist: pgvector<1,>=0.4; extra == "storage-backends"
|
|
71
|
+
Requires-Dist: qdrant-client<2,>=1.15; extra == "storage-backends"
|
|
43
72
|
Dynamic: license-file
|
|
44
73
|
|
|
45
74
|
# AtMem
|
|
46
75
|
|
|
47
|
-
[](./docs/releases/v2.2.6.md)
|
|
48
77
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
49
78
|
|
|
50
79
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
@@ -59,7 +88,7 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
|
59
88
|
### 1. Install AtMem and choose memory intelligence
|
|
60
89
|
|
|
61
90
|
```bash
|
|
62
|
-
python -m pip install --upgrade atmem==2.2.
|
|
91
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
63
92
|
atmem atbot setup
|
|
64
93
|
atmem atbot doctor
|
|
65
94
|
atmem dashboard
|
|
@@ -82,12 +111,16 @@ atmem control verify
|
|
|
82
111
|
|
|
83
112
|
AtMem installs the matching npm bridge, discovers OpenClaw agents and
|
|
84
113
|
workspaces, starts in safe shadow mode, restarts the gateway, and verifies the
|
|
85
|
-
connection.
|
|
114
|
+
connection. It also offers to download the default local embedding model and
|
|
115
|
+
build, verify, and activate its vector epoch. For unattended setup, make that
|
|
116
|
+
approval explicit with `atmem openclaw install --allow-model-download`; choose
|
|
117
|
+
another Ollama model with `--embedding-model MODEL`. Do not install the npm
|
|
118
|
+
package yourself.
|
|
86
119
|
|
|
87
120
|
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
88
121
|
|
|
89
122
|
```bash
|
|
90
|
-
python -m pip install --upgrade atmem==2.2.
|
|
123
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
91
124
|
atmem openclaw upgrade
|
|
92
125
|
atmem control verify
|
|
93
126
|
```
|
|
@@ -110,7 +143,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
|
|
|
110
143
|
#### Pydantic AI — native capability
|
|
111
144
|
|
|
112
145
|
```bash
|
|
113
|
-
python -m pip install 'atmem[pydantic-ai]==2.2.
|
|
146
|
+
python -m pip install 'atmem[pydantic-ai]==2.2.6'
|
|
114
147
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
115
148
|
```
|
|
116
149
|
|
|
@@ -126,6 +159,7 @@ identity = AtMemAdapterIdentity(
|
|
|
126
159
|
agent_id=scope["agent_id"],
|
|
127
160
|
workspace_id=scope["workspace_id"],
|
|
128
161
|
subject_id=scope["subject_id"],
|
|
162
|
+
user_id="authenticated-application-user", # required only for delegation
|
|
129
163
|
)
|
|
130
164
|
memory = PydanticAIAtMemAdapter(manager, identity).capability()
|
|
131
165
|
agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
@@ -134,7 +168,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
|
134
168
|
#### LangChain/LangGraph — native middleware
|
|
135
169
|
|
|
136
170
|
```bash
|
|
137
|
-
python -m pip install 'atmem[langgraph]==2.2.
|
|
171
|
+
python -m pip install 'atmem[langgraph]==2.2.6'
|
|
138
172
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
139
173
|
```
|
|
140
174
|
|
|
@@ -150,17 +184,69 @@ identity = AtMemAdapterIdentity(
|
|
|
150
184
|
agent_id=scope["agent_id"],
|
|
151
185
|
workspace_id=scope["workspace_id"],
|
|
152
186
|
subject_id=scope["subject_id"],
|
|
187
|
+
user_id="authenticated-application-user", # required only for delegation
|
|
153
188
|
)
|
|
154
189
|
memory = create_langgraph_middleware(manager, identity)
|
|
155
190
|
agent = create_agent(model="openai:gpt-5-mini", tools=[], middleware=[memory])
|
|
156
191
|
```
|
|
157
192
|
|
|
158
193
|
The framework hooks automate authenticated capture, governed retrieval,
|
|
159
|
-
context injection, exposure proof, and turn/tool evidence.
|
|
194
|
+
context injection, exposure proof, and turn/tool evidence. When an enabled
|
|
195
|
+
delegated-provider registration matches the complete scope, they instead carry
|
|
196
|
+
the exact HMAC-authenticated provider workflow through the Pydantic AI or
|
|
197
|
+
LangChain/LangGraph model boundary, without also using native AtMem context.
|
|
198
|
+
This delegated host path is packaged in 2.2.6. The adapters do not replace
|
|
160
199
|
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
161
200
|
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
162
201
|
multi-agent, and low-level `StateGraph` integration.
|
|
163
202
|
|
|
203
|
+
### Spec 007 milestone: govern work in progress
|
|
204
|
+
|
|
205
|
+
AtMem 2.2.6 includes Governed Task State: a separate, revisioned authority
|
|
206
|
+
plane for what an agent is doing now, what remains, what is blocked, and
|
|
207
|
+
whether completion is allowed. It is **disabled by default** and never turns
|
|
208
|
+
temporary task progress into long-term personal memory.
|
|
209
|
+
|
|
210
|
+
Start one exact scope and inspect it from either the CLI or the dashboard:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
atmem task enable ~/.atmem/memories.db \
|
|
214
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
215
|
+
atmem task start ~/.atmem/memories.db --task-id release-007 \
|
|
216
|
+
--goal "Ship the governed task-state milestone" --actor you@example.com \
|
|
217
|
+
--required-item verify="Run release verification" \
|
|
218
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
219
|
+
atmem task show ~/.atmem/memories.db release-007 \
|
|
220
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
221
|
+
atmem dashboard
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
The dashboard's **Governed tasks** card shows progress, blockers, recent task
|
|
225
|
+
decisions, context delivery, the current revision, and guarded lifecycle
|
|
226
|
+
actions. Model delivery requires an exact task identity. Pydantic AI may supply
|
|
227
|
+
`atmem_task_id` in run dependencies; LangGraph may supply it through
|
|
228
|
+
`configurable`; construction-time `identity.for_task("release-007")` remains a
|
|
229
|
+
backward-compatible fallback. OpenClaw resolves the owner-authorized current
|
|
230
|
+
conversation binding. AtMem never guesses from prompt text or chooses among
|
|
231
|
+
open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
|
|
232
|
+
|
|
233
|
+
See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
|
|
234
|
+
correction, provenance, expiry, benchmark, and automation examples, and read
|
|
235
|
+
the [2.2.6 release notes](docs/releases/v2.2.6.md) before upgrading.
|
|
236
|
+
|
|
237
|
+
### Prove memory quality locally
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
atmem benchmark run --output benchmark.json
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
This offline release gate runs 16 isolated extraction, contradiction, recall,
|
|
244
|
+
withholding, injection, privacy, poisoning and fallback cases. Safety must be
|
|
245
|
+
perfect; other quality metrics cannot fall below checked-in baselines. Optional
|
|
246
|
+
local/hosted profiles, LongMemEval import and fair Mem0 OSS comparison are also
|
|
247
|
+
available without adding Mem0 or model SDKs to the base install. See the
|
|
248
|
+
[memory benchmark guide](docs/benchmarks.md) for commands and honest limits.
|
|
249
|
+
|
|
164
250
|
### 3. Review, then activate
|
|
165
251
|
|
|
166
252
|
Every integration starts in **shadow mode**: AtMem learns and shows what it
|
|
@@ -178,10 +264,57 @@ If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
|
178
264
|
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
179
265
|
on a hosted model.
|
|
180
266
|
|
|
181
|
-
> **Release status:** this repository describes **AtMem 2.2.
|
|
267
|
+
> **Release status:** this repository describes the **AtMem 2.2.6 release candidate**, not verified publication. AtBot is a
|
|
182
268
|
> separately packaged, headless component installed and managed by AtMem; it is
|
|
183
269
|
> not an independent agent or a second memory authority.
|
|
184
270
|
|
|
271
|
+
### Optional: delegate context authority
|
|
272
|
+
|
|
273
|
+
Beta 10 requires per-instance HMAC request credentials for delegated context and
|
|
274
|
+
health. See the
|
|
275
|
+
[shared profile and beta migration](docs/contracts/delegated-request-auth-v1.md)
|
|
276
|
+
before enabling an older delegated registration.
|
|
277
|
+
|
|
278
|
+
AtMem uses its own governed retrieval by default. The 2.2.6 beta adds an
|
|
279
|
+
explicit, provider-neutral delegated mode for deployments where another
|
|
280
|
+
compatible provider must make the context decision while AtMem owns
|
|
281
|
+
host integration and flight evidence.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
atmem delegated register --help
|
|
285
|
+
atmem delegated status
|
|
286
|
+
atmem delegated enable context-provider:local
|
|
287
|
+
atmem delegated doctor
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Registration is disabled by default and is bound to exact user, agent, and
|
|
291
|
+
workspace scopes. On matching turns, AtMem verifies the signed result, injects
|
|
292
|
+
the provider's exact bytes once, and separately proves delivery. It does not
|
|
293
|
+
run native retrieval after an accepted delegated decision. Provider failure
|
|
294
|
+
withholds context unless the operator explicitly registered native fallback.
|
|
295
|
+
See the [delegated context-provider guide](docs/delegated-context-provider.md).
|
|
296
|
+
|
|
297
|
+
AtMem also ships provider-side adapters, each as an independent optional extra:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Mem0 chooses context; AtMem verifies and records delivery
|
|
301
|
+
python -m pip install 'atmem[mem0]'
|
|
302
|
+
atmem provider init mem0-local --kind mem0 --mode oss --port 8788
|
|
303
|
+
|
|
304
|
+
# Or use an application-owned LangGraph / Pydantic AI factory
|
|
305
|
+
python -m pip install 'atmem[langgraph-provider]'
|
|
306
|
+
atmem provider init graph-context --kind langgraph \
|
|
307
|
+
--factory myapp.memory_graph:build_graph --port 8789
|
|
308
|
+
|
|
309
|
+
python -m pip install 'atmem[pydantic-provider]'
|
|
310
|
+
atmem provider init ai-context --kind pydantic-ai \
|
|
311
|
+
--factory myapp.memory_agent:build_agent --port 8790
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`atmem provider init` creates private signing material and prints the exact
|
|
315
|
+
registration command; it does not enable delegated authority. See the
|
|
316
|
+
[context-provider adapter quick starts](docs/context-provider-adapters.md).
|
|
317
|
+
|
|
185
318
|
It gives agent runtimes one governed memory source and one tamper-evident record
|
|
186
319
|
of what the host observed: memory considered and injected, model boundaries,
|
|
187
320
|
tool requests and completions, turn termination, and linked external outcome
|
|
@@ -197,15 +330,17 @@ and restores it exactly.
|
|
|
197
330
|
## Installation details
|
|
198
331
|
|
|
199
332
|
```bash
|
|
200
|
-
python -m pip install atmem==2.2.
|
|
333
|
+
python -m pip install atmem==2.2.6
|
|
201
334
|
atmem --version
|
|
202
335
|
```
|
|
203
336
|
|
|
204
337
|
AtMem requires Python 3.10 or newer. It always creates a dependency-free local
|
|
205
|
-
vector sidecar
|
|
338
|
+
vector sidecar. `atmem openclaw install` can automatically prepare an Ollama
|
|
339
|
+
embedding model, while the semantic extra adds local sentence-transformer
|
|
340
|
+
choices:
|
|
206
341
|
|
|
207
342
|
```bash
|
|
208
|
-
python -m pip install 'atmem[semantic]==2.2.
|
|
343
|
+
python -m pip install 'atmem[semantic]==2.2.6'
|
|
209
344
|
```
|
|
210
345
|
|
|
211
346
|
For repository development, install both workspace packages:
|
|
@@ -215,10 +350,10 @@ python -m pip install -e './packages/atbot[dev]' -e '.[dev]'
|
|
|
215
350
|
atmem atbot setup
|
|
216
351
|
```
|
|
217
352
|
|
|
218
|
-
The authority modules remain model-agnostic and do not import AtBot
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
353
|
+
The authority modules remain model-agnostic and do not import AtBot. The AtMem
|
|
354
|
+
distribution requires the separately packaged, exactly pinned AtBot companion,
|
|
355
|
+
whose built-in Ollama and OpenAI-compatible client uses only the Python standard
|
|
356
|
+
library. Framework SDKs enter the environment only through explicit extras.
|
|
222
357
|
|
|
223
358
|
## Integration boundaries
|
|
224
359
|
|
|
@@ -385,7 +520,7 @@ atmem control restore
|
|
|
385
520
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
386
521
|
|
|
387
522
|
```bash
|
|
388
|
-
python -m pip install --upgrade atmem==2.2.
|
|
523
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
389
524
|
atmem openclaw upgrade
|
|
390
525
|
atmem control verify
|
|
391
526
|
```
|
|
@@ -445,6 +580,7 @@ atmem mcp --db ~/.atmem/memories.db --subject user-1
|
|
|
445
580
|
```
|
|
446
581
|
|
|
447
582
|
MCP tools: `memory_remember`, `memory_observe`, `memory_recall`,
|
|
583
|
+
`memory_recall_decision`,
|
|
448
584
|
`memory_get_record`, `memory_get_source`, `memory_recall_block`,
|
|
449
585
|
`memory_persona`, `memory_context_pack`, `memory_capture`, `memory_list`,
|
|
450
586
|
`memory_forget`, `memory_forget_artifact`, `memory_promote`, `memory_audit`,
|
|
@@ -482,6 +618,7 @@ system-of-record verification.
|
|
|
482
618
|
|
|
483
619
|
- [Current implementation status](docs/current-status.md)
|
|
484
620
|
- [Generic runtime adapter](docs/generic-adapter.md)
|
|
621
|
+
- [Delegated context-provider contract](docs/contracts/delegated-context-provider-v1.md)
|
|
485
622
|
- [Agent Black Box](docs/agent-blackbox.md)
|
|
486
623
|
- [Integration guide](docs/integration-guide.md)
|
|
487
624
|
- [OpenClaw setup](docs/openclaw-setup.md)
|
|
@@ -490,9 +627,14 @@ system-of-record verification.
|
|
|
490
627
|
- [Audit log specification](docs/audit-log-spec.md)
|
|
491
628
|
- [Audit investigation](docs/audit-search.md)
|
|
492
629
|
- [Storage, backup, and recovery](docs/data-storage-and-backup.md)
|
|
630
|
+
- [Spec-driven development](docs/spec-kit.md)
|
|
493
631
|
|
|
494
632
|
## Development verification
|
|
495
633
|
|
|
634
|
+
Material features use the repository's GitHub Spec Kit Lean workflow. See
|
|
635
|
+
[Spec-driven development](docs/spec-kit.md) for feature directories, Codex
|
|
636
|
+
skills, and the constitution-backed delivery sequence.
|
|
637
|
+
|
|
496
638
|
AtMem and its separately packaged AtBot companion share this repository. They
|
|
497
639
|
remain separate processes and communicate only through the loopback companion
|
|
498
640
|
protocol; neither package imports the other's runtime code.
|
|
@@ -531,9 +673,9 @@ npm test
|
|
|
531
673
|
npm run smoke
|
|
532
674
|
```
|
|
533
675
|
|
|
534
|
-
Current repository metadata is version **2.2.
|
|
535
|
-
|
|
536
|
-
|
|
676
|
+
Current repository metadata is version **2.2.6**, with the matched OpenClaw
|
|
677
|
+
bridge **2.2.6**. Release validation requires exact Python/bridge alignment;
|
|
678
|
+
AtBot retains its independent compatible version **0.1.0a6**.
|
|
537
679
|
|
|
538
680
|
## License
|
|
539
681
|
|
|
@@ -1,50 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: atmem
|
|
3
|
-
Version: 2.2.4
|
|
4
|
-
Summary: Host-neutral Agent Black Box and reversible memory control plane.
|
|
5
|
-
Author-email: aetna000 <aetna000@gmail.com>
|
|
6
|
-
Maintainer-email: aetna000 <aetna000@gmail.com>
|
|
7
|
-
License-Expression: Apache-2.0
|
|
8
|
-
Project-URL: Homepage, https://github.com/aetna000/atmem
|
|
9
|
-
Project-URL: Repository, https://github.com/aetna000/atmem
|
|
10
|
-
Project-URL: Issues, https://github.com/aetna000/atmem/issues
|
|
11
|
-
Project-URL: Documentation, https://github.com/aetna000/atmem#readme
|
|
12
|
-
Keywords: agent-black-box,agent-memory,audit,mcp,provenance,sqlite
|
|
13
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
-
Classifier: Environment :: Console
|
|
15
|
-
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
-
Classifier: Topic :: Database
|
|
23
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/markdown
|
|
26
|
-
License-File: LICENSE
|
|
27
|
-
Requires-Dist: atmem-atbot==0.1.0a3
|
|
28
|
-
Provides-Extra: dev
|
|
29
|
-
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
30
|
-
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
|
|
31
|
-
Provides-Extra: semantic
|
|
32
|
-
Requires-Dist: sentence-transformers<6.0.0,>=5.0.0; extra == "semantic"
|
|
33
|
-
Provides-Extra: atbot
|
|
34
|
-
Provides-Extra: pydantic-ai
|
|
35
|
-
Requires-Dist: pydantic-ai-slim<3,>=2.0; extra == "pydantic-ai"
|
|
36
|
-
Provides-Extra: langgraph
|
|
37
|
-
Requires-Dist: langgraph<2,>=1.1.5; extra == "langgraph"
|
|
38
|
-
Requires-Dist: langchain<2,>=1.0; extra == "langgraph"
|
|
39
|
-
Provides-Extra: frameworks
|
|
40
|
-
Requires-Dist: pydantic-ai-slim<3,>=2.0; extra == "frameworks"
|
|
41
|
-
Requires-Dist: langgraph<2,>=1.1.5; extra == "frameworks"
|
|
42
|
-
Requires-Dist: langchain<2,>=1.0; extra == "frameworks"
|
|
43
|
-
Dynamic: license-file
|
|
44
|
-
|
|
45
1
|
# AtMem
|
|
46
2
|
|
|
47
|
-
[](./docs/releases/v2.2.6.md)
|
|
48
4
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
49
5
|
|
|
50
6
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
@@ -59,7 +15,7 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
|
59
15
|
### 1. Install AtMem and choose memory intelligence
|
|
60
16
|
|
|
61
17
|
```bash
|
|
62
|
-
python -m pip install --upgrade atmem==2.2.
|
|
18
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
63
19
|
atmem atbot setup
|
|
64
20
|
atmem atbot doctor
|
|
65
21
|
atmem dashboard
|
|
@@ -82,12 +38,16 @@ atmem control verify
|
|
|
82
38
|
|
|
83
39
|
AtMem installs the matching npm bridge, discovers OpenClaw agents and
|
|
84
40
|
workspaces, starts in safe shadow mode, restarts the gateway, and verifies the
|
|
85
|
-
connection.
|
|
41
|
+
connection. It also offers to download the default local embedding model and
|
|
42
|
+
build, verify, and activate its vector epoch. For unattended setup, make that
|
|
43
|
+
approval explicit with `atmem openclaw install --allow-model-download`; choose
|
|
44
|
+
another Ollama model with `--embedding-model MODEL`. Do not install the npm
|
|
45
|
+
package yourself.
|
|
86
46
|
|
|
87
47
|
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
88
48
|
|
|
89
49
|
```bash
|
|
90
|
-
python -m pip install --upgrade atmem==2.2.
|
|
50
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
91
51
|
atmem openclaw upgrade
|
|
92
52
|
atmem control verify
|
|
93
53
|
```
|
|
@@ -110,7 +70,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
|
|
|
110
70
|
#### Pydantic AI — native capability
|
|
111
71
|
|
|
112
72
|
```bash
|
|
113
|
-
python -m pip install 'atmem[pydantic-ai]==2.2.
|
|
73
|
+
python -m pip install 'atmem[pydantic-ai]==2.2.6'
|
|
114
74
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
115
75
|
```
|
|
116
76
|
|
|
@@ -126,6 +86,7 @@ identity = AtMemAdapterIdentity(
|
|
|
126
86
|
agent_id=scope["agent_id"],
|
|
127
87
|
workspace_id=scope["workspace_id"],
|
|
128
88
|
subject_id=scope["subject_id"],
|
|
89
|
+
user_id="authenticated-application-user", # required only for delegation
|
|
129
90
|
)
|
|
130
91
|
memory = PydanticAIAtMemAdapter(manager, identity).capability()
|
|
131
92
|
agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
@@ -134,7 +95,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
|
134
95
|
#### LangChain/LangGraph — native middleware
|
|
135
96
|
|
|
136
97
|
```bash
|
|
137
|
-
python -m pip install 'atmem[langgraph]==2.2.
|
|
98
|
+
python -m pip install 'atmem[langgraph]==2.2.6'
|
|
138
99
|
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
139
100
|
```
|
|
140
101
|
|
|
@@ -150,17 +111,69 @@ identity = AtMemAdapterIdentity(
|
|
|
150
111
|
agent_id=scope["agent_id"],
|
|
151
112
|
workspace_id=scope["workspace_id"],
|
|
152
113
|
subject_id=scope["subject_id"],
|
|
114
|
+
user_id="authenticated-application-user", # required only for delegation
|
|
153
115
|
)
|
|
154
116
|
memory = create_langgraph_middleware(manager, identity)
|
|
155
117
|
agent = create_agent(model="openai:gpt-5-mini", tools=[], middleware=[memory])
|
|
156
118
|
```
|
|
157
119
|
|
|
158
120
|
The framework hooks automate authenticated capture, governed retrieval,
|
|
159
|
-
context injection, exposure proof, and turn/tool evidence.
|
|
121
|
+
context injection, exposure proof, and turn/tool evidence. When an enabled
|
|
122
|
+
delegated-provider registration matches the complete scope, they instead carry
|
|
123
|
+
the exact HMAC-authenticated provider workflow through the Pydantic AI or
|
|
124
|
+
LangChain/LangGraph model boundary, without also using native AtMem context.
|
|
125
|
+
This delegated host path is packaged in 2.2.6. The adapters do not replace
|
|
160
126
|
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
161
127
|
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
162
128
|
multi-agent, and low-level `StateGraph` integration.
|
|
163
129
|
|
|
130
|
+
### Spec 007 milestone: govern work in progress
|
|
131
|
+
|
|
132
|
+
AtMem 2.2.6 includes Governed Task State: a separate, revisioned authority
|
|
133
|
+
plane for what an agent is doing now, what remains, what is blocked, and
|
|
134
|
+
whether completion is allowed. It is **disabled by default** and never turns
|
|
135
|
+
temporary task progress into long-term personal memory.
|
|
136
|
+
|
|
137
|
+
Start one exact scope and inspect it from either the CLI or the dashboard:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
atmem task enable ~/.atmem/memories.db \
|
|
141
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
142
|
+
atmem task start ~/.atmem/memories.db --task-id release-007 \
|
|
143
|
+
--goal "Ship the governed task-state milestone" --actor you@example.com \
|
|
144
|
+
--required-item verify="Run release verification" \
|
|
145
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
146
|
+
atmem task show ~/.atmem/memories.db release-007 \
|
|
147
|
+
--subject user-1 --agent agent-1 --workspace workspace-1
|
|
148
|
+
atmem dashboard
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
The dashboard's **Governed tasks** card shows progress, blockers, recent task
|
|
152
|
+
decisions, context delivery, the current revision, and guarded lifecycle
|
|
153
|
+
actions. Model delivery requires an exact task identity. Pydantic AI may supply
|
|
154
|
+
`atmem_task_id` in run dependencies; LangGraph may supply it through
|
|
155
|
+
`configurable`; construction-time `identity.for_task("release-007")` remains a
|
|
156
|
+
backward-compatible fallback. OpenClaw resolves the owner-authorized current
|
|
157
|
+
conversation binding. AtMem never guesses from prompt text or chooses among
|
|
158
|
+
open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
|
|
159
|
+
|
|
160
|
+
See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
|
|
161
|
+
correction, provenance, expiry, benchmark, and automation examples, and read
|
|
162
|
+
the [2.2.6 release notes](docs/releases/v2.2.6.md) before upgrading.
|
|
163
|
+
|
|
164
|
+
### Prove memory quality locally
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
atmem benchmark run --output benchmark.json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
This offline release gate runs 16 isolated extraction, contradiction, recall,
|
|
171
|
+
withholding, injection, privacy, poisoning and fallback cases. Safety must be
|
|
172
|
+
perfect; other quality metrics cannot fall below checked-in baselines. Optional
|
|
173
|
+
local/hosted profiles, LongMemEval import and fair Mem0 OSS comparison are also
|
|
174
|
+
available without adding Mem0 or model SDKs to the base install. See the
|
|
175
|
+
[memory benchmark guide](docs/benchmarks.md) for commands and honest limits.
|
|
176
|
+
|
|
164
177
|
### 3. Review, then activate
|
|
165
178
|
|
|
166
179
|
Every integration starts in **shadow mode**: AtMem learns and shows what it
|
|
@@ -178,10 +191,57 @@ If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
|
178
191
|
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
179
192
|
on a hosted model.
|
|
180
193
|
|
|
181
|
-
> **Release status:** this repository describes **AtMem 2.2.
|
|
194
|
+
> **Release status:** this repository describes the **AtMem 2.2.6 release candidate**, not verified publication. AtBot is a
|
|
182
195
|
> separately packaged, headless component installed and managed by AtMem; it is
|
|
183
196
|
> not an independent agent or a second memory authority.
|
|
184
197
|
|
|
198
|
+
### Optional: delegate context authority
|
|
199
|
+
|
|
200
|
+
Beta 10 requires per-instance HMAC request credentials for delegated context and
|
|
201
|
+
health. See the
|
|
202
|
+
[shared profile and beta migration](docs/contracts/delegated-request-auth-v1.md)
|
|
203
|
+
before enabling an older delegated registration.
|
|
204
|
+
|
|
205
|
+
AtMem uses its own governed retrieval by default. The 2.2.6 beta adds an
|
|
206
|
+
explicit, provider-neutral delegated mode for deployments where another
|
|
207
|
+
compatible provider must make the context decision while AtMem owns
|
|
208
|
+
host integration and flight evidence.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
atmem delegated register --help
|
|
212
|
+
atmem delegated status
|
|
213
|
+
atmem delegated enable context-provider:local
|
|
214
|
+
atmem delegated doctor
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Registration is disabled by default and is bound to exact user, agent, and
|
|
218
|
+
workspace scopes. On matching turns, AtMem verifies the signed result, injects
|
|
219
|
+
the provider's exact bytes once, and separately proves delivery. It does not
|
|
220
|
+
run native retrieval after an accepted delegated decision. Provider failure
|
|
221
|
+
withholds context unless the operator explicitly registered native fallback.
|
|
222
|
+
See the [delegated context-provider guide](docs/delegated-context-provider.md).
|
|
223
|
+
|
|
224
|
+
AtMem also ships provider-side adapters, each as an independent optional extra:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# Mem0 chooses context; AtMem verifies and records delivery
|
|
228
|
+
python -m pip install 'atmem[mem0]'
|
|
229
|
+
atmem provider init mem0-local --kind mem0 --mode oss --port 8788
|
|
230
|
+
|
|
231
|
+
# Or use an application-owned LangGraph / Pydantic AI factory
|
|
232
|
+
python -m pip install 'atmem[langgraph-provider]'
|
|
233
|
+
atmem provider init graph-context --kind langgraph \
|
|
234
|
+
--factory myapp.memory_graph:build_graph --port 8789
|
|
235
|
+
|
|
236
|
+
python -m pip install 'atmem[pydantic-provider]'
|
|
237
|
+
atmem provider init ai-context --kind pydantic-ai \
|
|
238
|
+
--factory myapp.memory_agent:build_agent --port 8790
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`atmem provider init` creates private signing material and prints the exact
|
|
242
|
+
registration command; it does not enable delegated authority. See the
|
|
243
|
+
[context-provider adapter quick starts](docs/context-provider-adapters.md).
|
|
244
|
+
|
|
185
245
|
It gives agent runtimes one governed memory source and one tamper-evident record
|
|
186
246
|
of what the host observed: memory considered and injected, model boundaries,
|
|
187
247
|
tool requests and completions, turn termination, and linked external outcome
|
|
@@ -197,15 +257,17 @@ and restores it exactly.
|
|
|
197
257
|
## Installation details
|
|
198
258
|
|
|
199
259
|
```bash
|
|
200
|
-
python -m pip install atmem==2.2.
|
|
260
|
+
python -m pip install atmem==2.2.6
|
|
201
261
|
atmem --version
|
|
202
262
|
```
|
|
203
263
|
|
|
204
264
|
AtMem requires Python 3.10 or newer. It always creates a dependency-free local
|
|
205
|
-
vector sidecar
|
|
265
|
+
vector sidecar. `atmem openclaw install` can automatically prepare an Ollama
|
|
266
|
+
embedding model, while the semantic extra adds local sentence-transformer
|
|
267
|
+
choices:
|
|
206
268
|
|
|
207
269
|
```bash
|
|
208
|
-
python -m pip install 'atmem[semantic]==2.2.
|
|
270
|
+
python -m pip install 'atmem[semantic]==2.2.6'
|
|
209
271
|
```
|
|
210
272
|
|
|
211
273
|
For repository development, install both workspace packages:
|
|
@@ -215,10 +277,10 @@ python -m pip install -e './packages/atbot[dev]' -e '.[dev]'
|
|
|
215
277
|
atmem atbot setup
|
|
216
278
|
```
|
|
217
279
|
|
|
218
|
-
The authority modules remain model-agnostic and do not import AtBot
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
280
|
+
The authority modules remain model-agnostic and do not import AtBot. The AtMem
|
|
281
|
+
distribution requires the separately packaged, exactly pinned AtBot companion,
|
|
282
|
+
whose built-in Ollama and OpenAI-compatible client uses only the Python standard
|
|
283
|
+
library. Framework SDKs enter the environment only through explicit extras.
|
|
222
284
|
|
|
223
285
|
## Integration boundaries
|
|
224
286
|
|
|
@@ -385,7 +447,7 @@ atmem control restore
|
|
|
385
447
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
386
448
|
|
|
387
449
|
```bash
|
|
388
|
-
python -m pip install --upgrade atmem==2.2.
|
|
450
|
+
python -m pip install --upgrade atmem==2.2.6
|
|
389
451
|
atmem openclaw upgrade
|
|
390
452
|
atmem control verify
|
|
391
453
|
```
|
|
@@ -445,6 +507,7 @@ atmem mcp --db ~/.atmem/memories.db --subject user-1
|
|
|
445
507
|
```
|
|
446
508
|
|
|
447
509
|
MCP tools: `memory_remember`, `memory_observe`, `memory_recall`,
|
|
510
|
+
`memory_recall_decision`,
|
|
448
511
|
`memory_get_record`, `memory_get_source`, `memory_recall_block`,
|
|
449
512
|
`memory_persona`, `memory_context_pack`, `memory_capture`, `memory_list`,
|
|
450
513
|
`memory_forget`, `memory_forget_artifact`, `memory_promote`, `memory_audit`,
|
|
@@ -482,6 +545,7 @@ system-of-record verification.
|
|
|
482
545
|
|
|
483
546
|
- [Current implementation status](docs/current-status.md)
|
|
484
547
|
- [Generic runtime adapter](docs/generic-adapter.md)
|
|
548
|
+
- [Delegated context-provider contract](docs/contracts/delegated-context-provider-v1.md)
|
|
485
549
|
- [Agent Black Box](docs/agent-blackbox.md)
|
|
486
550
|
- [Integration guide](docs/integration-guide.md)
|
|
487
551
|
- [OpenClaw setup](docs/openclaw-setup.md)
|
|
@@ -490,9 +554,14 @@ system-of-record verification.
|
|
|
490
554
|
- [Audit log specification](docs/audit-log-spec.md)
|
|
491
555
|
- [Audit investigation](docs/audit-search.md)
|
|
492
556
|
- [Storage, backup, and recovery](docs/data-storage-and-backup.md)
|
|
557
|
+
- [Spec-driven development](docs/spec-kit.md)
|
|
493
558
|
|
|
494
559
|
## Development verification
|
|
495
560
|
|
|
561
|
+
Material features use the repository's GitHub Spec Kit Lean workflow. See
|
|
562
|
+
[Spec-driven development](docs/spec-kit.md) for feature directories, Codex
|
|
563
|
+
skills, and the constitution-backed delivery sequence.
|
|
564
|
+
|
|
496
565
|
AtMem and its separately packaged AtBot companion share this repository. They
|
|
497
566
|
remain separate processes and communicate only through the loopback companion
|
|
498
567
|
protocol; neither package imports the other's runtime code.
|
|
@@ -531,9 +600,9 @@ npm test
|
|
|
531
600
|
npm run smoke
|
|
532
601
|
```
|
|
533
602
|
|
|
534
|
-
Current repository metadata is version **2.2.
|
|
535
|
-
|
|
536
|
-
|
|
603
|
+
Current repository metadata is version **2.2.6**, with the matched OpenClaw
|
|
604
|
+
bridge **2.2.6**. Release validation requires exact Python/bridge alignment;
|
|
605
|
+
AtBot retains its independent compatible version **0.1.0a6**.
|
|
537
606
|
|
|
538
607
|
## License
|
|
539
608
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"""Optional framework adapters for automatic governed memory lifecycle hooks."""
|
|
2
|
+
|
|
3
|
+
from atmem.adapters.base import AtMemAdapterIdentity, AtMemTurnLifecycle
|
|
4
|
+
from atmem.adapters.callbacks import CallbackAtMemAdapter, callback_adapter
|
|
5
|
+
|
|
6
|
+
__all__ = ["AtMemAdapterIdentity", "AtMemTurnLifecycle", "CallbackAtMemAdapter", "callback_adapter"]
|