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.
Files changed (461) hide show
  1. {atmem-2.2.4 → atmem-2.2.6}/PKG-INFO +164 -22
  2. atmem-2.2.4/atmem.egg-info/PKG-INFO → atmem-2.2.6/README.md +132 -63
  3. atmem-2.2.6/atmem/adapters/__init__.py +6 -0
  4. atmem-2.2.6/atmem/adapters/base.py +571 -0
  5. atmem-2.2.6/atmem/adapters/callbacks.py +83 -0
  6. atmem-2.2.6/atmem/adapters/crewai.py +7 -0
  7. atmem-2.2.6/atmem/adapters/google_adk.py +7 -0
  8. {atmem-2.2.4 → atmem-2.2.6}/atmem/adapters/langgraph.py +67 -3
  9. atmem-2.2.6/atmem/adapters/microsoft_agent.py +7 -0
  10. atmem-2.2.6/atmem/adapters/openai_agents.py +7 -0
  11. {atmem-2.2.4 → atmem-2.2.6}/atmem/adapters/pydantic_ai.py +66 -6
  12. atmem-2.2.6/atmem/adapters/smolagents.py +7 -0
  13. atmem-2.2.6/atmem/benchmark/__init__.py +22 -0
  14. atmem-2.2.6/atmem/benchmark/contracts.py +143 -0
  15. atmem-2.2.6/atmem/benchmark/data/deterministic-v1.json +443 -0
  16. atmem-2.2.6/atmem/benchmark/data/mem0-oss-v1.json +12 -0
  17. atmem-2.2.6/atmem/benchmark/data/retrieval-calibration-v1.json +11 -0
  18. atmem-2.2.6/atmem/benchmark/data/retrieval-heldout-v1.json +47 -0
  19. atmem-2.2.6/atmem/benchmark/data/task-state-v1.json +17 -0
  20. atmem-2.2.6/atmem/benchmark/data/thresholds-v1.json +17 -0
  21. atmem-2.2.6/atmem/benchmark/external.py +220 -0
  22. atmem-2.2.6/atmem/benchmark/profiles.py +104 -0
  23. atmem-2.2.6/atmem/benchmark/retrieval.py +52 -0
  24. atmem-2.2.6/atmem/benchmark/runner.py +506 -0
  25. {atmem-2.2.4 → atmem-2.2.6}/atmem/cli.py +1886 -0
  26. atmem-2.2.6/atmem/client.py +27 -0
  27. atmem-2.2.6/atmem/contracts/__init__.py +91 -0
  28. atmem-2.2.6/atmem/contracts/task_state.py +1284 -0
  29. atmem-2.2.6/atmem/contracts/versions.py +80 -0
  30. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.css +45 -7
  31. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.html +102 -11
  32. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/app.js +215 -33
  33. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/atbot_companion.py +104 -4
  34. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/atbot_service.py +1 -1
  35. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/blackbox.py +107 -6
  36. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/compat.py +15 -1
  37. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/evidence.py +48 -0
  38. atmem-2.2.6/atmem/control/explain.py +8 -0
  39. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/manager.py +1206 -2
  40. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/server.py +194 -0
  41. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/store.py +270 -2
  42. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/topology.py +12 -0
  43. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/web.py +345 -0
  44. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/storage.py +71 -1
  45. atmem-2.2.6/atmem/core/time.py +106 -0
  46. atmem-2.2.6/atmem/delegated/__init__.py +22 -0
  47. atmem-2.2.6/atmem/delegated/canonical.py +89 -0
  48. atmem-2.2.6/atmem/delegated/client.py +88 -0
  49. atmem-2.2.6/atmem/delegated/config.py +284 -0
  50. atmem-2.2.6/atmem/delegated/contracts.py +169 -0
  51. atmem-2.2.6/atmem/delegated/service.py +392 -0
  52. atmem-2.2.6/atmem/delegated/transport.py +319 -0
  53. atmem-2.2.6/atmem/delegated/validation.py +266 -0
  54. atmem-2.2.6/atmem/extract/__init__.py +62 -0
  55. atmem-2.2.6/atmem/extract/classify.py +202 -0
  56. atmem-2.2.6/atmem/extract/context.py +279 -0
  57. atmem-2.2.6/atmem/extract/models.py +151 -0
  58. atmem-2.2.6/atmem/extract/review.py +364 -0
  59. {atmem-2.2.4 → atmem-2.2.6}/atmem/extract/rules.py +53 -15
  60. atmem-2.2.6/atmem/extract/validation.py +514 -0
  61. atmem-2.2.6/atmem/graph/identity.py +90 -0
  62. atmem-2.2.6/atmem/graph/maintenance.py +9 -0
  63. atmem-2.2.6/atmem/graph/models.py +62 -0
  64. atmem-2.2.6/atmem/graph/store.py +31 -0
  65. atmem-2.2.6/atmem/graph/traverse.py +26 -0
  66. atmem-2.2.6/atmem/interchange/__init__.py +9 -0
  67. atmem-2.2.6/atmem/interchange/export.py +55 -0
  68. atmem-2.2.6/atmem/interchange/importer.py +71 -0
  69. atmem-2.2.6/atmem/interchange/mem0.py +34 -0
  70. atmem-2.2.6/atmem/interchange/models.py +69 -0
  71. atmem-2.2.6/atmem/interchange/plan.py +35 -0
  72. atmem-2.2.6/atmem/invariants/__init__.py +26 -0
  73. atmem-2.2.6/atmem/invariants/attestation.py +36 -0
  74. atmem-2.2.6/atmem/invariants/models.py +115 -0
  75. atmem-2.2.6/atmem/invariants/registry.py +53 -0
  76. atmem-2.2.6/atmem/invariants/report.py +17 -0
  77. atmem-2.2.6/atmem/invariants/verdict.py +48 -0
  78. atmem-2.2.6/atmem/lifecycle/__init__.py +7 -0
  79. atmem-2.2.6/atmem/lifecycle/invalidation.py +47 -0
  80. atmem-2.2.6/atmem/lifecycle/maintenance.py +14 -0
  81. atmem-2.2.6/atmem/lifecycle/models.py +77 -0
  82. atmem-2.2.6/atmem/lifecycle/policy.py +30 -0
  83. atmem-2.2.6/atmem/lifecycle/service.py +119 -0
  84. {atmem-2.2.4 → atmem-2.2.6}/atmem/maintenance.py +44 -0
  85. {atmem-2.2.4 → atmem-2.2.6}/atmem/mcp/server.py +63 -2
  86. atmem-2.2.6/atmem/media/access.py +31 -0
  87. atmem-2.2.6/atmem/media/index.py +25 -0
  88. atmem-2.2.6/atmem/media/invalidation.py +13 -0
  89. atmem-2.2.6/atmem/media/models.py +45 -0
  90. atmem-2.2.6/atmem/media/processors.py +35 -0
  91. atmem-2.2.6/atmem/media/service.py +39 -0
  92. {atmem-2.2.4 → atmem-2.2.6}/atmem/memory.py +406 -26
  93. atmem-2.2.6/atmem/onboarding.py +60 -0
  94. atmem-2.2.6/atmem/onboarding_verify.py +11 -0
  95. {atmem-2.2.4 → atmem-2.2.6}/atmem/openclaw_install.py +1 -1
  96. atmem-2.2.6/atmem/provider_adapters/__init__.py +12 -0
  97. atmem-2.2.6/atmem/provider_adapters/langgraph.py +43 -0
  98. atmem-2.2.6/atmem/provider_adapters/lifecycle.py +320 -0
  99. atmem-2.2.6/atmem/provider_adapters/loading.py +23 -0
  100. atmem-2.2.6/atmem/provider_adapters/mem0.py +75 -0
  101. atmem-2.2.6/atmem/provider_adapters/models.py +132 -0
  102. atmem-2.2.6/atmem/provider_adapters/pydantic_ai.py +76 -0
  103. atmem-2.2.6/atmem/provider_adapters/runtime.py +142 -0
  104. atmem-2.2.6/atmem/provider_adapters/server.py +115 -0
  105. atmem-2.2.6/atmem/provider_adapters/signing.py +125 -0
  106. atmem-2.2.6/atmem/provider_adapters/worker.py +20 -0
  107. atmem-2.2.6/atmem/retrieve/__init__.py +44 -0
  108. atmem-2.2.6/atmem/retrieve/cache.py +105 -0
  109. atmem-2.2.6/atmem/retrieve/calibration-v1.json +9 -0
  110. atmem-2.2.6/atmem/retrieve/calibration.py +27 -0
  111. atmem-2.2.6/atmem/retrieve/graph_signal.py +21 -0
  112. atmem-2.2.6/atmem/retrieve/models.py +75 -0
  113. atmem-2.2.6/atmem/retrieve/rank.py +381 -0
  114. atmem-2.2.6/atmem/retrieve/signals.py +100 -0
  115. atmem-2.2.6/atmem/retrieve/support.py +171 -0
  116. atmem-2.2.6/atmem/schemas/v1/admin-audit.json +1 -0
  117. atmem-2.2.6/atmem/schemas/v1/benchmark-cases.schema.json +29 -0
  118. atmem-2.2.6/atmem/schemas/v1/benchmark-report.schema.json +16 -0
  119. atmem-2.2.6/atmem/schemas/v1/capabilities.json +100 -0
  120. atmem-2.2.6/atmem/schemas/v1/graph-path.json +15 -0
  121. atmem-2.2.6/atmem/schemas/v1/host-task-lifecycle-request.json +88 -0
  122. atmem-2.2.6/atmem/schemas/v1/host-task-observation-request.json +125 -0
  123. atmem-2.2.6/atmem/schemas/v1/host-task-proposal-request.json +134 -0
  124. atmem-2.2.6/atmem/schemas/v1/invariant-registry.json +37 -0
  125. atmem-2.2.6/atmem/schemas/v1/media-observation.json +10 -0
  126. atmem-2.2.6/atmem/schemas/v1/memory-archive.json +13 -0
  127. atmem-2.2.6/atmem/schemas/v1/memory-lifecycle.json +18 -0
  128. atmem-2.2.6/atmem/schemas/v1/memory-proposal.json +78 -0
  129. atmem-2.2.6/atmem/schemas/v1/onboarding-state.json +1 -0
  130. atmem-2.2.6/atmem/schemas/v1/retrieval-decision.json +46 -0
  131. atmem-2.2.6/atmem/schemas/v1/semantic-health.json +42 -0
  132. atmem-2.2.6/atmem/schemas/v1/service-job.json +1 -0
  133. atmem-2.2.6/atmem/schemas/v1/service-key.json +1 -0
  134. atmem-2.2.6/atmem/schemas/v1/service-principal.json +1 -0
  135. atmem-2.2.6/atmem/schemas/v1/task-context-package.json +99 -0
  136. atmem-2.2.6/atmem/schemas/v1/task-profile.json +126 -0
  137. atmem-2.2.6/atmem/schemas/v1/task-session-binding.json +171 -0
  138. atmem-2.2.6/atmem/schemas/v1/task-start-request.json +127 -0
  139. atmem-2.2.6/atmem/schemas/v1/task-state-proposal.json +259 -0
  140. atmem-2.2.6/atmem/schemas/v1/task-state.json +256 -0
  141. atmem-2.2.6/atmem/schemas/v1/task-transition-decision.json +207 -0
  142. atmem-2.2.6/atmem/schemas/v1/unified-health.json +1 -0
  143. {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/__init__.py +20 -0
  144. atmem-2.2.6/atmem/semantic/health.py +441 -0
  145. {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/index.py +386 -130
  146. atmem-2.2.6/atmem/semantic/models.json +95 -0
  147. atmem-2.2.6/atmem/semantic/pgvector.py +34 -0
  148. {atmem-2.2.4 → atmem-2.2.6}/atmem/semantic/providers.py +115 -8
  149. atmem-2.2.6/atmem/semantic/qdrant.py +30 -0
  150. atmem-2.2.6/atmem/server/__init__.py +4 -0
  151. atmem-2.2.6/atmem/server/admin_audit.py +15 -0
  152. atmem-2.2.6/atmem/server/auth.py +37 -0
  153. atmem-2.2.6/atmem/server/cache_policy.py +6 -0
  154. atmem-2.2.6/atmem/server/config.py +18 -0
  155. atmem-2.2.6/atmem/server/jobs.py +33 -0
  156. atmem-2.2.6/atmem/server/observability.py +6 -0
  157. atmem-2.2.6/atmem/server/recovery.py +15 -0
  158. atmem-2.2.6/atmem/server/repositories.py +11 -0
  159. atmem-2.2.6/atmem/service/__init__.py +5 -0
  160. atmem-2.2.6/atmem/service/application.py +206 -0
  161. atmem-2.2.6/atmem/store/health.py +49 -0
  162. atmem-2.2.6/atmem/store/postgres.py +127 -0
  163. {atmem-2.2.4 → atmem-2.2.6}/atmem/store/sqlite.py +2081 -118
  164. atmem-2.2.6/atmem/task_state/__init__.py +97 -0
  165. atmem-2.2.6/atmem/task_state/binding.py +278 -0
  166. atmem-2.2.6/atmem/task_state/context.py +275 -0
  167. atmem-2.2.6/atmem/task_state/enablement.py +116 -0
  168. atmem-2.2.6/atmem/task_state/enforcement.py +165 -0
  169. atmem-2.2.6/atmem/task_state/governance.py +134 -0
  170. atmem-2.2.6/atmem/task_state/guards.py +155 -0
  171. atmem-2.2.6/atmem/task_state/host_boundary.py +279 -0
  172. atmem-2.2.6/atmem/task_state/models.py +289 -0
  173. atmem-2.2.6/atmem/task_state/observability.py +260 -0
  174. atmem-2.2.6/atmem/task_state/policy.py +341 -0
  175. atmem-2.2.6/atmem/task_state/profiles.py +212 -0
  176. atmem-2.2.6/atmem/task_state/provenance.py +195 -0
  177. atmem-2.2.6/atmem/task_state/service.py +1092 -0
  178. atmem-2.2.6/atmem/telemetry/__init__.py +5 -0
  179. atmem-2.2.6/atmem/telemetry/retrieval.py +36 -0
  180. atmem-2.2.4/README.md → atmem-2.2.6/atmem.egg-info/PKG-INFO +205 -19
  181. atmem-2.2.6/atmem.egg-info/SOURCES.txt +443 -0
  182. atmem-2.2.6/atmem.egg-info/requires.txt +65 -0
  183. {atmem-2.2.4 → atmem-2.2.6}/docs/atbot-release.md +7 -1
  184. atmem-2.2.6/docs/benchmarks.md +222 -0
  185. atmem-2.2.6/docs/capabilities.json +150 -0
  186. atmem-2.2.6/docs/context-provider-adapters.md +174 -0
  187. atmem-2.2.6/docs/contracts/delegated-context-provider-v1/inject.next-turn-same-nonce.valid.json +42 -0
  188. atmem-2.2.6/docs/contracts/delegated-context-provider-v1/inject.valid.json +42 -0
  189. atmem-2.2.6/docs/contracts/delegated-context-provider-v1/test-vectors.json +126 -0
  190. atmem-2.2.6/docs/contracts/delegated-context-provider-v1/trust.json +11 -0
  191. atmem-2.2.6/docs/contracts/delegated-context-provider-v1/withhold.valid.json +39 -0
  192. atmem-2.2.6/docs/contracts/delegated-context-provider-v1.md +327 -0
  193. atmem-2.2.6/docs/contracts/delegated-context-provider-v1.schema.json +126 -0
  194. atmem-2.2.6/docs/contracts/delegated-context-request-v1.schema.json +31 -0
  195. atmem-2.2.6/docs/contracts/delegated-request-auth-v1.json +40 -0
  196. atmem-2.2.6/docs/contracts/delegated-request-auth-v1.md +150 -0
  197. {atmem-2.2.4 → atmem-2.2.6}/docs/current-status.md +48 -15
  198. {atmem-2.2.4 → atmem-2.2.6}/docs/dashboard-design-language.md +107 -8
  199. atmem-2.2.6/docs/delegated-context-provider.md +281 -0
  200. atmem-2.2.6/docs/entity-relationship-memory.md +17 -0
  201. atmem-2.2.6/docs/examples/benchmark-deterministic-v1.json +36 -0
  202. atmem-2.2.6/docs/examples/longmemeval-s-retrieval-12-v1.json +75 -0
  203. atmem-2.2.6/docs/examples/longmemeval-s-support-ranking-2026-09-02.json +80 -0
  204. atmem-2.2.6/docs/examples/onboarding/http.md +5 -0
  205. atmem-2.2.6/docs/examples/onboarding/langgraph.md +5 -0
  206. atmem-2.2.6/docs/examples/onboarding/openclaw.md +4 -0
  207. atmem-2.2.6/docs/examples/onboarding/pydantic-ai.md +4 -0
  208. {atmem-2.2.4 → atmem-2.2.6}/docs/framework-adapters.md +38 -1
  209. {atmem-2.2.4 → atmem-2.2.6}/docs/generic-adapter.md +19 -0
  210. atmem-2.2.6/docs/governed-task-state.md +498 -0
  211. atmem-2.2.6/docs/http-api.md +21 -0
  212. atmem-2.2.6/docs/implementation-evidence/003/20260909T043658Z-740c5c89d63c-host-compatibility.md +118 -0
  213. atmem-2.2.6/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.json +504 -0
  214. atmem-2.2.6/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.md +218 -0
  215. atmem-2.2.6/docs/implementation-evidence/README.md +32 -0
  216. {atmem-2.2.4 → atmem-2.2.6}/docs/integration-guide.md +2 -1
  217. atmem-2.2.6/docs/invariants.md +19 -0
  218. atmem-2.2.6/docs/memory-extraction.md +162 -0
  219. atmem-2.2.6/docs/memory-interchange.md +22 -0
  220. atmem-2.2.6/docs/multimodal-observations.md +24 -0
  221. atmem-2.2.6/docs/onboarding.md +13 -0
  222. {atmem-2.2.4 → atmem-2.2.6}/docs/openclaw-setup.md +34 -2
  223. atmem-2.2.6/docs/production-service.md +13 -0
  224. atmem-2.2.6/docs/release-roadmap.md +72 -0
  225. atmem-2.2.6/docs/releases/v2.2.5.md +34 -0
  226. atmem-2.2.6/docs/releases/v2.2.6.md +102 -0
  227. atmem-2.2.6/docs/releases/v2.2.6b1.md +29 -0
  228. atmem-2.2.6/docs/releases/v2.2.6b10.md +87 -0
  229. atmem-2.2.6/docs/releases/v2.2.6b11.md +111 -0
  230. atmem-2.2.6/docs/releases/v2.2.6b2.md +33 -0
  231. atmem-2.2.6/docs/releases/v2.2.6b3.md +44 -0
  232. atmem-2.2.6/docs/releases/v2.2.6b4.md +101 -0
  233. atmem-2.2.6/docs/releases/v2.2.6b5.md +105 -0
  234. atmem-2.2.6/docs/releases/v2.2.6b8.md +233 -0
  235. atmem-2.2.6/docs/releases/v2.2.6b9.md +73 -0
  236. atmem-2.2.6/docs/retrieval-quality.md +72 -0
  237. atmem-2.2.6/docs/security/production-threat-model.md +13 -0
  238. atmem-2.2.6/docs/semantic-search.md +149 -0
  239. atmem-2.2.6/docs/spec-kit.md +59 -0
  240. atmem-2.2.6/docs/storage-performance.md +25 -0
  241. atmem-2.2.6/integrations/openclaw/README.md +56 -0
  242. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/index.ts +524 -40
  243. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/openclaw.plugin.json +34 -2
  244. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/package-lock.json +2 -2
  245. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/package.json +6 -4
  246. atmem-2.2.6/integrations/openclaw/src/delegated-identity.ts +78 -0
  247. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/rpc-client.ts +1 -1
  248. atmem-2.2.6/integrations/openclaw/src/task-tools.ts +136 -0
  249. atmem-2.2.6/integrations/openclaw/src/tool-observations.ts +123 -0
  250. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/types.ts +44 -0
  251. atmem-2.2.6/integrations/openclaw/test/delegated-context-contract.mjs +510 -0
  252. atmem-2.2.6/integrations/openclaw/test/delegated-identity.mjs +56 -0
  253. atmem-2.2.6/integrations/openclaw/test/delegated-journey.mjs +123 -0
  254. atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.7.1-2.json +341 -0
  255. atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.8.1.json +393 -0
  256. atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.9.2.json +393 -0
  257. atmem-2.2.6/integrations/openclaw/test/fixtures/hook-context/2026.9.3.json +393 -0
  258. atmem-2.2.6/integrations/openclaw/test/hook-context-compat.mjs +141 -0
  259. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/hooks.mjs +312 -2
  260. atmem-2.2.6/integrations/openclaw/test/lib/hook-context-shape.mjs +217 -0
  261. atmem-2.2.6/integrations/openclaw/test/lib/record-hook-context.mjs +22 -0
  262. atmem-2.2.6/integrations/openclaw/test/manifest.mjs +82 -0
  263. atmem-2.2.6/integrations/openclaw/test/task-journey.mjs +274 -0
  264. atmem-2.2.6/integrations/openclaw/test/task-tools.mjs +182 -0
  265. atmem-2.2.6/integrations/openclaw/test/tool-observations.mjs +61 -0
  266. {atmem-2.2.4 → atmem-2.2.6}/pyproject.toml +37 -3
  267. atmem-2.2.6/tests/test_api_contracts.py +25 -0
  268. atmem-2.2.6/tests/test_api_idempotency.py +13 -0
  269. atmem-2.2.6/tests/test_api_upgrade.py +3 -0
  270. {atmem-2.2.4 → atmem-2.2.6}/tests/test_atbot_companion.py +85 -2
  271. atmem-2.2.6/tests/test_benchmark_cli.py +68 -0
  272. atmem-2.2.6/tests/test_benchmark_contracts.py +53 -0
  273. atmem-2.2.6/tests/test_benchmark_external.py +148 -0
  274. atmem-2.2.6/tests/test_benchmark_runner.py +137 -0
  275. {atmem-2.2.4 → atmem-2.2.6}/tests/test_blackbox.py +138 -6
  276. {atmem-2.2.4 → atmem-2.2.6}/tests/test_cli.py +44 -0
  277. atmem-2.2.6/tests/test_cli_guidance.py +257 -0
  278. {atmem-2.2.4 → atmem-2.2.6}/tests/test_contracts_v1.py +134 -0
  279. {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_plane.py +300 -4
  280. {atmem-2.2.4 → atmem-2.2.6}/tests/test_dashboard_daemon.py +48 -4
  281. atmem-2.2.6/tests/test_delegated_context.py +694 -0
  282. atmem-2.2.6/tests/test_delegated_control.py +196 -0
  283. atmem-2.2.6/tests/test_delegated_transport.py +416 -0
  284. {atmem-2.2.4 → atmem-2.2.6}/tests/test_documentation.py +141 -5
  285. atmem-2.2.6/tests/test_extract_contracts.py +93 -0
  286. atmem-2.2.6/tests/test_extract_proposals.py +612 -0
  287. atmem-2.2.6/tests/test_extract_upgrade.py +228 -0
  288. atmem-2.2.6/tests/test_feature_surfaces.py +5 -0
  289. atmem-2.2.6/tests/test_forget_verification.py +7 -0
  290. atmem-2.2.6/tests/test_framework_adapter_conformance.py +36 -0
  291. atmem-2.2.6/tests/test_framework_adapter_packaging.py +13 -0
  292. {atmem-2.2.4 → atmem-2.2.6}/tests/test_framework_adapters.py +129 -2
  293. atmem-2.2.6/tests/test_framework_delegated_adapters.py +494 -0
  294. atmem-2.2.6/tests/test_graph_aliases.py +31 -0
  295. atmem-2.2.6/tests/test_graph_lifecycle.py +23 -0
  296. atmem-2.2.6/tests/test_graph_quality.py +24 -0
  297. atmem-2.2.6/tests/test_http_api.py +50 -0
  298. atmem-2.2.6/tests/test_interchange.py +60 -0
  299. atmem-2.2.6/tests/test_langgraph_provider.py +37 -0
  300. atmem-2.2.6/tests/test_lifecycle.py +31 -0
  301. atmem-2.2.6/tests/test_lifecycle_migration.py +3 -0
  302. atmem-2.2.6/tests/test_media_governance.py +55 -0
  303. atmem-2.2.6/tests/test_media_packaging.py +7 -0
  304. atmem-2.2.6/tests/test_mem0_provider.py +69 -0
  305. atmem-2.2.6/tests/test_onboarding.py +6 -0
  306. atmem-2.2.6/tests/test_onboarding_recovery.py +11 -0
  307. atmem-2.2.6/tests/test_openclaw_compat.py +89 -0
  308. atmem-2.2.6/tests/test_provider_cli.py +79 -0
  309. atmem-2.2.6/tests/test_provider_integration.py +60 -0
  310. atmem-2.2.6/tests/test_provider_packaging.py +16 -0
  311. atmem-2.2.6/tests/test_provider_performance.py +32 -0
  312. atmem-2.2.6/tests/test_provider_runtime.py +79 -0
  313. atmem-2.2.6/tests/test_provider_server.py +105 -0
  314. atmem-2.2.6/tests/test_pydantic_provider.py +32 -0
  315. atmem-2.2.6/tests/test_release_metadata.py +30 -0
  316. atmem-2.2.6/tests/test_retrieval_adapter_conformance.py +109 -0
  317. atmem-2.2.6/tests/test_retrieval_benchmark.py +24 -0
  318. atmem-2.2.6/tests/test_retrieval_cache.py +33 -0
  319. atmem-2.2.6/tests/test_retrieval_quality.py +279 -0
  320. atmem-2.2.6/tests/test_retrieval_signals_and_cache.py +53 -0
  321. atmem-2.2.6/tests/test_sdk_packaging.py +10 -0
  322. atmem-2.2.6/tests/test_semantic_health.py +183 -0
  323. atmem-2.2.6/tests/test_semantic_parity.py +146 -0
  324. atmem-2.2.6/tests/test_semantic_policy_invalidation.py +142 -0
  325. atmem-2.2.6/tests/test_semantic_profiles.py +92 -0
  326. atmem-2.2.6/tests/test_semantic_rebuild.py +138 -0
  327. atmem-2.2.6/tests/test_semantic_schema.py +176 -0
  328. atmem-2.2.6/tests/test_semantic_setup.py +253 -0
  329. atmem-2.2.6/tests/test_spec_task_inventory.py +38 -0
  330. atmem-2.2.6/tests/test_storage_packaging.py +10 -0
  331. atmem-2.2.6/tests/test_supporting_evidence.py +104 -0
  332. atmem-2.2.6/tests/test_task_state_adapters.py +570 -0
  333. atmem-2.2.6/tests/test_task_state_atbot.py +570 -0
  334. atmem-2.2.6/tests/test_task_state_benchmark.py +24 -0
  335. atmem-2.2.6/tests/test_task_state_binding.py +213 -0
  336. atmem-2.2.6/tests/test_task_state_cli.py +509 -0
  337. atmem-2.2.6/tests/test_task_state_clock.py +94 -0
  338. atmem-2.2.6/tests/test_task_state_context.py +530 -0
  339. atmem-2.2.6/tests/test_task_state_contracts.py +461 -0
  340. atmem-2.2.6/tests/test_task_state_dashboard.py +511 -0
  341. atmem-2.2.6/tests/test_task_state_deletion.py +406 -0
  342. atmem-2.2.6/tests/test_task_state_expiry.py +645 -0
  343. atmem-2.2.6/tests/test_task_state_governance.py +264 -0
  344. atmem-2.2.6/tests/test_task_state_guards.py +397 -0
  345. atmem-2.2.6/tests/test_task_state_host_boundary.py +452 -0
  346. atmem-2.2.6/tests/test_task_state_host_contracts.py +333 -0
  347. atmem-2.2.6/tests/test_task_state_observability.py +403 -0
  348. atmem-2.2.6/tests/test_task_state_performance.py +235 -0
  349. atmem-2.2.6/tests/test_task_state_policy.py +671 -0
  350. atmem-2.2.6/tests/test_task_state_prerequisites.py +196 -0
  351. atmem-2.2.6/tests/test_task_state_schemas.py +331 -0
  352. atmem-2.2.6/tests/test_task_state_service.py +850 -0
  353. atmem-2.2.6/tests/test_task_state_session_binding.py +285 -0
  354. atmem-2.2.6/tests/test_task_state_store.py +477 -0
  355. atmem-2.2.6/tests/test_task_state_tamper.py +416 -0
  356. atmem-2.2.6/tests/test_task_state_upgrade.py +287 -0
  357. atmem-2.2.6/tests/test_task_state_walking_skeleton.py +183 -0
  358. atmem-2.2.6/tools/benchmark_storage.py +63 -0
  359. atmem-2.2.6/tools/check_invariants.py +21 -0
  360. atmem-2.2.6/tools/check_spec_tasks.py +74 -0
  361. atmem-2.2.6/tools/release_metadata.py +57 -0
  362. atmem-2.2.6/tools/run_longmemeval_retrieval.py +380 -0
  363. atmem-2.2.6/tools/run_mem0_openclaw_live.py +176 -0
  364. atmem-2.2.6/tools/smoke_delegated_package.py +77 -0
  365. atmem-2.2.6/tools/smoke_delegated_transport.py +132 -0
  366. {atmem-2.2.4 → atmem-2.2.6}/tools/smoke_installed_package.py +5 -2
  367. atmem-2.2.6/tools/smoke_mem0_roleplay.py +62 -0
  368. {atmem-2.2.4 → atmem-2.2.6}/tools/smoke_upgrade_from_2_1.py +6 -6
  369. atmem-2.2.4/atmem/adapters/__init__.py +0 -5
  370. atmem-2.2.4/atmem/adapters/base.py +0 -267
  371. atmem-2.2.4/atmem/contracts/__init__.py +0 -37
  372. atmem-2.2.4/atmem/contracts/versions.py +0 -27
  373. atmem-2.2.4/atmem/extract/__init__.py +0 -12
  374. atmem-2.2.4/atmem/retrieve/__init__.py +0 -15
  375. atmem-2.2.4/atmem/retrieve/rank.py +0 -157
  376. atmem-2.2.4/atmem/schemas/v1/capabilities.json +0 -15
  377. atmem-2.2.4/atmem/schemas/v1/memory-proposal.json +0 -24
  378. atmem-2.2.4/atmem.egg-info/SOURCES.txt +0 -145
  379. atmem-2.2.4/atmem.egg-info/requires.txt +0 -24
  380. atmem-2.2.4/docs/capabilities.json +0 -48
  381. atmem-2.2.4/docs/multimodal-observations.md +0 -26
  382. atmem-2.2.4/docs/semantic-search.md +0 -52
  383. atmem-2.2.4/integrations/openclaw/README.md +0 -22
  384. atmem-2.2.4/tests/test_cli_guidance.py +0 -92
  385. {atmem-2.2.4 → atmem-2.2.6}/LICENSE +0 -0
  386. {atmem-2.2.4 → atmem-2.2.6}/MANIFEST.in +0 -0
  387. {atmem-2.2.4 → atmem-2.2.6}/atmem/__init__.py +0 -0
  388. {atmem-2.2.4 → atmem-2.2.6}/atmem/contracts/models.py +0 -0
  389. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/__init__.py +0 -0
  390. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/assets/atmem.jpg +0 -0
  391. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/hosts.py +0 -0
  392. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/models.py +0 -0
  393. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/openclaw_native.py +0 -0
  394. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/openclaw_topology.py +0 -0
  395. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/state.py +0 -0
  396. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/ui.py +0 -0
  397. {atmem-2.2.4 → atmem-2.2.6}/atmem/control/verify.py +0 -0
  398. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/__init__.py +0 -0
  399. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/canonical.py +0 -0
  400. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/fact_keys.py +0 -0
  401. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/keys.py +0 -0
  402. {atmem-2.2.4 → atmem-2.2.6}/atmem/core/policy.py +0 -0
  403. {atmem-2.2.4 → atmem-2.2.6}/atmem/dashboard_daemon.py +0 -0
  404. /atmem-2.2.4/atmem/graph.py → /atmem-2.2.6/atmem/graph/__init__.py +0 -0
  405. {atmem-2.2.4 → atmem-2.2.6}/atmem/investigate.py +0 -0
  406. {atmem-2.2.4 → atmem-2.2.6}/atmem/mcp/__init__.py +0 -0
  407. /atmem-2.2.4/atmem/media.py → /atmem-2.2.6/atmem/media/__init__.py +0 -0
  408. {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/__init__.py +0 -0
  409. {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/context-package.json +0 -0
  410. {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/recall-request.json +0 -0
  411. {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/scope.json +0 -0
  412. {atmem-2.2.4 → atmem-2.2.6}/atmem/schemas/v1/source-capture.json +0 -0
  413. {atmem-2.2.4 → atmem-2.2.6}/atmem/store/__init__.py +0 -0
  414. {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/dependency_links.txt +0 -0
  415. {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/entry_points.txt +0 -0
  416. {atmem-2.2.4 → atmem-2.2.6}/atmem.egg-info/top_level.txt +0 -0
  417. {atmem-2.2.4 → atmem-2.2.6}/docs/agent-blackbox.md +0 -0
  418. {atmem-2.2.4 → atmem-2.2.6}/docs/audit-log-spec.md +0 -0
  419. {atmem-2.2.4 → atmem-2.2.6}/docs/audit-search.md +0 -0
  420. {atmem-2.2.4 → atmem-2.2.6}/docs/auditing-guide.md +0 -0
  421. {atmem-2.2.4 → atmem-2.2.6}/docs/control-plane.md +0 -0
  422. {atmem-2.2.4 → atmem-2.2.6}/docs/data-storage-and-backup.md +0 -0
  423. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v1.0.0.md +0 -0
  424. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.0.0.md +0 -0
  425. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.0.1.md +0 -0
  426. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.1.0.md +0 -0
  427. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.0.md +0 -0
  428. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.1.md +0 -0
  429. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.2.md +0 -0
  430. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.3.md +0 -0
  431. {atmem-2.2.4 → atmem-2.2.6}/docs/releases/v2.2.4.md +0 -0
  432. {atmem-2.2.4 → atmem-2.2.6}/docs/saas-integration.md +0 -0
  433. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/src/setup.ts +0 -0
  434. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/setup.mjs +0 -0
  435. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/test/smoke.mjs +0 -0
  436. {atmem-2.2.4 → atmem-2.2.6}/integrations/openclaw/tsconfig.json +0 -0
  437. {atmem-2.2.4 → atmem-2.2.6}/setup.cfg +0 -0
  438. {atmem-2.2.4 → atmem-2.2.6}/tests/test_atbot_service.py +0 -0
  439. {atmem-2.2.4 → atmem-2.2.6}/tests/test_auditability.py +0 -0
  440. {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_evidence.py +0 -0
  441. {atmem-2.2.4 → atmem-2.2.6}/tests/test_control_verify.py +0 -0
  442. {atmem-2.2.4 → atmem-2.2.6}/tests/test_encryption.py +0 -0
  443. {atmem-2.2.4 → atmem-2.2.6}/tests/test_extract.py +0 -0
  444. {atmem-2.2.4 → atmem-2.2.6}/tests/test_generic_control.py +0 -0
  445. {atmem-2.2.4 → atmem-2.2.6}/tests/test_graph.py +0 -0
  446. {atmem-2.2.4 → atmem-2.2.6}/tests/test_host_adapter.py +0 -0
  447. {atmem-2.2.4 → atmem-2.2.6}/tests/test_layers.py +0 -0
  448. {atmem-2.2.4 → atmem-2.2.6}/tests/test_maintenance.py +0 -0
  449. {atmem-2.2.4 → atmem-2.2.6}/tests/test_mcp.py +0 -0
  450. {atmem-2.2.4 → atmem-2.2.6}/tests/test_media_observations.py +0 -0
  451. {atmem-2.2.4 → atmem-2.2.6}/tests/test_memory.py +0 -0
  452. {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_control.py +0 -0
  453. {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_install.py +0 -0
  454. {atmem-2.2.4 → atmem-2.2.6}/tests/test_openclaw_topology.py +0 -0
  455. {atmem-2.2.4 → atmem-2.2.6}/tests/test_policy.py +0 -0
  456. {atmem-2.2.4 → atmem-2.2.6}/tests/test_recall_evidence.py +0 -0
  457. {atmem-2.2.4 → atmem-2.2.6}/tests/test_restore_receipt.py +0 -0
  458. {atmem-2.2.4 → atmem-2.2.6}/tests/test_retrieve.py +0 -0
  459. {atmem-2.2.4 → atmem-2.2.6}/tests/test_semantic_search.py +0 -0
  460. {atmem-2.2.4 → atmem-2.2.6}/tests/test_store_transactions.py +0 -0
  461. {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.4
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 :: 5 - Production/Stable
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.0a3
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
- [![Version 2.2.4](https://img.shields.io/badge/version-2.2.4-blue)](./docs/releases/v2.2.4.md)
76
+ [![Version 2.2.6](https://img.shields.io/badge/version-2.2.6-blue)](./docs/releases/v2.2.6.md)
48
77
  [![CI](https://github.com/aetna000/atmem/actions/workflows/ci.yml/badge.svg)](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.4
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. Do not install the npm package yourself.
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.4
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.4'
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.4'
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. They do not replace
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.4**. AtBot is a
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.4
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; the semantic extra adds an optional local embedding upgrade:
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.4'
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, but the
219
- AtMem distribution requires the separately packaged, exactly pinned AtBot
220
- companion. Consequently a complete 2.2 installation has AtBot's transitive
221
- dependencies even when the user selects AtMem's deterministic fallback.
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.4
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.4**. Python and npm release
535
- versions are intentionally kept equal because the OpenClaw installer pins the
536
- matching bridge.
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
- [![Version 2.2.4](https://img.shields.io/badge/version-2.2.4-blue)](./docs/releases/v2.2.4.md)
3
+ [![Version 2.2.6](https://img.shields.io/badge/version-2.2.6-blue)](./docs/releases/v2.2.6.md)
48
4
  [![CI](https://github.com/aetna000/atmem/actions/workflows/ci.yml/badge.svg)](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.4
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. Do not install the npm package yourself.
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.4
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.4'
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.4'
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. They do not replace
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.4**. AtBot is a
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.4
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; the semantic extra adds an optional local embedding upgrade:
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.4'
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, but the
219
- AtMem distribution requires the separately packaged, exactly pinned AtBot
220
- companion. Consequently a complete 2.2 installation has AtBot's transitive
221
- dependencies even when the user selects AtMem's deterministic fallback.
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.4
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.4**. Python and npm release
535
- versions are intentionally kept equal because the OpenClaw installer pins the
536
- matching bridge.
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"]