atmem 2.3.3__tar.gz → 2.3.4__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 (560) hide show
  1. {atmem-2.3.3/atmem.egg-info → atmem-2.3.4}/PKG-INFO +23 -15
  2. {atmem-2.3.3 → atmem-2.3.4}/README.md +20 -14
  3. {atmem-2.3.3 → atmem-2.3.4}/atmem/cli.py +270 -10
  4. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/assets/app.css +67 -20
  5. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/assets/app.html +38 -9
  6. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/assets/app.js +62 -11
  7. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/compat.py +1 -0
  8. atmem-2.3.4/atmem/control/jev_service.py +165 -0
  9. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/manager.py +24 -1
  10. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/web.py +31 -0
  11. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/service.py +30 -0
  12. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/store.py +12 -1
  13. atmem-2.3.4/atmem/integrations/__init__.py +1 -0
  14. atmem-2.3.4/atmem/integrations/atflows.py +189 -0
  15. {atmem-2.3.3 → atmem-2.3.4}/atmem/mcp/server.py +1 -1
  16. {atmem-2.3.3 → atmem-2.3.4}/atmem/openclaw_install.py +1 -1
  17. {atmem-2.3.3 → atmem-2.3.4/atmem.egg-info}/PKG-INFO +23 -15
  18. {atmem-2.3.3 → atmem-2.3.4}/atmem.egg-info/SOURCES.txt +33 -0
  19. {atmem-2.3.3 → atmem-2.3.4}/atmem.egg-info/requires.txt +3 -0
  20. {atmem-2.3.3 → atmem-2.3.4}/docs/agent-blackbox.md +19 -5
  21. {atmem-2.3.3 → atmem-2.3.4}/docs/benchmarks.md +4 -5
  22. {atmem-2.3.3 → atmem-2.3.4}/docs/control-plane.md +1 -1
  23. {atmem-2.3.3 → atmem-2.3.4}/docs/current-status.md +30 -26
  24. atmem-2.3.4/docs/data-storage-and-backup.md +67 -0
  25. {atmem-2.3.3 → atmem-2.3.4}/docs/framework-adapters.md +2 -1
  26. atmem-2.3.4/docs/http-api.md +124 -0
  27. atmem-2.3.4/docs/implementation-evidence/026/20260920T094307Z-85c2ae2-atflows-b2.md +15 -0
  28. atmem-2.3.4/docs/implementation-evidence/026/20260920T105859Z-atmem-234-stable.md +12 -0
  29. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/release-2.3.3.md +42 -0
  30. {atmem-2.3.3 → atmem-2.3.4}/docs/multimodal-observations.md +7 -3
  31. atmem-2.3.4/docs/release-roadmap.md +164 -0
  32. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.3.3.md +7 -9
  33. atmem-2.3.4/docs/releases/v2.3.4.md +50 -0
  34. atmem-2.3.4/docs/releases/v2.3.4b1.md +79 -0
  35. atmem-2.3.4/docs/releases/v2.3.4b2.md +112 -0
  36. atmem-2.3.4/docs/website/atbot.md +25 -0
  37. atmem-2.3.4/docs/website/atflows.md +36 -0
  38. atmem-2.3.4/docs/website/cli.md +66 -0
  39. atmem-2.3.4/docs/website/dashboard.md +27 -0
  40. atmem-2.3.4/docs/website/evidence.md +38 -0
  41. atmem-2.3.4/docs/website/examples.md +36 -0
  42. atmem-2.3.4/docs/website/getting-started.md +61 -0
  43. atmem-2.3.4/docs/website/index.md +29 -0
  44. atmem-2.3.4/docs/website/integrations.md +30 -0
  45. atmem-2.3.4/docs/website/manifest.json +261 -0
  46. atmem-2.3.4/docs/website/mcp.md +33 -0
  47. atmem-2.3.4/docs/website/portfolio.md +13 -0
  48. atmem-2.3.4/docs/website/python.md +28 -0
  49. atmem-2.3.4/docs/website/reference.md +28 -0
  50. atmem-2.3.4/docs/website/releases.md +25 -0
  51. atmem-2.3.4/docs/website/troubleshooting.md +30 -0
  52. atmem-2.3.4/docs/website-contributing.md +33 -0
  53. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/README.md +6 -2
  54. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/openclaw.plugin.json +1 -1
  55. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/package-lock.json +2 -2
  56. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/package.json +1 -1
  57. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/rpc-client.ts +1 -1
  58. atmem-2.3.4/integrations/openclaw/test/fixtures/hook-context/2026.9.5.json +401 -0
  59. {atmem-2.3.3 → atmem-2.3.4}/pyproject.toml +5 -1
  60. atmem-2.3.4/tests/test_atflows_review.py +153 -0
  61. {atmem-2.3.3 → atmem-2.3.4}/tests/test_cli_guidance.py +48 -0
  62. {atmem-2.3.3 → atmem-2.3.4}/tests/test_control_plane.py +8 -3
  63. {atmem-2.3.3 → atmem-2.3.4}/tests/test_documentation.py +2 -2
  64. atmem-2.3.4/tests/test_jev_lab.py +52 -0
  65. atmem-2.3.4/tests/test_jev_service.py +48 -0
  66. atmem-2.3.4/tests/test_production_benchmarks.py +53 -0
  67. {atmem-2.3.3 → atmem-2.3.4}/tests/test_release_metadata.py +7 -0
  68. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_performance.py +73 -40
  69. atmem-2.3.4/tests/test_website_docs.py +33 -0
  70. atmem-2.3.4/tools/smoke_atflows_delegated.py +116 -0
  71. atmem-2.3.4/tools/smoke_atflows_handoff.py +128 -0
  72. {atmem-2.3.3 → atmem-2.3.4}/tools/smoke_installed_package.py +1 -1
  73. {atmem-2.3.3 → atmem-2.3.4}/tools/smoke_upgrade_from_2_1.py +5 -4
  74. atmem-2.3.3/docs/data-storage-and-backup.md +0 -32
  75. atmem-2.3.3/docs/http-api.md +0 -21
  76. atmem-2.3.3/docs/release-roadmap.md +0 -92
  77. {atmem-2.3.3 → atmem-2.3.4}/LICENSE +0 -0
  78. {atmem-2.3.3 → atmem-2.3.4}/MANIFEST.in +0 -0
  79. {atmem-2.3.3 → atmem-2.3.4}/atmem/__init__.py +0 -0
  80. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/__init__.py +0 -0
  81. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/base.py +0 -0
  82. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/callbacks.py +0 -0
  83. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/crewai.py +0 -0
  84. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/evidence_profiles.py +0 -0
  85. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/google_adk.py +0 -0
  86. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/langgraph.py +0 -0
  87. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/microsoft_agent.py +0 -0
  88. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/openai_agents.py +0 -0
  89. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/pydantic_ai.py +0 -0
  90. {atmem-2.3.3 → atmem-2.3.4}/atmem/adapters/smolagents.py +0 -0
  91. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/__init__.py +0 -0
  92. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/contracts.py +0 -0
  93. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/deterministic-v1.json +0 -0
  94. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/mem0-head-to-head-2.3.3b1-v1.json +0 -0
  95. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/mem0-oss-v1.json +0 -0
  96. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/retrieval-calibration-v1.json +0 -0
  97. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/retrieval-heldout-v1.json +0 -0
  98. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/task-state-v1.json +0 -0
  99. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/data/thresholds-v1.json +0 -0
  100. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/external.py +0 -0
  101. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/profiles.py +0 -0
  102. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/retrieval.py +0 -0
  103. {atmem-2.3.3 → atmem-2.3.4}/atmem/benchmark/runner.py +0 -0
  104. {atmem-2.3.3 → atmem-2.3.4}/atmem/client.py +0 -0
  105. {atmem-2.3.3 → atmem-2.3.4}/atmem/contracts/__init__.py +0 -0
  106. {atmem-2.3.3 → atmem-2.3.4}/atmem/contracts/execution.py +0 -0
  107. {atmem-2.3.3 → atmem-2.3.4}/atmem/contracts/models.py +0 -0
  108. {atmem-2.3.3 → atmem-2.3.4}/atmem/contracts/task_state.py +0 -0
  109. {atmem-2.3.3 → atmem-2.3.4}/atmem/contracts/versions.py +0 -0
  110. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/__init__.py +0 -0
  111. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/assets/atmem.jpg +0 -0
  112. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/atbot_companion.py +0 -0
  113. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/atbot_service.py +0 -0
  114. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/blackbox.py +0 -0
  115. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/evidence.py +0 -0
  116. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/explain.py +0 -0
  117. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/hosts.py +0 -0
  118. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/models.py +0 -0
  119. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/openclaw_native.py +0 -0
  120. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/openclaw_topology.py +0 -0
  121. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/query_expansion.py +0 -0
  122. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/server.py +0 -0
  123. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/state.py +0 -0
  124. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/store.py +0 -0
  125. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/topology.py +0 -0
  126. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/ui.py +0 -0
  127. {atmem-2.3.3 → atmem-2.3.4}/atmem/control/verify.py +0 -0
  128. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/__init__.py +0 -0
  129. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/canonical.py +0 -0
  130. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/fact_keys.py +0 -0
  131. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/keys.py +0 -0
  132. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/policy.py +0 -0
  133. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/storage.py +0 -0
  134. {atmem-2.3.3 → atmem-2.3.4}/atmem/core/time.py +0 -0
  135. {atmem-2.3.3 → atmem-2.3.4}/atmem/dashboard_daemon.py +0 -0
  136. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/__init__.py +0 -0
  137. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/canonical.py +0 -0
  138. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/client.py +0 -0
  139. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/config.py +0 -0
  140. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/contracts.py +0 -0
  141. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/service.py +0 -0
  142. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/transport.py +0 -0
  143. {atmem-2.3.3 → atmem-2.3.4}/atmem/delegated/validation.py +0 -0
  144. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/__init__.py +0 -0
  145. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/accounts.py +0 -0
  146. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/crypto.py +0 -0
  147. {atmem-2.3.3 → atmem-2.3.4}/atmem/evidence/models.py +0 -0
  148. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/__init__.py +0 -0
  149. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/coverage.py +0 -0
  150. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/events.py +0 -0
  151. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/projection.py +0 -0
  152. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/retention.py +0 -0
  153. {atmem-2.3.3 → atmem-2.3.4}/atmem/execution/status.py +0 -0
  154. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/__init__.py +0 -0
  155. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/classify.py +0 -0
  156. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/context.py +0 -0
  157. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/models.py +0 -0
  158. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/review.py +0 -0
  159. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/rules.py +0 -0
  160. {atmem-2.3.3 → atmem-2.3.4}/atmem/extract/validation.py +0 -0
  161. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/__init__.py +0 -0
  162. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/identity.py +0 -0
  163. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/maintenance.py +0 -0
  164. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/models.py +0 -0
  165. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/store.py +0 -0
  166. {atmem-2.3.3 → atmem-2.3.4}/atmem/graph/traverse.py +0 -0
  167. {atmem-2.3.3 → atmem-2.3.4}/atmem/home/__init__.py +0 -0
  168. {atmem-2.3.3 → atmem-2.3.4}/atmem/home/artifacts.py +0 -0
  169. {atmem-2.3.3 → atmem-2.3.4}/atmem/home/layout.py +0 -0
  170. {atmem-2.3.3 → atmem-2.3.4}/atmem/home/service.py +0 -0
  171. {atmem-2.3.3 → atmem-2.3.4}/atmem/identity/__init__.py +0 -0
  172. {atmem-2.3.3 → atmem-2.3.4}/atmem/identity/models.py +0 -0
  173. {atmem-2.3.3 → atmem-2.3.4}/atmem/identity/service.py +0 -0
  174. {atmem-2.3.3 → atmem-2.3.4}/atmem/identity/store.py +0 -0
  175. {atmem-2.3.3 → atmem-2.3.4}/atmem/incidents/__init__.py +0 -0
  176. {atmem-2.3.3 → atmem-2.3.4}/atmem/incidents/detect.py +0 -0
  177. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/__init__.py +0 -0
  178. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/export.py +0 -0
  179. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/importer.py +0 -0
  180. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/mem0.py +0 -0
  181. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/models.py +0 -0
  182. {atmem-2.3.3 → atmem-2.3.4}/atmem/interchange/plan.py +0 -0
  183. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/__init__.py +0 -0
  184. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/attestation.py +0 -0
  185. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/models.py +0 -0
  186. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/registry.py +0 -0
  187. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/report.py +0 -0
  188. {atmem-2.3.3 → atmem-2.3.4}/atmem/invariants/verdict.py +0 -0
  189. {atmem-2.3.3 → atmem-2.3.4}/atmem/investigate.py +0 -0
  190. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/__init__.py +0 -0
  191. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/invalidation.py +0 -0
  192. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/maintenance.py +0 -0
  193. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/models.py +0 -0
  194. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/policy.py +0 -0
  195. {atmem-2.3.3 → atmem-2.3.4}/atmem/lifecycle/service.py +0 -0
  196. {atmem-2.3.3 → atmem-2.3.4}/atmem/maintenance.py +0 -0
  197. {atmem-2.3.3 → atmem-2.3.4}/atmem/mcp/__init__.py +0 -0
  198. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/__init__.py +0 -0
  199. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/access.py +0 -0
  200. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/index.py +0 -0
  201. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/invalidation.py +0 -0
  202. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/models.py +0 -0
  203. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/processors.py +0 -0
  204. {atmem-2.3.3 → atmem-2.3.4}/atmem/media/service.py +0 -0
  205. {atmem-2.3.3 → atmem-2.3.4}/atmem/memory.py +0 -0
  206. {atmem-2.3.3 → atmem-2.3.4}/atmem/onboarding.py +0 -0
  207. {atmem-2.3.3 → atmem-2.3.4}/atmem/onboarding_verify.py +0 -0
  208. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/__init__.py +0 -0
  209. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/langgraph.py +0 -0
  210. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/lifecycle.py +0 -0
  211. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/loading.py +0 -0
  212. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/mem0.py +0 -0
  213. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/models.py +0 -0
  214. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/pydantic_ai.py +0 -0
  215. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/runtime.py +0 -0
  216. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/server.py +0 -0
  217. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/signing.py +0 -0
  218. {atmem-2.3.3 → atmem-2.3.4}/atmem/provider_adapters/worker.py +0 -0
  219. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/__init__.py +0 -0
  220. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/cache.py +0 -0
  221. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/calibration-v1.json +0 -0
  222. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/calibration.py +0 -0
  223. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/fusion.py +0 -0
  224. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/graph.py +0 -0
  225. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/graph_signal.py +0 -0
  226. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/hybrid.py +0 -0
  227. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/models.py +0 -0
  228. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/rank.py +0 -0
  229. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/signals.py +0 -0
  230. {atmem-2.3.3 → atmem-2.3.4}/atmem/retrieve/support.py +0 -0
  231. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/__init__.py +0 -0
  232. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/admin-audit.json +0 -0
  233. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/benchmark-cases.schema.json +0 -0
  234. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/benchmark-report.schema.json +0 -0
  235. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/capabilities.json +0 -0
  236. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/context-package.json +0 -0
  237. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/graph-path.json +0 -0
  238. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/host-task-lifecycle-request.json +0 -0
  239. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/host-task-observation-request.json +0 -0
  240. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/host-task-proposal-request.json +0 -0
  241. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/invariant-registry.json +0 -0
  242. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/media-observation.json +0 -0
  243. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/memory-archive.json +0 -0
  244. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/memory-lifecycle.json +0 -0
  245. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/memory-proposal.json +0 -0
  246. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/onboarding-state.json +0 -0
  247. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/recall-request.json +0 -0
  248. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/retrieval-decision.json +0 -0
  249. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/scope.json +0 -0
  250. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/semantic-health.json +0 -0
  251. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/service-job.json +0 -0
  252. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/service-key.json +0 -0
  253. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/service-principal.json +0 -0
  254. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/source-capture.json +0 -0
  255. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-context-package.json +0 -0
  256. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-profile.json +0 -0
  257. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-session-binding.json +0 -0
  258. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-start-request.json +0 -0
  259. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-state-proposal.json +0 -0
  260. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-state.json +0 -0
  261. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/task-transition-decision.json +0 -0
  262. {atmem-2.3.3 → atmem-2.3.4}/atmem/schemas/v1/unified-health.json +0 -0
  263. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/__init__.py +0 -0
  264. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/health.py +0 -0
  265. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/index.py +0 -0
  266. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/models.json +0 -0
  267. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/pgvector.py +0 -0
  268. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/providers.py +0 -0
  269. {atmem-2.3.3 → atmem-2.3.4}/atmem/semantic/qdrant.py +0 -0
  270. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/__init__.py +0 -0
  271. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/admin_audit.py +0 -0
  272. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/auth.py +0 -0
  273. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/cache_policy.py +0 -0
  274. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/config.py +0 -0
  275. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/jobs.py +0 -0
  276. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/observability.py +0 -0
  277. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/recovery.py +0 -0
  278. {atmem-2.3.3 → atmem-2.3.4}/atmem/server/repositories.py +0 -0
  279. {atmem-2.3.3 → atmem-2.3.4}/atmem/service/__init__.py +0 -0
  280. {atmem-2.3.3 → atmem-2.3.4}/atmem/service/application.py +0 -0
  281. {atmem-2.3.3 → atmem-2.3.4}/atmem/service/executions.py +0 -0
  282. {atmem-2.3.3 → atmem-2.3.4}/atmem/store/__init__.py +0 -0
  283. {atmem-2.3.3 → atmem-2.3.4}/atmem/store/health.py +0 -0
  284. {atmem-2.3.3 → atmem-2.3.4}/atmem/store/postgres.py +0 -0
  285. {atmem-2.3.3 → atmem-2.3.4}/atmem/store/sqlite.py +0 -0
  286. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/__init__.py +0 -0
  287. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/binding.py +0 -0
  288. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/context.py +0 -0
  289. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/enablement.py +0 -0
  290. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/enforcement.py +0 -0
  291. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/governance.py +0 -0
  292. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/guards.py +0 -0
  293. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/host_boundary.py +0 -0
  294. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/models.py +0 -0
  295. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/observability.py +0 -0
  296. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/policy.py +0 -0
  297. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/profiles.py +0 -0
  298. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/provenance.py +0 -0
  299. {atmem-2.3.3 → atmem-2.3.4}/atmem/task_state/service.py +0 -0
  300. {atmem-2.3.3 → atmem-2.3.4}/atmem/telemetry/__init__.py +0 -0
  301. {atmem-2.3.3 → atmem-2.3.4}/atmem/telemetry/retrieval.py +0 -0
  302. {atmem-2.3.3 → atmem-2.3.4}/atmem.egg-info/dependency_links.txt +0 -0
  303. {atmem-2.3.3 → atmem-2.3.4}/atmem.egg-info/entry_points.txt +0 -0
  304. {atmem-2.3.3 → atmem-2.3.4}/atmem.egg-info/top_level.txt +0 -0
  305. {atmem-2.3.3 → atmem-2.3.4}/docs/atbot-release.md +0 -0
  306. {atmem-2.3.3 → atmem-2.3.4}/docs/audit-log-spec.md +0 -0
  307. {atmem-2.3.3 → atmem-2.3.4}/docs/audit-search.md +0 -0
  308. {atmem-2.3.3 → atmem-2.3.4}/docs/auditing-guide.md +0 -0
  309. {atmem-2.3.3 → atmem-2.3.4}/docs/capabilities.json +0 -0
  310. {atmem-2.3.3 → atmem-2.3.4}/docs/context-provider-adapters.md +0 -0
  311. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1/inject.next-turn-same-nonce.valid.json +0 -0
  312. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1/inject.valid.json +0 -0
  313. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1/test-vectors.json +0 -0
  314. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1/trust.json +0 -0
  315. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1/withhold.valid.json +0 -0
  316. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1.md +0 -0
  317. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-provider-v1.schema.json +0 -0
  318. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-context-request-v1.schema.json +0 -0
  319. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-request-auth-v1.json +0 -0
  320. {atmem-2.3.3 → atmem-2.3.4}/docs/contracts/delegated-request-auth-v1.md +0 -0
  321. {atmem-2.3.3 → atmem-2.3.4}/docs/dashboard-design-language.md +0 -0
  322. {atmem-2.3.3 → atmem-2.3.4}/docs/delegated-context-provider.md +0 -0
  323. {atmem-2.3.3 → atmem-2.3.4}/docs/entity-relationship-memory.md +0 -0
  324. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/benchmark-deterministic-v1.json +0 -0
  325. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/longmemeval-s-retrieval-12-v1.json +0 -0
  326. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/longmemeval-s-support-ranking-2026-09-02.json +0 -0
  327. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/onboarding/http.md +0 -0
  328. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/onboarding/langgraph.md +0 -0
  329. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/onboarding/openclaw.md +0 -0
  330. {atmem-2.3.3 → atmem-2.3.4}/docs/examples/onboarding/pydantic-ai.md +0 -0
  331. {atmem-2.3.3 → atmem-2.3.4}/docs/generic-adapter.md +0 -0
  332. {atmem-2.3.3 → atmem-2.3.4}/docs/governed-task-state.md +0 -0
  333. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/003/20260909T043658Z-740c5c89d63c-host-compatibility.md +0 -0
  334. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.json +0 -0
  335. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/003/20260909T052000Z-740c5c89d63c-mem0-latest-hosts.md +0 -0
  336. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/003/20260909T055300Z-04a063ce1e7b-publication.md +0 -0
  337. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/003/20260910-storizon-published-2.2.6.md +0 -0
  338. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/020/20260909-progress-card-observations.md +0 -0
  339. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/020/20260909-selective-context-and-precise-time.md +0 -0
  340. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/020/20260912-m0-investigation-preview.md +0 -0
  341. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/020/20260912-release-candidate-correctness-hardening.md +0 -0
  342. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/021/20260912-m0-findings-ui.md +0 -0
  343. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/022/20260909-dashboard-usability.md +0 -0
  344. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/028/20260913-encrypted-evidence-access.md +0 -0
  345. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/029/2026-09-13-local-user-management.md +0 -0
  346. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/030/2026-09-13-portable-home.md +0 -0
  347. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/baseline.md +0 -0
  348. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/consistency-audit.md +0 -0
  349. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/core-hybrid-benchmark.md +0 -0
  350. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/core-hybrid-calibration.json +0 -0
  351. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/core-hybrid-review.md +0 -0
  352. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/graph-calibration-four-profile.json +0 -0
  353. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/graph-calibration.json +0 -0
  354. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/graph-nomination.md +0 -0
  355. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/matched-v2.md +0 -0
  356. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/numpy-benchmark.md +0 -0
  357. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/numpy-review.md +0 -0
  358. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/031/profiling.md +0 -0
  359. {atmem-2.3.3 → atmem-2.3.4}/docs/implementation-evidence/README.md +0 -0
  360. {atmem-2.3.3 → atmem-2.3.4}/docs/integration-guide.md +0 -0
  361. {atmem-2.3.3 → atmem-2.3.4}/docs/invariants.md +0 -0
  362. {atmem-2.3.3 → atmem-2.3.4}/docs/memory-extraction.md +0 -0
  363. {atmem-2.3.3 → atmem-2.3.4}/docs/memory-interchange.md +0 -0
  364. {atmem-2.3.3 → atmem-2.3.4}/docs/onboarding.md +0 -0
  365. {atmem-2.3.3 → atmem-2.3.4}/docs/openclaw-setup.md +0 -0
  366. {atmem-2.3.3 → atmem-2.3.4}/docs/production-service.md +0 -0
  367. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v1.0.0.md +0 -0
  368. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.0.0.md +0 -0
  369. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.0.1.md +0 -0
  370. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.1.0.md +0 -0
  371. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.0.md +0 -0
  372. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.1.md +0 -0
  373. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.2.md +0 -0
  374. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.3.md +0 -0
  375. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.4.md +0 -0
  376. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.5.md +0 -0
  377. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6.md +0 -0
  378. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b1.md +0 -0
  379. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b10.md +0 -0
  380. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b11.md +0 -0
  381. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b2.md +0 -0
  382. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b3.md +0 -0
  383. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b4.md +0 -0
  384. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b5.md +0 -0
  385. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b8.md +0 -0
  386. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.2.6b9.md +0 -0
  387. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.3.0.md +0 -0
  388. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.3.0b1.md +0 -0
  389. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.3.1.md +0 -0
  390. {atmem-2.3.3 → atmem-2.3.4}/docs/releases/v2.3.2.md +0 -0
  391. {atmem-2.3.3 → atmem-2.3.4}/docs/retrieval-quality.md +0 -0
  392. {atmem-2.3.3 → atmem-2.3.4}/docs/saas-integration.md +0 -0
  393. {atmem-2.3.3 → atmem-2.3.4}/docs/security/production-threat-model.md +0 -0
  394. {atmem-2.3.3 → atmem-2.3.4}/docs/semantic-search.md +0 -0
  395. {atmem-2.3.3 → atmem-2.3.4}/docs/spec-kit.md +0 -0
  396. {atmem-2.3.3 → atmem-2.3.4}/docs/storage-performance.md +0 -0
  397. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/index.ts +0 -0
  398. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/delegated-identity.ts +0 -0
  399. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/execution-spool.ts +0 -0
  400. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/setup.ts +0 -0
  401. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/task-tools.ts +0 -0
  402. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/tool-errors.ts +0 -0
  403. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/tool-observations.ts +0 -0
  404. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/tool-result-comparison.ts +0 -0
  405. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/src/types.ts +0 -0
  406. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/blackbox-diagnostics.mjs +0 -0
  407. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/dashboard-live.mjs +0 -0
  408. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/delegated-context-contract.mjs +0 -0
  409. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/delegated-identity.mjs +0 -0
  410. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/delegated-journey.mjs +0 -0
  411. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/execution-spool.mjs +0 -0
  412. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/fixtures/hook-context/2026.7.1-2.json +0 -0
  413. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/fixtures/hook-context/2026.8.1.json +0 -0
  414. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/fixtures/hook-context/2026.9.2.json +0 -0
  415. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/fixtures/hook-context/2026.9.3.json +0 -0
  416. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/fixtures/hook-context/2026.9.4.json +0 -0
  417. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/hook-context-compat.mjs +0 -0
  418. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/hooks.mjs +0 -0
  419. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/lib/hook-context-shape.mjs +0 -0
  420. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/lib/record-hook-context.mjs +0 -0
  421. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/manifest.mjs +0 -0
  422. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/setup.mjs +0 -0
  423. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/smoke.mjs +0 -0
  424. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/task-journey.mjs +0 -0
  425. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/task-tools.mjs +0 -0
  426. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/tool-observations.mjs +0 -0
  427. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/test/tool-result-comparison.mjs +0 -0
  428. {atmem-2.3.3 → atmem-2.3.4}/integrations/openclaw/tsconfig.json +0 -0
  429. {atmem-2.3.3 → atmem-2.3.4}/setup.cfg +0 -0
  430. {atmem-2.3.3 → atmem-2.3.4}/tests/test_api_contracts.py +0 -0
  431. {atmem-2.3.3 → atmem-2.3.4}/tests/test_api_idempotency.py +0 -0
  432. {atmem-2.3.3 → atmem-2.3.4}/tests/test_api_upgrade.py +0 -0
  433. {atmem-2.3.3 → atmem-2.3.4}/tests/test_atbot_companion.py +0 -0
  434. {atmem-2.3.3 → atmem-2.3.4}/tests/test_atbot_service.py +0 -0
  435. {atmem-2.3.3 → atmem-2.3.4}/tests/test_auditability.py +0 -0
  436. {atmem-2.3.3 → atmem-2.3.4}/tests/test_benchmark_cli.py +0 -0
  437. {atmem-2.3.3 → atmem-2.3.4}/tests/test_benchmark_contracts.py +0 -0
  438. {atmem-2.3.3 → atmem-2.3.4}/tests/test_benchmark_external.py +0 -0
  439. {atmem-2.3.3 → atmem-2.3.4}/tests/test_benchmark_runner.py +0 -0
  440. {atmem-2.3.3 → atmem-2.3.4}/tests/test_blackbox.py +0 -0
  441. {atmem-2.3.3 → atmem-2.3.4}/tests/test_cli.py +0 -0
  442. {atmem-2.3.3 → atmem-2.3.4}/tests/test_contracts_v1.py +0 -0
  443. {atmem-2.3.3 → atmem-2.3.4}/tests/test_control_evidence.py +0 -0
  444. {atmem-2.3.3 → atmem-2.3.4}/tests/test_control_verify.py +0 -0
  445. {atmem-2.3.3 → atmem-2.3.4}/tests/test_dashboard.py +0 -0
  446. {atmem-2.3.3 → atmem-2.3.4}/tests/test_dashboard_daemon.py +0 -0
  447. {atmem-2.3.3 → atmem-2.3.4}/tests/test_delegated_context.py +0 -0
  448. {atmem-2.3.3 → atmem-2.3.4}/tests/test_delegated_control.py +0 -0
  449. {atmem-2.3.3 → atmem-2.3.4}/tests/test_delegated_transport.py +0 -0
  450. {atmem-2.3.3 → atmem-2.3.4}/tests/test_encryption.py +0 -0
  451. {atmem-2.3.3 → atmem-2.3.4}/tests/test_evidence_protection.py +0 -0
  452. {atmem-2.3.3 → atmem-2.3.4}/tests/test_execution_capture.py +0 -0
  453. {atmem-2.3.3 → atmem-2.3.4}/tests/test_execution_identity.py +0 -0
  454. {atmem-2.3.3 → atmem-2.3.4}/tests/test_extract.py +0 -0
  455. {atmem-2.3.3 → atmem-2.3.4}/tests/test_extract_contracts.py +0 -0
  456. {atmem-2.3.3 → atmem-2.3.4}/tests/test_extract_proposals.py +0 -0
  457. {atmem-2.3.3 → atmem-2.3.4}/tests/test_extract_upgrade.py +0 -0
  458. {atmem-2.3.3 → atmem-2.3.4}/tests/test_feature_surfaces.py +0 -0
  459. {atmem-2.3.3 → atmem-2.3.4}/tests/test_forget_verification.py +0 -0
  460. {atmem-2.3.3 → atmem-2.3.4}/tests/test_framework_adapter_conformance.py +0 -0
  461. {atmem-2.3.3 → atmem-2.3.4}/tests/test_framework_adapter_packaging.py +0 -0
  462. {atmem-2.3.3 → atmem-2.3.4}/tests/test_framework_adapters.py +0 -0
  463. {atmem-2.3.3 → atmem-2.3.4}/tests/test_framework_delegated_adapters.py +0 -0
  464. {atmem-2.3.3 → atmem-2.3.4}/tests/test_generic_control.py +0 -0
  465. {atmem-2.3.3 → atmem-2.3.4}/tests/test_graph.py +0 -0
  466. {atmem-2.3.3 → atmem-2.3.4}/tests/test_graph_aliases.py +0 -0
  467. {atmem-2.3.3 → atmem-2.3.4}/tests/test_graph_lifecycle.py +0 -0
  468. {atmem-2.3.3 → atmem-2.3.4}/tests/test_graph_quality.py +0 -0
  469. {atmem-2.3.3 → atmem-2.3.4}/tests/test_home.py +0 -0
  470. {atmem-2.3.3 → atmem-2.3.4}/tests/test_host_adapter.py +0 -0
  471. {atmem-2.3.3 → atmem-2.3.4}/tests/test_http_api.py +0 -0
  472. {atmem-2.3.3 → atmem-2.3.4}/tests/test_incident_resolution.py +0 -0
  473. {atmem-2.3.3 → atmem-2.3.4}/tests/test_interchange.py +0 -0
  474. {atmem-2.3.3 → atmem-2.3.4}/tests/test_langgraph_provider.py +0 -0
  475. {atmem-2.3.3 → atmem-2.3.4}/tests/test_layers.py +0 -0
  476. {atmem-2.3.3 → atmem-2.3.4}/tests/test_lifecycle.py +0 -0
  477. {atmem-2.3.3 → atmem-2.3.4}/tests/test_lifecycle_migration.py +0 -0
  478. {atmem-2.3.3 → atmem-2.3.4}/tests/test_local_identity.py +0 -0
  479. {atmem-2.3.3 → atmem-2.3.4}/tests/test_maintenance.py +0 -0
  480. {atmem-2.3.3 → atmem-2.3.4}/tests/test_mcp.py +0 -0
  481. {atmem-2.3.3 → atmem-2.3.4}/tests/test_media_governance.py +0 -0
  482. {atmem-2.3.3 → atmem-2.3.4}/tests/test_media_observations.py +0 -0
  483. {atmem-2.3.3 → atmem-2.3.4}/tests/test_media_packaging.py +0 -0
  484. {atmem-2.3.3 → atmem-2.3.4}/tests/test_mem0_provider.py +0 -0
  485. {atmem-2.3.3 → atmem-2.3.4}/tests/test_memory.py +0 -0
  486. {atmem-2.3.3 → atmem-2.3.4}/tests/test_onboarding.py +0 -0
  487. {atmem-2.3.3 → atmem-2.3.4}/tests/test_onboarding_recovery.py +0 -0
  488. {atmem-2.3.3 → atmem-2.3.4}/tests/test_openclaw_compat.py +0 -0
  489. {atmem-2.3.3 → atmem-2.3.4}/tests/test_openclaw_control.py +0 -0
  490. {atmem-2.3.3 → atmem-2.3.4}/tests/test_openclaw_install.py +0 -0
  491. {atmem-2.3.3 → atmem-2.3.4}/tests/test_openclaw_topology.py +0 -0
  492. {atmem-2.3.3 → atmem-2.3.4}/tests/test_policy.py +0 -0
  493. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_cli.py +0 -0
  494. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_integration.py +0 -0
  495. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_packaging.py +0 -0
  496. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_performance.py +0 -0
  497. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_runtime.py +0 -0
  498. {atmem-2.3.3 → atmem-2.3.4}/tests/test_provider_server.py +0 -0
  499. {atmem-2.3.3 → atmem-2.3.4}/tests/test_pydantic_provider.py +0 -0
  500. {atmem-2.3.3 → atmem-2.3.4}/tests/test_recall_evidence.py +0 -0
  501. {atmem-2.3.3 → atmem-2.3.4}/tests/test_restore_receipt.py +0 -0
  502. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_adapter_conformance.py +0 -0
  503. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_benchmark.py +0 -0
  504. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_cache.py +0 -0
  505. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_candidate_union.py +0 -0
  506. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_graph_fusion.py +0 -0
  507. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_quality.py +0 -0
  508. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieval_signals_and_cache.py +0 -0
  509. {atmem-2.3.3 → atmem-2.3.4}/tests/test_retrieve.py +0 -0
  510. {atmem-2.3.3 → atmem-2.3.4}/tests/test_sdk_packaging.py +0 -0
  511. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_health.py +0 -0
  512. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_matrix_cache.py +0 -0
  513. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_parity.py +0 -0
  514. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_policy_invalidation.py +0 -0
  515. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_profiles.py +0 -0
  516. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_rebuild.py +0 -0
  517. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_schema.py +0 -0
  518. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_search.py +0 -0
  519. {atmem-2.3.3 → atmem-2.3.4}/tests/test_semantic_setup.py +0 -0
  520. {atmem-2.3.3 → atmem-2.3.4}/tests/test_spec_task_inventory.py +0 -0
  521. {atmem-2.3.3 → atmem-2.3.4}/tests/test_storage_packaging.py +0 -0
  522. {atmem-2.3.3 → atmem-2.3.4}/tests/test_store_transactions.py +0 -0
  523. {atmem-2.3.3 → atmem-2.3.4}/tests/test_supporting_evidence.py +0 -0
  524. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_adapters.py +0 -0
  525. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_atbot.py +0 -0
  526. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_benchmark.py +0 -0
  527. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_binding.py +0 -0
  528. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_cli.py +0 -0
  529. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_clock.py +0 -0
  530. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_context.py +0 -0
  531. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_contracts.py +0 -0
  532. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_dashboard.py +0 -0
  533. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_deletion.py +0 -0
  534. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_expiry.py +0 -0
  535. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_governance.py +0 -0
  536. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_guards.py +0 -0
  537. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_host_boundary.py +0 -0
  538. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_host_contracts.py +0 -0
  539. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_observability.py +0 -0
  540. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_policy.py +0 -0
  541. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_prerequisites.py +0 -0
  542. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_schemas.py +0 -0
  543. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_service.py +0 -0
  544. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_session_binding.py +0 -0
  545. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_store.py +0 -0
  546. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_tamper.py +0 -0
  547. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_upgrade.py +0 -0
  548. {atmem-2.3.3 → atmem-2.3.4}/tests/test_task_state_walking_skeleton.py +0 -0
  549. {atmem-2.3.3 → atmem-2.3.4}/tools/benchmark_core_hybrid.py +0 -0
  550. {atmem-2.3.3 → atmem-2.3.4}/tools/benchmark_numpy_cache.py +0 -0
  551. {atmem-2.3.3 → atmem-2.3.4}/tools/benchmark_storage.py +0 -0
  552. {atmem-2.3.3 → atmem-2.3.4}/tools/check_invariants.py +0 -0
  553. {atmem-2.3.3 → atmem-2.3.4}/tools/check_spec_tasks.py +0 -0
  554. {atmem-2.3.3 → atmem-2.3.4}/tools/release_metadata.py +0 -0
  555. {atmem-2.3.3 → atmem-2.3.4}/tools/run_longmemeval_retrieval.py +0 -0
  556. {atmem-2.3.3 → atmem-2.3.4}/tools/run_mem0_openclaw_live.py +0 -0
  557. {atmem-2.3.3 → atmem-2.3.4}/tools/smoke_delegated_package.py +0 -0
  558. {atmem-2.3.3 → atmem-2.3.4}/tools/smoke_delegated_transport.py +0 -0
  559. {atmem-2.3.3 → atmem-2.3.4}/tools/smoke_mem0_roleplay.py +0 -0
  560. {atmem-2.3.3 → atmem-2.3.4}/tools/verify_audit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atmem
