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.
Files changed (505) hide show
  1. {atmem-2.2.7b1/atmem.egg-info → atmem-2.3.2}/PKG-INFO +123 -30
  2. {atmem-2.2.7b1 → atmem-2.3.2}/README.md +117 -26
  3. atmem-2.3.2/atmem/adapters/evidence_profiles.py +98 -0
  4. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/cli.py +514 -4
  5. atmem-2.3.2/atmem/contracts/execution.py +114 -0
  6. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/versions.py +30 -0
  7. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.css +39 -7
  8. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.html +98 -21
  9. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/app.js +113 -44
  10. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/atbot_service.py +7 -2
  11. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/blackbox.py +125 -30
  12. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/compat.py +7 -1
  13. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/manager.py +180 -9
  14. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/server.py +122 -0
  15. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/store.py +498 -4
  16. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/web.py +380 -5
  17. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/keys.py +3 -1
  18. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/dashboard_daemon.py +5 -2
  19. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/config.py +3 -1
  20. atmem-2.3.2/atmem/evidence/__init__.py +19 -0
  21. atmem-2.3.2/atmem/evidence/accounts.py +170 -0
  22. atmem-2.3.2/atmem/evidence/crypto.py +191 -0
  23. atmem-2.3.2/atmem/evidence/models.py +115 -0
  24. atmem-2.3.2/atmem/evidence/service.py +649 -0
  25. atmem-2.3.2/atmem/evidence/store.py +321 -0
  26. atmem-2.3.2/atmem/execution/__init__.py +6 -0
  27. atmem-2.3.2/atmem/execution/coverage.py +27 -0
  28. atmem-2.3.2/atmem/execution/events.py +65 -0
  29. atmem-2.3.2/atmem/execution/projection.py +76 -0
  30. atmem-2.3.2/atmem/execution/retention.py +14 -0
  31. atmem-2.3.2/atmem/execution/status.py +30 -0
  32. atmem-2.3.2/atmem/home/__init__.py +7 -0
  33. atmem-2.3.2/atmem/home/artifacts.py +219 -0
  34. atmem-2.3.2/atmem/home/layout.py +93 -0
  35. atmem-2.3.2/atmem/home/service.py +468 -0
  36. atmem-2.3.2/atmem/identity/__init__.py +6 -0
  37. atmem-2.3.2/atmem/identity/models.py +28 -0
  38. atmem-2.3.2/atmem/identity/service.py +390 -0
  39. atmem-2.3.2/atmem/identity/store.py +61 -0
  40. atmem-2.3.2/atmem/incidents/__init__.py +5 -0
  41. atmem-2.3.2/atmem/incidents/detect.py +100 -0
  42. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/mcp/server.py +1 -1
  43. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/memory.py +10 -1
  44. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/openclaw_install.py +1 -1
  45. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/lifecycle.py +3 -1
  46. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/rank.py +13 -3
  47. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/capabilities.json +26 -0
  48. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/service/application.py +165 -0
  49. atmem-2.3.2/atmem/service/executions.py +37 -0
  50. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/sqlite.py +48 -1
  51. {atmem-2.2.7b1 → atmem-2.3.2/atmem.egg-info}/PKG-INFO +123 -30
  52. {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/SOURCES.txt +49 -1
  53. {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/requires.txt +3 -0
  54. {atmem-2.2.7b1 → atmem-2.3.2}/docs/capabilities.json +35 -6
  55. {atmem-2.2.7b1 → atmem-2.3.2}/docs/context-provider-adapters.md +11 -5
  56. atmem-2.3.2/docs/current-status.md +54 -0
  57. {atmem-2.2.7b1 → atmem-2.3.2}/docs/framework-adapters.md +5 -0
  58. atmem-2.3.2/docs/implementation-evidence/003/20260909T055300Z-04a063ce1e7b-publication.md +66 -0
  59. atmem-2.3.2/docs/implementation-evidence/003/20260910-storizon-published-2.2.6.md +52 -0
  60. atmem-2.3.2/docs/implementation-evidence/020/20260912-m0-investigation-preview.md +90 -0
  61. atmem-2.3.2/docs/implementation-evidence/020/20260912-release-candidate-correctness-hardening.md +84 -0
  62. atmem-2.3.2/docs/implementation-evidence/021/20260912-m0-findings-ui.md +30 -0
  63. atmem-2.3.2/docs/implementation-evidence/028/20260913-encrypted-evidence-access.md +104 -0
  64. atmem-2.3.2/docs/implementation-evidence/029/2026-09-13-local-user-management.md +49 -0
  65. atmem-2.3.2/docs/implementation-evidence/030/2026-09-13-portable-home.md +69 -0
  66. atmem-2.3.2/docs/release-roadmap.md +76 -0
  67. atmem-2.3.2/docs/releases/v2.2.6.md +103 -0
  68. atmem-2.3.2/docs/releases/v2.3.0.md +169 -0
  69. atmem-2.3.2/docs/releases/v2.3.0b1.md +98 -0
  70. atmem-2.3.2/docs/releases/v2.3.1.md +104 -0
  71. atmem-2.3.2/docs/releases/v2.3.2.md +112 -0
  72. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/README.md +9 -5
  73. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/index.ts +266 -30
  74. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/openclaw.plugin.json +5 -5
  75. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/package-lock.json +2 -2
  76. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/package.json +2 -2
  77. atmem-2.3.2/integrations/openclaw/src/execution-spool.ts +220 -0
  78. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/rpc-client.ts +1 -1
  79. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/types.ts +30 -0
  80. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/blackbox-diagnostics.mjs +1 -1
  81. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/dashboard-live.mjs +53 -4
  82. atmem-2.3.2/integrations/openclaw/test/execution-spool.mjs +52 -0
  83. atmem-2.3.2/integrations/openclaw/test/fixtures/hook-context/2026.9.4.json +397 -0
  84. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/hooks.mjs +146 -11
  85. {atmem-2.2.7b1 → atmem-2.3.2}/pyproject.toml +7 -4
  86. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_atbot_service.py +1 -2
  87. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_plane.py +51 -6
  88. atmem-2.3.2/tests/test_dashboard.py +152 -0
  89. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_context.py +6 -3
  90. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_documentation.py +3 -3
  91. atmem-2.3.2/tests/test_evidence_protection.py +600 -0
  92. atmem-2.3.2/tests/test_execution_capture.py +356 -0
  93. atmem-2.3.2/tests/test_execution_identity.py +67 -0
  94. atmem-2.3.2/tests/test_home.py +395 -0
  95. atmem-2.3.2/tests/test_http_api.py +336 -0
  96. atmem-2.3.2/tests/test_incident_resolution.py +52 -0
  97. atmem-2.3.2/tests/test_local_identity.py +111 -0
  98. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_mem0_provider.py +2 -2
  99. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_recall_evidence.py +29 -0
  100. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_quality.py +9 -0
  101. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_binding.py +17 -4
  102. atmem-2.3.2/tools/run_mem0_openclaw_live.py +176 -0
  103. {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_delegated_package.py +1 -1
  104. {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_installed_package.py +1 -1
  105. atmem-2.3.2/tools/smoke_mem0_roleplay.py +62 -0
  106. {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_upgrade_from_2_1.py +17 -9
  107. atmem-2.2.7b1/docs/current-status.md +0 -132
  108. atmem-2.2.7b1/docs/release-roadmap.md +0 -78
  109. atmem-2.2.7b1/docs/releases/v2.2.6.md +0 -73
  110. atmem-2.2.7b1/docs/releases/v2.2.7b1.md +0 -101
  111. atmem-2.2.7b1/tests/test_http_api.py +0 -50
  112. {atmem-2.2.7b1 → atmem-2.3.2}/LICENSE +0 -0
  113. {atmem-2.2.7b1 → atmem-2.3.2}/MANIFEST.in +0 -0
  114. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/__init__.py +0 -0
  115. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/__init__.py +0 -0
  116. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/base.py +0 -0
  117. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/callbacks.py +0 -0
  118. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/crewai.py +0 -0
  119. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/google_adk.py +0 -0
  120. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/langgraph.py +0 -0
  121. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/microsoft_agent.py +0 -0
  122. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/openai_agents.py +0 -0
  123. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/pydantic_ai.py +0 -0
  124. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/adapters/smolagents.py +0 -0
  125. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/__init__.py +0 -0
  126. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/contracts.py +0 -0
  127. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/deterministic-v1.json +0 -0
  128. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/mem0-oss-v1.json +0 -0
  129. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/retrieval-calibration-v1.json +0 -0
  130. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/retrieval-heldout-v1.json +0 -0
  131. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/task-state-v1.json +0 -0
  132. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/data/thresholds-v1.json +0 -0
  133. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/external.py +0 -0
  134. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/profiles.py +0 -0
  135. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/retrieval.py +0 -0
  136. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/benchmark/runner.py +0 -0
  137. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/client.py +0 -0
  138. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/__init__.py +0 -0
  139. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/models.py +0 -0
  140. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/contracts/task_state.py +0 -0
  141. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/__init__.py +0 -0
  142. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/assets/atmem.jpg +0 -0
  143. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/atbot_companion.py +0 -0
  144. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/evidence.py +0 -0
  145. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/explain.py +0 -0
  146. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/hosts.py +0 -0
  147. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/models.py +0 -0
  148. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/openclaw_native.py +0 -0
  149. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/openclaw_topology.py +0 -0
  150. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/state.py +0 -0
  151. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/topology.py +0 -0
  152. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/ui.py +0 -0
  153. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/control/verify.py +0 -0
  154. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/__init__.py +0 -0
  155. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/canonical.py +0 -0
  156. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/fact_keys.py +0 -0
  157. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/policy.py +0 -0
  158. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/storage.py +0 -0
  159. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/core/time.py +0 -0
  160. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/__init__.py +0 -0
  161. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/canonical.py +0 -0
  162. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/client.py +0 -0
  163. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/contracts.py +0 -0
  164. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/service.py +0 -0
  165. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/transport.py +0 -0
  166. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/delegated/validation.py +0 -0
  167. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/__init__.py +0 -0
  168. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/classify.py +0 -0
  169. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/context.py +0 -0
  170. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/models.py +0 -0
  171. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/review.py +0 -0
  172. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/rules.py +0 -0
  173. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/extract/validation.py +0 -0
  174. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/__init__.py +0 -0
  175. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/identity.py +0 -0
  176. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/maintenance.py +0 -0
  177. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/models.py +0 -0
  178. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/store.py +0 -0
  179. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/graph/traverse.py +0 -0
  180. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/__init__.py +0 -0
  181. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/export.py +0 -0
  182. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/importer.py +0 -0
  183. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/mem0.py +0 -0
  184. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/models.py +0 -0
  185. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/interchange/plan.py +0 -0
  186. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/__init__.py +0 -0
  187. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/attestation.py +0 -0
  188. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/models.py +0 -0
  189. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/registry.py +0 -0
  190. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/report.py +0 -0
  191. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/invariants/verdict.py +0 -0
  192. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/investigate.py +0 -0
  193. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/__init__.py +0 -0
  194. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/invalidation.py +0 -0
  195. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/maintenance.py +0 -0
  196. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/models.py +0 -0
  197. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/policy.py +0 -0
  198. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/lifecycle/service.py +0 -0
  199. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/maintenance.py +0 -0
  200. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/mcp/__init__.py +0 -0
  201. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/__init__.py +0 -0
  202. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/access.py +0 -0
  203. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/index.py +0 -0
  204. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/invalidation.py +0 -0
  205. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/models.py +0 -0
  206. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/processors.py +0 -0
  207. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/media/service.py +0 -0
  208. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/onboarding.py +0 -0
  209. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/onboarding_verify.py +0 -0
  210. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/__init__.py +0 -0
  211. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/langgraph.py +0 -0
  212. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/loading.py +0 -0
  213. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/mem0.py +0 -0
  214. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/models.py +0 -0
  215. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/pydantic_ai.py +0 -0
  216. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/runtime.py +0 -0
  217. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/server.py +0 -0
  218. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/signing.py +0 -0
  219. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/provider_adapters/worker.py +0 -0
  220. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/__init__.py +0 -0
  221. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/cache.py +0 -0
  222. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/calibration-v1.json +0 -0
  223. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/calibration.py +0 -0
  224. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/graph_signal.py +0 -0
  225. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/models.py +0 -0
  226. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/signals.py +0 -0
  227. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/retrieve/support.py +0 -0
  228. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/__init__.py +0 -0
  229. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/admin-audit.json +0 -0
  230. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/benchmark-cases.schema.json +0 -0
  231. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/benchmark-report.schema.json +0 -0
  232. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/context-package.json +0 -0
  233. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/graph-path.json +0 -0
  234. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-lifecycle-request.json +0 -0
  235. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-observation-request.json +0 -0
  236. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/host-task-proposal-request.json +0 -0
  237. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/invariant-registry.json +0 -0
  238. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/media-observation.json +0 -0
  239. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-archive.json +0 -0
  240. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-lifecycle.json +0 -0
  241. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/memory-proposal.json +0 -0
  242. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/onboarding-state.json +0 -0
  243. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/recall-request.json +0 -0
  244. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/retrieval-decision.json +0 -0
  245. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/scope.json +0 -0
  246. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/semantic-health.json +0 -0
  247. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-job.json +0 -0
  248. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-key.json +0 -0
  249. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/service-principal.json +0 -0
  250. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/source-capture.json +0 -0
  251. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-context-package.json +0 -0
  252. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-profile.json +0 -0
  253. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-session-binding.json +0 -0
  254. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-start-request.json +0 -0
  255. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-state-proposal.json +0 -0
  256. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-state.json +0 -0
  257. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/task-transition-decision.json +0 -0
  258. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/schemas/v1/unified-health.json +0 -0
  259. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/__init__.py +0 -0
  260. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/health.py +0 -0
  261. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/index.py +0 -0
  262. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/models.json +0 -0
  263. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/pgvector.py +0 -0
  264. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/providers.py +0 -0
  265. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/semantic/qdrant.py +0 -0
  266. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/__init__.py +0 -0
  267. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/admin_audit.py +0 -0
  268. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/auth.py +0 -0
  269. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/cache_policy.py +0 -0
  270. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/config.py +0 -0
  271. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/jobs.py +0 -0
  272. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/observability.py +0 -0
  273. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/recovery.py +0 -0
  274. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/server/repositories.py +0 -0
  275. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/service/__init__.py +0 -0
  276. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/__init__.py +0 -0
  277. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/health.py +0 -0
  278. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/store/postgres.py +0 -0
  279. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/__init__.py +0 -0
  280. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/binding.py +0 -0
  281. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/context.py +0 -0
  282. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/enablement.py +0 -0
  283. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/enforcement.py +0 -0
  284. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/governance.py +0 -0
  285. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/guards.py +0 -0
  286. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/host_boundary.py +0 -0
  287. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/models.py +0 -0
  288. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/observability.py +0 -0
  289. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/policy.py +0 -0
  290. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/profiles.py +0 -0
  291. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/provenance.py +0 -0
  292. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/task_state/service.py +0 -0
  293. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/telemetry/__init__.py +0 -0
  294. {atmem-2.2.7b1 → atmem-2.3.2}/atmem/telemetry/retrieval.py +0 -0
  295. {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/dependency_links.txt +0 -0
  296. {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/entry_points.txt +0 -0
  297. {atmem-2.2.7b1 → atmem-2.3.2}/atmem.egg-info/top_level.txt +0 -0
  298. {atmem-2.2.7b1 → atmem-2.3.2}/docs/agent-blackbox.md +0 -0
  299. {atmem-2.2.7b1 → atmem-2.3.2}/docs/atbot-release.md +0 -0
  300. {atmem-2.2.7b1 → atmem-2.3.2}/docs/audit-log-spec.md +0 -0
  301. {atmem-2.2.7b1 → atmem-2.3.2}/docs/audit-search.md +0 -0
  302. {atmem-2.2.7b1 → atmem-2.3.2}/docs/auditing-guide.md +0 -0
  303. {atmem-2.2.7b1 → atmem-2.3.2}/docs/benchmarks.md +0 -0
  304. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/inject.next-turn-same-nonce.valid.json +0 -0
  305. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/inject.valid.json +0 -0
  306. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/test-vectors.json +0 -0
  307. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/trust.json +0 -0
  308. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1/withhold.valid.json +0 -0
  309. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1.md +0 -0
  310. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-provider-v1.schema.json +0 -0
  311. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-context-request-v1.schema.json +0 -0
  312. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-request-auth-v1.json +0 -0
  313. {atmem-2.2.7b1 → atmem-2.3.2}/docs/contracts/delegated-request-auth-v1.md +0 -0
  314. {atmem-2.2.7b1 → atmem-2.3.2}/docs/control-plane.md +0 -0
  315. {atmem-2.2.7b1 → atmem-2.3.2}/docs/dashboard-design-language.md +0 -0
  316. {atmem-2.2.7b1 → atmem-2.3.2}/docs/data-storage-and-backup.md +0 -0
  317. {atmem-2.2.7b1 → atmem-2.3.2}/docs/delegated-context-provider.md +0 -0
  318. {atmem-2.2.7b1 → atmem-2.3.2}/docs/entity-relationship-memory.md +0 -0
  319. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/benchmark-deterministic-v1.json +0 -0
  320. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/longmemeval-s-retrieval-12-v1.json +0 -0
  321. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/longmemeval-s-support-ranking-2026-09-02.json +0 -0
  322. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/http.md +0 -0
  323. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/langgraph.md +0 -0
  324. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/openclaw.md +0 -0
  325. {atmem-2.2.7b1 → atmem-2.3.2}/docs/examples/onboarding/pydantic-ai.md +0 -0
  326. {atmem-2.2.7b1 → atmem-2.3.2}/docs/generic-adapter.md +0 -0
  327. {atmem-2.2.7b1 → atmem-2.3.2}/docs/governed-task-state.md +0 -0
  328. {atmem-2.2.7b1 → atmem-2.3.2}/docs/http-api.md +0 -0
  329. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T043658Z-740c5c89d63c-host-compatibility.md +0 -0
  330. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.json +0 -0
  331. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.md +0 -0
  332. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/020/20260909-progress-card-observations.md +0 -0
  333. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/020/20260909-selective-context-and-precise-time.md +0 -0
  334. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/022/20260909-dashboard-usability.md +0 -0
  335. {atmem-2.2.7b1 → atmem-2.3.2}/docs/implementation-evidence/README.md +0 -0
  336. {atmem-2.2.7b1 → atmem-2.3.2}/docs/integration-guide.md +0 -0
  337. {atmem-2.2.7b1 → atmem-2.3.2}/docs/invariants.md +0 -0
  338. {atmem-2.2.7b1 → atmem-2.3.2}/docs/memory-extraction.md +0 -0
  339. {atmem-2.2.7b1 → atmem-2.3.2}/docs/memory-interchange.md +0 -0
  340. {atmem-2.2.7b1 → atmem-2.3.2}/docs/multimodal-observations.md +0 -0
  341. {atmem-2.2.7b1 → atmem-2.3.2}/docs/onboarding.md +0 -0
  342. {atmem-2.2.7b1 → atmem-2.3.2}/docs/openclaw-setup.md +0 -0
  343. {atmem-2.2.7b1 → atmem-2.3.2}/docs/production-service.md +0 -0
  344. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v1.0.0.md +0 -0
  345. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.0.0.md +0 -0
  346. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.0.1.md +0 -0
  347. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.1.0.md +0 -0
  348. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.0.md +0 -0
  349. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.1.md +0 -0
  350. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.2.md +0 -0
  351. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.3.md +0 -0
  352. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.4.md +0 -0
  353. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.5.md +0 -0
  354. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b1.md +0 -0
  355. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b10.md +0 -0
  356. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b11.md +0 -0
  357. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b2.md +0 -0
  358. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b3.md +0 -0
  359. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b4.md +0 -0
  360. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b5.md +0 -0
  361. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b8.md +0 -0
  362. {atmem-2.2.7b1 → atmem-2.3.2}/docs/releases/v2.2.6b9.md +0 -0
  363. {atmem-2.2.7b1 → atmem-2.3.2}/docs/retrieval-quality.md +0 -0
  364. {atmem-2.2.7b1 → atmem-2.3.2}/docs/saas-integration.md +0 -0
  365. {atmem-2.2.7b1 → atmem-2.3.2}/docs/security/production-threat-model.md +0 -0
  366. {atmem-2.2.7b1 → atmem-2.3.2}/docs/semantic-search.md +0 -0
  367. {atmem-2.2.7b1 → atmem-2.3.2}/docs/spec-kit.md +0 -0
  368. {atmem-2.2.7b1 → atmem-2.3.2}/docs/storage-performance.md +0 -0
  369. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/delegated-identity.ts +0 -0
  370. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/setup.ts +0 -0
  371. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/task-tools.ts +0 -0
  372. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-errors.ts +0 -0
  373. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-observations.ts +0 -0
  374. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/src/tool-result-comparison.ts +0 -0
  375. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-context-contract.mjs +0 -0
  376. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-identity.mjs +0 -0
  377. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/delegated-journey.mjs +0 -0
  378. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.7.1-2.json +0 -0
  379. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.8.1.json +0 -0
  380. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.9.2.json +0 -0
  381. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/fixtures/hook-context/2026.9.3.json +0 -0
  382. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/hook-context-compat.mjs +0 -0
  383. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/lib/hook-context-shape.mjs +0 -0
  384. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/lib/record-hook-context.mjs +0 -0
  385. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/manifest.mjs +0 -0
  386. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/setup.mjs +0 -0
  387. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/smoke.mjs +0 -0
  388. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/task-journey.mjs +0 -0
  389. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/task-tools.mjs +0 -0
  390. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/tool-observations.mjs +0 -0
  391. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/test/tool-result-comparison.mjs +0 -0
  392. {atmem-2.2.7b1 → atmem-2.3.2}/integrations/openclaw/tsconfig.json +0 -0
  393. {atmem-2.2.7b1 → atmem-2.3.2}/setup.cfg +0 -0
  394. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_contracts.py +0 -0
  395. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_idempotency.py +0 -0
  396. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_api_upgrade.py +0 -0
  397. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_atbot_companion.py +0 -0
  398. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_auditability.py +0 -0
  399. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_cli.py +0 -0
  400. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_contracts.py +0 -0
  401. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_external.py +0 -0
  402. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_benchmark_runner.py +0 -0
  403. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_blackbox.py +0 -0
  404. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_cli.py +0 -0
  405. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_cli_guidance.py +0 -0
  406. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_contracts_v1.py +0 -0
  407. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_evidence.py +0 -0
  408. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_control_verify.py +0 -0
  409. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_dashboard_daemon.py +0 -0
  410. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_control.py +0 -0
  411. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_delegated_transport.py +0 -0
  412. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_encryption.py +0 -0
  413. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract.py +0 -0
  414. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_contracts.py +0 -0
  415. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_proposals.py +0 -0
  416. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_extract_upgrade.py +0 -0
  417. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_feature_surfaces.py +0 -0
  418. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_forget_verification.py +0 -0
  419. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapter_conformance.py +0 -0
  420. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapter_packaging.py +0 -0
  421. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_adapters.py +0 -0
  422. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_framework_delegated_adapters.py +0 -0
  423. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_generic_control.py +0 -0
  424. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph.py +0 -0
  425. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_aliases.py +0 -0
  426. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_lifecycle.py +0 -0
  427. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_graph_quality.py +0 -0
  428. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_host_adapter.py +0 -0
  429. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_interchange.py +0 -0
  430. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_langgraph_provider.py +0 -0
  431. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_layers.py +0 -0
  432. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_lifecycle.py +0 -0
  433. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_lifecycle_migration.py +0 -0
  434. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_maintenance.py +0 -0
  435. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_mcp.py +0 -0
  436. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_governance.py +0 -0
  437. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_observations.py +0 -0
  438. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_media_packaging.py +0 -0
  439. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_memory.py +0 -0
  440. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_onboarding.py +0 -0
  441. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_onboarding_recovery.py +0 -0
  442. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_compat.py +0 -0
  443. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_control.py +0 -0
  444. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_install.py +0 -0
  445. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_openclaw_topology.py +0 -0
  446. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_policy.py +0 -0
  447. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_cli.py +0 -0
  448. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_integration.py +0 -0
  449. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_packaging.py +0 -0
  450. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_performance.py +0 -0
  451. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_runtime.py +0 -0
  452. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_provider_server.py +0 -0
  453. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_pydantic_provider.py +0 -0
  454. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_release_metadata.py +0 -0
  455. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_restore_receipt.py +0 -0
  456. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_adapter_conformance.py +0 -0
  457. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_benchmark.py +0 -0
  458. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_cache.py +0 -0
  459. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieval_signals_and_cache.py +0 -0
  460. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_retrieve.py +0 -0
  461. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_sdk_packaging.py +0 -0
  462. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_health.py +0 -0
  463. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_parity.py +0 -0
  464. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_policy_invalidation.py +0 -0
  465. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_profiles.py +0 -0
  466. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_rebuild.py +0 -0
  467. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_schema.py +0 -0
  468. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_search.py +0 -0
  469. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_semantic_setup.py +0 -0
  470. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_spec_task_inventory.py +0 -0
  471. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_storage_packaging.py +0 -0
  472. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_store_transactions.py +0 -0
  473. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_supporting_evidence.py +0 -0
  474. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_adapters.py +0 -0
  475. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_atbot.py +0 -0
  476. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_benchmark.py +0 -0
  477. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_cli.py +0 -0
  478. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_clock.py +0 -0
  479. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_context.py +0 -0
  480. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_contracts.py +0 -0
  481. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_dashboard.py +0 -0
  482. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_deletion.py +0 -0
  483. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_expiry.py +0 -0
  484. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_governance.py +0 -0
  485. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_guards.py +0 -0
  486. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_host_boundary.py +0 -0
  487. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_host_contracts.py +0 -0
  488. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_observability.py +0 -0
  489. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_performance.py +0 -0
  490. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_policy.py +0 -0
  491. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_prerequisites.py +0 -0
  492. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_schemas.py +0 -0
  493. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_service.py +0 -0
  494. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_session_binding.py +0 -0
  495. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_store.py +0 -0
  496. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_tamper.py +0 -0
  497. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_upgrade.py +0 -0
  498. {atmem-2.2.7b1 → atmem-2.3.2}/tests/test_task_state_walking_skeleton.py +0 -0
  499. {atmem-2.2.7b1 → atmem-2.3.2}/tools/benchmark_storage.py +0 -0
  500. {atmem-2.2.7b1 → atmem-2.3.2}/tools/check_invariants.py +0 -0
  501. {atmem-2.2.7b1 → atmem-2.3.2}/tools/check_spec_tasks.py +0 -0
  502. {atmem-2.2.7b1 → atmem-2.3.2}/tools/release_metadata.py +0 -0
  503. {atmem-2.2.7b1 → atmem-2.3.2}/tools/run_longmemeval_retrieval.py +0 -0
  504. {atmem-2.2.7b1 → atmem-2.3.2}/tools/smoke_delegated_transport.py +0 -0
  505. {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.7b1
3
+ Version: 2.3.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>
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 :: 4 - Beta
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
- [![Version 2.2.7b1](https://img.shields.io/badge/version-2.2.7b1-blue)](./docs/releases/v2.2.7b1.md)
78
+ [![Version 2.3.2](https://img.shields.io/badge/version-2.3.2-blue)](./docs/releases/v2.3.2.md)
77
79
  [![CI](https://github.com/aetna000/atmem/actions/workflows/ci.yml/badge.svg)](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.7b1
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.7b1
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.7b1'
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.7b1'
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.7b1. The adapters do not replace
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.7b1 includes Governed Task State: a separate, revisioned authority
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.7b1 release notes](docs/releases/v2.2.7b1.md) before upgrading.
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
- > **Release status:** this repository describes the **AtMem 2.2.7b1 beta**, not verified publication. AtBot is a
268
- > separately packaged, headless component installed and managed by AtMem; it is
269
- > not an independent agent or a second memory authority.
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
- Beta 10 requires per-instance HMAC request credentials for delegated context and
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. The 2.2.7b1 beta adds an
279
- explicit, provider-neutral delegated mode for deployments where another
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.7b1
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.7b1'
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, has no login, checks origin and CSRF on
473
- mutations, and should not be placed behind a public reverse proxy.
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.7b1
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, and tool results are not stored in the
561
- Black Box. SHA-256 digests are fingerprints, not encryption or anonymization.
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
- - External media bytes remain host-controlled; AtMem stores a typed text observation, byte digest, model identity, and host reference.
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.7b1**, with the matched OpenClaw
677
- bridge **2.2.7-beta.1**. Release validation requires exact Python/bridge alignment;
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
- [![Version 2.2.7b1](https://img.shields.io/badge/version-2.2.7b1-blue)](./docs/releases/v2.2.7b1.md)
3
+ [![Version 2.3.2](https://img.shields.io/badge/version-2.3.2-blue)](./docs/releases/v2.3.2.md)
4
4
  [![CI](https://github.com/aetna000/atmem/actions/workflows/ci.yml/badge.svg)](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.7b1
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.7b1
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.7b1'
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.7b1'
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.7b1. The adapters do not replace
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.7b1 includes Governed Task State: a separate, revisioned authority
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.7b1 release notes](docs/releases/v2.2.7b1.md) before upgrading.
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
- > **Release status:** this repository describes the **AtMem 2.2.7b1 beta**, not verified publication. AtBot is a
195
- > separately packaged, headless component installed and managed by AtMem; it is
196
- > not an independent agent or a second memory authority.
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
- Beta 10 requires per-instance HMAC request credentials for delegated context and
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. The 2.2.7b1 beta adds an
206
- explicit, provider-neutral delegated mode for deployments where another
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.7b1
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.7b1'
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, has no login, checks origin and CSRF on
400
- mutations, and should not be placed behind a public reverse proxy.
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.7b1
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, and tool results are not stored in the
488
- Black Box. SHA-256 digests are fingerprints, not encryption or anonymization.
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
- - External media bytes remain host-controlled; AtMem stores a typed text observation, byte digest, model identity, and host reference.
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.7b1**, with the matched OpenClaw
604
- bridge **2.2.7-beta.1**. Release validation requires exact Python/bridge alignment;
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