agentbyte 0.20.3__tar.gz → 0.20.5__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 (351) hide show
  1. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-agent/SKILL.md +64 -2
  2. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +11 -6
  3. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-handoff-orchestration/SKILL.md +10 -7
  4. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-middleware/SKILL.md +32 -2
  5. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md +10 -9
  6. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +11 -6
  7. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-workflow/SKILL.md +65 -1
  8. agentbyte-0.20.5/.github/skills/webui-smoke-test/SKILL.md +314 -0
  9. {agentbyte-0.20.3 → agentbyte-0.20.5}/CHANGELOG.md +26 -0
  10. {agentbyte-0.20.3 → agentbyte-0.20.5}/PKG-INFO +3 -2
  11. {agentbyte-0.20.3 → agentbyte-0.20.5}/README.md +2 -1
  12. agentbyte-0.20.5/src/agentbyte/__about__.py +2 -0
  13. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/__init__.py +10 -0
  14. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/agent.py +1 -1
  15. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/agent_as_tool.py +1 -1
  16. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure/chat.py +4 -0
  17. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai/chat.py +4 -0
  18. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/__init__.py +12 -0
  19. agentbyte-0.20.5/src/agentbyte/presets/streaming.py +325 -0
  20. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/agent.py +33 -10
  21. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_as_tool.py +22 -1
  22. agentbyte-0.20.5/tests/presets/test_streaming.py +127 -0
  23. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_package_api.py +15 -0
  24. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_agent.py +107 -1
  25. agentbyte-0.20.3/src/agentbyte/__about__.py +0 -2
  26. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-coding-tools/SKILL.md +0 -0
  27. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
  28. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-eval/SKILL.md +0 -0
  29. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
  30. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
  31. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
  32. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
  33. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
  34. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/agentbyte-research-tools/SKILL.md +0 -0
  35. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/git-multi-remote-push/SKILL.md +0 -0
  36. {agentbyte-0.20.3 → agentbyte-0.20.5}/.github/skills/skill-authoring/SKILL.md +0 -0
  37. {agentbyte-0.20.3 → agentbyte-0.20.5}/.gitignore +0 -0
  38. {agentbyte-0.20.3 → agentbyte-0.20.5}/LICENSE +0 -0
  39. {agentbyte-0.20.3 → agentbyte-0.20.5}/pyproject.toml +0 -0
  40. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/__init__.py +0 -0
  41. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/base.py +0 -0
  42. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/embedding_agent.py +0 -0
  43. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/agents/types.py +0 -0
  44. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/cancellation_token.py +0 -0
  45. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/catalog.py +0 -0
  46. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/cli/__init__.py +0 -0
  47. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/cli/main.py +0 -0
  48. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/component.py +0 -0
  49. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/context.py +0 -0
  50. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/context_providers/__init__.py +0 -0
  51. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/context_providers/base.py +0 -0
  52. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/context_providers/skill_tools.py +0 -0
  53. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/context_providers/skills.py +0 -0
  54. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/__init__.py +0 -0
  55. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/base.py +0 -0
  56. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/config.py +0 -0
  57. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/json.py +0 -0
  58. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/loader.py +0 -0
  59. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/publish.py +0 -0
  60. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/publish_config.py +0 -0
  61. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/publishers.py +0 -0
  62. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/sources.py +0 -0
  63. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/dataset/sqlite.py +0 -0
  64. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/entity.py +0 -0
  65. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/__init__.py +0 -0
  66. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/base.py +0 -0
  67. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/__init__.py +0 -0
  68. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/decorator.py +0 -0
  69. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/keyword.py +0 -0
  70. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/local.py +0 -0
  71. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/tool.py +0 -0
  72. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/checks/types.py +0 -0
  73. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/comparison.py +0 -0
  74. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/eval_dataset.py +0 -0
  75. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/__init__.py +0 -0
  76. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/base.py +0 -0
  77. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/composite.py +0 -0
  78. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/llm.py +0 -0
  79. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/pairwise.py +0 -0
  80. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/judges/reference.py +0 -0
  81. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/pairwise.py +0 -0
  82. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/report.py +0 -0
  83. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/runner.py +0 -0
  84. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/targets/__init__.py +0 -0
  85. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/targets/agent.py +0 -0
  86. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/targets/model.py +0 -0
  87. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  88. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/eval/types.py +0 -0
  89. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/__init__.py +0 -0
  90. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/_retry_observability.py +0 -0
  91. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/auth.py +0 -0
  92. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure/__init__.py +0 -0
  93. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure/auth.py +0 -0
  94. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure/embedding.py +0 -0
  95. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure/settings.py +0 -0
  96. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai.py +0 -0
  97. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  98. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/base.py +0 -0
  99. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/embeddings_base.py +0 -0
  100. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai/__init__.py +0 -0
  101. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai/embedding.py +0 -0
  102. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai/settings.py +0 -0
  103. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai.py +0 -0
  104. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/openai_embedding.py +0 -0
  105. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/pricing.py +0 -0
  106. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/retry_policy.py +0 -0
  107. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/settings.py +0 -0
  108. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/llm/types.py +0 -0
  109. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/logger.py +0 -0
  110. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/memory/__init__.py +0 -0
  111. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/memory/base.py +0 -0
  112. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/messages.py +0 -0
  113. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/microwebui/__init__.py +0 -0
  114. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/microwebui/server.py +0 -0
  115. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/microwebui/ui/index.html +0 -0
  116. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/__init__.py +0 -0
  117. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/base.py +0 -0
  118. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/otel.py +0 -0
  119. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/retry.py +0 -0
  120. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/sql_usage.py +0 -0
  121. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/middleware/usage_logger.py +0 -0
  122. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/notebook.py +0 -0
  123. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/__init__.py +0 -0
  124. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/ai.py +0 -0
  125. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/base.py +0 -0
  126. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/handoff.py +0 -0
  127. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/plan.py +0 -0
  128. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/policies.py +0 -0
  129. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/orchestration/round_robin.py +0 -0
  130. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/agents.py +0 -0
  131. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/clients.py +0 -0
  132. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instruction_registry.py +0 -0
  133. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  134. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  135. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  136. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  137. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  138. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/orchestration.py +0 -0
  139. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  140. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/presets/workflow.py +0 -0
  141. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/session_store.py +0 -0
  142. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/skills/__init__.py +0 -0
  143. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/skills/base.py +0 -0
  144. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/skills/resources.py +0 -0
  145. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/skills/scripts.py +0 -0
  146. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/skills/sources.py +0 -0
  147. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/__init__.py +0 -0
  148. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/base.py +0 -0
  149. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/cancellation.py +0 -0
  150. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/composite.py +0 -0
  151. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/consecutive_agent.py +0 -0
  152. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/external.py +0 -0
  153. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/function_call.py +0 -0
  154. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/handoff.py +0 -0
  155. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/max_message.py +0 -0
  156. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/predicate.py +0 -0
  157. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/source.py +0 -0
  158. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/text_mention.py +0 -0
  159. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/timeout.py +0 -0
  160. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/termination/token_usage.py +0 -0
  161. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/__init__.py +0 -0
  162. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/base.py +0 -0
  163. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/coding_tools.py +0 -0
  164. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/core_tools.py +0 -0
  165. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/decorator.py +0 -0
  166. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/memory_tool.py +0 -0
  167. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/tools/research_tools.py +0 -0
  168. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/types.py +0 -0
  169. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/__init__.py +0 -0
  170. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/discovery.py +0 -0
  171. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/execution.py +0 -0
  172. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/.gitignore +0 -0
  173. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/README.md +0 -0
  174. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/components.json +0 -0
  175. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
  176. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/index.html +0 -0
  177. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package-lock.json +0 -0
  178. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package.json +0 -0
  179. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/plan.md +0 -0
  180. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/public/vite.svg +0 -0
  181. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.css +0 -0
  182. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.tsx +0 -0
  183. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
  184. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +0 -0
  185. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
  186. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
  187. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
  188. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
  189. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
  190. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -0
  191. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +0 -0
  192. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +0 -0
  193. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
  194. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +0 -0
  195. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +0 -0
  196. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
  197. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +0 -0
  198. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
  199. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
  200. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
  201. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
  202. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
  203. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
  204. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
  205. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  206. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
  207. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
  208. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
  209. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
  210. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
  211. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
  212. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
  213. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
  214. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
  215. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
  216. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +0 -0
  217. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +0 -0
  218. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +0 -0
  219. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +0 -0
  220. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/index.css +0 -0
  221. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/format-utils.ts +0 -0
  222. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/user-id.ts +0 -0
  223. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/utils.ts +0 -0
  224. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
  225. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/services/api.ts +0 -0
  226. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/index.ts +0 -0
  227. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/picoagents.ts +0 -0
  228. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
  229. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
  230. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
  231. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
  232. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
  233. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
  234. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/yarn.lock +0 -0
  235. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/models.py +0 -0
  236. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/registry.py +0 -0
  237. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/server.py +0 -0
  238. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/session_store.py +0 -0
  239. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/sessions.py +0 -0
  240. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +0 -0
  241. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -0
  242. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/ui/index.html +0 -0
  243. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/webui/ui/vite.svg +0 -0
  244. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/__init__.py +0 -0
  245. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/__init__.py +0 -0
  246. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  247. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  248. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/models.py +0 -0
  249. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/runner.py +0 -0
  250. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/core/workflow.py +0 -0
  251. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/defaults.py +0 -0
  252. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/loader.py +0 -0
  253. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/schema.py +0 -0
  254. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/schema_utils.py +0 -0
  255. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/__init__.py +0 -0
  256. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
  257. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/echo.py +0 -0
  258. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/function.py +0 -0
  259. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/http.py +0 -0
  260. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/step.py +0 -0
  261. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  262. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/transform.py +0 -0
  263. {agentbyte-0.20.3 → agentbyte-0.20.5}/src/agentbyte/workflow/visualizer.py +0 -0
  264. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_basic.py +0 -0
  265. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_context_providers.py +0 -0
  266. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_event_types.py +0 -0
  267. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_memory_integration.py +0 -0
  268. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_middleware_integration.py +0 -0
  269. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_retry_middleware.py +0 -0
  270. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_agent_stream_events.py +0 -0
  271. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_embedding_agent.py +0 -0
  272. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/agents/test_tool_approval.py +0 -0
  273. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/cli/test_registry_check.py +0 -0
  274. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/context_providers/__init__.py +0 -0
  275. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/context_providers/test_skill_tools.py +0 -0
  276. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/context_providers/test_skills_provider.py +0 -0
  277. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/dataset/test_loader.py +0 -0
  278. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/dataset/test_multi_table.py +0 -0
  279. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/dataset/test_publish.py +0 -0
  280. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/eval/test_eval_dataset.py +0 -0
  281. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/eval/test_pairwise.py +0 -0
  282. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  283. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  284. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/eval/test_types_and_judges.py +0 -0
  285. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_azure_client.py +0 -0
  286. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_azure_embedding_client.py +0 -0
  287. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_llm_types.py +0 -0
  288. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_openai_client.py +0 -0
  289. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_openai_embedding_client.py +0 -0
  290. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_retry_observability.py +0 -0
  291. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/llm/test_retry_policy_api.py +0 -0
  292. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/memory/test_memory.py +0 -0
  293. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/middleware/test_middleware_chain.py +0 -0
  294. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/middleware/test_otel.py +0 -0
  295. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/middleware/test_retry_middleware.py +0 -0
  296. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/middleware/test_sql_usage.py +0 -0
  297. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/middleware/test_usage_logger.py +0 -0
  298. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/orchestration/test_ai_orchestrator.py +0 -0
  299. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/orchestration/test_base_orchestrator.py +0 -0
  300. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  301. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/orchestration/test_plan_orchestrator.py +0 -0
  302. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/orchestration/test_round_robin.py +0 -0
  303. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/presets/test_agents.py +0 -0
  304. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/presets/test_clients.py +0 -0
  305. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/presets/test_instruction_registry.py +0 -0
  306. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/presets/test_orchestration.py +0 -0
  307. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/presets/test_workflow.py +0 -0
  308. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/skills/__init__.py +0 -0
  309. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/skills/test_base.py +0 -0
  310. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/skills/test_resources.py +0 -0
  311. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/skills/test_scripts.py +0 -0
  312. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/skills/test_sources.py +0 -0
  313. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_base.py +0 -0
  314. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_cancellation.py +0 -0
  315. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_composite.py +0 -0
  316. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_consecutive_agent.py +0 -0
  317. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_external.py +0 -0
  318. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_function_call.py +0 -0
  319. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_handoff.py +0 -0
  320. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_max_message.py +0 -0
  321. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_predicate.py +0 -0
  322. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_source.py +0 -0
  323. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_text_mention.py +0 -0
  324. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_timeout.py +0 -0
  325. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/termination/test_token_usage.py +0 -0
  326. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_cancellation_token.py +0 -0
  327. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_context.py +0 -0
  328. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_logger.py +0 -0
  329. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_messages.py +0 -0
  330. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_session_store.py +0 -0
  331. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/test_types.py +0 -0
  332. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/tools/test_coding_tools.py +0 -0
  333. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/tools/test_memory_tool.py +0 -0
  334. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/tools/test_research_tools.py +0 -0
  335. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/tools/test_tools.py +0 -0
  336. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/__init__.py +0 -0
  337. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/helpers.py +0 -0
  338. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_execution.py +0 -0
  339. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_microwebui_server.py +0 -0
  340. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_package_api.py +0 -0
  341. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_registry.py +0 -0
  342. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_server.py +0 -0
  343. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/webui/test_sessions.py +0 -0
  344. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_checkpoint.py +0 -0
  345. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_subworkflow_step.py +0 -0
  346. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_class.py +0 -0
  347. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_models.py +0 -0
  348. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_runner.py +0 -0
  349. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_schema.py +0 -0
  350. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_steps.py +0 -0
  351. {agentbyte-0.20.3 → agentbyte-0.20.5}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -80,6 +80,38 @@ print(response.final_content) # assistant's final text
