clawmetry 0.12.332__tar.gz → 0.12.334__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 (445) hide show
  1. {clawmetry-0.12.332 → clawmetry-0.12.334}/CHANGELOG.md +7 -0
  2. {clawmetry-0.12.332/clawmetry.egg-info → clawmetry-0.12.334}/PKG-INFO +1 -1
  3. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/app.js +129 -4
  4. {clawmetry-0.12.332 → clawmetry-0.12.334/clawmetry.egg-info}/PKG-INFO +1 -1
  5. {clawmetry-0.12.332 → clawmetry-0.12.334}/dashboard.py +1 -1
  6. {clawmetry-0.12.332 → clawmetry-0.12.334}/ARCHITECTURE.md +0 -0
  7. {clawmetry-0.12.332 → clawmetry-0.12.334}/CLAUDE.md +0 -0
  8. {clawmetry-0.12.332 → clawmetry-0.12.334}/LICENSE +0 -0
  9. {clawmetry-0.12.332 → clawmetry-0.12.334}/MANIFEST.in +0 -0
  10. {clawmetry-0.12.332 → clawmetry-0.12.334}/README.md +0 -0
  11. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/__init__.py +0 -0
  12. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/__main__.py +0 -0
  13. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/__init__.py +0 -0
  14. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/aider.py +0 -0
  15. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/base.py +0 -0
  16. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/claude_code.py +0 -0
  17. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/codex.py +0 -0
  18. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/cursor.py +0 -0
  19. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/goose.py +0 -0
  20. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/hermes.py +0 -0
  21. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/nanoclaw.py +0 -0
  22. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/nemo.py +0 -0
  23. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/openclaw.py +0 -0
  24. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/opencode.py +0 -0
  25. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/picoclaw.py +0 -0
  26. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/qwen_code.py +0 -0
  27. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/adapters/registry.py +0 -0
  28. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/alert_evaluator.py +0 -0
  29. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/approvals.py +0 -0
  30. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/blueprints/__init__.py +0 -0
  31. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/cli.py +0 -0
  32. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/config.py +0 -0
  33. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/connector_health.py +0 -0
  34. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/dives_prompt.py +0 -0
  35. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/dives_sql_safety.py +0 -0
  36. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/error_patterns.py +0 -0
  37. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/eval_regression_replay.py +0 -0
  38. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/eval_runner.py +0 -0
  39. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/eval_suite_runner.py +0 -0
  40. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/extensions.py +0 -0
  41. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/gateway_tap.py +0 -0
  42. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/insights.py +0 -0
  43. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/interceptor.py +0 -0
  44. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/latency_tracker.py +0 -0
  45. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/local_server.py +0 -0
  46. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/local_store.py +0 -0
  47. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/otel_exporter.py +0 -0
  48. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/outcome_classifier.py +0 -0
  49. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/providers/__init__.py +0 -0
  50. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/providers/base.py +0 -0
  51. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/providers/local.py +0 -0
  52. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/providers/turso.py +0 -0
  53. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/providers_pricing.py +0 -0
  54. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/proxy.py +0 -0
  55. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/py.typed +0 -0
  56. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/relay.py +0 -0
  57. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/resources/add-nemoclaw-clawmetry-preset.sh +0 -0
  58. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/risk.py +0 -0
  59. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/css/dashboard.css +0 -0
  60. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/img/logo.svg +0 -0
  61. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/alerts.js +0 -0
  62. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/auth-bootstrap.js +0 -0
  63. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/dives.js +0 -0
  64. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/gw-setup.js +0 -0
  65. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/i18n.js +0 -0
  66. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/js/nav-dropdown.js +0 -0
  67. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/_glossary.json +0 -0
  68. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/_meta.json +0 -0
  69. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ar.json +0 -0
  70. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/bn.json +0 -0
  71. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/de.json +0 -0
  72. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/el.json +0 -0
  73. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/en.json +0 -0
  74. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/es-419.json +0 -0
  75. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/es.json +0 -0
  76. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/fa.json +0 -0
  77. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/fil.json +0 -0
  78. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/fr.json +0 -0
  79. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/gu.json +0 -0
  80. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/he.json +0 -0
  81. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/hi.json +0 -0
  82. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/id.json +0 -0
  83. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/it.json +0 -0
  84. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ja.json +0 -0
  85. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/kn.json +0 -0
  86. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ko.json +0 -0
  87. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ml.json +0 -0
  88. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/mr.json +0 -0
  89. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/nl.json +0 -0
  90. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/pa.json +0 -0
  91. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/pl.json +0 -0
  92. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/pt-BR.json +0 -0
  93. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/pt-PT.json +0 -0
  94. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ru.json +0 -0
  95. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/sv.json +0 -0
  96. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ta.json +0 -0
  97. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/te.json +0 -0
  98. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/th.json +0 -0
  99. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/tr.json +0 -0
  100. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/uk.json +0 -0
  101. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/ur.json +0 -0
  102. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/vi.json +0 -0
  103. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/zh-CN.json +0 -0
  104. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/locales/zh-TW.json +0 -0
  105. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/v2/dist/assets/index-BP9nlZ3e.js +0 -0
  106. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/v2/dist/assets/index-NbINX9rU.css +0 -0
  107. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/static/v2/dist/index.html +0 -0
  108. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/sync.py +0 -0
  109. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/telemetry.py +0 -0
  110. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/README.md +0 -0
  111. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/partials/banners.html +0 -0
  112. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/partials/budget-modal.html +0 -0
  113. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/partials/cloud-modal.html +0 -0
  114. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/partials/overlays.html +0 -0
  115. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/partials/paywall_modal.html +0 -0
  116. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/alerts.html +0 -0
  117. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/approvals.html +0 -0
  118. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/brain.html +0 -0
  119. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/clusters.html +0 -0
  120. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/context-economics.html +0 -0
  121. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/context.html +0 -0
  122. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/crons.html +0 -0
  123. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/dives.html +0 -0
  124. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/flow.html +0 -0
  125. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/history.html +0 -0
  126. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/logs.html +0 -0
  127. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/memory.html +0 -0
  128. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/models.html +0 -0
  129. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/nemoclaw.html +0 -0
  130. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/notifications.html +0 -0
  131. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/overview.html +0 -0
  132. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/policy.html +0 -0
  133. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/security.html +0 -0
  134. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/selfevolve.html +0 -0
  135. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/skills.html +0 -0
  136. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/subagents.html +0 -0
  137. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/tool-catalog.html +0 -0
  138. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/tracing.html +0 -0
  139. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/transcripts.html +0 -0
  140. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/turn-anatomy.html +0 -0
  141. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/usage.html +0 -0
  142. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/templates/tabs/version-impact.html +0 -0
  143. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/tests/__init__.py +0 -0
  144. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/tests/e2e/__init__.py +0 -0
  145. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/tests/e2e/test_cloud_sync_resilience.py +0 -0
  146. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/tests/integration/__init__.py +0 -0
  147. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/tests/integration/test_fast_paths_cross_process.py +0 -0
  148. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/token_confidence.py +0 -0
  149. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/track.py +0 -0
  150. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/v2/__init__.py +0 -0
  151. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry/v2/routes.py +0 -0
  152. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry.egg-info/SOURCES.txt +0 -0
  153. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry.egg-info/dependency_links.txt +0 -0
  154. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry.egg-info/entry_points.txt +0 -0
  155. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry.egg-info/requires.txt +0 -0
  156. {clawmetry-0.12.332 → clawmetry-0.12.334}/clawmetry.egg-info/top_level.txt +0 -0
  157. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/__init__.py +0 -0
  158. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/gateway.py +0 -0
  159. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/hardware.py +0 -0
  160. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/logs.py +0 -0
  161. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/openapi.py +0 -0
  162. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/pricing.py +0 -0
  163. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/streams.py +0 -0
  164. {clawmetry-0.12.332 → clawmetry-0.12.334}/helpers/system.py +0 -0
  165. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/__init__.py +0 -0
  166. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/_dedupe.py +0 -0
  167. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/advisor.py +0 -0
  168. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/agents.py +0 -0
  169. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/alerts.py +0 -0
  170. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/autonomy.py +0 -0
  171. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/bootstrap.py +0 -0
  172. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/brain.py +0 -0
  173. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/channels.py +0 -0
  174. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/components.py +0 -0
  175. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/context_economics.py +0 -0
  176. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/crons.py +0 -0
  177. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/dives.py +0 -0
  178. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/evals.py +0 -0
  179. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/fleet_history.py +0 -0
  180. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/health.py +0 -0
  181. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/heartbeat.py +0 -0
  182. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/infra.py +0 -0
  183. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/insights.py +0 -0
  184. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/local_query.py +0 -0
  185. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/meta.py +0 -0
  186. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/nemoclaw.py +0 -0
  187. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/overview.py +0 -0
  188. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/plugins.py +0 -0
  189. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/policy.py +0 -0
  190. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/reasoning.py +0 -0
  191. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/review.py +0 -0
  192. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/scheduler.py +0 -0
  193. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/selfconfig.py +0 -0
  194. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/selfevolve.py +0 -0
  195. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/sessions.py +0 -0
  196. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/skills.py +0 -0
  197. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/tool_catalog.py +0 -0
  198. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/tracing.py +0 -0
  199. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/turn_anatomy.py +0 -0
  200. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/update_check.py +0 -0
  201. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/usage.py +0 -0
  202. {clawmetry-0.12.332 → clawmetry-0.12.334}/routes/workspaces.py +0 -0
  203. {clawmetry-0.12.332 → clawmetry-0.12.334}/setup.cfg +0 -0
  204. {clawmetry-0.12.332 → clawmetry-0.12.334}/setup.py +0 -0
  205. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/__init__.py +0 -0
  206. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/_moat_perf_fixture.py +0 -0
  207. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/conftest.py +0 -0
  208. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/eval_ci_mock_agent.py +0 -0
  209. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_adapter_claude_code.py +0 -0
  210. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_adapter_hermes.py +0 -0
  211. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_adapters.py +0 -0
  212. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_adaptive_heartbeat.py +0 -0
  213. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_advisor_auth_resolution.py +0 -0
  214. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_aesgcm_swallow_fix.py +0 -0
  215. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_aider_adapter.py +0 -0
  216. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_alert_evaluator_unit.py +0 -0
  217. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_alert_rules_local_store.py +0 -0
  218. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_alerts_evaluator_duckdb.py +0 -0
  219. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_anon_auth_fail_ping.py +0 -0
  220. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_api.py +0 -0
  221. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_appjs_units.py +0 -0
  222. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_approvals_duckdb_watcher.py +0 -0
  223. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_approvals_local_store.py +0 -0
  224. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_auth_detected_token.py +0 -0
  225. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_auto_update.py +0 -0
  226. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_automation_analysis_local_store_v3.py +0 -0
  227. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_autonomy_v3_shape.py +0 -0
  228. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_backfill_family_cost.py +0 -0
  229. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_bootstrap_capture.py +0 -0
  230. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_cache_push.py +0 -0
  231. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_cache_push_channel_events.py +0 -0
  232. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_history_v3_event_detail.py +0 -0
  233. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_llm_call_timeline.py +0 -0
  234. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_local_fastpath.py +0 -0
  235. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_local_store.py +0 -0
  236. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_no_log_keyword_noise.py +0 -0
  237. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_brain_sse_reconnect.py +0 -0
  238. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_budget_cap.py +0 -0
  239. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cache_trends.py +0 -0
  240. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_bluebubbles_local_store_v3.py +0 -0
  241. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_config_local_store.py +0 -0
  242. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_event_chokepoint.py +0 -0
  243. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_signal_local_store_v3.py +0 -0
  244. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_telegram_local_store_v3.py +0 -0
  245. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_tui_duckdb_fastpath.py +0 -0
  246. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channel_whatsapp_duckdb_fastpath.py +0 -0
  247. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_channels_local_store.py +0 -0
  248. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_circular_import.py +0 -0
  249. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_class_bug_parent_sid_drain.py +0 -0
  250. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_claude_code_adapter.py +0 -0
  251. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_claude_sessions_privacy_boundary.py +0 -0
  252. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_claudecode.py +0 -0
  253. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cli.py +0 -0
  254. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cli_banner.py +0 -0
  255. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_codex_adapter.py +0 -0
  256. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_component_gateway_local_store_v3.py +0 -0
  257. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_component_tool_model_completed.py +0 -0
  258. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_component_tool_timeout.py +0 -0
  259. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_connector_health.py +0 -0
  260. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_context_anatomy_local_store.py +0 -0
  261. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_context_window_model_aware.py +0 -0
  262. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cost_optimizer_local_store_v3.py +0 -0
  263. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cron_health.py +0 -0
  264. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cron_runs_duckdb_ingest.py +0 -0
  265. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cron_runs_events_only.py +0 -0
  266. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_crons_cache_push.py +0 -0
  267. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_crons_local_store.py +0 -0
  268. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_crons_runs_endpoint.py +0 -0
  269. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_cursor_adapter.py +0 -0
  270. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_daemon_error_event_pipeline.py +0 -0
  271. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_daemon_health_endpoint.py +0 -0
  272. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_dashboard_perf_hotfix.py +0 -0
  273. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_decoding_config_extract.py +0 -0
  274. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_delegation_tree_local_store.py +0 -0
  275. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_dives_prompt.py +0 -0
  276. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_dives_sql_safety.py +0 -0
  277. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_coverage_batch_2026_05_13.py +0 -0
  278. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_coverage_phase2_2026_05_13.py +0 -0
  279. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_coverage_phase3_2026_05_13.py +0 -0
  280. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_coverage_phase4_channels_2026_05_13.py +0 -0
  281. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_coverage_phase5_channels_2026_05_13.py +0 -0
  282. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_duckdb_fastpath_v3_invariants.py +0 -0
  283. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e.py +0 -0
  284. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_browserstack.py +0 -0
  285. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_cross_repo_handoff.py +0 -0
  286. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_duckdb_relay.py +0 -0
  287. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_nightly_workflow.py +0 -0
  288. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_oss_all_tabs.py +0 -0
  289. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_oss_golden_path.py +0 -0
  290. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_real_openclaw_pipeline.py +0 -0
  291. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_e2e_telegram_brain_ingest.py +0 -0
  292. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_error_patterns.py +0 -0
  293. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_eval_regression_replay.py +0 -0
  294. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_eval_runner.py +0 -0
  295. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_eval_suite_runner.py +0 -0
  296. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_evaluate_alerts_integration.py +0 -0
  297. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_event_id_unification_and_dedup.py +0 -0
  298. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_event_metrics_extraction.py +0 -0
  299. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_events_only_computation.py +0 -0
  300. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_fallbacks_local_store.py +0 -0
  301. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_family_runtime_ingest.py +0 -0
  302. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_first_heartbeat_onboarding.py +0 -0
  303. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_flow_events_local_store_v3.py +0 -0
  304. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_flow_runs_endpoint.py +0 -0
  305. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_flow_sse_reconnect.py +0 -0
  306. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_forward_progress.py +0 -0
  307. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_health.py +0 -0
  308. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_health_local_store_v3.py +0 -0
  309. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_metric_history.py +0 -0
  310. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_tap.py +0 -0
  311. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_tap_opt_in_banner.py +0 -0
  312. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_token_fallback.py +0 -0
  313. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_gateway_ws_handshake_client_id.py +0 -0
  314. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_goose_adapter.py +0 -0
  315. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_hallucination_risk.py +0 -0
  316. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_health_local_store.py +0 -0
  317. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_heartbeat_agent_install_piggyback.py +0 -0
  318. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_heartbeat_dispatch.py +0 -0
  319. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_heartbeat_envelope.py +0 -0
  320. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_heartbeat_local_store.py +0 -0
  321. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_heartbeat_relay_e2e.py +0 -0
  322. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_i18n_catalog.py +0 -0
  323. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_insights.py +0 -0
  324. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_install_script_linux_restart.py +0 -0
  325. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_install_script_no_duplicate_daemon.py +0 -0
  326. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_interceptor.py +0 -0
  327. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_issue_1127_ux_dead_ends.py +0 -0
  328. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_latency_tracker.py +0 -0
  329. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_max_bytes_auto_vacuum.py +0 -0
  330. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_query_api.py +0 -0
  331. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_server_proxy.py +0 -0
  332. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store.py +0 -0
  333. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_concurrent_flush_1590.py +0 -0
  334. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_default_on.py +0 -0
  335. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_missing_writers.py +0 -0
  336. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_multi_agent.py +0 -0
  337. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_rename.py +0 -0
  338. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_local_store_sync_integration.py +0 -0
  339. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_log_sse_reconnect.py +0 -0
  340. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_loop_signals_e2e.py +0 -0
  341. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_memory_cache_push.py +0 -0
  342. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_memory_local_store.py +0 -0
  343. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_memory_rag.py +0 -0
  344. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_bug_class_v3_event_shape_gate.py +0 -0
  345. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_cloud_robustness.py +0 -0
  346. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_cloud_roundtrip_e2e.py +0 -0
  347. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_cloud_sync_e2e.py +0 -0
  348. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_component_tool_e2e.py +0 -0
  349. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_cross_repo_version_skew.py +0 -0
  350. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_daemon_crash_recovery.py +0 -0
  351. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_e2e_regression_1129.py +0 -0
  352. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_event_shape_manifest_guard.py +0 -0
  353. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_live_openclaw_e2e.py +0 -0
  354. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_perf_benchmark.py +0 -0
  355. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_real_e2e.py +0 -0
  356. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_send_message_e2e.py +0 -0
  357. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_moat_tier1_daemon_proxy_sweep.py +0 -0
  358. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_model_transitions_local_store_v3.py +0 -0
  359. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_multi_workspace_discovery.py +0 -0
  360. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_nanoclaw_adapter.py +0 -0
  361. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_nemo_adapter.py +0 -0
  362. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_nemo_adapter_pro_gate.py +0 -0
  363. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_nemoclaw_governance.py +0 -0
  364. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_no_agent_detected_state.py +0 -0
  365. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_no_direct_get_store_in_routes.py +0 -0
  366. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_oauth_detection.py +0 -0
  367. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_openclaw_claude_session_ingest.py +0 -0
  368. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_openclaw_sessions_followup.py +0 -0
  369. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_opencode_adapter.py +0 -0
  370. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_oss_routes_source_canary.py +0 -0
  371. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_outcome_classifier.py +0 -0
  372. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_overview_autonomy_score.py +0 -0
  373. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_overview_heartbeat.py +0 -0
  374. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_overview_local_store.py +0 -0
  375. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_pending_query_dispatch.py +0 -0
  376. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_per_agent_budget.py +0 -0
  377. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_phase_2_to_5_live_e2e.py +0 -0
  378. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_picoclaw_adapter.py +0 -0
  379. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_plugins_invocations_local_store.py +0 -0
  380. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_proxy.py +0 -0
  381. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_proxy_budget_abort.py +0 -0
  382. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_query_sessions_message_count.py +0 -0
  383. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_qwen_code_adapter.py +0 -0
  384. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_rate_limits_local_store_v3.py +0 -0
  385. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_read_cloud_token_fallback.py +0 -0
  386. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_real_openclaw_binary_e2e.py +0 -0
  387. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_reasoning_v3_shape.py +0 -0
  388. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_relay.py +0 -0
  389. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_reliability.py +0 -0
  390. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_review_queue.py +0 -0
  391. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_run_daemon_uniqueness.py +0 -0
  392. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_runtime_detection_snapshot.py +0 -0
  393. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_schema_migration_failure_integrity.py +0 -0
  394. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_selfconfig_session_attribution.py +0 -0
  395. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_session_export.py +0 -0
  396. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_session_export_local_store_v3.py +0 -0
  397. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_session_tools_local_store_v3.py +0 -0
  398. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sessions_by_type_local_store.py +0 -0
  399. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sessions_clusters_local_store_v3.py +0 -0
  400. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sessions_local_fastpath.py +0 -0
  401. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sessions_retention_cap.py +0 -0
  402. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sigterm_ring_flush.py +0 -0
  403. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_skills_fidelity_local_store.py +0 -0
  404. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_skills_fidelity_local_store_v3.py +0 -0
  405. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_skills_multi_dir_discovery.py +0 -0
  406. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_spans_e2e.py +0 -0
  407. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_spans_ingest.py +0 -0
  408. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_subagent_attribution_v3.py +0 -0
  409. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_subagents_events_only.py +0 -0
  410. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_subagents_local_store_v3.py +0 -0
  411. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_subscribe_queue_bounded.py +0 -0
  412. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_daemon_crash_recovery.py +0 -0
  413. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_main_block_at_eof.py +0 -0
  414. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_progress_sticky.py +0 -0
  415. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_reliability.py +0 -0
  416. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_skip_sidecar_jsonls.py +0 -0
  417. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_sync_trial_gating.py +0 -0
  418. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_system_snapshot_dlq.py +0 -0
  419. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_task_runs_local_store_v3.py +0 -0
  420. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_telegram_gatewaylog_parser.py +0 -0
  421. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_telegram_ingest.py +0 -0
  422. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_telemetry.py +0 -0
  423. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_tier1_local_store.py +0 -0
  424. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_tier_pro_paywall_no_flash.py +0 -0
  425. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_token_attribution_local_store_v3.py +0 -0
  426. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_token_confidence.py +0 -0
  427. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_token_spike_rules.py +0 -0
  428. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_token_velocity_local_store_v3.py +0 -0
  429. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_tool_alternatives.py +0 -0
  430. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_tool_modal_fastpath_2026_05_13.py +0 -0
  431. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_tracing_accuracy.py +0 -0
  432. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_track.py +0 -0
  433. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_transcript_local_store.py +0 -0
  434. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_transcript_openclaw_shapes.py +0 -0
  435. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_transcripts_list_detail_count_parity.py +0 -0
  436. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_update_banner_live_version.py +0 -0
  437. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_uptime_portable.py +0 -0
  438. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_usage_cache_trends_local_store.py +0 -0
  439. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_usage_forecast_local_store_v3.py +0 -0
  440. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_usage_local_store.py +0 -0
  441. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_usage_per_session.py +0 -0
  442. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_v3_schema_parser.py +0 -0
  443. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_version_impact.py +0 -0
  444. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_version_impact_local_store_v3.py +0 -0
  445. {clawmetry-0.12.332 → clawmetry-0.12.334}/tests/test_workspace_switcher_copy.py +0 -0
