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.
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.gitignore +7 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CLAUDE.md +5 -3
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/Makefile +4 -0
- by_framework-0.2.2.dev0/README.md → by_framework-0.2.2.dev2/PKG-INFO +53 -1
- by_framework-0.2.2.dev0/PKG-INFO → by_framework-0.2.2.dev2/README.md +29 -21
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/README_zh.md +25 -1
- by_framework-0.2.2.dev2/docs/by-framework-trace-change-usage.html +627 -0
- by_framework-0.2.2.dev2/docs/by-framework-trace-complete-guide.html +1280 -0
- by_framework-0.2.2.dev2/docs/plans/2026-06-10-trace-metrics-correlation.md +77 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/worker.py +4 -2
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/README.md +151 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/index.html +12 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/package-lock.json +1696 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/package.json +18 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/src/main.jsx +1351 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/src/styles.css +1214 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/frontend/vite.config.js +18 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/pyproject.toml +37 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/__init__.py +5 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/adapters.py +42 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/dashboard.py +1222 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/__init__.py +1 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/app.js +115 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/index.html +13 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/src/by_framework_dashboard/static/styles.css +1 -0
- by_framework-0.2.2.dev2/libs/by-framework-dashboard/tests/test_dashboard_server.py +436 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/pyproject.toml +1 -1
- {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
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/tests/test_byclaw_history.py +20 -4
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/pyproject.toml +1 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/_utils.py +0 -11
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/adapter.py +245 -7
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/tools.py +37 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_adapter.py +145 -5
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_tools.py +51 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/pyproject.toml +1 -1
- by_framework-0.2.2.dev2/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/__init__.py +17 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/langfuse.py +1074 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/pyproject.toml +1 -1
- {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
- by_framework-0.2.2.dev2/libs/by-framework-trace-phoenix/tests/test_phoenix_plugin.py +159 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/pyproject.toml +28 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/__init__.py +7 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/client.py +204 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/merger.py +187 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/models.py +21 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/src/by_framework_trace_query/redis_source.py +130 -0
- by_framework-0.2.2.dev2/libs/by-framework-trace-query/tests/test_trace_query_sdk.py +893 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/pyproject.toml +12 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/scripts/python_quality.sh +2 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/__init__.py +2 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/__init__.py +2 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/client.py +406 -5
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/constants.py +30 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/logger.py +71 -10
- by_framework-0.2.2.dev2/src/by_framework/metrics/__init__.py +218 -0
- by_framework-0.2.2.dev2/src/by_framework/metrics/read_client.py +257 -0
- by_framework-0.2.2.dev2/src/by_framework/metrics/snapshot.py +2294 -0
- by_framework-0.2.2.dev2/src/by_framework/trace/__init__.py +55 -0
- by_framework-0.2.2.dev2/src/by_framework/trace/external_trace.py +148 -0
- by_framework-0.2.2.dev2/src/by_framework/trace/span_recorder.py +901 -0
- by_framework-0.2.2.dev2/src/by_framework/trace/trace_schema.py +329 -0
- by_framework-0.2.2.dev2/src/by_framework/trace/trace_writer.py +157 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_control_handling.py +30 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/context.py +433 -17
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/runner.py +258 -10
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/worker.py +135 -11
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/client/test_client.py +389 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_logger.py +13 -13
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_logger_integration.py +28 -5
- by_framework-0.2.2.dev2/tests/metrics/test_metrics.py +84 -0
- by_framework-0.2.2.dev2/tests/metrics/test_read_client.py +101 -0
- by_framework-0.2.2.dev2/tests/metrics/test_snapshot.py +839 -0
- by_framework-0.2.2.dev2/tests/plugin/test_langfuse_plugin.py +951 -0
- by_framework-0.2.2.dev2/tests/trace/test_external_trace.py +134 -0
- by_framework-0.2.2.dev2/tests/trace/test_logger_correlation.py +122 -0
- by_framework-0.2.2.dev2/tests/trace/test_otel_exporter.py +254 -0
- by_framework-0.2.2.dev2/tests/trace/test_span_recorder.py +231 -0
- by_framework-0.2.2.dev2/tests/worker/test_context.py +817 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_gateway_worker.py +79 -5
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_runner.py +199 -1
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/uv.lock +87 -6
- by_framework-0.2.2.dev0/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/__init__.py +0 -5
- by_framework-0.2.2.dev0/libs/by-framework-trace-langfuse/src/by_framework_trace_langfuse/langfuse.py +0 -406
- by_framework-0.2.2.dev0/src/by_framework/core/__init__.py +0 -95
- by_framework-0.2.2.dev0/src/by_framework/core/availability.py +0 -495
- by_framework-0.2.2.dev0/src/by_framework/core/delivery_gate.py +0 -60
- by_framework-0.2.2.dev0/src/by_framework/core/discovery.py +0 -359
- by_framework-0.2.2.dev0/src/by_framework/core/extensions/__init__.py +0 -35
- by_framework-0.2.2.dev0/src/by_framework/core/extensions/agent_config.py +0 -64
- by_framework-0.2.2.dev0/src/by_framework/core/extensions/plugin.py +0 -282
- by_framework-0.2.2.dev0/src/by_framework/core/extensions/registry.py +0 -653
- by_framework-0.2.2.dev0/src/by_framework/core/extensions/trace_provider.py +0 -20
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/__init__.py +0 -133
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/action_type.py +0 -33
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/agent_state.py +0 -78
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_codec.py +0 -101
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_command.py +0 -53
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/byai_types.py +0 -7
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/commands.py +0 -285
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/content_codec.py +0 -17
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/content_type.py +0 -38
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/data_message.py +0 -45
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/data_shapes.py +0 -83
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/event_type.py +0 -34
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/events.py +0 -69
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/message.py +0 -99
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/message_header.py +0 -68
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/responses.py +0 -94
- by_framework-0.2.2.dev0/src/by_framework/core/protocol/results.py +0 -149
- by_framework-0.2.2.dev0/src/by_framework/core/registry.py +0 -1025
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/__init__.py +0 -29
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/agent_config_manager.py +0 -283
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/agent_runtime_state.py +0 -75
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_manager.py +0 -437
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_paths.py +0 -76
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/file_permissions.py +0 -71
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/__init__.py +0 -15
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/base.py +0 -140
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/filestore/local.py +0 -321
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/__init__.py +0 -10
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/base.py +0 -57
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/history_manager.py +0 -55
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/history/in_memory.py +0 -58
- by_framework-0.2.2.dev0/src/by_framework/core/runtime/session_manager.py +0 -118
- by_framework-0.2.2.dev0/src/by_framework/core/wakeup_controller.py +0 -151
- by_framework-0.2.2.dev0/src/by_framework/core/workspace.py +0 -126
- by_framework-0.2.2.dev0/tests/core/protocol/test_byai_codec.py +0 -105
- by_framework-0.2.2.dev0/tests/core/protocol/test_command_wire.py +0 -21
- by_framework-0.2.2.dev0/tests/core/protocol/test_protocol.py +0 -246
- by_framework-0.2.2.dev0/tests/core/protocol/test_results.py +0 -68
- by_framework-0.2.2.dev0/tests/core/runtime/history/test_history_persistence.py +0 -181
- by_framework-0.2.2.dev0/tests/core/runtime/test_file_access_context.py +0 -48
- by_framework-0.2.2.dev0/tests/core/runtime/test_file_manager_default_storage.py +0 -222
- by_framework-0.2.2.dev0/tests/core/runtime/test_file_paths.py +0 -28
- by_framework-0.2.2.dev0/tests/core/runtime/test_file_permissions.py +0 -85
- by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_collection.py +0 -41
- by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_mutation.py +0 -32
- by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_read.py +0 -50
- by_framework-0.2.2.dev0/tests/core/runtime/test_filestore_local_search.py +0 -61
- by_framework-0.2.2.dev0/tests/core/test_availability.py +0 -606
- by_framework-0.2.2.dev0/tests/core/test_discovery.py +0 -204
- by_framework-0.2.2.dev0/tests/core/test_registry.py +0 -933
- by_framework-0.2.2.dev0/tests/integration/__init__.py +0 -0
- by_framework-0.2.2.dev0/tests/plugin/__init__.py +0 -0
- by_framework-0.2.2.dev0/tests/plugin/test_langfuse_plugin.py +0 -258
- by_framework-0.2.2.dev0/tests/worker/__init__.py +0 -0
- by_framework-0.2.2.dev0/tests/worker/test_context.py +0 -322
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/RELEASING.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/ci.yml +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/publish.yml +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.github/workflows/stale.yml +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/.pre-commit-config.yaml +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/AGENTS.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CHANGELOG.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CODE_OF_CONDUCT.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/CONTRIBUTING.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/LICENSE +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/SECURITY.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/assets/img/architecture_en.png +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/assets/img/architecture_zh.png +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/autoformat.sh +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/docs/README.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/docs/plans/2026-05-15-worker-task-state-stats.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/README.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/pyproject.toml +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/_utils.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/src/by_framework_adk/adapter.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-adk/tests/test_worker.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-byclaw/README.md +0 -0
- {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
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/README.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-history-postgres/pyproject.toml +0 -0
- {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
- {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
- {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
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/README.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/src/by_framework_langgraph/worker.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-langgraph/tests/test_utils.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/README.md +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-langfuse/tests/test_langfuse_import.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/README.md +0 -0
- {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
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/libs/by-framework-trace-phoenix/tests/test_phoenix_import.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/pylintrc +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/__main__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/client/byai_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/config.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/emitter.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/exceptions.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/common/redis_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/base.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/common.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/execution.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/http.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/protocol.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/errors/registry.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/discovery_http_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/generate_message_id.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/util/http_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_execution_tracking.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/_message_processing.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/app.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/byai_context.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/byai_worker.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/heartbeat.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/processor.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/sandbox/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/src/by_framework/worker/sandbox/hook_sandbox.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/client/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_config.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_exceptions.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/common/test_redis_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/conftest.py +0 -0
- {by_framework-0.2.2.dev0/tests/core → by_framework-0.2.2.dev2/tests/integration}/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_ask_user_flow.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_callback_flow.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/integration/test_scatter_gather.py +0 -0
- {by_framework-0.2.2.dev0/tests/core/protocol → by_framework-0.2.2.dev2/tests/plugin}/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_discovery.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_improvements.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_registry.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/plugin/test_plugin_system.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client_download.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_discovery_http_client_upload.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/util/test_http_client.py +0 -0
- {by_framework-0.2.2.dev0/tests/core/runtime/history → by_framework-0.2.2.dev2/tests/worker}/__init__.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_app.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_byai_worker.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_control_handling.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_emitter.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_heartbeat.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_message_processing.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_processor.py +0 -0
- {by_framework-0.2.2.dev0 → by_framework-0.2.2.dev2}/tests/worker/test_sandbox.py +0 -0
- {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
|
-
- `
|
|
69
|
-
- `
|
|
70
|
-
- `
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
639
|
+
- [x] Worker 健康与任务流的可观测仪表盘
|
|
616
640
|
- [ ] 基于 WASM 的沙箱,实现更强隔离
|
|
617
641
|
- [ ] 增强的 LangGraph 多 Agent 编排适配器
|
|
618
642
|
|