by-framework 0.2.2.dev6__tar.gz → 0.2.2.dev7__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 (264) hide show
  1. by_framework-0.2.2.dev7/.dockerignore +18 -0
  2. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/workflows/publish.yml +38 -0
  3. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/PKG-INFO +1 -1
  4. by_framework-0.2.2.dev7/libs/by-framework-dashboard/Dockerfile +40 -0
  5. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/README.md +23 -0
  6. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/pyproject.toml +1 -1
  7. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/pyproject.toml +1 -1
  8. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-langfuse/pyproject.toml +1 -1
  9. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/pyproject.toml +1 -1
  10. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/config.py +15 -1
  11. by_framework-0.2.2.dev7/src/by_framework/common/constants.py +542 -0
  12. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/emitter.py +10 -0
  13. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/redis_client.py +49 -9
  14. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/discovery.py +1 -1
  15. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/content_type.py +1 -0
  16. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/registry.py +27 -10
  17. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/metrics/snapshot.py +76 -80
  18. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/trace/span_recorder.py +40 -25
  19. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/trace/trace_writer.py +34 -20
  20. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/app.py +56 -14
  21. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/context.py +4 -0
  22. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/heartbeat.py +26 -0
  23. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/runner.py +42 -3
  24. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/common/test_config.py +41 -0
  25. by_framework-0.2.2.dev7/tests/common/test_constants.py +506 -0
  26. by_framework-0.2.2.dev7/tests/common/test_redis_client.py +159 -0
  27. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/test_registry.py +53 -6
  28. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/metrics/test_snapshot.py +107 -0
  29. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/trace/test_span_recorder.py +44 -0
  30. by_framework-0.2.2.dev7/tests/trace/test_trace_writer.py +87 -0
  31. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_app.py +171 -10
  32. by_framework-0.2.2.dev7/tests/worker/test_fetch_messages.py +133 -0
  33. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_heartbeat.py +29 -0
  34. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/uv.lock +4 -4
  35. by_framework-0.2.2.dev6/src/by_framework/common/constants.py +0 -296
  36. by_framework-0.2.2.dev6/tests/common/test_redis_client.py +0 -64
  37. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  38. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  39. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  40. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/RELEASING.md +0 -0
  41. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/workflows/ci.yml +0 -0
  42. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.github/workflows/stale.yml +0 -0
  43. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.gitignore +0 -0
  44. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/.pre-commit-config.yaml +0 -0
  45. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/AGENTS.md +0 -0
  46. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/CHANGELOG.md +0 -0
  47. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/CLAUDE.md +0 -0
  48. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/CODE_OF_CONDUCT.md +0 -0
  49. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/CONTRIBUTING.md +0 -0
  50. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/LICENSE +0 -0
  51. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/Makefile +0 -0
  52. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/README.md +0 -0
  53. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/README_zh.md +0 -0
  54. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/SECURITY.md +0 -0
  55. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/assets/img/architecture_en.png +0 -0
  56. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/assets/img/architecture_zh.png +0 -0
  57. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/autoformat.sh +0 -0
  58. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/README.md +0 -0
  59. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/by-framework-trace-change-usage.html +0 -0
  60. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/by-framework-trace-complete-guide.html +0 -0
  61. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/plans/2026-05-15-worker-task-state-stats.md +0 -0
  62. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/plans/2026-06-10-trace-metrics-correlation.md +0 -0
  63. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/docs/worker_management.html +0 -0
  64. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/README.md +0 -0
  65. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/pyproject.toml +0 -0
  66. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/src/by_framework_adk/__init__.py +0 -0
  67. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/src/by_framework_adk/_utils.py +0 -0
  68. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/src/by_framework_adk/adapter.py +0 -0
  69. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/src/by_framework_adk/worker.py +0 -0
  70. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-adk/tests/test_worker.py +0 -0
  71. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/index.html +0 -0
  72. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/package-lock.json +0 -0
  73. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/package.json +0 -0
  74. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/src/main.jsx +0 -0
  75. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/src/styles.css +0 -0
  76. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/frontend/vite.config.js +0 -0
  77. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/__init__.py +0 -0
  78. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/adapters.py +0 -0
  79. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/dashboard.py +0 -0
  80. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/static/__init__.py +0 -0
  81. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/static/app.js +0 -0
  82. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/static/index.html +0 -0
  83. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/src/by_framework_dashboard/static/styles.css +0 -0
  84. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-dashboard/tests/test_dashboard_server.py +0 -0
  85. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-byclaw/README.md +0 -0
  86. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-byclaw/pyproject.toml +0 -0
  87. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-byclaw/src/by_framework_history_byclaw/__init__.py +0 -0
  88. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-byclaw/src/by_framework_history_byclaw/byclaw_history.py +0 -0
  89. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-byclaw/tests/test_byclaw_history.py +0 -0
  90. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-postgres/README.md +0 -0
  91. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-postgres/pyproject.toml +0 -0
  92. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-postgres/src/by_framework_history_postgres/__init__.py +0 -0
  93. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-postgres/src/by_framework_history_postgres/postgres.py +0 -0
  94. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-history-postgres/tests/test_postgres_history_storage.py +0 -0
  95. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/README.md +0 -0
  96. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/src/by_framework_langgraph/__init__.py +0 -0
  97. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/src/by_framework_langgraph/_utils.py +0 -0
  98. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/src/by_framework_langgraph/adapter.py +0 -0
  99. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/src/by_framework_langgraph/tools.py +0 -0
  100. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/src/by_framework_langgraph/worker.py +0 -0
  101. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/tests/test_adapter.py +0 -0
  102. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/tests/test_tools.py +0 -0
  103. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-langgraph/tests/test_utils.py +0 -0
  104. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-langfuse/README.md +0 -0
  105. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/__init__.py +0 -0
  106. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/langfuse.py +0 -0
  107. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-langfuse/tests/test_langfuse_import.py +0 -0
  108. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/README.md +0 -0
  109. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/pyproject.toml +0 -0
  110. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/src/by_framework_trace_phoenix/__init__.py +0 -0
  111. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/src/by_framework_trace_phoenix/phoenix.py +0 -0
  112. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/tests/test_phoenix_import.py +0 -0
  113. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-phoenix/tests/test_phoenix_plugin.py +0 -0
  114. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/pyproject.toml +0 -0
  115. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/src/by_framework_trace_query/__init__.py +0 -0
  116. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/src/by_framework_trace_query/client.py +0 -0
  117. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/src/by_framework_trace_query/merger.py +0 -0
  118. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/src/by_framework_trace_query/models.py +0 -0
  119. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/src/by_framework_trace_query/redis_source.py +0 -0
  120. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/libs/by-framework-trace-query/tests/test_trace_query_sdk.py +0 -0
  121. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/pylintrc +0 -0
  122. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/scripts/python_quality.sh +0 -0
  123. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/__init__.py +0 -0
  124. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/__main__.py +0 -0
  125. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/admin/__init__.py +0 -0
  126. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/admin/cli.py +0 -0
  127. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/admin/worker_manager.py +0 -0
  128. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/client/__init__.py +0 -0
  129. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/client/byai_client.py +0 -0
  130. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/client/client.py +0 -0
  131. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/__init__.py +0 -0
  132. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/exceptions.py +0 -0
  133. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/common/logger.py +0 -0
  134. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/__init__.py +0 -0
  135. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/availability.py +0 -0
  136. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/delivery_gate.py +0 -0
  137. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/__init__.py +0 -0
  138. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/agent_config.py +0 -0
  139. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/agent_config_audit.py +0 -0
  140. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/plugin.py +0 -0
  141. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/registry.py +0 -0
  142. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/extensions/trace_provider.py +0 -0
  143. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/__init__.py +0 -0
  144. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/action_type.py +0 -0
  145. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/agent_state.py +0 -0
  146. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/byai_codec.py +0 -0
  147. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/byai_command.py +0 -0
  148. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/byai_types.py +0 -0
  149. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/commands.py +0 -0
  150. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/content_codec.py +0 -0
  151. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/data_message.py +0 -0
  152. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/data_shapes.py +0 -0
  153. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/event_type.py +0 -0
  154. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/events.py +0 -0
  155. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/message.py +0 -0
  156. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/message_header.py +0 -0
  157. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/responses.py +0 -0
  158. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/protocol/results.py +0 -0
  159. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/__init__.py +0 -0
  160. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/agent_config_manager.py +0 -0
  161. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/agent_runtime_state.py +0 -0
  162. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/file_manager.py +0 -0
  163. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/file_paths.py +0 -0
  164. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/file_permissions.py +0 -0
  165. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/filestore/__init__.py +0 -0
  166. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/filestore/base.py +0 -0
  167. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/filestore/local.py +0 -0
  168. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/history/__init__.py +0 -0
  169. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/history/base.py +0 -0
  170. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/history/history_manager.py +0 -0
  171. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/history/in_memory.py +0 -0
  172. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/runtime/session_manager.py +0 -0
  173. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/wakeup_controller.py +0 -0
  174. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/core/workspace.py +0 -0
  175. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/__init__.py +0 -0
  176. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/base.py +0 -0
  177. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/common.py +0 -0
  178. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/execution.py +0 -0
  179. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/http.py +0 -0
  180. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/protocol.py +0 -0
  181. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/errors/registry.py +0 -0
  182. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/metrics/__init__.py +0 -0
  183. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/metrics/catalog.py +0 -0
  184. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/metrics/collector.py +0 -0
  185. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/metrics/read_client.py +0 -0
  186. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/trace/__init__.py +0 -0
  187. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/trace/external_trace.py +0 -0
  188. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/trace/trace_schema.py +0 -0
  189. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/util/__init__.py +0 -0
  190. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/util/discovery_http_client.py +0 -0
  191. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/util/generate_message_id.py +0 -0
  192. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/util/http_client.py +0 -0
  193. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/__init__.py +0 -0
  194. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/_control_handling.py +0 -0
  195. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/_execution_tracking.py +0 -0
  196. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/_message_processing.py +0 -0
  197. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/byai_context.py +0 -0
  198. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/byai_worker.py +0 -0
  199. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/processor.py +0 -0
  200. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/sandbox/__init__.py +0 -0
  201. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/sandbox/hook_sandbox.py +0 -0
  202. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/src/by_framework/worker/worker.py +0 -0
  203. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/admin/__init__.py +0 -0
  204. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/admin/test_cli.py +0 -0
  205. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/client/__init__.py +0 -0
  206. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/client/test_client.py +0 -0
  207. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/common/__init__.py +0 -0
  208. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/common/test_exceptions.py +0 -0
  209. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/common/test_logger.py +0 -0
  210. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/conftest.py +0 -0
  211. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/__init__.py +0 -0
  212. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/protocol/__init__.py +0 -0
  213. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/protocol/test_byai_codec.py +0 -0
  214. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/protocol/test_command_wire.py +0 -0
  215. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/protocol/test_protocol.py +0 -0
  216. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/protocol/test_results.py +0 -0
  217. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/history/__init__.py +0 -0
  218. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/history/test_history_persistence.py +0 -0
  219. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_file_access_context.py +0 -0
  220. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_file_manager_default_storage.py +0 -0
  221. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_file_paths.py +0 -0
  222. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_file_permissions.py +0 -0
  223. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_filestore_local_collection.py +0 -0
  224. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_filestore_local_mutation.py +0 -0
  225. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_filestore_local_read.py +0 -0
  226. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/runtime/test_filestore_local_search.py +0 -0
  227. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/test_agent_config_audit.py +0 -0
  228. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/test_availability.py +0 -0
  229. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/test_discovery.py +0 -0
  230. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/core/test_worker_manager.py +0 -0
  231. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/integration/__init__.py +0 -0
  232. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/integration/test_ask_user_flow.py +0 -0
  233. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/integration/test_callback_flow.py +0 -0
  234. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/integration/test_logger_integration.py +0 -0
  235. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/integration/test_scatter_gather.py +0 -0
  236. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/metrics/test_catalog.py +0 -0
  237. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/metrics/test_collector.py +0 -0
  238. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/metrics/test_metrics.py +0 -0
  239. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/metrics/test_read_client.py +0 -0
  240. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/__init__.py +0 -0
  241. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/test_langfuse_plugin.py +0 -0
  242. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/test_plugin_discovery.py +0 -0
  243. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/test_plugin_improvements.py +0 -0
  244. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/test_plugin_registry.py +0 -0
  245. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/plugin/test_plugin_system.py +0 -0
  246. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/trace/test_external_trace.py +0 -0
  247. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/trace/test_logger_correlation.py +0 -0
  248. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/trace/test_otel_exporter.py +0 -0
  249. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/util/test_discovery_http_client.py +0 -0
  250. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/util/test_discovery_http_client_download.py +0 -0
  251. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/util/test_discovery_http_client_upload.py +0 -0
  252. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/util/test_http_client.py +0 -0
  253. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/__init__.py +0 -0
  254. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_admin_control_handling.py +0 -0
  255. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_byai_worker.py +0 -0
  256. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_context.py +0 -0
  257. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_control_handling.py +0 -0
  258. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_emitter.py +0 -0
  259. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_gateway_worker.py +0 -0
  260. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_message_processing.py +0 -0
  261. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_processor.py +0 -0
  262. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_runner.py +0 -0
  263. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_sandbox.py +0 -0
  264. {by_framework-0.2.2.dev6 → by_framework-0.2.2.dev7}/tests/worker/test_workspace.py +0 -0