80
80
  print(response.messages[-1].content) # same, from message list
81
81
  ```
82
82
 
83
+ ### Operation logging for run()
84
+
85
+ To see middleware logs from `agent.run(...)`, configure Python logging and add
86
+ `LoggingMiddleware`. The middleware emits records; logging configuration decides
87
+ whether they appear on stdout/stderr.
88
+
89
+ ```python
90
+ import logging
91
+
92
+ from agentbyte.agents import Agent
93
+ from agentbyte.middleware import LoggingMiddleware
94
+
95
+ logging.basicConfig(
96
+ level=logging.INFO,
97
+ format="%(asctime)s %(name)s %(levelname)s %(message)s",
98
+ )
99
+
100
+ agent = Agent(
101
+ name="my-agent",
102
+ description="Answers simple questions.",
103
+ instructions="Answer concisely.",
104
+ model_client=client,
105
+ middlewares=[LoggingMiddleware()],
106
+ )
107
+
108
+ response = await agent.run("hello")
109
+ ```
110
+
111
+ Use `model_client=...` and `middlewares=[...]` in Agentbyte. Passing only
112
+ `LoggingMiddleware()` is not enough if the host application has not configured
113
+ Python logging to show `INFO` records.
114
+
83
115
  ### Multi-turn (stateful — caller owns context)
84
116
 
85
117
  ```python
