by-framework 0.2.2.dev0__tar.gz → 0.2.2.dev2__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 (247) hide show
  1. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.gitignore +7 -0
  2. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CLAUDE.md +5 -3
  3. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/Makefile +4 -0
  4. by_framework-0.2.2.dev0/README.md → by_framework-0.2.2.dev2/PKG-INFO +53 -1
  5. by_framework-0.2.2.dev0/PKG-INFO → by_framework-0.2.2.dev2/README.md +29 -21
  6. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/README_zh.md +25 -1
  7. by_framework-0.2.2.dev2/docs/by-framework-trace-change-usage.html +627 -0
  8. by_framework-0.2.2.dev2/docs/by-framework-trace-complete-guide.html +1280 -0
  9. by_framework-0.2.2.dev2/docs/plans/2026-06-10-trace-metrics-correlation.md +77 -0
  10. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/worker.py +4 -2
  11. by_framework-0.2.2.dev2/libs/by-framework-dashboard/README.md +151 -0
  12. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/index.html +12 -0
  13. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/package-lock.json +1696 -0
  14. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/package.json +18 -0
  15. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/src/main.jsx +1351 -0
  16. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/src/styles.css +1214 -0
  17. by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/vite.config.js +18 -0
  18. by_framework-0.2.2.dev2/libs/by-framework-dashboard/pyproject.toml +37 -0
  19. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/__init__.py +5 -0
  20. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/adapters.py +42 -0
  21. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/dashboard.py +1222 -0
  22. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/__init__.py +1 -0
  23. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/app.js +115 -0
  24. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/index.html +13 -0
  25. by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/styles.css +1 -0
  26. by_framework-0.2.2.dev2/libs/by-framework-dashboard/tests/test_dashboard_server.py +436 -0
  27. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/pyproject.toml +1 -1
  28. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/src/by_framework_history_byclaw/byclaw_history.py +29 -11
  29. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/tests/test_byclaw_history.py +20 -4
  30. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/pyproject.toml +1 -1
  31. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/_utils.py +0 -11
  32. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/adapter.py +245 -7
  33. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/tools.py +37 -1
  34. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_adapter.py +145 -5
  35. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_tools.py +51 -1
  36. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/pyproject.toml +1 -1
  37. by_framework-0.2.2.dev2/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/__init__.py +17 -0
  38. by_framework-0.2.2.dev2/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/langfuse.py +1074 -0
  39. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/pyproject.toml +1 -1
  40. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/src/by_framework_trace_phoenix/phoenix.py +31 -3
  41. by_framework-0.2.2.dev2/libs/by-framework-trace-phoenix/tests/test_phoenix_plugin.py +159 -0
  42. by_framework-0.2.2.dev2/libs/by-framework-trace-query/pyproject.toml +28 -0
  43. by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/__init__.py +7 -0
  44. by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/client.py +204 -0
  45. by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/merger.py +187 -0
  46. by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/models.py +21 -0
  47. by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/redis_source.py +130 -0
  48. by_framework-0.2.2.dev2/libs/by-framework-trace-query/tests/test_trace_query_sdk.py +893 -0
  49. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/pyproject.toml +12 -1
  50. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/scripts/python_quality.sh +2 -1
  51. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/__init__.py +2 -0
  52. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/__init__.py +2 -1
  53. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/client.py +406 -5
  54. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/constants.py +30 -0
  55. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/logger.py +71 -10
  56. by_framework-0.2.2.dev2/src/by_framework/metrics/__init__.py +218 -0
  57. by_framework-0.2.2.dev2/src/by_framework/metrics/read_client.py +257 -0
  58. by_framework-0.2.2.dev2/src/by_framework/metrics/snapshot.py +2294 -0
  59. by_framework-0.2.2.dev2/src/by_framework/trace/__init__.py +55 -0
  60. by_framework-0.2.2.dev2/src/by_framework/trace/external_trace.py +148 -0
  61. by_framework-0.2.2.dev2/src/by_framework/trace/span_recorder.py +901 -0
  62. by_framework-0.2.2.dev2/src/by_framework/trace/trace_schema.py +329 -0
  63. by_framework-0.2.2.dev2/src/by_framework/trace/trace_writer.py +157 -0
  64. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_control_handling.py +30 -0
  65. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/context.py +433 -17
  66. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/runner.py +258 -10
  67. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/worker.py +135 -11
  68. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/client/test_client.py +389 -1
  69. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_logger.py +13 -13
  70. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_logger_integration.py +28 -5
  71. by_framework-0.2.2.dev2/tests/metrics/test_metrics.py +84 -0
  72. by_framework-0.2.2.dev2/tests/metrics/test_read_client.py +101 -0
  73. by_framework-0.2.2.dev2/tests/metrics/test_snapshot.py +839 -0
  74. by_framework-0.2.2.dev2/tests/plugin/test_langfuse_plugin.py +951 -0
  75. by_framework-0.2.2.dev2/tests/trace/test_external_trace.py +134 -0
  76. by_framework-0.2.2.dev2/tests/trace/test_logger_correlation.py +122 -0
  77. by_framework-0.2.2.dev2/tests/trace/test_otel_exporter.py +254 -0
  78. by_framework-0.2.2.dev2/tests/trace/test_span_recorder.py +231 -0
  79. by_framework-0.2.2.dev2/tests/worker/test_context.py +817 -0
  80. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_gateway_worker.py +79 -5
  81. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_runner.py +199 -1
  82. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/uv.lock +87 -6
  83. by_framework-0.2.2.dev0/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/__init__.py +0 -5
  84. by_framework-0.2.2.dev0/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/langfuse.py +0 -406
  85. by_framework-0.2.2.dev0/src/by_framework/core/__init__.py +0 -95
  86. by_framework-0.2.2.dev0/src/by_framework/core/availability.py +0 -495
  87. by_framework-0.2.2.dev0/src/by_framework/core/delivery_gate.py +0 -60
  88. by_framework-0.2.2.dev0/src/by_framework/core/discovery.py +0 -359
  89. by_framework-0.2.2.dev0/src/by_framework/core/extensions/__init__.py +0 -35
  90. by_framework-0.2.2.dev0/src/by_framework/core/extensions/agent_config.py +0 -64
  91. by_framework-0.2.2.dev0/src/by_framework/core/extensions/plugin.py +0 -282
  92. by_framework-0.2.2.dev0/src/by_framework/core/extensions/registry.py +0 -653
  93. by_framework-0.2.2.dev0/src/by_framework/core/extensions/trace_provider.py +0 -20
  94. by_framework-0.2.2.dev0/src/by_framework/core/protocol/__init__.py +0 -133
  95. by_framework-0.2.2.dev0/src/by_framework/core/protocol/action_type.py +0 -33
  96. by_framework-0.2.2.dev0/src/by_framework/core/protocol/agent_state.py +0 -78
  97. by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_codec.py +0 -101
  98. by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_command.py +0 -53
  99. by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_types.py +0 -7
  100. by_framework-0.2.2.dev0/src/by_framework/core/protocol/commands.py +0 -285
  101. by_framework-0.2.2.dev0/src/by_framework/core/protocol/content_codec.py +0 -17
  102. by_framework-0.2.2.dev0/src/by_framework/core/protocol/content_type.py +0 -38
  103. by_framework-0.2.2.dev0/src/by_framework/core/protocol/data_message.py +0 -45
  104. by_framework-0.2.2.dev0/src/by_framework/core/protocol/data_shapes.py +0 -83
  105. by_framework-0.2.2.dev0/src/by_framework/core/protocol/event_type.py +0 -34
  106. by_framework-0.2.2.dev0/src/by_framework/core/protocol/events.py +0 -69
  107. by_framework-0.2.2.dev0/src/by_framework/core/protocol/message.py +0 -99
  108. by_framework-0.2.2.dev0/src/by_framework/core/protocol/message_header.py +0 -68
  109. by_framework-0.2.2.dev0/src/by_framework/core/protocol/responses.py +0 -94
  110. by_framework-0.2.2.dev0/src/by_framework/core/protocol/results.py +0 -149
  111. by_framework-0.2.2.dev0/src/by_framework/core/registry.py +0 -1025
  112. by_framework-0.2.2.dev0/src/by_framework/core/runtime/__init__.py +0 -29
  113. by_framework-0.2.2.dev0/src/by_framework/core/runtime/agent_config_manager.py +0 -283
  114. by_framework-0.2.2.dev0/src/by_framework/core/runtime/agent_runtime_state.py +0 -75
  115. by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_manager.py +0 -437
  116. by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_paths.py +0 -76
  117. by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_permissions.py +0 -71
  118. by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/__init__.py +0 -15
  119. by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/base.py +0 -140
  120. by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/local.py +0 -321
  121. by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/__init__.py +0 -10
  122. by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/base.py +0 -57
  123. by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/history_manager.py +0 -55
  124. by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/in_memory.py +0 -58
  125. by_framework-0.2.2.dev0/src/by_framework/core/runtime/session_manager.py +0 -118
  126. by_framework-0.2.2.dev0/src/by_framework/core/wakeup_controller.py +0 -151
  127. by_framework-0.2.2.dev0/src/by_framework/core/workspace.py +0 -126
  128. by_framework-0.2.2.dev0/tests/core/protocol/test_byai_codec.py +0 -105
  129. by_framework-0.2.2.dev0/tests/core/protocol/test_command_wire.py +0 -21
  130. by_framework-0.2.2.dev0/tests/core/protocol/test_protocol.py +0 -246
  131. by_framework-0.2.2.dev0/tests/core/protocol/test_results.py +0 -68
  132. by_framework-0.2.2.dev0/tests/core/runtime/history/test_history_persistence.py +0 -181
  133. by_framework-0.2.2.dev0/tests/core/runtime/test_file_access_context.py +0 -48
  134. by_framework-0.2.2.dev0/tests/core/runtime/test_file_manager_default_storage.py +0 -222
  135. by_framework-0.2.2.dev0/tests/core/runtime/test_file_paths.py +0 -28
  136. by_framework-0.2.2.dev0/tests/core/runtime/test_file_permissions.py +0 -85
  137. by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_collection.py +0 -41
  138. by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_mutation.py +0 -32
  139. by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_read.py +0 -50
  140. by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_search.py +0 -61
  141. by_framework-0.2.2.dev0/tests/core/test_availability.py +0 -606
  142. by_framework-0.2.2.dev0/tests/core/test_discovery.py +0 -204
  143. by_framework-0.2.2.dev0/tests/core/test_registry.py +0 -933
  144. by_framework-0.2.2.dev0/tests/integration/__init__.py +0 -0
  145. by_framework-0.2.2.dev0/tests/plugin/__init__.py +0 -0
  146. by_framework-0.2.2.dev0/tests/plugin/test_langfuse_plugin.py +0 -258
  147. by_framework-0.2.2.dev0/tests/worker/__init__.py +0 -0
  148. by_framework-0.2.2.dev0/tests/worker/test_context.py +0 -322
  149. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  150. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  151. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  152. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/RELEASING.md +0 -0
  153. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/ci.yml +0 -0
  154. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/publish.yml +0 -0
  155. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/stale.yml +0 -0
  156. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.pre-commit-config.yaml +0 -0
  157. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/AGENTS.md +0 -0
  158. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CHANGELOG.md +0 -0
  159. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CODE_OF_CONDUCT.md +0 -0
  160. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CONTRIBUTING.md +0 -0
  161. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/LICENSE +0 -0
  162. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/SECURITY.md +0 -0
  163. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/assets/img/architecture_en.png +0 -0
  164. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/assets/img/architecture_zh.png +0 -0
  165. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/autoformat.sh +0 -0
  166. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/docs/README.md +0 -0
  167. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/docs/plans/2026-05-15-worker-task-state-stats.md +0 -0
  168. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/README.md +0 -0
  169. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/pyproject.toml +0 -0
  170. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/__init__.py +0 -0
  171. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/_utils.py +0 -0
  172. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/adapter.py +0 -0
  173. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/tests/test_worker.py +0 -0
  174. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/README.md +0 -0
  175. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/src/by_framework_history_byclaw/__init__.py +0 -0
  176. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/README.md +0 -0
  177. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/pyproject.toml +0 -0
  178. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/src/by_framework_history_postgres/__init__.py +0 -0
  179. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/src/by_framework_history_postgres/postgres.py +0 -0
  180. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/tests/test_postgres_history_storage.py +0 -0
  181. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/README.md +0 -0
  182. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/__init__.py +0 -0
  183. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/worker.py +0 -0
  184. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_utils.py +0 -0
  185. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/README.md +0 -0
  186. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/tests/test_langfuse_import.py +0 -0
  187. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/README.md +0 -0
  188. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/src/by_framework_trace_phoenix/__init__.py +0 -0
  189. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/tests/test_phoenix_import.py +0 -0
  190. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/pylintrc +0 -0
  191. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/__main__.py +0 -0
  192. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/byai_client.py +0 -0
  193. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/__init__.py +0 -0
  194. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/config.py +0 -0
  195. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/emitter.py +0 -0
  196. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/exceptions.py +0 -0
  197. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/redis_client.py +0 -0
  198. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/__init__.py +0 -0
  199. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/base.py +0 -0
  200. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/common.py +0 -0
  201. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/execution.py +0 -0
  202. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/http.py +0 -0
  203. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/protocol.py +0 -0
  204. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/registry.py +0 -0
  205. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/__init__.py +0 -0
  206. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/discovery_http_client.py +0 -0
  207. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/generate_message_id.py +0 -0
  208. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/http_client.py +0 -0
  209. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/__init__.py +0 -0
  210. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_execution_tracking.py +0 -0
  211. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_message_processing.py +0 -0
  212. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/app.py +0 -0
  213. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/byai_context.py +0 -0
  214. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/byai_worker.py +0 -0
  215. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/heartbeat.py +0 -0
  216. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/processor.py +0 -0
  217. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/sandbox/__init__.py +0 -0
  218. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/sandbox/hook_sandbox.py +0 -0
  219. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/client/__init__.py +0 -0
  220. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/__init__.py +0 -0
  221. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_config.py +0 -0
  222. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_exceptions.py +0 -0
  223. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_redis_client.py +0 -0
  224. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/conftest.py +0 -0
  225. {by_framework-0.2.2.dev0/tests/core → by_framework-0.2.2.dev2/tests/integration}/__init__.py +0 -0
  226. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_ask_user_flow.py +0 -0
  227. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_callback_flow.py +0 -0
  228. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_scatter_gather.py +0 -0
  229. {by_framework-0.2.2.dev0/tests/core/protocol → by_framework-0.2.2.dev2/tests/plugin}/__init__.py +0 -0
  230. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_discovery.py +0 -0
  231. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_improvements.py +0 -0
  232. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_registry.py +0 -0
  233. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_system.py +0 -0
  234. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client.py +0 -0
  235. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client_download.py +0 -0
  236. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client_upload.py +0 -0
  237. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_http_client.py +0 -0
  238. {by_framework-0.2.2.dev0/tests/core/runtime/history → by_framework-0.2.2.dev2/tests/worker}/__init__.py +0 -0
  239. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_app.py +0 -0
  240. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_byai_worker.py +0 -0
  241. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_control_handling.py +0 -0
  242. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_emitter.py +0 -0
  243. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_heartbeat.py +0 -0
  244. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_message_processing.py +0 -0
  245. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_processor.py +0 -0
  246. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_sandbox.py +0 -0
  247. {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_workspace.py +0 -0
@@ -3,6 +3,7 @@ __pycache__/
3
3
  *.py[cod]
4
4
  *$py.class
5
5
  *.so
6
+ .ruff_cache/
6
7
  .Python
7
8
  build/
8
9
  develop-eggs/
@@ -66,3 +67,9 @@ Thumbs.db
66
67
  *gateway-sdk.log*
67
68
  .claude/settings.local.json
68
69
  .claude/settings.json
70
+
71
+ core
72
+
73
+ .coderfleet-uploads/
74
+
75
+ .claude/skills
@@ -65,9 +65,11 @@ Plugins can implement: `on_worker_startup`, `on_worker_shutdown`, `on_task_start
65
65
 
66
66
  ### Redis Key Patterns
67
67
 
68
- - `queue:ctrl:{agent_type}` - Control stream for agent commands
69
- - `queue:data:stream` - Data stream for events/chunks
70
- - `worker:active:{worker_id}` - Worker heartbeat registration
68
+ - `byai_gateway:ctrl:agent_type:{agent_type}` Control stream; competitive consume per agent type
69
+ - `byai_gateway:ctrl:worker:{worker_id}` Direct per-worker routing
70
+ - `byai_gateway:session:{session_id}:data_stream` — Session-scoped output events
71
+ - `byai_gateway:registry:worker:online:{worker_id}` — Heartbeat TTL key
72
+ - `byai_gateway:task_group:{group_id}` — Scatter-gather group tracker
71
73
 
72
74
  ## Test Structure
73
75
 
@@ -82,6 +82,10 @@ lint-changed:
82
82
 
83
83
  test:
84
84
  @set -e; for project in $(PROJECTS); do \
85
+ if ! find "$$project/tests" -type f \( -name 'test_*.py' -o -name '*_test.py' \) -print -quit 2>/dev/null | grep -q .; then \
86
+ echo "==> Skipping $$project (no test files)"; \
87
+ continue; \
88
+ fi; \
85
89
  echo "==> Testing $$project"; \
86
90
  (cd $$project && uv run --extra dev pytest); \
87
91
  done
@@ -1,3 +1,27 @@
1
+ Metadata-Version: 2.4
2
+ Name: by-framework
3
+ Version: 0.2.2.dev2
4
+ Summary: 分布式 Agent 调度框架
5
+ License-File: LICENSE
6
+ Requires-Python: >=3.12
7
+ Requires-Dist: dill>=0.4.1
8
+ Requires-Dist: httpx>=0.28.1
9
+ Requires-Dist: redis>=7.0.0
10
+ Requires-Dist: typing-extensions>=4.0.0
11
+ Provides-Extra: dev
12
+ Requires-Dist: isort>=5.13.0; extra == 'dev'
13
+ Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
14
+ Requires-Dist: pyink>=24.0.0; extra == 'dev'
15
+ Requires-Dist: pylint>=3.0.0; extra == 'dev'
16
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
17
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
18
+ Requires-Dist: ruff>=0.3.0; extra == 'dev'
19
+ Provides-Extra: observability
20
+ Requires-Dist: opentelemetry-api>=1.25.0; extra == 'observability'
21
+ Requires-Dist: opentelemetry-sdk>=1.25.0; extra == 'observability'
22
+ Requires-Dist: prometheus-client>=0.20.0; extra == 'observability'
23
+ Description-Content-Type: text/markdown
24
+
1
25
  # by-framework
2
26
 
3
27
  <div align="center">
@@ -608,11 +632,39 @@ import logging
608
632
  setup_logging(level=logging.INFO, use_json=True) # JSON for log aggregation
609
633
  ```
610
634
 
635
+ ### Observability Dashboard
636
+
637
+ Serve the built-in dashboard to inspect worker health, agent health, execution
638
+ state counts, recent executions, Redis stream queue depth, consumer-group
639
+ pending/lag, failure details, routing decisions, derived alerts, and segmented
640
+ queue/run/end-to-end task latency:
641
+
642
+ ```bash
643
+ uv run --package by-framework-dashboard by-framework-dashboard --host 127.0.0.1 --port 8765
644
+ ```
645
+
646
+ Open `http://127.0.0.1:8765/`. For a local UI preview without Redis, open
647
+ `http://127.0.0.1:8765/?demo=1`. Prometheus-style metrics are available at
648
+ `http://127.0.0.1:8765/metrics`, and the dashboard keeps short in-memory trend
649
+ history at `http://127.0.0.1:8765/api/history`. The UI uses split polling
650
+ endpoints (`/api/workers`, `/api/executions`, `/api/queues`, `/api/history`)
651
+ instead of polling the full `/api/snapshot` endpoint on every refresh. Runtime
652
+ self-check data is exposed at `/api/health`, shown in the toolbar, and exported
653
+ through `/metrics`.
654
+ Alert thresholds can be tuned with `--queue-backlog-threshold`,
655
+ `--delivery-pending-threshold`, `--consumer-pending-threshold`, and
656
+ `--failed-execution-threshold`.
657
+
658
+ The dashboard frontend is built with React/Vite under
659
+ `libs/by-framework-dashboard/frontend`; its production build is packaged in
660
+ `libs/by-framework-dashboard/src/by_framework_dashboard/static`. See
661
+ `libs/by-framework-dashboard/README.md` for dashboard-specific runbook details.
662
+
611
663
  ---
612
664
 
613
665
  ## Roadmap
614
666
 
615
- - [ ] Observability dashboard for Worker health and task streams
667
+ - [x] Observability dashboard for Worker health and task streams
616
668
  - [ ] WASM-based sandbox for stronger execution isolation
617
669
  - [ ] Enhanced LangGraph multi-agent orchestration adapter
618
670
 
@@ -1,23 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: by-framework
3
- Version: 0.2.2.dev0
4
- Summary: 分布式 Agent 调度框架
5
- License-File: LICENSE
6
- Requires-Python: >=3.12
7
- Requires-Dist: dill>=0.4.1
8
- Requires-Dist: httpx>=0.28.1
9
- Requires-Dist: redis>=7.0.0
10
- Requires-Dist: typing-extensions>=4.0.0
11
- Provides-Extra: dev
12
- Requires-Dist: isort>=5.13.0; extra == 'dev'
13
- Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
14
- Requires-Dist: pyink>=24.0.0; extra == 'dev'
15
- Requires-Dist: pylint>=3.0.0; extra == 'dev'
16
- Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
17
- Requires-Dist: pytest>=8.0.0; extra == 'dev'
18
- Requires-Dist: ruff>=0.3.0; extra == 'dev'
19
- Description-Content-Type: text/markdown
20
-
21
1
  # by-framework
22
2
 
23
3
  <div align="center">
@@ -628,11 +608,39 @@ import logging
628
608
  setup_logging(level=logging.INFO, use_json=True) # JSON for log aggregation
629
609
  ```
630
610
 
611
+ ### Observability Dashboard
612
+
613
+ Serve the built-in dashboard to inspect worker health, agent health, execution
614
+ state counts, recent executions, Redis stream queue depth, consumer-group
615
+ pending/lag, failure details, routing decisions, derived alerts, and segmented
616
+ queue/run/end-to-end task latency:
617
+
618
+ ```bash
619
+ uv run --package by-framework-dashboard by-framework-dashboard --host 127.0.0.1 --port 8765
620
+ ```
621
+
622
+ Open `http://127.0.0.1:8765/`. For a local UI preview without Redis, open
623
+ `http://127.0.0.1:8765/?demo=1`. Prometheus-style metrics are available at
624
+ `http://127.0.0.1:8765/metrics`, and the dashboard keeps short in-memory trend
625
+ history at `http://127.0.0.1:8765/api/history`. The UI uses split polling
626
+ endpoints (`/api/workers`, `/api/executions`, `/api/queues`, `/api/history`)
627
+ instead of polling the full `/api/snapshot` endpoint on every refresh. Runtime
628
+ self-check data is exposed at `/api/health`, shown in the toolbar, and exported
629
+ through `/metrics`.
630
+ Alert thresholds can be tuned with `--queue-backlog-threshold`,
631
+ `--delivery-pending-threshold`, `--consumer-pending-threshold`, and
632
+ `--failed-execution-threshold`.
633
+
634
+ The dashboard frontend is built with React/Vite under
635
+ `libs/by-framework-dashboard/frontend`; its production build is packaged in
636
+ `libs/by-framework-dashboard/src/by_framework_dashboard/static`. See
637
+ `libs/by-framework-dashboard/README.md` for dashboard-specific runbook details.
638
+
631
639
  ---
632
640
 
633
641
  ## Roadmap
634
642
 
635
- - [ ] Observability dashboard for Worker health and task streams
643
+ - [x] Observability dashboard for Worker health and task streams
636
644
  - [ ] WASM-based sandbox for stronger execution isolation
637
645
  - [ ] Enhanced LangGraph multi-agent orchestration adapter
638
646
 
@@ -608,11 +608,35 @@ import logging
608
608
  setup_logging(level=logging.INFO, use_json=True) # JSON 格式便于日志聚合
609
609
  ```
610
610
 
611
+ ### 可观测仪表盘
612
+
613
+ 启动内置仪表盘,用于查看 Worker 健康、Agent 健康、执行状态计数、最近执行、Redis Stream 队列深度、consumer group pending/lag、失败详情、路由决策、派生告警,以及排队/执行/端到端分段延迟:
614
+
615
+ ```bash
616
+ uv run --package by-framework-dashboard by-framework-dashboard --host 127.0.0.1 --port 8765
617
+ ```
618
+
619
+ 打开 `http://127.0.0.1:8765/`。如果本地没有 Redis,可打开
620
+ `http://127.0.0.1:8765/?demo=1` 预览 UI。Prometheus 风格指标位于
621
+ `http://127.0.0.1:8765/metrics`,仪表盘也会在
622
+ `http://127.0.0.1:8765/api/history` 保留短期内存趋势历史。UI 使用拆分后的
623
+ 轮询接口(`/api/workers`、`/api/executions`、`/api/queues`、`/api/history`),
624
+ 不会每次刷新都请求完整的 `/api/snapshot`。运行时自检数据位于
625
+ `/api/health`,会显示在工具栏中,也会通过 `/metrics` 导出。
626
+ 告警阈值可通过 `--queue-backlog-threshold`、
627
+ `--delivery-pending-threshold`、`--consumer-pending-threshold` 和
628
+ `--failed-execution-threshold` 调整。
629
+
630
+ 仪表盘前端使用 React/Vite 构建,源码位于
631
+ `libs/by-framework-dashboard/frontend`,生产构建产物打包在
632
+ `libs/by-framework-dashboard/src/by_framework_dashboard/static`。更多运行说明见
633
+ `libs/by-framework-dashboard/README.md`。
634
+
611
635
  ---
612
636
 
613
637
  ## 路线图
614
638
 
615
- - [ ] Worker 健康与任务流的可观测仪表盘
639
+ - [x] Worker 健康与任务流的可观测仪表盘
616
640
  - [ ] 基于 WASM 的沙箱,实现更强隔离
617
641
  - [ ] 增强的 LangGraph 多 Agent 编排适配器
618
642