@@ -0,0 +1,18 @@
1
+ .git
2
+ .github
3
+ .pytest_cache
4
+ .ruff_cache
5
+ .mypy_cache
6
+ **/__pycache__
7
+ **/*.py[cod]
8
+ **/.pytest_cache
9
+ **/.ruff_cache
10
+ **/.mypy_cache
11
+ **/node_modules
12
+ **/dist
13
+ **/build
14
+ **/*.egg-info
15
+ .venv
16
+ venv
17
+ htmlcov
18
+ by-framework.log
@@ -15,6 +15,7 @@ on:
15
15
 
16
16
  permissions:
17
17
  contents: write
18
+ packages: write
18
19
  pull-requests: write
19
20
 
20
21
  jobs:
@@ -153,6 +154,43 @@ jobs:
153
154
  with:
154
155
  packages-dir: dist/
155
156
 
157
+ publish-dashboard-image:
158
+ runs-on: ubuntu-latest
159
+ needs:
160
+ - resolve-package
161
+ - build
162
+ - publish
163
+ if: needs.resolve-package.outputs.package_name == 'by-framework-dashboard'
164
+ permissions:
165
+ contents: read
166
+ packages: write
167
+ steps:
168
+ - uses: actions/checkout@v4
169
+ - name: Resolve image name
170
+ id: image
171
+ shell: bash
172
+ run: |
173
+ echo "name=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/by-framework-dashboard" >> "$GITHUB_OUTPUT"
174
+ - name: Log in to GitHub Container Registry
175
+ uses: docker/login-action@v3
176
+ with:
177
+ registry: ghcr.io
178
+ username: ${{ github.actor }}
179
+ password: ${{ secrets.GITHUB_TOKEN }}
180
+ - name: Build and publish dashboard image
181
+ uses: docker/build-push-action@v6
182
+ with:
183
+ context: .
184
+ file: libs/by-framework-dashboard/Dockerfile
185
+ push: true
186
+ tags: |
187
+ ${{ steps.image.outputs.name }}:${{ needs.resolve-package.outputs.version }}
188
+ ${{ steps.image.outputs.name }}:latest
189
+ labels: |
190
+ org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
191
+ org.opencontainers.image.version=${{ needs.resolve-package.outputs.version }}
192
+ org.opencontainers.image.title=by-framework-dashboard
193
+
156
194
  post-release:
157
195
  runs-on: ubuntu-latest
158
196
  needs:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: by-framework
3
- Version: 0.2.2.dev6
3
+ Version: 0.2.2.dev7
4
4
  Summary: 分布式 Agent 调度框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -0,0 +1,40 @@
1
+ # syntax=docker/dockerfile:1
2
+
3
+ FROM node:22-bookworm-slim AS frontend
4
+
5
+ WORKDIR /app/libs/by-framework-dashboard/frontend
6
+ COPY libs/by-framework-dashboard/frontend/package*.json ./
7
+ RUN npm ci --no-audit --progress=false
8
+ COPY libs/by-framework-dashboard/frontend/ ./
9
+ RUN npm run build
10
+
11
+ FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS runtime
12
+
13
+ ENV PYTHONUNBUFFERED=1 \
14
+ UV_NO_CACHE=1 \
15
+ PATH="/opt/venv/bin:${PATH}"
16
+
17
+ WORKDIR /app
18
+
19
+ COPY pyproject.toml uv.lock README.md ./
20
+ COPY src ./src
21
+ COPY libs/by-framework-dashboard ./libs/by-framework-dashboard
22
+ COPY libs/by-framework-trace-query ./libs/by-framework-trace-query
23
+ COPY --from=frontend /app/libs/by-framework-dashboard/src/by_framework_dashboard/static/ ./libs/by-framework-dashboard/src/by_framework_dashboard/static/
24
+
25
+ RUN uv venv /opt/venv \
26
+ && uv build --wheel --project . --out-dir /tmp/wheels \
27
+ && uv build --wheel --project libs/by-framework-trace-query --out-dir /tmp/wheels \
28
+ && uv build --wheel --project libs/by-framework-dashboard --out-dir /tmp/wheels \
29
+ && uv pip install --python /opt/venv/bin/python \
30
+ /tmp/wheels/by_framework-*.whl \
31
+ /tmp/wheels/by_framework_trace_query-*.whl \
32
+ /tmp/wheels/by_framework_dashboard-*.whl \
33
+ && rm -rf /tmp/wheels
34
+
35
+ EXPOSE 8765
36
+
37
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
38
+ CMD python -c "import json, urllib.request; response = urllib.request.urlopen('http://127.0.0.1:8765/api/health', timeout=3); json.load(response)"
39
+
40
+ CMD ["by-framework-dashboard", "--host", "0.0.0.0", "--port", "8765"]
@@ -19,6 +19,29 @@ Then open:
19
19
  http://127.0.0.1:8765
20
20
  ```
21
21
 
22
+ ## Container Image
23
+
24
+ Dashboard release tags also publish a GHCR image:
25
+
26
+ ```text
27
+ ghcr.io/<owner>/by-framework-dashboard:<version>
28
+ ```
29
+
30
+ For example, pushing `by-framework-dashboard-v0.1.0` builds and publishes:
31
+
32
+ ```text
33
+ ghcr.io/<owner>/by-framework-dashboard:0.1.0
34
+ ghcr.io/<owner>/by-framework-dashboard:latest
35
+ ```
36
+
37
+ To run the image:
38
+
39
+ ```bash
40
+ docker run --rm -p 8765:8765 \
41
+ -e REDIS_HOST=host.docker.internal \
42
+ ghcr.io/<owner>/by-framework-dashboard:0.1.0
43
+ ```
44
+
22
45
  For demo data without a live Redis cluster:
23
46
 
24
47
  ```text
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "by-framework-dashboard"
3
- version = "0.1.0"
3
+ version = "0.1.1.dev0"
4
4
  description = "Dashboard UI and HTTP server for by-framework observability"
5
5
  requires-python = ">=3.12"
6
6
  dependencies = [
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "by-framework-langgraph"
3
- version = "0.0.3.dev3"
3
+ version = "0.0.3.dev4"
4
4
  description = "LangGraph integration for by-framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "by-framework-trace-langfuse"
3
- version = "0.0.3.dev3"
3
+ version = "0.0.3.dev4"
4
4
  description = "Langfuse trace provider for by-framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "by-framework"
3
- version = "0.2.2.dev6"
3
+ version = "0.2.2.dev7"
4
4
  description = "分布式 Agent 调度框架"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -6,7 +6,7 @@ Provides typed configuration loaded from environment variables.
6
6
 
7
7
  import os
8
8
  from dataclasses import dataclass, field
9
- from typing import Optional
9
+ from typing import Literal, Optional
10
10
 
11
11
  from by_framework.common.constants import RedisKeys
12
12
 
@@ -22,6 +22,10 @@ class RedisConfig:
22
22
  username: Optional[str] = None
23
23
  decode_responses: bool = True
24
24
  max_connections: Optional[int] = None
25
+ mode: Literal["standalone", "cluster"] = "standalone"
26
+ cluster_nodes: Optional[list[tuple[str, int]]] = None
27
+ socket_connect_timeout: int = 5
28
+ socket_timeout: int = 10
25
29
 
26
30
  @classmethod
27
31
  def from_env(cls) -> "RedisConfig":
@@ -29,6 +33,14 @@ class RedisConfig:
29
33
  password = os.environ.get("REDIS_PASSWORD", "")
30
34
  username = os.environ.get("REDIS_USERNAME") or None
31
35
  max_connections = os.environ.get("REDIS_MAX_CONNECTIONS")
36
+ mode = os.environ.get("REDIS_MODE", "standalone")
37
+ cluster_nodes_str = os.environ.get("REDIS_CLUSTER_NODES")
38
+ cluster_nodes = None
39
+ if cluster_nodes_str:
40
+ cluster_nodes = []
41
+ for node in cluster_nodes_str.split(","):
42
+ node_host, node_port = node.rsplit(":", 1)
43
+ cluster_nodes.append((node_host, int(node_port)))
32
44
  return cls(
33
45
  host=os.environ.get("REDIS_HOST", "localhost"),
34
46
  port=int(os.environ.get("REDIS_PORT", "6379")),
@@ -36,6 +48,8 @@ class RedisConfig:
36
48
  password=password,
37
49
  username=username,
38
50
  max_connections=int(max_connections) if max_connections else None,
51
+ mode=mode,
52
+ cluster_nodes=cluster_nodes,
39
53
  )
40
54
 
41
55