@@ -108,6 +140,27 @@ async for event in agent.run_stream(
108
140
  # Final AgentResponse is the last item yielded
109
141
  ```
110
142
 
143
+ ### Console stream printing
144
+
145
+ Use the preset printer for readable notebook or terminal debugging instead of
146
+ writing custom `isinstance(...)` dispatch in examples.
147
+
148
+ ```python
149
+ from agentbyte.presets import ConsoleStreamPrinter, run_agent_stream
150
+
151
+ response = await run_agent_stream(
152
+ agent,
153
+ "Summarise the last 3 contracts.",
154
+ )
155
+
156
+ printer = ConsoleStreamPrinter(max_chars=1000)
157
+ async for item in agent.run_stream("Summarise the last 3 contracts.", verbose=True):
158
+ printer.print(item)
159
+ ```
160
+
161
+ `run_agent_stream()` prints stream items and returns the final
162
+ `AgentResponse`. It defaults to `verbose=True` and `stream_tokens=False`.
163
+
111
164
  ### Stream logging with StreamEventLogger
112
165
 
113
166
  Use `verbose=True` to emit execution events, then pass every streamed item to
@@ -141,7 +194,8 @@ async for item in agent.run_stream(
141
194
 
142
195
  `StreamEventLogger` covers execution-layer events from `run_stream()`. It
143
196
  complements `LoggingMiddleware`, which logs model and tool operations inside the
144
- middleware chain.
197
+ middleware chain. Use `ConsoleStreamPrinter` for human-readable terminal output;
198
+ use `StreamEventLogger` for structured Python logs.
145
199
 
146
200
  ### run() parameters
147
201
 
@@ -353,6 +407,12 @@ response = await coordinator.run("What is the weather in Berlin in Celsius?")
353
407
 
354
408
  `AgentAsTool` also accepts `context=` forwarding in `execute()` — pass a pre-seeded context to give the specialist prior history.
355
409
 
410
+ `AgentAsTool.execute_stream()` invokes the delegated child agent with
411
+ `verbose=True` and `stream_tokens=False`. This lets nested child-agent events
412
+ flow through a parent `agent.run_stream(..., verbose=True)` call for
413
+ `StreamEventLogger` or `ConsoleStreamPrinter`, while avoiding noisy nested token
414
+ chunks.
415
+
356
416
  ### Manual construction
357
417
 
358
418
  ```python
@@ -444,7 +504,7 @@ def build_contract_agent(*, model_client) -> Agent:
444
504
  required_tools=["think"],
445
505
  max_iterations=6,
446
506
  example_tasks=[
447
- "Who signed CW347209 from Novartis?",
507
+ "Who signed CW347209 from XYZ?",
448
508
  "List all contracts expiring in Q3 2025.",
449
509
  ],
450
510
  )