@@ -1,5 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ### Release: per-adapter Flow diagram + runtime-aware Brain empty state (2026-05-27)
4
+ - **Per-adapter Flow/Overview diagram (#2174):** the Flow diagram always showed OpenClaw's channel→gateway→agent→tools topology even for runtimes that have neither. Coding-CLI runtimes (Claude Code, Codex, Cursor, Aider, Goose, opencode, Qwen) and the minimal PicoClaw/NanoClaw now get a generated, runtime-correct diagram (Terminal → agent → coding tools → Workspace, animated edges); OpenClaw/Hermes keep the rich hand-built SVG. The Overview pane mirrors it. Driven by the global runtime switcher.
5
+ - **Runtime-aware Brain empty state (#2174):** selecting a runtime with sessions on record but no recent events showed a bare "No activity yet" that contradicted the switcher's "Goose · 3 sessions". Now it explains the session count and points to the Tracing tab.
6
+
7
+ ### Fixed: Active Tasks showed week-old runs as "Recently Completed" (2026-05-27)
8
+ - The overview Active Tasks panel filtered "Recently Completed/Failed" by each task's run **duration** (`runtimeMs < 2h`) instead of **how long ago it finished**, so a 5-minute task that ended days ago kept showing as "recent" and an idle node looked busy. Now bounded by finish age (1h), derived the same way the card's "Finished N ago" label is (`completionTs → updatedAt → startedAt+runtime`). Idle nodes correctly show "No active tasks — The AI is idle"; running tasks still always show. (#2170)
9
+
3
10
  ### Release: runtime switcher scopes Tracing + clearer "N sessions" labels (2026-05-27)
4
11
  - The global runtime switcher now also filters the **Tracing** tab (event-derived traces set `trace_id = session_id`, whose prefix is the runtime). Brain + Transcripts + Tracing now all de-merge by runtime. (#2167)
5
12
  - Switcher option labels now read **"Claude Code · 22 sessions"** / **"OpenClaw · 1 session"** / **"All runtimes · 23 sessions"** instead of a bare `(22)`, which had read as "22 Claude Code runtimes" (there is one runtime running many sessions). (#2167)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawmetry
3
- Version: 0.12.332
3
+ Version: 0.12.334
4
4
  Summary: ClawMetry - Real-time observability dashboard for OpenClaw AI agents
5
5
  Home-page: https://github.com/vivekchand/clawmetry
6
6
  Author: Vivek Chand
@@ -3890,7 +3890,20 @@ function renderBrainStream(events) {
3890
3890
  // (filter changes, auto-refresh) recompute from the source of truth.
3891
3891
  filtered = _collapseBodylessOutbound(filtered);
3892
3892
  if (!filtered || filtered.length === 0) {
3893
- el.innerHTML = '<div style="color:var(--text-muted);padding:20px">No activity yet</div>';
3893
+ // Runtime-aware empty state: the header switcher counts SESSIONS on record
3894
+ // (lifetime), but this feed only shows RECENT events. Selecting a runtime
3895
+ // with sessions but no recent activity used to read a bare "No activity
3896
+ // yet", which contradicts the switcher's "Goose · 3 sessions". Explain it.
3897
+ var _bf = (typeof _cmRuntimeFilter === 'function') ? _cmRuntimeFilter() : 'all';
3898
+ var _bmsg = 'No activity yet';
3899
+ if (_bf && _bf !== 'all') {
3900
+ var _blbl = (_CM_RT_LABEL && _CM_RT_LABEL[_bf]) || _bf;
3901
+ var _bn = (_cmGlobalRtCounts && _cmGlobalRtCounts[_bf]) || 0;
3902
+ _bmsg = 'No recent ' + escHtml(_blbl) + ' activity in this live feed.'
3903
+ + (_bn ? ' ' + escHtml(_blbl) + ' has ' + _bn + ' session' + (_bn === 1 ? '' : 's')
3904
+ + ' on record (older than this window) — open the Tracing tab to explore them.' : '');
3905
+ }
3906
+ el.innerHTML = '<div style="color:var(--text-muted);padding:20px;line-height:1.6;">' + _bmsg + '</div>';
3894
3907
  return;
3895
3908
  }
3896
3909
  // Issue #1203: one-line banner when Telegram outbound rows are visible so
@@ -6798,6 +6811,8 @@ function _cmPopulateGlobalRuntime(counts) {
6798
6811
  function _cmOnGlobalRuntimeChange(sel) {
6799
6812
  if (!sel) return;
6800
6813
  _cmSetRuntimeFilter(sel.value);
6814
+ // Swap the Flow + Overview diagram to the selected runtime's topology.
6815
+ try { if (typeof _applyRuntimeFlowDiagram === 'function') _applyRuntimeFlowDiagram(sel.value); } catch (e) {}
6801
6816
  // Reload the current tab so any runtime-aware view re-filters in place.
6802
6817
  if (typeof switchTab === 'function' && _cmCurrentTab) switchTab(_cmCurrentTab);
6803
6818
  }
@@ -13641,6 +13656,97 @@ function initFlow() {
13641
13656
  // the browser tab is hidden — completes Phase 2 coverage.
13642
13657
  if (window._flowStatsTimer) { try { clearInterval(window._flowStatsTimer); } catch(e){} }
13643
13658
  window._flowStatsTimer = visibilitySetInterval(updateFlowStats, updateInterval);
13659
+ // Per-adapter Flow diagram: reflect the runtime currently selected in the
13660
+ // global switcher (OpenClaw/Hermes keep the rich channel→gateway SVG;
13661
+ // coding-CLI + pico/nano get their own generated topology).
13662
+ try { _applyRuntimeFlowDiagram((typeof _cmRuntimeFilter === 'function') ? _cmRuntimeFilter() : 'all'); } catch (e) {}
13663
+ }
13664
+
13665
+ // ── Per-adapter Flow diagram (goal: distinct topology per runtime) ──────────
13666
+ // OpenClaw / Hermes keep the hand-built channel→gateway→agent→tools SVG. The
13667
+ // coding-CLI runtimes (Claude Code, Codex, Cursor, Aider, Goose, opencode,
13668
+ // Qwen) and the minimal PicoClaw/NanoClaw don't have channels or a chat
13669
+ // gateway, so showing them the OpenClaw topology was misleading. We swap
13670
+ // #flow-svg's content for a generated, runtime-correct diagram and re-mirror
13671
+ // the Overview pane. Driven by the global runtime switcher.
13672
+ var _origFlowSvgInner = null;
13673
+ var _RT_FLOW = {
13674
+ claude_code: { label:'Claude Code', src:['⌨️','Terminal'], accent:'#d97706', stroke:'#b45309', tools:[['📝','Edit/Write'],['📖','Read'],['⚡','Bash'],['🔍','Grep/Glob'],['🐝','Subagents'],['🧩','MCP']] },
13675
+ codex: { label:'Codex', src:['⌨️','Terminal'], accent:'#10a37f', stroke:'#0d8a6a', tools:[['📝','Apply patch'],['📖','Read'],['⚡','Shell'],['🔍','Search'],['🧩','MCP']] },
13676
+ cursor: { label:'Cursor', src:['🖥️','Editor'], accent:'#6366f1', stroke:'#4f46e5', tools:[['📝','Edit'],['📖','Read'],['⚡','Terminal'],['🔍','Codebase'],['🧩','MCP']] },
13677
+ aider: { label:'Aider', src:['⌨️','Terminal'], accent:'#22a559', stroke:'#1a8045', tools:[['📝','Edit'],['📖','Read'],['⚡','Shell'],['🔀','Git commit']] },
13678
+ goose: { label:'Goose', src:['⌨️','Terminal'], accent:'#0ea5e9', stroke:'#0284c7', tools:[['📝','Edit'],['⚡','Shell'],['🔍','Search'],['🧩','Extensions']] },
13679
+ opencode: { label:'opencode', src:['⌨️','Terminal'], accent:'#f59e0b', stroke:'#d97706', tools:[['📝','Edit'],['📖','Read'],['⚡','Bash'],['🔍','Grep']] },
13680
+ qwen_code: { label:'Qwen Code', src:['⌨️','Terminal'], accent:'#7c3aed', stroke:'#6d28d9', tools:[['📝','Edit'],['📖','Read'],['⚡','Shell'],['🔍','Search']] },
13681
+ picoclaw: { label:'PicoClaw', src:['👤','You'], accent:'#ec4899', stroke:'#db2777', tools:[['⚡','Exec'],['🧠','Memory'],['📋','Sessions']], minimal:true },
13682
+ nanoclaw: { label:'NanoClaw', src:['👤','You'], accent:'#14b8a6', stroke:'#0d9488', tools:[['⚡','Exec'],['🧠','Memory']], minimal:true },
13683
+ };
13684
+
13685
+ function _flowEdge(x1, y1, x2, y2, color, delay) {
13686
+ var mx = (x1 + x2) / 2;
13687
+ var d = 'M' + x1 + ' ' + y1 + ' C ' + mx + ' ' + y1 + ' ' + mx + ' ' + y2 + ' ' + x2 + ' ' + y2;
13688
+ return '<path d="' + d + '" fill="none" stroke="' + color + '" stroke-width="2" stroke-opacity="0.55" stroke-dasharray="6 6">'
13689
+ + '<animate attributeName="stroke-dashoffset" from="24" to="0" dur="1.1s" begin="' + delay + 's" repeatCount="indefinite"/></path>';
13690
+ }
13691
+
13692
+ function _buildRuntimeFlowInner(rt, model) {
13693
+ var s = _RT_FLOW[rt];
13694
+ if (!s) return null;
13695
+ var tools = s.tools, n = tools.length;
13696
+ var th = 40, gap = 14, colX = 715, colW = 160;
13697
+ var totalH = n * th + (n - 1) * gap;
13698
+ var y0 = 275 - totalH / 2;
13699
+ var agentW = 210, agentH = 96, agentCx = 460, agentCy = 275;
13700
+ var agentX = agentCx - agentW / 2, agentY = agentCy - agentH / 2;
13701
+ var srcX = 45, srcY = 247, srcW = 150, srcH = 56, srcCx = srcX + srcW / 2, srcCy = srcY + srcH / 2;
13702
+ var h = '<defs><filter id="rtShadow" x="-20%" y="-20%" width="140%" height="140%"><feDropShadow dx="0" dy="2" stdDeviation="3" flood-opacity="0.35"/></filter></defs>';
13703
+ // Edges first (under nodes): source→agent, agent→each tool.
13704
+ h += _flowEdge(srcX + srcW, srcCy, agentX, agentCy, s.accent, 0);
13705
+ for (var i = 0; i < n; i++) { var ty = y0 + i * (th + gap) + th / 2; h += _flowEdge(agentX + agentW, agentCy, colX, ty, s.accent, 0.12 + i * 0.1); }
13706
+ // Source node.
13707
+ h += '<g class="flow-node"><rect x="' + srcX + '" y="' + srcY + '" width="' + srcW + '" height="' + srcH + '" rx="12" fill="#1e293b" stroke="#334155" stroke-width="2" filter="url(#rtShadow)"/>'
13708
+ + '<text x="' + srcCx + '" y="' + (srcCy - 3) + '" style="font-size:22px;text-anchor:middle;">' + s.src[0] + '</text>'
13709
+ + '<text x="' + srcCx + '" y="' + (srcCy + 19) + '" style="font-size:12px;font-weight:700;fill:#cbd5e1;text-anchor:middle;">' + escHtml(s.src[1]) + '</text></g>';
13710
+ // Agent node (runtime).
13711
+ h += '<g class="flow-node flow-node-brain"><rect x="' + agentX + '" y="' + agentY + '" width="' + agentW + '" height="' + agentH + '" rx="14" fill="' + s.accent + '" stroke="' + s.stroke + '" stroke-width="3" filter="url(#rtShadow)"/>'
13712
+ + '<text x="' + agentCx + '" y="' + (agentY + 31) + '" style="font-size:22px;text-anchor:middle;">🧠</text>'
13713
+ + '<text x="' + agentCx + '" y="' + (agentY + 55) + '" style="font-size:17px;font-weight:800;fill:#fff;text-anchor:middle;">' + escHtml(s.label) + '</text>'
13714
+ + '<text x="' + agentCx + '" y="' + (agentY + 73) + '" style="font-size:10px;fill:rgba(255,255,255,0.85);text-anchor:middle;">' + escHtml(model || (s.minimal ? 'OpenClaw-family' : 'coding agent')) + '</text>'
13715
+ + '<circle cx="' + agentCx + '" cy="' + (agentY + agentH - 9) + '" r="4" fill="#fff"><animate attributeName="opacity" values="0.4;1;0.4" dur="1.4s" repeatCount="indefinite"/></circle></g>';
13716
+ // Tool column (right).
13717
+ for (var j = 0; j < n; j++) { var y = y0 + j * (th + gap), cy = y + th / 2;
13718
+ h += '<g class="flow-node flow-node-tool"><rect x="' + colX + '" y="' + y + '" width="' + colW + '" height="' + th + '" rx="10" fill="#0f172a" stroke="' + s.accent + '" stroke-width="1.6" filter="url(#rtShadow)"/>'
13719
+ + '<text x="' + (colX + colW / 2) + '" y="' + (cy + 1) + '" style="font-size:12px;font-weight:700;fill:#e2e8f0;text-anchor:middle;">' + tools[j][0] + ' ' + escHtml(tools[j][1]) + '</text></g>';
13720
+ }
13721
+ // Workspace sink for coding agents.
13722
+ if (!s.minimal) {
13723
+ var wy = y0 + totalH + 20;
13724
+ h += '<g class="flow-node"><rect x="' + colX + '" y="' + wy + '" width="' + colW + '" height="38" rx="10" fill="#1e293b" stroke="#334155" stroke-width="1.6"/>'
13725
+ + '<text x="' + (colX + colW / 2) + '" y="' + (wy + 23) + '" style="font-size:12px;font-weight:700;fill:#94a3b8;text-anchor:middle;">📂 Workspace</text></g>';
13726
+ }
13727
+ return h;
13728
+ }
13729
+
13730
+ function _applyRuntimeFlowDiagram(rt) {
13731
+ var svg = document.getElementById('flow-svg');
13732
+ if (!svg) return;
13733
+ if (_origFlowSvgInner === null) _origFlowSvgInner = svg.innerHTML;
13734
+ var model = '';
13735
+ try { var ml = document.getElementById('brain-model-text'); model = ml ? (ml.textContent || '') : ''; } catch (e) {}
13736
+ if (model === 'unknown') model = '';
13737
+ var inner = _buildRuntimeFlowInner(rt, model);
13738
+ if (inner) {
13739
+ svg.innerHTML = inner;
13740
+ } else if (svg.innerHTML.indexOf('rtShadow') !== -1) {
13741
+ // Currently showing a generated diagram → restore the original OpenClaw SVG.
13742
+ svg.innerHTML = _origFlowSvgInner;
13743
+ try { hideUnconfiguredChannels(document); } catch (e) {}
13744
+ }
13745
+ // Re-mirror the Overview pane from whatever #flow-svg now holds.
13746
+ try {
13747
+ var c = document.getElementById('overview-flow-container');
13748
+ if (c) { c.innerHTML = ''; if (typeof initOverviewFlow === 'function') initOverviewFlow(); }
13749
+ } catch (e) {}
13644
13750
  }
13645
13751
 
13646
13752
  // Map brain-history event types → Flow's active-tool buckets (exec/browser/
@@ -14589,14 +14695,33 @@ async function loadOverviewTasks() {
14589
14695
  else if (isRealFailure) failed.push(a);
14590
14696
  else done.push(a);
14591
14697
  });
14592
- // Filter old completed/failed (2h)
14593
- done = done.filter(function(a) { return a.runtimeMs < 2 * 60 * 60 * 1000; });
14594
- failed = failed.filter(function(a) { return a.runtimeMs < 2 * 60 * 60 * 1000; });
14698
+ // "Recently Completed/Failed" must mean RECENT — bound by how long ago the
14699
+ // task FINISHED, not its run duration. The old `runtimeMs < 2h` check used
14700
+ // duration, so a 5-minute task that finished 6 days ago still passed and
14701
+ // showed as "recent" (an idle node looked busy). Derive the end time the
14702
+ // same way _ovRenderCard's "Finished N ago" does (completionTs → updatedAt
14703
+ // → startedAt+runtime); unknown end time → not recent.
14704
+ var RECENT_DONE_MS = 60 * 60 * 1000; // 1h
14705
+ var _nowMs = Date.now();
14706
+ function _ovEndedMs(a) {
14707
+ var e = 0;
14708
+ if (a.completionTs) { var ct = Date.parse(a.completionTs); if (!isNaN(ct)) e = ct; }
14709
+ if (!e && a.updatedAt) e = a.updatedAt;
14710
+ if (!e && a.startedAt && a.runtimeMs) e = a.startedAt + a.runtimeMs;
14711
+ return e;
14712
+ }
14713
+ function _ovRecentlyFinished(a) {
14714
+ var e = _ovEndedMs(a);
14715
+ return e > 0 && (_nowMs - e) < RECENT_DONE_MS;
14716
+ }
14717
+ done = done.filter(_ovRecentlyFinished);
14718
+ failed = failed.filter(_ovRecentlyFinished);
14595
14719
 
14596
14720
  if (countBadge) countBadge.textContent = running.length > 0 ? '(' + running.length + ' running)' : '(' + (done.length + failed.length) + ' recent)';
14597
14721
 
14598
14722
  var totalShown = running.length + done.length + failed.length;
14599
14723
  if (totalShown === 0) {
14724
+ if (countBadge) countBadge.textContent = '';
14600
14725
  el.innerHTML = '<div style="text-align:center;padding:40px 20px;color:var(--text-muted);">'
14601
14726
  + '<div style="font-size:32px;margin-bottom:12px;" class="tasks-empty-icon">😴</div>'
14602
14727
  + '<div style="font-size:14px;font-weight:600;color:var(--text-tertiary);margin-bottom:4px;">No active tasks</div>'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawmetry
3
- Version: 0.12.332
3
+ Version: 0.12.334
4
4
  Summary: ClawMetry - Real-time observability dashboard for OpenClaw AI agents
5
5
  Home-page: https://github.com/vivekchand/clawmetry
6
6
  Author: Vivek Chand
@@ -153,7 +153,7 @@ except ImportError:
153
153
  metrics_service_pb2 = None
154
154
  trace_service_pb2 = None
155
155
 
156
- __version__ = "0.12.332"
156
+ __version__ = "0.12.334"
157
157
 
158
158
  # Extensions (Phase 2) — load plugins at import time; safe no-op if package not installed
159
159
  try:
File without changes
File without changes
File without changes
File without changes