agentbyte 0.41.0__tar.gz → 0.42.1__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 (371) hide show
  1. {agentbyte-0.41.0 → agentbyte-0.42.1}/.gitignore +3 -0
  2. {agentbyte-0.41.0 → agentbyte-0.42.1}/CHANGELOG.md +53 -0
  3. {agentbyte-0.41.0 → agentbyte-0.42.1}/PKG-INFO +2 -2
  4. {agentbyte-0.41.0 → agentbyte-0.42.1}/README.md +1 -1
  5. {agentbyte-0.41.0 → agentbyte-0.42.1}/pyproject.toml +1 -0
  6. agentbyte-0.42.1/src/agentbyte/__about__.py +2 -0
  7. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/types.py +37 -9
  8. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/orchestrator.py +18 -12
  9. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/execution_trace/collector.py +34 -13
  10. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/__init__.py +2 -0
  11. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/spec.py +31 -0
  12. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/ai.py +10 -8
  13. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/base.py +634 -203
  14. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/handoff.py +17 -7
  15. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/plan.py +69 -11
  16. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/policies.py +18 -1
  17. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/round_robin.py +5 -4
  18. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/streaming.py +4 -5
  19. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/types.py +73 -34
  20. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/execution.py +9 -7
  21. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/server.py +1 -0
  22. agentbyte-0.41.0/src/agentbyte/webui/ui/assets/index-C-wj-OzO.js → agentbyte-0.42.1/src/agentbyte/webui/ui/assets/index-MgF-3P2c.js +1 -1
  23. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/ui/index.html +1 -1
  24. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_phase1_runner_and_targets.py +22 -13
  25. agentbyte-0.42.1/tests/optim/test_description_tunable.py +86 -0
  26. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_ai_orchestrator.py +4 -4
  27. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_base_orchestrator.py +13 -15
  28. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_handoff_orchestrator.py +5 -5
  29. agentbyte-0.42.1/tests/orchestration/test_orchestration_usage_breakdown.py +285 -0
  30. agentbyte-0.42.1/tests/orchestration/test_orchestrator_agent_contract.py +329 -0
  31. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_orchestrator_finalization.py +15 -15
  32. agentbyte-0.42.1/tests/orchestration/test_orchestrator_member_events.py +266 -0
  33. agentbyte-0.42.1/tests/orchestration/test_orchestrator_otel.py +104 -0
  34. agentbyte-0.42.1/tests/orchestration/test_orchestrator_synthesis.py +658 -0
  35. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_plan_orchestrator.py +18 -18
  36. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_round_robin.py +2 -2
  37. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_types.py +83 -44
  38. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_server.py +3 -2
  39. agentbyte-0.41.0/src/agentbyte/__about__.py +0 -2
  40. {agentbyte-0.41.0 → agentbyte-0.42.1}/LICENSE +0 -0
  41. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/__init__.py +0 -0
  42. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/_optional.py +0 -0
  43. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/__init__.py +0 -0
  44. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/agent.py +0 -0
  45. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/agent_as_tool.py +0 -0
  46. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/base.py +0 -0
  47. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/agents/embedding_agent.py +0 -0
  48. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cancellation_token.py +0 -0
  49. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/catalog.py +0 -0
  50. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cli/__init__.py +0 -0
  51. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cli/__main__.py +0 -0
  52. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cli/eval_commands.py +0 -0
  53. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cli/loading.py +0 -0
  54. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/cli/main.py +0 -0
  55. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/compaction/__init__.py +0 -0
  56. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/compaction/counters.py +0 -0
  57. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/compaction/errors.py +0 -0
  58. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/compaction/grouping.py +0 -0
  59. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/compaction/strategies.py +0 -0
  60. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/component.py +0 -0
  61. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/context.py +0 -0
  62. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/context_providers/__init__.py +0 -0
  63. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/context_providers/base.py +0 -0
  64. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/context_providers/skill_tools.py +0 -0
  65. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/context_providers/skills.py +0 -0
  66. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/__init__.py +0 -0
  67. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/_aiosqlite.py +0 -0
  68. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/base.py +0 -0
  69. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/config.py +0 -0
  70. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/importer.py +0 -0
  71. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/json.py +0 -0
  72. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/loader.py +0 -0
  73. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/publish.py +0 -0
  74. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/publish_config.py +0 -0
  75. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/publishers.py +0 -0
  76. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/s3.py +0 -0
  77. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/sources.py +0 -0
  78. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/sqlite.py +0 -0
  79. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/sqlite_db.py +0 -0
  80. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/write_config.py +0 -0
  81. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/dataset/writers.py +0 -0
  82. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/entity.py +0 -0
  83. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/__init__.py +0 -0
  84. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/base.py +0 -0
  85. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/__init__.py +0 -0
  86. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/decorator.py +0 -0
  87. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/keyword.py +0 -0
  88. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/local.py +0 -0
  89. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/process.py +0 -0
  90. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/tool.py +0 -0
  91. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/checks/types.py +0 -0
  92. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/comparison.py +0 -0
  93. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/eval_dataset.py +0 -0
  94. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/__init__.py +0 -0
  95. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/conformance.py +0 -0
  96. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/errors.py +0 -0
  97. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/models.py +0 -0
  98. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/recorder.py +0 -0
  99. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/sql.py +0 -0
  100. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/sqlite.py +0 -0
  101. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/store.py +0 -0
  102. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/history/transitions.py +0 -0
  103. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/__init__.py +0 -0
  104. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/base.py +0 -0
  105. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/composite.py +0 -0
  106. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/llm.py +0 -0
  107. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/pairwise.py +0 -0
  108. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/reference.py +0 -0
  109. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/trajectory.py +0 -0
  110. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/judges/validation.py +0 -0
  111. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/pairwise.py +0 -0
  112. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/report.py +0 -0
  113. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/runner.py +0 -0
  114. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/splitting.py +0 -0
  115. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/__init__.py +0 -0
  116. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/agent.py +0 -0
  117. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/model.py +0 -0
  118. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/multi_turn.py +0 -0
  119. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/runtime.py +0 -0
  120. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/targets/workflow.py +0 -0
  121. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/types.py +0 -0
  122. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/__init__.py +0 -0
  123. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/coordinator.py +0 -0
  124. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/jobs.py +0 -0
  125. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/smoke.py +0 -0
  126. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
  127. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/suite.py +0 -0
  128. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/eval/workbench/verdict.py +0 -0
  129. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/execution_trace/__init__.py +0 -0
  130. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/execution_trace/models.py +0 -0
  131. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/__init__.py +0 -0
  132. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/_retry_observability.py +0 -0
  133. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/auth.py +0 -0
  134. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure/__init__.py +0 -0
  135. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure/auth.py +0 -0
  136. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure/chat.py +0 -0
  137. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure/embedding.py +0 -0
  138. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure/settings.py +0 -0
  139. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure_openai.py +0 -0
  140. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  141. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/base.py +0 -0
  142. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/embeddings_base.py +0 -0
  143. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/openai/__init__.py +0 -0
  144. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/openai/chat.py +0 -0
  145. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/openai/embedding.py +0 -0
  146. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/openai/settings.py +0 -0
  147. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/openai_embedding.py +0 -0
  148. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/pricing.py +0 -0
  149. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/retry_policy.py +0 -0
  150. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/settings.py +0 -0
  151. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/llm/types.py +0 -0
  152. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/logger.py +0 -0
  153. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/memory/__init__.py +0 -0
  154. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/memory/base.py +0 -0
  155. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/messages.py +0 -0
  156. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/__init__.py +0 -0
  157. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/base.py +0 -0
  158. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/otel.py +0 -0
  159. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/retry.py +0 -0
  160. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/sql_usage.py +0 -0
  161. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/middleware/usage_logger.py +0 -0
  162. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/notebook.py +0 -0
  163. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/base.py +0 -0
  164. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/config.py +0 -0
  165. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/gepa.py +0 -0
  166. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/mipro.py +0 -0
  167. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/pareto.py +0 -0
  168. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/reflective.py +0 -0
  169. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/optim/trace.py +0 -0
  170. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/orchestration/__init__.py +0 -0
  171. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/__init__.py +0 -0
  172. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/agents.py +0 -0
  173. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/clients.py +0 -0
  174. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instruction_registry.py +0 -0
  175. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  176. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  177. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  178. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  179. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  180. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/orchestration.py +0 -0
  181. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  182. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
  183. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
  184. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
  185. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
  186. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/presets/workflow.py +0 -0
  187. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/session_store.py +0 -0
  188. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/__init__.py +0 -0
  189. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/base.py +0 -0
  190. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/resources.py +0 -0
  191. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/scripts.py +0 -0
  192. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/sources.py +0 -0
  193. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/skills/validation.py +0 -0
  194. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/__init__.py +0 -0
  195. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/base.py +0 -0
  196. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/cancellation.py +0 -0
  197. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/composite.py +0 -0
  198. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/consecutive_agent.py +0 -0
  199. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/external.py +0 -0
  200. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/function_call.py +0 -0
  201. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/handoff.py +0 -0
  202. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/max_message.py +0 -0
  203. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/predicate.py +0 -0
  204. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/source.py +0 -0
  205. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/text_mention.py +0 -0
  206. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/timeout.py +0 -0
  207. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/termination/token_usage.py +0 -0
  208. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/__init__.py +0 -0
  209. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/base.py +0 -0
  210. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/coding_tools.py +0 -0
  211. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/core_tools.py +0 -0
  212. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/decorator.py +0 -0
  213. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/memory_tool.py +0 -0
  214. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/tools/research_tools.py +0 -0
  215. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/__init__.py +0 -0
  216. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/discovery.py +0 -0
  217. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/eval_routes.py +0 -0
  218. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/models.py +0 -0
  219. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/registry.py +0 -0
  220. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/session_store.py +0 -0
  221. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/sessions.py +0 -0
  222. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/ui/assets/index-DW8IDODJ.css +0 -0
  223. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/webui/ui/vite.svg +0 -0
  224. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/__init__.py +0 -0
  225. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/agent.py +0 -0
  226. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/__init__.py +0 -0
  227. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  228. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  229. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/models.py +0 -0
  230. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/runner.py +0 -0
  231. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/core/workflow.py +0 -0
  232. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/defaults.py +0 -0
  233. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/errors.py +0 -0
  234. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/loader.py +0 -0
  235. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/schema.py +0 -0
  236. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/schema_utils.py +0 -0
  237. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
  238. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/__init__.py +0 -0
  239. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/agent.py +0 -0
  240. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/echo.py +0 -0
  241. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/function.py +0 -0
  242. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/http.py +0 -0
  243. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/step.py +0 -0
  244. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  245. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/steps/transform.py +0 -0
  246. {agentbyte-0.41.0 → agentbyte-0.42.1}/src/agentbyte/workflow/visualizer.py +0 -0
  247. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_as_tool.py +0 -0
  248. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_basic.py +0 -0
  249. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_context_providers.py +0 -0
  250. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_error_response.py +0 -0
  251. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_event_types.py +0 -0
  252. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_memory_integration.py +0 -0
  253. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_middleware_integration.py +0 -0
  254. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_response_accessors.py +0 -0
  255. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_retry_middleware.py +0 -0
  256. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_agent_stream_events.py +0 -0
  257. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_embedding_agent.py +0 -0
  258. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_tool_approval.py +0 -0
  259. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_tool_batch_resolution.py +0 -0
  260. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/agents/test_tool_metadata.py +0 -0
  261. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/cli/test_loading.py +0 -0
  262. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/cli/test_registry_check.py +0 -0
  263. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/compaction/test_compaction.py +0 -0
  264. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/context_providers/__init__.py +0 -0
  265. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/context_providers/test_skill_tools.py +0 -0
  266. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/context_providers/test_skills_provider.py +0 -0
  267. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/fake_s3.py +0 -0
  268. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/test_dataset_exit.py +0 -0
  269. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/test_loader.py +0 -0
  270. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/test_multi_table.py +0 -0
  271. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/test_publish.py +0 -0
  272. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/dataset/test_sqlite_db.py +0 -0
  273. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_eval_dataset.py +0 -0
  274. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_eval_history.py +0 -0
  275. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_eval_history_backends.py +0 -0
  276. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_eval_jobs.py +0 -0
  277. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_eval_workbench.py +0 -0
  278. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_execution_trajectories.py +0 -0
  279. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_multi_turn.py +0 -0
  280. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_pairwise.py +0 -0
  281. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  282. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_score_integrity.py +0 -0
  283. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_splitting.py +0 -0
  284. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/eval/test_types_and_judges.py +0 -0
  285. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/examples/test_compaction_webapp.py +0 -0
  286. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_azure_client.py +0 -0
  287. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_azure_embedding_client.py +0 -0
  288. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_llm_types.py +0 -0
  289. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_openai_client.py +0 -0
  290. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_openai_embedding_client.py +0 -0
  291. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_pricing.py +0 -0
  292. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_retry_observability.py +0 -0
  293. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_retry_policy_api.py +0 -0
  294. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/llm/test_retryable_error_substrings.py +0 -0
  295. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/memory/test_memory.py +0 -0
  296. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_context_compaction.py +0 -0
  297. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_deduplicate_tool_result.py +0 -0
  298. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_middleware_chain.py +0 -0
  299. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_otel.py +0 -0
  300. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_retry_middleware.py +0 -0
  301. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_sql_usage.py +0 -0
  302. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/middleware/test_usage_logger.py +0 -0
  303. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/__init__.py +0 -0
  304. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_base.py +0 -0
  305. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_base_integration.py +0 -0
  306. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_config.py +0 -0
  307. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_gepa.py +0 -0
  308. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_mipro.py +0 -0
  309. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_orchestrator_optim.py +0 -0
  310. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_pareto.py +0 -0
  311. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_reflective.py +0 -0
  312. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_score_integrity.py +0 -0
  313. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_spec.py +0 -0
  314. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/optim/test_trace.py +0 -0
  315. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
  316. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_agents.py +0 -0
  317. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_clients.py +0 -0
  318. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_instruction_registry.py +0 -0
  319. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_orchestration.py +0 -0
  320. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_streaming.py +0 -0
  321. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/presets/test_workflow.py +0 -0
  322. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/skills/__init__.py +0 -0
  323. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/skills/test_base.py +0 -0
  324. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/skills/test_resources.py +0 -0
  325. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/skills/test_scripts.py +0 -0
  326. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/skills/test_sources.py +0 -0
  327. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_base.py +0 -0
  328. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_cancellation.py +0 -0
  329. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_composite.py +0 -0
  330. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_consecutive_agent.py +0 -0
  331. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_external.py +0 -0
  332. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_function_call.py +0 -0
  333. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_handoff.py +0 -0
  334. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_max_message.py +0 -0
  335. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_predicate.py +0 -0
  336. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_source.py +0 -0
  337. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_text_mention.py +0 -0
  338. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_timeout.py +0 -0
  339. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/termination/test_token_usage.py +0 -0
  340. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_cancellation_token.py +0 -0
  341. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_context.py +0 -0
  342. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_logger.py +0 -0
  343. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_messages.py +0 -0
  344. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_optional_extras.py +0 -0
  345. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_package_api.py +0 -0
  346. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_session_store.py +0 -0
  347. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/test_vanilla_chunker.py +0 -0
  348. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/tools/test_coding_tools.py +0 -0
  349. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/tools/test_memory_tool.py +0 -0
  350. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/tools/test_research_tools.py +0 -0
  351. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/tools/test_tools.py +0 -0
  352. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/__init__.py +0 -0
  353. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/helpers.py +0 -0
  354. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_eval_routes.py +0 -0
  355. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_execution.py +0 -0
  356. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_package_api.py +0 -0
  357. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_registry.py +0 -0
  358. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_sessions.py +0 -0
  359. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/webui/test_workflow_streaming.py +0 -0
  360. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/recovery_worker.py +0 -0
  361. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_agent_step_imports.py +0 -0
  362. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_checkpoint.py +0 -0
  363. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_subworkflow_step.py +0 -0
  364. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_agent.py +0 -0
  365. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_class.py +0 -0
  366. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_models.py +0 -0
  367. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_reliability.py +0 -0
  368. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_runner.py +0 -0
  369. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_schema.py +0 -0
  370. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_steps.py +0 -0
  371. {agentbyte-0.41.0 → agentbyte-0.42.1}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -71,3 +71,6 @@ data/flatfiles/*
71
71
  *.sqlite-wal
72
72
  *.sqlite-shm
73
73
  *.writer.lock
74
+
75
+ # marimo local session cache
76
+ __marimo__/
@@ -6,6 +6,59 @@ The format follows Keep a Changelog principles and semantic versioning.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.42.1] - 2026-10-05
10
+
11
+ ### Fixed
12
+
13
+ - Orchestrator member event forwarding (spec 0066 A4): a `workflow.as_agent()` member's
14
+ `WorkflowEvent`/`StepEvent` items aren't `BaseEvent` instances, so `run_stream(verbose=True)`
15
+ silently dropped them instead of forwarding — a nested agent step's tool-call events wrapped
16
+ inside a `StepEvent` never reached the UI. Any member item that isn't a recognized `Message`,
17
+ `AgentResponse`, `BaseEvent`, or `ChatCompletionChunk` is now forwarded when `verbose=True`.
18
+
19
+ ## [0.42.0] - 2026-10-04
20
+
21
+ ### Changed (breaking)
22
+
23
+ - Orchestrators share the agent run contract (spec 0066 Part B). `BaseOrchestrator.run` and
24
+ `run_stream` take the agent parameter order `(task=None, context=None, cancellation_token=None,
25
+ ...)` and return the same `AgentResponse` as agents. Team-only detail is on the new optional
26
+ `AgentResponse.orchestration` (`OrchestrationDetail`). `OrchestrationResponse` is removed.
27
+ Migration:
28
+
29
+ | Before | After |
30
+ |---|---|
31
+ | `isinstance(x, OrchestrationResponse)` | `isinstance(x, AgentResponse) and x.orchestration is not None` |
32
+ | `result.final_result` | `result.final_content` (or `result.orchestration.final_result`) |
33
+ | `result.final_structured_result` | `result.structured_output` |
34
+ | `result.stop_message` / `pattern_metadata` / `usage_breakdown` | `result.orchestration.<same>` |
35
+ | `result.messages` | unchanged (`context.messages`) |
36
+ | `run(task, token, context)` positional | `run(task, context, token)` |
37
+
38
+ - A team response sets `source` (orchestrator name), `finish_reason` (mapped from the stop source:
39
+ `stop`, `max_iterations`, `max_iterations_finalized`, `approval_needed`, `error`, `cancelled`),
40
+ `error` (exception, synthesis failure, fallback), and `context` (the caller's context, updated in
41
+ place on every terminal path). `final_message` is the selected answer, not necessarily the last
42
+ message.
43
+ - Cancelling a team now returns a response with `finish_reason="cancelled"`, as for agents, instead
44
+ of re-raising `CancelledError` after the final item.
45
+ - `task=None` runs a team on the trailing user message(s) already in `context`.
46
+
47
+ ### Added
48
+
49
+ - Orchestrator member event streaming (spec 0066 Part A): with `verbose=True`, member tool, model and
50
+ approval events are forwarded with `source` attribution; orchestration events gain `event_type`,
51
+ `turn_kind`, and per-turn `usage`; `run_stream` accepts `stream_tokens`.
52
+ - Reserved final synthesis and full-run usage breakdown for orchestrators (spec 0065), and the
53
+ built-in `DescriptionTunable`.
54
+
55
+ ### Fixed
56
+
57
+ - `PlanBasedOrchestrator` planned the oldest message of a multi-turn session instead of the current
58
+ task.
59
+ - With `AGENTBYTE_ENABLE_OTEL` on, a failing orchestration was re-run untraced, duplicating turns
60
+ and cost.
61
+
9
62
  ## [0.41.0] - 2026-10-04
10
63
 
11
64
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentbyte
3
- Version: 0.41.0
3
+ Version: 0.42.1
4
4
  Summary: A toolkit for designing multiagent systems
5
5
  Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -77,7 +77,7 @@ Description-Content-Type: text/markdown
77
77
 
78
78
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
79
79
 
80
- Current release: **0.40.0**
80
+ Current release: **0.42.1**
81
81
 
82
82
  ## Building an Agent
83
83
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
4
4
 
5
- Current release: **0.40.0**
5
+ Current release: **0.42.1**
6
6
 
7
7
  ## Building an Agent
8
8
 
@@ -98,6 +98,7 @@ test = [
98
98
  dev = [
99
99
  "fastexcel>=0.19.0",
100
100
  "ipykernel>=7.1.0",
101
+ "marimo>=0.25.1",
101
102
  "nbclient>=0.10.4",
102
103
  "nbformat>=5.10.4",
103
104
  "polars>=1.40.0",
@@ -0,0 +1,2 @@
1
+ __version__ = "0.42.1"
2
+ VERSION = __version__
@@ -9,7 +9,7 @@ from pydantic import BaseModel, ConfigDict, Field
9
9
 
10
10
  from agentbyte.context import AgentContext, ToolApprovalRequest
11
11
  from agentbyte.messages import AssistantMessage, Message, Usage
12
- from agentbyte.types import ToolResult
12
+ from agentbyte.types import OrchestrationDetail, ToolResult
13
13
 
14
14
 
15
15
  class BaseEvent(BaseModel):
@@ -193,12 +193,17 @@ class AgentErrorDetail(BaseModel):
193
193
 
194
194
 
195
195
  class AgentResponse(BaseModel):
196
- """Final response payload for a completed agent run."""
196
+ """Final response payload for a completed agent or orchestrator (team) run.
197
+
198
+ Agents and orchestrators return this same type, so a consumer handles both
199
+ with one code path. ``orchestration`` carries team-only detail and is
200
+ ``None`` for a single agent.
201
+ """
197
202
 
198
203
  model_config = ConfigDict(frozen=False)
199
204
 
200
205
  context: AgentContext = Field(..., description="Final execution context")
201
- source: str = Field(..., description="Agent name")
206
+ source: str = Field(..., description="Agent or orchestrator name")
202
207
  finish_reason: str = Field(
203
208
  ...,
204
209
  description="Why the agent stopped: stop, approval_needed, max_iterations, max_iterations_finalized, tool_executed, error, cancelled",
@@ -212,6 +217,10 @@ class AgentResponse(BaseModel):
212
217
  default_factory=datetime.now,
213
218
  description="When the response was created",
214
219
  )
220
+ orchestration: Optional[OrchestrationDetail] = Field(
221
+ default=None,
222
+ description="Team-only detail; set when an orchestrator produced this response",
223
+ )
215
224
 
216
225
  @property
217
226
  def messages(self) -> List[Message]:
@@ -220,8 +229,13 @@ class AgentResponse(BaseModel):
220
229
 
221
230
  @property
222
231
  def needs_approval(self) -> bool:
223
- """Check if response is waiting for approvals."""
224
- return self.context.waiting_for_approval
232
+ """Check if response is waiting for approvals.
233
+
234
+ A team stops with ``finish_reason="approval_needed"`` when a member waits on
235
+ tool approval; the member's pending tools are in
236
+ ``orchestration.stop_message.metadata``.
237
+ """
238
+ return self.context.waiting_for_approval or self.finish_reason == "approval_needed"
225
239
 
226
240
  @property
227
241
  def approval_requests(self) -> List[ToolApprovalRequest]:
@@ -234,20 +248,34 @@ class AgentResponse(BaseModel):
234
248
 
235
249
  When the run failed, the error text is not in ``context.messages`` (it is
236
250
  deliberately kept out of the replayed history), so it is surfaced from
237
- ``error`` here for display and logging.
251
+ ``error`` here for display and logging. For a team it is the answer chosen
252
+ by the orchestrator (``orchestration.final_result``).
238
253
  """
239
254
  if self.error is not None:
240
255
  return f"Error: {self.error.message}"
256
+ if self.orchestration is not None:
257
+ return self.orchestration.final_result
241
258
  if not self.context.messages:
242
259
  return ""
243
260
  return self.context.messages[-1].content
244
261
 
245
262
  @property
246
263
  def final_message(self) -> AssistantMessage | None:
247
- """Final assistant message if the run ended with one."""
248
- if not self.context.messages:
264
+ """Final assistant message if the run ended with one.
265
+
266
+ For a team this is the message the orchestrator selected as the answer
267
+ (e.g. the synthesizer's), which is not necessarily the last message.
268
+ """
269
+ messages = self.context.messages
270
+ if self.orchestration is not None:
271
+ index = self.orchestration.final_message_index
272
+ if index is None or not 0 <= index < len(messages):
273
+ return None
274
+ message = messages[index]
275
+ elif not messages:
249
276
  return None
250
- message = self.context.messages[-1]
277
+ else:
278
+ message = messages[-1]
251
279
  if isinstance(message, AssistantMessage):
252
280
  return message
253
281
  return None
@@ -47,19 +47,25 @@ class OrchestratorEvalTarget(BaseEvalTarget):
47
47
  task.input, cancellation_token=cancellation_token
48
48
  )
49
49
  messages, usage = list(response.messages), response.usage
50
- status = normalize_status(response.stop_message.source)
50
+ status = normalize_status(response.finish_reason)
51
+ detail = response.orchestration
51
52
  if status == "failed":
52
- error = response.stop_message.content
53
- metadata.update(
54
- pattern=response.pattern_metadata.get(
55
- "pattern", type(orchestrator).__name__
56
- ),
57
- iterations=response.pattern_metadata.get(
58
- "iterations_completed", 0
59
- ),
60
- stop_reason=response.stop_message.content,
61
- stop_source=response.stop_message.source,
62
- )
53
+ error = (
54
+ detail.stop_message.content
55
+ if detail is not None
56
+ else response.final_content
57
+ )
58
+ if detail is not None:
59
+ metadata.update(
60
+ pattern=detail.pattern_metadata.get(
61
+ "pattern", detail.pattern
62
+ ),
63
+ iterations=detail.pattern_metadata.get(
64
+ "iterations_completed", 0
65
+ ),
66
+ stop_reason=detail.stop_message.content,
67
+ stop_source=detail.stop_message.source,
68
+ )
63
69
  if not collector.trace.spans:
64
70
  collector.incomplete(
65
71
  "Custom orchestrator exposes response evidence only"
@@ -41,6 +41,8 @@ def normalize_status(reason: str) -> ExecutionStatus:
41
41
  "MaxIterations": "incomplete",
42
42
  "Error": "failed",
43
43
  "Exception": "failed",
44
+ "SynthesisFailed": "failed",
45
+ "ApprovalRequired": "suspended",
44
46
  }
45
47
  return statuses.get(reason, "completed")
46
48
 
@@ -105,16 +107,12 @@ class TraceCollector:
105
107
  if span.kind == "agent":
106
108
  span.usage = span.usage + self.trace.aggregate_usage(span.id)
107
109
  span.error = item.error.message if item.error is not None else None
110
+ orchestration = getattr(item, "orchestration", None)
111
+ if orchestration is not None:
112
+ span.metadata["stop_reason"] = snapshot(orchestration.stop_message)
108
113
  if self.capture_payloads:
109
114
  span.output = item.final_content
110
115
  return
111
- if hasattr(item, "stop_message"):
112
- span.status = normalize_status(item.stop_message.source)
113
- span.metadata["stop_reason"] = snapshot(item.stop_message)
114
- span.usage = item.usage
115
- if self.capture_payloads:
116
- span.output = item.final_result
117
- return
118
116
  if hasattr(item, "event_type") or isinstance(item, OrchestrationEvent):
119
117
  if self.capture_payloads and span.kind != "workflow_agent":
120
118
  self.trace.events.append(
@@ -243,6 +241,10 @@ def trace_stream(kind: str, *, accounting: bool = False) -> Callable:
243
241
  if workflow is not None:
244
242
  name = workflow.id
245
243
  span = collector.start(kind, name)
244
+ turn_kind = bound.arguments.get("turn_kind")
245
+ if turn_kind:
246
+ # Orchestration turn role, e.g. "worker" or "synthesis" (spec 0065)
247
+ span.metadata["turn_kind"] = turn_kind
246
248
  started = time.perf_counter()
247
249
  if collector.capture_payloads:
248
250
  span.input = snapshot(
@@ -261,7 +263,13 @@ def trace_stream(kind: str, *, accounting: bool = False) -> Callable:
261
263
  pt = _parent.set(span.id)
262
264
  try:
263
265
  item = await anext(stream)
264
- collector.observe(span, item)
266
+ is_forwarded_member_event = (
267
+ kind == "orchestrator"
268
+ and hasattr(item, "event_type")
269
+ and getattr(item, "source", "orchestrator") != "orchestrator"
270
+ )
271
+ if not is_forwarded_member_event:
272
+ collector.observe(span, item)
265
273
  if kind == "invocation" and hasattr(item, "finish_reason"):
266
274
  if any(
267
275
  s.parent_id == span.id for s in collector.trace.spans
@@ -349,12 +357,25 @@ def trace_stream(kind: str, *, accounting: bool = False) -> Callable:
349
357
 
350
358
  @trace_stream("invocation")
351
359
  async def capture_agent_stream(
352
- agent: Any, task: Any, *, cancellation_token=None, verbose: bool = False
360
+ agent: Any,
361
+ task: Any,
362
+ *,
363
+ cancellation_token=None,
364
+ verbose: bool = False,
365
+ turn_kind: str | None = None,
366
+ stream_tokens: bool = False,
353
367
  ) -> AsyncIterator[Any]:
354
- """Capture custom and native agents uniformly inside orchestration streams."""
355
- stream = agent.run_stream(
356
- task, cancellation_token=cancellation_token, verbose=verbose
357
- )
368
+ """Capture custom and native agents uniformly inside orchestration streams.
369
+
370
+ ``turn_kind`` is recorded on the span only; it is not passed to the agent.
371
+ """
372
+ stream_kwargs: dict[str, Any] = {
373
+ "cancellation_token": cancellation_token,
374
+ "verbose": verbose,
375
+ }
376
+ if stream_tokens:
377
+ stream_kwargs["stream_tokens"] = True
378
+ stream = agent.run_stream(task, **stream_kwargs)
358
379
  try:
359
380
  async for item in stream:
360
381
  yield item
@@ -27,6 +27,7 @@ from .reflective import EditOut, ReflectionOut, ReflectiveOptimizer
27
27
  from .spec import (
28
28
  CatalogEntry,
29
29
  Component,
30
+ DescriptionTunable,
30
31
  Edit,
31
32
  InstructionTunable,
32
33
  MemberOptimizationSpec,
@@ -59,6 +60,7 @@ __all__ = [
59
60
  "Edit",
60
61
  "Tunable",
61
62
  "InstructionTunable",
63
+ "DescriptionTunable",
62
64
  "SkillTunable",
63
65
  "SkillDescriptionTunable",
64
66
  "SkillTriggersTunable",
@@ -114,6 +114,36 @@ class InstructionTunable(Tunable):
114
114
  return config.model_copy(update={"instructions": rewrites[-1].value})
115
115
 
116
116
 
117
+ class DescriptionTunable(Tunable):
118
+ """Rewrite the agent's description. Free-form, single component.
119
+
120
+ Plan-based and AI-driven orchestrators route on member descriptions, not
121
+ instructions, so this is the component a routing judge can observe. Opt-in:
122
+ not part of the default ``OptimizationSpec`` tunables.
123
+ """
124
+
125
+ kind = "description"
126
+ ops = frozenset({Operation.REWRITE})
127
+ mode = ProposalMode.GENERATIVE
128
+
129
+ def read(self, config: AgentConfig) -> list[Component]:
130
+ return [
131
+ Component(
132
+ name="description",
133
+ kind=self.kind,
134
+ value=config.description,
135
+ ops=self.ops,
136
+ mode=self.mode,
137
+ )
138
+ ]
139
+
140
+ def apply(self, config: AgentConfig, edits: list[Edit]) -> AgentConfig:
141
+ rewrites = [e for e in edits if e.op is Operation.REWRITE and e.value]
142
+ if not rewrites:
143
+ return config
144
+ return config.model_copy(update={"description": rewrites[-1].value})
145
+
146
+
117
147
  class SkillTunable(Tunable):
118
148
  """Add / rewrite / remove named skills. Free-form (generative).
119
149
 
@@ -379,6 +409,7 @@ __all__ = [
379
409
  "Edit",
380
410
  "Tunable",
381
411
  "InstructionTunable",
412
+ "DescriptionTunable",
382
413
  "SkillTunable",
383
414
  "SkillDescriptionTunable",
384
415
  "SkillTriggersTunable",
@@ -120,9 +120,9 @@ class AIOrchestrator(BaseOrchestrator):
120
120
  return self._last_selection_reason
121
121
  return super()._get_selection_reason(selected_agent)
122
122
 
123
- def _get_additional_usage_stats(self) -> list[Usage]:
123
+ def _get_orchestrator_usage_stats(self) -> list[tuple[str, Usage]]:
124
124
  """Include selector LLM calls in orchestration usage aggregation."""
125
- return list(self._selector_usage_stats)
125
+ return [("selector", usage) for usage in self._selector_usage_stats]
126
126
 
127
127
  def _reset_for_run(self) -> None:
128
128
  """Reset AI-driven runtime state for new run."""
@@ -151,7 +151,7 @@ class AIOrchestrator(BaseOrchestrator):
151
151
 
152
152
  def _build_selection_prompt(self) -> str:
153
153
  """Build LLM prompt for choosing the next best agent."""
154
- agent_names = ", ".join(agent.name for agent in self.agents)
154
+ agent_names = ", ".join(agent.name for agent in self._worker_agents)
155
155
  capabilities = self.get_agent_capabilities_summary()
156
156
  conversation_context = self._format_conversation_for_selection()
157
157
 
@@ -228,13 +228,14 @@ class AIOrchestrator(BaseOrchestrator):
228
228
  return json.dumps(payload, indent=2)
229
229
 
230
230
  def _find_agent_by_name(self, agent_name: str) -> Optional[BaseAgent]:
231
- """Resolve agent by exact name first, then case-insensitive match."""
232
- for agent in self.agents:
231
+ """Resolve a worker agent by exact name first, then case-insensitive match."""
232
+ workers = self._worker_agents
233
+ for agent in workers:
233
234
  if agent.name == agent_name:
234
235
  return agent
235
236
 
236
237
  target = agent_name.casefold()
237
- for agent in self.agents:
238
+ for agent in workers:
238
239
  if agent.name.casefold() == target:
239
240
  return agent
240
241
 
@@ -242,8 +243,9 @@ class AIOrchestrator(BaseOrchestrator):
242
243
 
243
244
  def _select_next_by_fallback(self, reason: str) -> BaseAgent:
244
245
  """Round-robin fallback selection used when AI selection fails."""
245
- agent = self.agents[self._fallback_agent_index]
246
- self._fallback_agent_index = (self._fallback_agent_index + 1) % len(self.agents)
246
+ workers = self._worker_agents
247
+ agent = workers[self._fallback_agent_index]
248
+ self._fallback_agent_index = (self._fallback_agent_index + 1) % len(workers)
247
249
  self._last_selection_reason = (
248
250
  f"{reason}. Fallback round-robin selected '{agent.name}'"
249
251
  )