@@ -481,6 +541,7 @@ async def run_with_filters(
481
541
  ```python
482
542
  from agentbyte.agents import EmbeddingAgent
483
543
  from agentbyte.llm.openai import OpenAIEmbeddingClient
544
+ from agentbyte.llm.types import EmbeddingResult
484
545
  from agentbyte.middleware import OTelMiddleware
485
546
 
486
547
  client = OpenAIEmbeddingClient.from_api_key(model="text-embedding-3-small")
@@ -510,6 +571,7 @@ print(f"Cost: ${result.usage.cost_estimate:.4f}, tokens: {result.usage.tokens_in
510
571
 
511
572
  ```python
512
573
  from agentbyte.agents import EmbeddingBatchProgressEvent
574
+ from agentbyte.llm.types import EmbeddingResult
513
575
 
514
576
  async for event in agent.run_stream(texts=chunks):
515
577
  if isinstance(event, EmbeddingBatchProgressEvent):
@@ -102,6 +102,16 @@ asyncio.run(main())
102
102
 
103
103
  ## Pattern: Streaming AI-Driven Orchestration
104
104
 
105
+ For readable terminal output:
106
+
107
+ ```python
108
+ from agentbyte.presets import run_orchestrator_stream
109
+
110
+ result = await run_orchestrator_stream(orchestrator, task)
111
+ ```
112
+
113
+ For structured Python logs:
114
+
105
115
  ```python
106
116
  from agentbyte.logger import StreamEventLogger
107
117
 
@@ -113,11 +123,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
113
123
  stream_logger.warning(item)
114
124
  stream_logger.error(item)
115
125
  stream_logger.exception(item)
116
-
117
- if isinstance(item, Message):
118
- print(f"[{item.source}] {item.content}")
119
- elif isinstance(item, OrchestrationResponse):
120
- print(f"Complete: {item.stop_message.content}")
121
126
  ```
122
127
 
123
128
  ## How AI Selection Works
@@ -273,7 +278,7 @@ termination = (
273
278
  - **Safety Fallback:** If LLM selection fails, the orchestrator falls back to round-robin selection to preserve forward progress.
274
279
  - **Usage Accounting:** Final usage includes both agent tokens AND selector tokens.
275
280
  - **Case Insensitive:** Agent name matching is case-insensitive for robustness.
276
- - **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs, including selector events.
281
+ - **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs, including selector events. Use `run_orchestrator_stream()` / `ConsoleStreamPrinter` for readable terminal output.
277
282
 
278
283
  ## When to Use AI-Driven vs Round-Robin
279
284
 
@@ -85,10 +85,18 @@ asyncio.run(main())
85
85
 
86
86
  ## Pattern: Streaming Handoff Orchestration
87
87
 
88
+ For readable terminal output:
89
+
90
+ ```python
91
+ from agentbyte.presets import run_orchestrator_stream
92
+
93
+ result = await run_orchestrator_stream(orchestrator, task)
94
+ ```
95
+
96
+ For structured Python logs:
97
+
88
98
  ```python
89
99
  from agentbyte.logger import StreamEventLogger
90
- from agentbyte.messages import Message
91
- from agentbyte.types import OrchestrationResponse
92
100
 
93
101
  stream_logger = StreamEventLogger()
94
102
 
@@ -98,11 +106,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
98
106
  stream_logger.warning(item)
99
107
  stream_logger.error(item)
100
108
  stream_logger.exception(item)
101
-
102
- if isinstance(item, Message):
103
- print(f"[{item.source}] {item.content}")
104
- elif isinstance(item, OrchestrationResponse):
105
- print(f"Complete: {item.stop_message.content}")
106
109
  ```
107
110
 
108
111
  ## How Handoff Routing Works
@@ -117,13 +117,43 @@ agent = Agent(
117
117
 
118
118
  ### LoggingMiddleware
119
119
 
120
+ `LoggingMiddleware` emits standard Python log records. It does not configure
121
+ handlers by itself, so examples and notebooks must configure logging before the
122
+ agent runs.
123
+
120
124
  ```python
125
+ import logging
126
+
127
+ from agentbyte.agents import Agent
121
128
  from agentbyte.middleware import LoggingMiddleware
122
129
 
123
- agent = Agent(..., middlewares=[LoggingMiddleware()])
124
- # Logs at INFO level under logger "agentbyte.middleware"
130
+ logging.basicConfig(
131
+ level=logging.INFO,
132
+ format="%(asctime)s %(name)s %(levelname)s %(message)s",
133
+ )
134
+
135
+ agent = Agent(
136
+ name="my-agent",
137
+ description="Demonstrates operation logging.",
138
+ instructions="Answer concisely.",
139
+ model_client=client,
140
+ middlewares=[LoggingMiddleware()],
141
+ )
142
+
143
+ result = await agent.run("hello")
125
144
  ```
126
145
 
146
+ Logs are emitted under logger name `agentbyte.middleware`. If the application
147
+ already configured logging, set that logger level explicitly instead of calling
148
+ `basicConfig()` again:
149
+
150
+ ```python
151
+ logging.getLogger("agentbyte.middleware").setLevel(logging.INFO)
152
+ ```
153
+
154
+ Use `middlewares=[...]` and `model_client=...`; `middleware=` and `model=` are
155
+ not Agent constructor parameters.
156
+
127
157
  ### GuardrailMiddleware
128
158
 
129
159
  ```python
@@ -114,10 +114,18 @@ asyncio.run(main())
114
114
 
115
115
  ## Pattern: Streaming Plan-Based Orchestration
116
116
 
117
+ For readable terminal output:
118
+
119
+ ```python
120
+ from agentbyte.presets import run_orchestrator_stream
121
+
122
+ result = await run_orchestrator_stream(orchestrator, task)
123
+ ```
124
+
125
+ For structured Python logs:
126
+
117
127
  ```python
118
128
  from agentbyte.logger import StreamEventLogger
119
- from agentbyte.messages import Message
120
- from agentbyte.types import OrchestrationResponse
121
129
 
122
130
  stream_logger = StreamEventLogger()
123
131
 
@@ -127,12 +135,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
127
135
  stream_logger.warning(item)
128
136
  stream_logger.error(item)
129
137
  stream_logger.exception(item)
130
-
131
- if isinstance(item, Message):
132
- print(f"[MSG][{item.source}] {item.content}")
133
- elif isinstance(item, OrchestrationResponse):
134
- print(f"Complete: {item.stop_message.content}")
135
- print(f"Steps completed: {item.pattern_metadata.get('steps_completed')}")
136
138
  ```
137
139
 
138
140
  ## How Plan-Based Orchestration Works
@@ -284,4 +286,3 @@ This makes plan-based orchestration more expensive than simpler patterns, but mu
284
286
  3. Gather evidence -> synthesize -> present answer
285
287
  4. Multi-step analyst/reporter/editor collaboration
286
288
  5. Quality-sensitive tasks where each phase should be checked before moving on
287
-
@@ -71,6 +71,16 @@ asyncio.run(main())
71
71
 
72
72
  ## Pattern: Streaming Round-Robin
73
73
 
74
+ For readable terminal output:
75
+
76
+ ```python
77
+ from agentbyte.presets import run_orchestrator_stream
78
+
79
+ result = await run_orchestrator_stream(orchestrator, task)
80
+ ```
81
+
82
+ For structured Python logs:
83
+
74
84
  ```python
75
85
  from agentbyte.logger import StreamEventLogger
76
86
 
@@ -82,11 +92,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
82
92
  stream_logger.warning(item)
83
93
  stream_logger.error(item)
84
94
  stream_logger.exception(item)
85
-
86
- if isinstance(item, Message):
87
- print(f"[{item.source}] {item.content}")
88
- elif isinstance(item, OrchestrationResponse):
89
- print(f"Complete: {item.stop_message.content}")
90
95
  ```
91
96
 
92
97
  ## Available Termination Conditions
@@ -220,7 +225,7 @@ result = await orchestrator.run(task, context=ctx, cancellation_token=token)
220
225
  - **Safety Limit:** Set `max_iterations` as a failsafe even with other termination conditions.
221
226
  - **Shared Context:** By default all agents see full history as text, but `HistoryContextPolicy` can narrow the window or change the format.
222
227
  - **Model Client:** Each agent needs its own `model_client` configured.
223
- - **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs.
228
+ - **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs. Use `run_orchestrator_stream()` / `ConsoleStreamPrinter` for readable terminal output.
224
229
 
225
230
  ## Common Use Cases
226
231
 
@@ -101,6 +101,38 @@ FunctionStep(
101
101
  )
102
102
  ```
103
103
 
104
+ Design guidance:
105
+
106
+ - `input_type` and `output_type` should be concrete Pydantic model classes that represent the real data crossing the step boundary.
107
+ - Prefer step outputs as the primary transport for business data that flows from one step to the next.
108
+ - Use `WorkflowContext` for cross-cutting concerns such as progress, flags, lightweight shared metadata, and values that are needed outside the direct step-to-step path.
109
+
110
+ Preferred pattern:
111
+
112
+ ```python
113
+ from pydantic import BaseModel
114
+
115
+
116
+ class ParsedInput(BaseModel):
117
+ record_id: str
118
+ file_name: str
119
+
120
+
121
+ class EnrichedOutput(ParsedInput):
122
+ content_hash: str
123
+
124
+
125
+ async def enrich(input_data: ParsedInput, context) -> EnrichedOutput:
126
+ context.set("started_enrichment", True)
127
+ return EnrichedOutput(
128
+ record_id=input_data.record_id,
129
+ file_name=input_data.file_name,
130
+ content_hash="abc123",
131
+ )
132
+ ```
133
+
134
+ Avoid using placeholder or pass-through output types while putting the real business payload only into `WorkflowContext.state`. That pattern weakens validation, makes step contracts less clear, and pushes too much logic into string-keyed shared state.
135
+
104
136
  ### TransformStep
105
137
 
106
138
  Maps fields from one schema to another without custom code. Use `"static:<value>"` for literal values, or a field name string to copy from input.
@@ -341,6 +373,13 @@ async def step_b(input_data: MyOutput, context: WorkflowContext) -> MyOutput:
341
373
  return MyOutput(value=f"Got: {shared}")
342
374
  ```
343
375
 
376
+ Use `WorkflowContext` intentionally:
377
+
378
+ - Put primary business data in step outputs when that data is part of the direct step-to-step contract.
379
+ - Put small shared values in `WorkflowContext` when they are cross-cutting, optional, or orthogonal to the main output shape.
380
+ - For simple linear enrichment pipelines, a good default is typed outputs for the main payload plus a small amount of primitive state for bookkeeping.
381
+ - Avoid making `WorkflowContext.state` the only source of truth for the workflow's main data flow unless the workflow genuinely needs loose coupling between many steps.
382
+
344
383
  `WorkflowContext` API:
345
384
 
346
385
  | Method | Purpose |
@@ -374,6 +413,20 @@ execution.error # str | None — set when status == FAILED
374
413
 
375
414
  ## 9. Streaming workflow events
376
415
 
416
+ For human-readable terminal or notebook output, use the console streaming preset:
417
+
418
+ ```python
419
+ from agentbyte.presets import ConsoleStreamPrinter, run_workflow_stream
420
+
421
+ execution = await run_workflow_stream(workflow, {"value": 5})
422
+
423
+ printer = ConsoleStreamPrinter()
424
+ async for event in WorkflowRunner().run_stream(workflow, {"value": 5}):
425
+ printer.print(event)
426
+ ```
427
+
428
+ For structured Python logs, use `StreamEventLogger`:
429
+
377
430
  ```python
378
431
  from agentbyte.logger import StreamEventLogger
379
432
 
@@ -447,6 +500,14 @@ resumed_execution = await runner.run(
447
500
 
448
501
  The runner validates the checkpoint's structure hash against the live workflow graph on resume. If steps were added/removed, `can_resume=False` is set on the `CheckpointValidationResult`.
449
502
 
503
+ State size guidance:
504
+
505
+ - Workflow state is retained for the lifetime of the run.
506
+ - When checkpointing is enabled, that state is serialized into checkpoints.
507
+ - Prefer storing IDs, keys, counters, flags, and other small primitives in shared state.
508
+ - Avoid storing large domain objects, open clients, or heavyweight in-memory payloads in `WorkflowContext.state` unless they are truly required for resume semantics.
509
+ - If a step can reconstruct a full object from a lightweight identifier, prefer storing the identifier and reconstructing on demand.
510
+
450
511
  ---
451
512
 
452
513
  ## 11. Suspend / resume — human-in-the-loop
@@ -556,10 +617,13 @@ if not validation.is_valid:
556
617
  ## Guardrails
557
618
 
558
619
  - Use `chain()` for linear flows; use `add_step()` + `add_edge()` only when branching or fan-out is required.
620
+ - Design `FunctionStep` input and output types as real Pydantic contracts for the data flowing between steps; do not use placeholder output models when the actual payload lives only in workflow state.
621
+ - Use step outputs for primary business data flow, and reserve `WorkflowContext.state` for compact shared metadata, flags, and bookkeeping.
622
+ - Keep workflow state small and checkpoint-friendly; prefer IDs and lightweight values over large domain objects.
559
623
  - A fan-in join step with ≥ 2 upstream `always` edges receives `{"branch_outputs": {...}, "failed_branches": [...]}` — its input model must declare these fields, not the upstream output shape.
560
624
  - Always pass a workflow factory (callable) to `SubWorkflowStep`, not a live instance — the runner calls it to get a fresh copy per execution.
561
625
  - Do not pass `initial_input` and `responses` together — they are mutually exclusive.
562
626
  - `request_input()` and `request_approval()` never return; code after them runs only on resume.
563
627
  - Do not thread `AgentContext` through `WorkflowContext.state` — keep it in `AgentbyteAgentInput.agent_context`.
564
628
  - `WorkflowRunner` is not thread-safe across concurrent runs of the same workflow instance; use one runner per concurrent workflow.
565
- - Workflow logging is event-driven today — use `run_stream()` for observability, and pair it with `StreamEventLogger` when you want standard Python log output.
629
+ - Workflow logging is event-driven today — use `run_stream()` for observability, pair it with `StreamEventLogger` for structured Python logs, and use `ConsoleStreamPrinter` / `run_workflow_stream()` for readable terminal output.