3
- Version: 2.3.3
3
+ Version: 2.3.4
4
4
  Summary: Host-neutral Agent Black Box and reversible memory control plane.
5
5
  Author-email: Javad Taghia <taghia.javad@gmail.com>
6
6
  Maintainer-email: Aetna / AtMem <aetna000@gmail.com>
@@ -25,7 +25,9 @@ Requires-Python: >=3.10
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: atmem-atbot==0.1.0
28
+ Requires-Dist: atflows==0.1.1
28
29
  Requires-Dist: cryptography<49,>=42
30
+ Provides-Extra: atflows
29
31
  Provides-Extra: dev
30
32
  Requires-Dist: pytest>=8.0.0; extra == "dev"
31
33
  Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
@@ -77,12 +79,12 @@ Dynamic: license-file
77
79
 
78
80
  # AtMem
79
81
 
80
- [![Version 2.3.3](https://img.shields.io/badge/version-2.3.3-blue)](./docs/releases/v2.3.3.md)
82
+ [![Version 2.3.4](https://img.shields.io/badge/version-2.3.4-blue)](./docs/releases/v2.3.4.md)
81
83
  [![CI](https://github.com/aetna000/atmem/actions/workflows/ci.yml/badge.svg)](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
82
84
 
83
85
  **AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
84
86
 
85
- > **Release status:** AtMem 2.3.3 is the stable encrypted Agent Black Box release.
87
+ > **Release status:** AtMem 2.3.4 is the stable Agent Black Box and governed-memory release. It installs AtFlows 0.1.1 by default, with optional AtMem-owned login and read-only review leads.
86
88
  > It records exact host-observed text and supported multimodal boundaries by default,
87
89
  > while keeping every claim limited to what the connected agent actually supplied.
88
90
 
@@ -99,7 +101,7 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
99
101
  ### 1. Install AtMem and choose memory intelligence
100
102
 
101
103
  ```bash
102
- python -m pip install --upgrade atmem==2.3.3
104
+ python -m pip install --upgrade atmem==2.3.4
103
105
  atmem atbot setup
104
106
  atmem atbot doctor
105
107
  atmem init
@@ -132,7 +134,7 @@ package yourself.
132
134
  Already using AtMem 2.1 with OpenClaw? Upgrade in place:
133
135
 
134
136
  ```bash
135
- python -m pip install --upgrade atmem==2.3.3
137
+ python -m pip install --upgrade atmem==2.3.4
136
138
  atmem openclaw upgrade
137
139
  atmem control verify
138
140
  ```
@@ -155,7 +157,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
155
157
  #### Pydantic AI — native capability
156
158
 
157
159
  ```bash
158
- python -m pip install 'atmem[pydantic-ai]==2.3.3'
160
+ python -m pip install 'atmem[pydantic-ai]==2.3.4'
159
161
  atmem control shadow --host generic --memory-db ~/.atmem/memories.db
160
162
  ```
161
163
 
@@ -180,7 +182,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
180
182
  #### LangChain/LangGraph — native middleware
181
183
 
182
184
  ```bash
183
- python -m pip install 'atmem[langgraph]==2.3.3'
185
+ python -m pip install 'atmem[langgraph]==2.3.4'
184
186
  atmem control shadow --host generic --memory-db ~/.atmem/memories.db
185
187
  ```
186
188
 
@@ -244,7 +246,7 @@ open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
244
246
 
245
247
  See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
246
248
  correction, provenance, expiry, benchmark, and automation examples, and read
247
- the [2.3.3 release notes](docs/releases/v2.3.3.md) before upgrading.
249
+ the [2.3.4 release notes](docs/releases/v2.3.4.md) before upgrading.
248
250
 
249
251
  ### Prove memory quality locally
250
252
 
@@ -258,8 +260,9 @@ perfect; other quality metrics cannot fall below checked-in baselines. Optional
258
260
  local/hosted profiles, LongMemEval import and fair Mem0 OSS comparison are also
259
261
  available without adding Mem0 or model SDKs to the base install. See the
260
262
  [memory benchmark guide](docs/benchmarks.md) for commands and honest limits.
261
- The [2.3.3 release](docs/releases/v2.3.3.md) improves local retrieval work and
262
- archive layout while retaining existing retrieval defaults. Developer opt-in
263
+ The retrieval and archive improvements from [2.3.3](docs/releases/v2.3.3.md)
264
+ remain in [2.3.4](docs/releases/v2.3.4.md), which adds the optional AtFlows
265
+ observability and shared-login scope. Developer opt-in
263
266
  fusion, scoped graph nomination and matrix reuse are available for evaluation;
264
267
  broader performance targets remain research, not release claims.
265
268
 
@@ -346,7 +349,7 @@ and restores it exactly.
346
349
  ## Installation details
347
350
 
348
351
  ```bash
349
- python -m pip install atmem==2.3.3
352
+ python -m pip install atmem==2.3.4
350
353
  atmem --version
351
354
  ```
352
355
 
@@ -356,7 +359,7 @@ embedding model, while the semantic extra adds local sentence-transformer
356
359
  choices:
357
360
 
358
361
  ```bash
359
- python -m pip install 'atmem[semantic]==2.3.3'
362
+ python -m pip install 'atmem[semantic]==2.3.4'
360
363
  ```
361
364
 
362
365
  For repository development, install both workspace packages:
@@ -544,7 +547,7 @@ atmem control restore
544
547
  Existing 2.1 installations upgrade without starting a new migration:
545
548
 
546
549
  ```bash
547
- python -m pip install --upgrade atmem==2.3.3
550
+ python -m pip install --upgrade atmem==2.3.4
548
551
  atmem openclaw upgrade
549
552
  atmem control verify
550
553
  ```
@@ -715,6 +718,11 @@ system-of-record verification.
715
718
 
716
719
  ## Documentation map
717
720
 
721
+ Official website documentation is maintained through the public
722
+ [documentation inventory](docs/website/manifest.json). See
723
+ [how to contribute and update release docs](docs/website-contributing.md).
724
+ Website publication follows a separate owner-reviewed, main-only deployment.
725
+
718
726
  - [Current implementation status](docs/current-status.md)
719
727
  - [Generic runtime adapter](docs/generic-adapter.md)
720
728
  - [Delegated context-provider contract](docs/contracts/delegated-context-provider-v1.md)
@@ -772,8 +780,8 @@ npm test
772
780
  npm run smoke
773
781
  ```
774
782
 
775
- Current repository metadata is version **2.3.3**, with the matched OpenClaw
776
- bridge **2.3.3**. Release validation requires exact Python/bridge alignment;
783
+ Current source metadata is the **2.3.4 stable target**, with matched OpenClaw
784
+ bridge source **2.3.4**. Release validation requires exact Python/bridge alignment;
777
785
  AtBot retains its independent stable compatible version **0.1.0**.
778
786
 
779
787
  ## License
@@ -1,11 +1,11 @@
1
1
  # AtMem
2
2
 
3
- [![Version 2.3.3](https://img.shields.io/badge/version-2.3.3-blue)](./docs/releases/v2.3.3.md)
3
+ [![Version 2.3.4](https://img.shields.io/badge/version-2.3.4-blue)](./docs/releases/v2.3.4.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.3 is the stable encrypted Agent Black Box release.
8
+ > **Release status:** AtMem 2.3.4 is the stable Agent Black Box and governed-memory release. It installs AtFlows 0.1.1 by default, with optional AtMem-owned login and read-only review leads.
9
9
  > It records exact host-observed text and supported multimodal boundaries by default,
10
10
  > while keeping every claim limited to what the connected agent actually supplied.
11
11
 
@@ -22,7 +22,7 @@ authorizes, stores, scopes, injects, corrects, and deletes memory.
22
22
  ### 1. Install AtMem and choose memory intelligence
23
23
 
24
24
  ```bash
25
- python -m pip install --upgrade atmem==2.3.3
25
+ python -m pip install --upgrade atmem==2.3.4
26
26
  atmem atbot setup
27
27
  atmem atbot doctor
28
28
  atmem init
@@ -55,7 +55,7 @@ package yourself.
55
55
  Already using AtMem 2.1 with OpenClaw? Upgrade in place:
56
56
 
57
57
  ```bash
58
- python -m pip install --upgrade atmem==2.3.3
58
+ python -m pip install --upgrade atmem==2.3.4
59
59
  atmem openclaw upgrade
60
60
  atmem control verify
61
61
  ```
@@ -78,7 +78,7 @@ selected by `python`, rather than an unrelated `pip` executable on `PATH`.
78
78
  #### Pydantic AI — native capability
79
79
 
80
80
  ```bash
81
- python -m pip install 'atmem[pydantic-ai]==2.3.3'
81
+ python -m pip install 'atmem[pydantic-ai]==2.3.4'
82
82
  atmem control shadow --host generic --memory-db ~/.atmem/memories.db
83
83
  ```
84
84
 
@@ -103,7 +103,7 @@ agent = Agent("openai:gpt-5-mini", capabilities=[memory])
103
103
  #### LangChain/LangGraph — native middleware
104
104
 
105
105
  ```bash
106
- python -m pip install 'atmem[langgraph]==2.3.3'
106
+ python -m pip install 'atmem[langgraph]==2.3.4'
107
107
  atmem control shadow --host generic --memory-db ~/.atmem/memories.db
108
108
  ```
109
109
 
@@ -167,7 +167,7 @@ open tasks. AtBot may propose a change, but AtMem revalidates and commits it.
167
167
 
168
168
  See the [Governed Task State guide](docs/governed-task-state.md) for lifecycle,
169
169
  correction, provenance, expiry, benchmark, and automation examples, and read
170
- the [2.3.3 release notes](docs/releases/v2.3.3.md) before upgrading.
170
+ the [2.3.4 release notes](docs/releases/v2.3.4.md) before upgrading.
171
171
 
172
172
  ### Prove memory quality locally
173
173
 
@@ -181,8 +181,9 @@ perfect; other quality metrics cannot fall below checked-in baselines. Optional
181
181
  local/hosted profiles, LongMemEval import and fair Mem0 OSS comparison are also
182
182
  available without adding Mem0 or model SDKs to the base install. See the
183
183
  [memory benchmark guide](docs/benchmarks.md) for commands and honest limits.
184
- The [2.3.3 release](docs/releases/v2.3.3.md) improves local retrieval work and
185
- archive layout while retaining existing retrieval defaults. Developer opt-in
184
+ The retrieval and archive improvements from [2.3.3](docs/releases/v2.3.3.md)
185
+ remain in [2.3.4](docs/releases/v2.3.4.md), which adds the optional AtFlows
186
+ observability and shared-login scope. Developer opt-in
186
187
  fusion, scoped graph nomination and matrix reuse are available for evaluation;
187
188
  broader performance targets remain research, not release claims.
188
189
 
@@ -269,7 +270,7 @@ and restores it exactly.
269
270
  ## Installation details
270
271
 
271
272
  ```bash
272
- python -m pip install atmem==2.3.3
273
+ python -m pip install atmem==2.3.4
273
274
  atmem --version
274
275
  ```
275
276
 
@@ -279,7 +280,7 @@ embedding model, while the semantic extra adds local sentence-transformer
279
280
  choices:
280
281
 
281
282
  ```bash
282
- python -m pip install 'atmem[semantic]==2.3.3'
283
+ python -m pip install 'atmem[semantic]==2.3.4'
283
284
  ```
284
285
 
285
286
  For repository development, install both workspace packages:
@@ -467,7 +468,7 @@ atmem control restore
467
468
  Existing 2.1 installations upgrade without starting a new migration:
468
469
 
469
470
  ```bash
470
- python -m pip install --upgrade atmem==2.3.3
471
+ python -m pip install --upgrade atmem==2.3.4
471
472
  atmem openclaw upgrade
472
473
  atmem control verify
473
474
  ```
@@ -638,6 +639,11 @@ system-of-record verification.
638
639
 
639
640
  ## Documentation map
640
641
 
642
+ Official website documentation is maintained through the public
643
+ [documentation inventory](docs/website/manifest.json). See
644
+ [how to contribute and update release docs](docs/website-contributing.md).
645
+ Website publication follows a separate owner-reviewed, main-only deployment.
646
+
641
647
  - [Current implementation status](docs/current-status.md)
642
648
  - [Generic runtime adapter](docs/generic-adapter.md)
643
649
  - [Delegated context-provider contract](docs/contracts/delegated-context-provider-v1.md)
@@ -695,8 +701,8 @@ npm test
695
701
  npm run smoke
696
702
  ```
697
703
 
698
- Current repository metadata is version **2.3.3**, with the matched OpenClaw
699
- bridge **2.3.3**. Release validation requires exact Python/bridge alignment;
704
+ Current source metadata is the **2.3.4 stable target**, with matched OpenClaw
705
+ bridge source **2.3.4**. Release validation requires exact Python/bridge alignment;
700
706
  AtBot retains its independent stable compatible version **0.1.0**.
701
707
 
702
708
  ## License
@@ -6,9 +6,12 @@ from importlib.metadata import PackageNotFoundError, version
6
6
  import json
7
7
  import os
8
8
  from pathlib import Path
9
+ import re
9
10
  import shutil
11
+ import site
10
12
  import subprocess
11
13
  import sys
14
+ import sysconfig
12
15
  from typing import Any
13
16
  from urllib.parse import urlencode
14
17
 
@@ -44,6 +47,122 @@ def _installed_version() -> str:
44
47
  return "unknown"
45
48
 
46
49
 
50
+ def _companion_version(package: str) -> str:
51
+ try:
52
+ return version(package)
53
+ except PackageNotFoundError:
54
+ return "not installed"
55
+
56
+
57
+ def _safe_atflows_status(output: str) -> str:
58
+ """Retain only bounded loopback links from the companion status output."""
59
+ rows: list[str] = []
60
+ pattern = re.compile(
61
+ r"Dashboard:\s*http://(localhost|127\.0\.0\.1):(\d{1,5})\s+"
62
+ r"Proxy:\s*http://(localhost|127\.0\.0\.1):(\d{1,5})"
63
+ )
64
+ for match in pattern.finditer(output[:4096]):
65
+ dashboard_host, dashboard_port, proxy_host, proxy_port = match.groups()
66
+ if not 1 <= int(dashboard_port) <= 65535 or not 1 <= int(proxy_port) <= 65535:
67
+ continue
68
+ # Review accepts numeric loopback only; display copyable compatible URLs.
69
+ dashboard_host = "127.0.0.1" if dashboard_host == "localhost" else dashboard_host
70
+ proxy_host = "127.0.0.1" if proxy_host == "localhost" else proxy_host
71
+ rows.append(
72
+ f"Dashboard: http://{dashboard_host}:{dashboard_port} "
73
+ f"Proxy: http://{proxy_host}:{proxy_port}"
74
+ )
75
+ if len(rows) == 8:
76
+ break
77
+ return "\n".join(rows) if rows else "No running AtFlows server reported."
78
+
79
+
80
+ def _atflows_executable(expected_version: str) -> Path | None:
81
+ name = "atflows.exe" if os.name == "nt" else "atflows"
82
+ paths = [
83
+ Path(sys.executable).with_name(name),
84
+ Path(sysconfig.get_path("scripts")) / name,
85
+ Path(site.getuserbase()) / ("Scripts" if os.name == "nt" else "bin") / name,
86
+ ]
87
+ found = shutil.which("atflows")
88
+ if found:
89
+ paths.append(Path(found))
90
+ for path in dict.fromkeys(paths):
91
+ if not path.is_file():
92
+ continue
93
+ try:
94
+ result = subprocess.run(
95
+ [str(path), "--version"], capture_output=True, text=True,
96
+ timeout=5, check=False,
97
+ )
98
+ except (OSError, subprocess.TimeoutExpired):
99
+ continue
100
+ if result.returncode == 0 and result.stdout.strip() == f"atflows {expected_version}":
101
+ return path
102
+ return None
103
+
104
+
105
+ def _run_install_status(args: argparse.Namespace) -> None:
106
+ """Report installed packages and local service links without starting them."""
107
+ from atmem.dashboard_daemon import manage_dashboard_daemon
108
+ from atmem.home.layout import resolve_home
109
+
110
+ dashboard = manage_dashboard_daemon("status")
111
+ atflows_version = _companion_version("atflows")
112
+ atflows_bin = (
113
+ _atflows_executable(atflows_version)
114
+ if atflows_version != "not installed" else None
115
+ )
116
+ atflows_status = (
117
+ "AtFlows CLI unavailable in this Python environment."
118
+ if atflows_version != "not installed" else
119
+ "AtFlows is not installed in this Python environment."
120
+ )
121
+ if atflows_bin is not None:
122
+ try:
123
+ result = subprocess.run(
124
+ [str(atflows_bin), "status"], capture_output=True, text=True,
125
+ timeout=5, check=False,
126
+ )
127
+ atflows_status = (
128
+ _safe_atflows_status(result.stdout)
129
+ if result.returncode == 0 else
130
+ "Status unavailable; run `atflows status` to retry."
131
+ )
132
+ except (OSError, subprocess.TimeoutExpired):
133
+ atflows_status = "Status unavailable; run `atflows status` to retry."
134
+ report = {
135
+ "format": "atmem-install-status-v1",
136
+ "packages": {
137
+ "atmem": _installed_version(),
138
+ "atmem-atbot": _companion_version("atmem-atbot"),
139
+ "atflows": atflows_version,
140
+ },
141
+ "home": str(resolve_home()),
142
+ "dashboard": {
143
+ "running": bool(dashboard.get("running")),
144
+ "url": dashboard.get("url") if dashboard.get("running") else None,
145
+ },
146
+ "atflows_status": atflows_status,
147
+ }
148
+ if args.json:
149
+ _print(report)
150
+ return
151
+ print("AtMem installation\n")
152
+ for label, package in (("AtMem", "atmem"), ("AtBot", "atmem-atbot"), ("AtFlows", "atflows")):
153
+ print(f" {label:<18}{report['packages'][package]}")
154
+ print(f" {'AtMem Home':<18}{report['home']}")
155
+ print("\nLocal dashboards")
156
+ print(" AtMem " + (str(report["dashboard"]["url"]) if report["dashboard"]["running"] else "No managed service record (manual start may still be running)"))
157
+ for line in atflows_status.splitlines():
158
+ print(" " + line)
159
+ print("\nNext steps")
160
+ print(" atmem init Create the local Administrator; copy its one-time password")
161
+ print(" atflows init Set up AtFlows when you want tracing and review")
162
+ print(" atflows status Show its running dashboard and proxy URLs")
163
+ print(" AtBot setup and behaviour are unchanged.")
164
+
165
+
47
166
  def _run_features(args: argparse.Namespace) -> None:
48
167
  from atmem.contracts.versions import capabilities
49
168
  manifest = capabilities()
@@ -75,6 +194,9 @@ def main() -> None:
75
194
  description="Governed memory and agent oversight, with optional AtBot intelligence.",
76
195
  formatter_class=argparse.RawDescriptionHelpFormatter,
77
196
  epilog="""Start here:
197
+ atmem status
198
+ Show installed package versions and running local dashboard links.
199
+
78
200
  atmem atbot setup
79
201
  Choose local AI, a hosted API, or the safe deterministic fallback.
80
202
 
@@ -100,6 +222,11 @@ Run `atmem COMMAND --help` for command-specific examples.""",
100
222
  )
101
223
  subparsers = parser.add_subparsers(dest="command")
102
224
 
225
+ status_parser = subparsers.add_parser(
226
+ "status", help="Show installed companions, local dashboards and setup steps"
227
+ )
228
+ status_parser.add_argument("--json", action="store_true")
229
+
103
230
  home_parser = subparsers.add_parser(
104
231
  "home", help="Inspect, verify, migrate or adopt the portable AtMem Home"
105
232
  )
@@ -1343,7 +1470,8 @@ or input errors.""",
1343
1470
  command_parser = evidence_commands.add_parser(name, help=help_text)
1344
1471
  command_parser.add_argument("--state", default=None)
1345
1472
  if name not in {"status", "create-test-accounts"}:
1346
- command_parser.add_argument("--token", required=True)
1473
+ command_parser.add_argument("--token", help="Legacy evidence token argument (visible in process listings)")
1474
+ command_parser.add_argument("--token-env", default="ATMEM_EVIDENCE_TOKEN", help="Environment variable containing the evidence token")
1347
1475
  if name in {"show", "reconstruct", "replay-manifest", "delete-run", "export-plaintext"}:
1348
1476
  command_parser.add_argument("run_id")
1349
1477
  if name == "search":
@@ -1362,6 +1490,26 @@ or input errors.""",
1362
1490
  command_parser.add_argument("--confirm", required=True)
1363
1491
  command_parser.add_argument("--output", required=True)
1364
1492
 
1493
+ atflows_parser = subparsers.add_parser(
1494
+ "atflows", help="Inspect optional AtFlows telemetry against protected AtMem evidence"
1495
+ )
1496
+ atflows_commands = atflows_parser.add_subparsers(dest="atflows_command")
1497
+ atflows_review = atflows_commands.add_parser(
1498
+ "review", help="Produce read-only exact-session review leads"
1499
+ )
1500
+ atflows_review.add_argument("run_id")
1501
+ atflows_review.add_argument("--session-id", required=True)
1502
+ atflows_review.add_argument("--since-ms", type=int, required=True)
1503
+ atflows_review.add_argument("--until-ms", type=int, required=True)
1504
+ atflows_review.add_argument("--token", help="AtMem evidence token (legacy argument; visible in process listings)")
1505
+ atflows_review.add_argument("--token-env", default="ATMEM_EVIDENCE_TOKEN", help="Environment variable containing the AtMem evidence token")
1506
+ atflows_review.add_argument("--state", default=None)
1507
+ atflows_review.add_argument("--base-url", default="http://127.0.0.1:1337")
1508
+ atflows_review.add_argument("--password-env", default="ATFLOWS_ADMIN_PASSWORD")
1509
+ atflows_output = atflows_review.add_mutually_exclusive_group()
1510
+ atflows_output.add_argument("--json", action="store_true", help="Print the versioned JSON report (default)")
1511
+ atflows_output.add_argument("--human", action="store_true", help="Print a concise human-readable report")
1512
+
1365
1513
  verify_run_parser = subparsers.add_parser(
1366
1514
  "verify-run",
1367
1515
  help="Verify one agent run and print its unified coverage report",
@@ -1388,6 +1536,10 @@ or input errors.""",
1388
1536
  _print_cli_welcome(parser)
1389
1537
  return
1390
1538
 
1539
+ if args.command == "status":
1540
+ _run_install_status(args)
1541
+ return
1542
+
1391
1543
  if args.command == "init":
1392
1544
  _run_identity_init(args)
1393
1545
  return
@@ -1476,6 +1628,13 @@ or input errors.""",
1476
1628
  _run_evidence(args)
1477
1629
  return
1478
1630
 
1631
+ if args.command == "atflows":
1632
+ if args.atflows_command is None:
1633
+ atflows_parser.print_help()
1634
+ return
1635
+ _run_atflows(args)
1636
+ return
1637
+
1479
1638
  if args.command == "verify-run":
1480
1639
  args.blackbox_command = "verify"
1481
1640
  _run_blackbox(args)
@@ -3722,6 +3881,8 @@ def _print_cli_welcome(parser: argparse.ArgumentParser) -> None:
3722
3881
  print(" atmem dashboard\n")
3723
3882
  print(" 5. Check AtBot and its configured model")
3724
3883
  print(" atmem atbot doctor\n")
3884
+ print(" 6. Check installed packages and local dashboard links")
3885
+ print(" atmem status\n")
3725
3886
  print("AtMem starts safely: no memory injection is enabled until you explicitly activate it.")
3726
3887
  print("Run `atmem --help` for every command or `atmem atbot` for provider examples.")
3727
3888
 
@@ -4013,25 +4174,31 @@ def _identity_manager(state_path: str | None):
4013
4174
  return manager
4014
4175
 
4015
4176
 
4016
- def _print_bootstrap(value: dict[str, Any], *, as_json: bool = False) -> None:
4177
+ def _print_bootstrap(value: dict[str, Any], *, as_json: bool = False, port: int = 8766) -> None:
4017
4178
  if as_json:
4018
4179
  _print(value)
4019
4180
  return
4020
4181
  if not value.get("created"):
4021
4182
  print("AtMem is already initialized. Existing credentials were not changed or disclosed.")
4022
- print("Dashboard: http://127.0.0.1:8766/")
4183
+ print(f"Dashboard: http://127.0.0.1:{port}/")
4023
4184
  return
4024
- print("AtMem local Administrator created")
4185
+ print("AtMem local setup\n")
4186
+ print(f" AtMem {_installed_version()}")
4187
+ print(f" AtBot {_companion_version('atmem-atbot')}")
4188
+ print(f" AtFlows {_companion_version('atflows')}")
4189
+ print(f" Dashboard http://127.0.0.1:{port}/")
4025
4190
  print(f" Username {value['username']}")
4026
- print(f" Temporary password {value['password']}")
4027
- print(" Dashboard http://127.0.0.1:8766/")
4028
- print("Sign in and change this temporary password. It will not be shown again.")
4191
+ print("\n Temporary password (copy now):")
4192
+ print(f" {value['password']}")
4193
+ print("\nSign in and change this password; it will not be shown again.")
4194
+ print("Run `atflows init` when you want to set up tracing and its own Administrator.")
4195
+ print("Run `atmem status` or `atflows status` for local dashboard links.")
4029
4196
 
4030
4197
 
4031
4198
  def _run_identity_init(args: argparse.Namespace) -> None:
4032
4199
  manager = _identity_manager(args.state)
4033
4200
  bootstrap = manager.identity_service().bootstrap()
4034
- _print_bootstrap(bootstrap, as_json=args.json)
4201
+ _print_bootstrap(bootstrap, as_json=args.json, port=args.port)
4035
4202
  if args.json or args.no_open or not bootstrap.get("created"):
4036
4203
  return
4037
4204
  from atmem.dashboard_daemon import _open_default_browser, manage_dashboard_daemon
@@ -4190,7 +4357,7 @@ def _serve_dashboard(
4190
4357
  if not sys.stdin.isatty():
4191
4358
  raise ValueError("local identity is not initialized; run `atmem init` before starting the dashboard daemon")
4192
4359
  bootstrap = identity.bootstrap()
4193
- _print_bootstrap(bootstrap)
4360
+ _print_bootstrap(bootstrap, port=port)
4194
4361
  from atmem.control.atbot_service import AtBotServiceManager
4195
4362
 
4196
4363
  atbot_manager = AtBotServiceManager()
@@ -4577,6 +4744,99 @@ def _run_blackbox(args: argparse.Namespace) -> None:
4577
4744
  print(format_flight_report(report), end="")
4578
4745
 
4579
4746
 
4747
+ def _format_atflows_review(report: dict[str, Any]) -> str:
4748
+ coverage = report["coverage"]
4749
+ lines = [
4750
+ "AtMem + AtFlows review",
4751
+ f" Run {report['run_id']}",
4752
+ f" Session {report['session_id']}",
4753
+ f" Correlation {report['correlation']}",
4754
+ ]
4755
+ if report.get("reason"):
4756
+ lines.append(f" Reason {report['reason']}")
4757
+ if coverage["reported"]:
4758
+ lines.append(
4759
+ f" Coverage {coverage['atflows_rows']} rows, "
4760
+ f"{coverage['unique_traces']} traces"
4761
+ + (" (truncated)" if coverage["truncated"] else "")
4762
+ )
4763
+ else:
4764
+ lines.append(" Coverage not reported without an authorized exact-session link")
4765
+ lines.append(f" Review leads {len(report['leads'])}")
4766
+ for lead in report["leads"]:
4767
+ lines.append(f" {lead['reason_code']}: {lead['trace_id']}")
4768
+ lines.append(f" Limit {report['limitation']}")
4769
+ return "\n".join(lines) + "\n"
4770
+
4771
+
4772
+ def _read_evidence_token(args: argparse.Namespace) -> str:
4773
+ token = args.token or os.environ.get(args.token_env)
4774
+ if not token and sys.stdin.isatty():
4775
+ token = getpass.getpass("AtMem evidence token: ")
4776
+ if not token:
4777
+ raise ValueError("AtMem evidence token is required; set the selected token environment variable or use --token")
4778
+ return token
4779
+
4780
+
4781
+ def _run_atflows(args: argparse.Namespace) -> None:
4782
+ from atmem.control.manager import ControlPlaneManager, DEFAULT_STATE_PATH
4783
+ from atmem.evidence.models import EvidenceOperation, EvidenceScope
4784
+ from atmem.integrations.atflows import auth_mode, fetch_traces, review_leads
4785
+
4786
+ manager = ControlPlaneManager(args.state or str(DEFAULT_STATE_PATH))
4787
+ service = manager.evidence_service()
4788
+ principal = service.authenticate(_read_evidence_token(args))
4789
+ if principal is None:
4790
+ raise ValueError("invalid evidence account token")
4791
+ principal.authorize(
4792
+ EvidenceOperation.VIEW,
4793
+ EvidenceScope(
4794
+ principal.scope.tenant_id,
4795
+ principal.scope.subject_id,
4796
+ principal.scope.workspace_id,
4797
+ args.run_id,
4798
+ ),
4799
+ )
4800
+ if auth_mode(args.base_url) == "atmem":
4801
+ username = os.environ.get("ATMEM_USERNAME") or input("AtMem username: ")
4802
+ password = os.environ.get("ATMEM_PASSWORD") or getpass.getpass("AtMem password: ")
4803
+ identity = manager.identity_service()
4804
+ session = identity.login(username, password)
4805
+ token = session["session_token"]
4806
+ try:
4807
+ traces = fetch_traces(
4808
+ base_url=args.base_url,
4809
+ atmem_session=token,
4810
+ session_id=args.session_id,
4811
+ since_ms=args.since_ms,
4812
+ until_ms=args.until_ms,
4813
+ )
4814
+ finally:
4815
+ identity.logout(token)
4816
+ else:
4817
+ password = os.environ.get(args.password_env) or getpass.getpass("AtFlows Administrator password: ")
4818
+ traces = fetch_traces(
4819
+ base_url=args.base_url,
4820
+ password=password,
4821
+ session_id=args.session_id,
4822
+ since_ms=args.since_ms,
4823
+ until_ms=args.until_ms,
4824
+ )
4825
+ report = review_leads(
4826
+ service,
4827
+ principal,
4828
+ run_id=args.run_id,
4829
+ session_id=args.session_id,
4830
+ traces=traces,
4831
+ since_ms=args.since_ms,
4832
+ until_ms=args.until_ms,
4833
+ )
4834
+ if args.human:
4835
+ print(_format_atflows_review(report), end="")
4836
+ else:
4837
+ _print(report)
4838
+
4839
+
4580
4840
  def _run_evidence(args: argparse.Namespace) -> None:
4581
4841
  from atmem.control.manager import ControlPlaneManager, DEFAULT_STATE_PATH
4582
4842
  from atmem.evidence import CaptureMode, EvidenceRole, EvidenceScope
@@ -4598,7 +4858,7 @@ def _run_evidence(args: argparse.Namespace) -> None:
4598
4858
  }
4599
4859
  )
4600
4860
  return
4601
- principal = service.authenticate(args.token)
4861
+ principal = service.authenticate(_read_evidence_token(args))
4602
4862
  if principal is None:
4603
4863
  raise ValueError("invalid evidence account token")
4604
4864
  if command == "show":