agentbyte 0.20.4__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.4 → agentbyte-0.20.5}/.github/skills/agentbyte-agent/SKILL.md +61 -1
  2. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +11 -6
  3. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-handoff-orchestration/SKILL.md +10 -7
  4. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-middleware/SKILL.md +32 -2
  5. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md +10 -9
  6. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +11 -6
  7. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-workflow/SKILL.md +15 -1
  8. agentbyte-0.20.5/.github/skills/webui-smoke-test/SKILL.md +314 -0
  9. {agentbyte-0.20.4 → agentbyte-0.20.5}/CHANGELOG.md +17 -0
  10. {agentbyte-0.20.4 → agentbyte-0.20.5}/PKG-INFO +3 -2
  11. {agentbyte-0.20.4 → agentbyte-0.20.5}/README.md +2 -1
  12. agentbyte-0.20.5/src/agentbyte/__about__.py +2 -0
  13. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/__init__.py +10 -0
  14. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/agent_as_tool.py +1 -1
  15. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/__init__.py +12 -0
  16. agentbyte-0.20.5/src/agentbyte/presets/streaming.py +325 -0
  17. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/agent.py +33 -10
  18. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_as_tool.py +22 -1
  19. agentbyte-0.20.5/tests/presets/test_streaming.py +127 -0
  20. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_package_api.py +15 -0
  21. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_agent.py +107 -1
  22. agentbyte-0.20.4/src/agentbyte/__about__.py +0 -2
  23. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-coding-tools/SKILL.md +0 -0
  24. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
  25. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-eval/SKILL.md +0 -0
  26. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
  27. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
  28. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
  29. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
  30. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
  31. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-research-tools/SKILL.md +0 -0
  32. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/git-multi-remote-push/SKILL.md +0 -0
  33. {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/skill-authoring/SKILL.md +0 -0
  34. {agentbyte-0.20.4 → agentbyte-0.20.5}/.gitignore +0 -0
  35. {agentbyte-0.20.4 → agentbyte-0.20.5}/LICENSE +0 -0
  36. {agentbyte-0.20.4 → agentbyte-0.20.5}/pyproject.toml +0 -0
  37. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/__init__.py +0 -0
  38. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/agent.py +0 -0
  39. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/base.py +0 -0
  40. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/embedding_agent.py +0 -0
  41. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/types.py +0 -0
  42. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cancellation_token.py +0 -0
  43. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/catalog.py +0 -0
  44. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cli/__init__.py +0 -0
  45. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cli/main.py +0 -0
  46. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/component.py +0 -0
  47. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context.py +0 -0
  48. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/__init__.py +0 -0
  49. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/base.py +0 -0
  50. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/skill_tools.py +0 -0
  51. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/skills.py +0 -0
  52. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/__init__.py +0 -0
  53. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/base.py +0 -0
  54. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/config.py +0 -0
  55. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/json.py +0 -0
  56. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/loader.py +0 -0
  57. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publish.py +0 -0
  58. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publish_config.py +0 -0
  59. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publishers.py +0 -0
  60. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/sources.py +0 -0
  61. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/sqlite.py +0 -0
  62. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/entity.py +0 -0
  63. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/__init__.py +0 -0
  64. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/base.py +0 -0
  65. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/__init__.py +0 -0
  66. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/decorator.py +0 -0
  67. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/keyword.py +0 -0
  68. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/local.py +0 -0
  69. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/tool.py +0 -0
  70. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/types.py +0 -0
  71. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/comparison.py +0 -0
  72. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/eval_dataset.py +0 -0
  73. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/__init__.py +0 -0
  74. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/base.py +0 -0
  75. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/composite.py +0 -0
  76. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/llm.py +0 -0
  77. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/pairwise.py +0 -0
  78. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/reference.py +0 -0
  79. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/pairwise.py +0 -0
  80. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/report.py +0 -0
  81. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/runner.py +0 -0
  82. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/__init__.py +0 -0
  83. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/agent.py +0 -0
  84. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/model.py +0 -0
  85. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  86. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/types.py +0 -0
  87. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/__init__.py +0 -0
  88. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/_retry_observability.py +0 -0
  89. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/auth.py +0 -0
  90. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/__init__.py +0 -0
  91. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/auth.py +0 -0
  92. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/chat.py +0 -0
  93. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/embedding.py +0 -0
  94. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/settings.py +0 -0
  95. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai.py +0 -0
  96. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  97. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/base.py +0 -0
  98. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/embeddings_base.py +0 -0
  99. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/__init__.py +0 -0
  100. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/chat.py +0 -0
  101. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/embedding.py +0 -0
  102. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/settings.py +0 -0
  103. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai.py +0 -0
  104. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai_embedding.py +0 -0
  105. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/pricing.py +0 -0
  106. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/retry_policy.py +0 -0
  107. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/settings.py +0 -0
  108. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/types.py +0 -0
  109. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/logger.py +0 -0
  110. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/memory/__init__.py +0 -0
  111. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/memory/base.py +0 -0
  112. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/messages.py +0 -0
  113. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/__init__.py +0 -0
  114. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/server.py +0 -0
  115. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/ui/index.html +0 -0
  116. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/__init__.py +0 -0
  117. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/base.py +0 -0
  118. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/otel.py +0 -0
  119. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/retry.py +0 -0
  120. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/sql_usage.py +0 -0
  121. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/usage_logger.py +0 -0
  122. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/notebook.py +0 -0
  123. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/__init__.py +0 -0
  124. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/ai.py +0 -0
  125. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/base.py +0 -0
  126. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/handoff.py +0 -0
  127. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/plan.py +0 -0
  128. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/policies.py +0 -0
  129. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/round_robin.py +0 -0
  130. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/agents.py +0 -0
  131. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/clients.py +0 -0
  132. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instruction_registry.py +0 -0
  133. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  134. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  135. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  136. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  137. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  138. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/orchestration.py +0 -0
  139. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  140. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/workflow.py +0 -0
  141. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/session_store.py +0 -0
  142. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/__init__.py +0 -0
  143. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/base.py +0 -0
  144. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/resources.py +0 -0
  145. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/scripts.py +0 -0
  146. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/sources.py +0 -0
  147. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/__init__.py +0 -0
  148. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/base.py +0 -0
  149. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/cancellation.py +0 -0
  150. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/composite.py +0 -0
  151. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/consecutive_agent.py +0 -0
  152. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/external.py +0 -0
  153. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/function_call.py +0 -0
  154. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/handoff.py +0 -0
  155. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/max_message.py +0 -0
  156. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/predicate.py +0 -0
  157. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/source.py +0 -0
  158. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/text_mention.py +0 -0
  159. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/timeout.py +0 -0
  160. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/token_usage.py +0 -0
  161. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/__init__.py +0 -0
  162. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/base.py +0 -0
  163. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/coding_tools.py +0 -0
  164. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/core_tools.py +0 -0
  165. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/decorator.py +0 -0
  166. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/memory_tool.py +0 -0
  167. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/research_tools.py +0 -0
  168. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/types.py +0 -0
  169. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/__init__.py +0 -0
  170. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/discovery.py +0 -0
  171. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/execution.py +0 -0
  172. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/.gitignore +0 -0
  173. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/README.md +0 -0
  174. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/components.json +0 -0
  175. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
  176. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/index.html +0 -0
  177. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package-lock.json +0 -0
  178. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package.json +0 -0
  179. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/plan.md +0 -0
  180. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/public/vite.svg +0 -0
  181. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.css +0 -0
  182. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.tsx +0 -0
  183. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
  184. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +0 -0
  185. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
  186. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
  187. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
  188. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
  189. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
  190. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -0
  191. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +0 -0
  192. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +0 -0
  193. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
  194. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +0 -0
  195. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +0 -0
  196. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
  197. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +0 -0
  198. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
  199. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
  200. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
  201. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
  202. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
  203. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
  204. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
  205. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  206. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
  207. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
  208. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
  209. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
  210. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
  211. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
  212. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
  213. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
  214. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
  215. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
  216. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +0 -0
  217. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +0 -0
  218. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +0 -0
  219. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +0 -0
  220. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/index.css +0 -0
  221. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/format-utils.ts +0 -0
  222. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/user-id.ts +0 -0
  223. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/utils.ts +0 -0
  224. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
  225. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/services/api.ts +0 -0
  226. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/index.ts +0 -0
  227. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/picoagents.ts +0 -0
  228. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
  229. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
  230. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
  231. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
  232. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
  233. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
  234. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/yarn.lock +0 -0
  235. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/models.py +0 -0
  236. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/registry.py +0 -0
  237. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/server.py +0 -0
  238. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/session_store.py +0 -0
  239. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/sessions.py +0 -0
  240. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +0 -0
  241. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -0
  242. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/index.html +0 -0
  243. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/vite.svg +0 -0
  244. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/__init__.py +0 -0
  245. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/__init__.py +0 -0
  246. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  247. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  248. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/models.py +0 -0
  249. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/runner.py +0 -0
  250. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/workflow.py +0 -0
  251. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/defaults.py +0 -0
  252. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/loader.py +0 -0
  253. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/schema.py +0 -0
  254. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/schema_utils.py +0 -0
  255. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/__init__.py +0 -0
  256. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
  257. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/echo.py +0 -0
  258. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/function.py +0 -0
  259. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/http.py +0 -0
  260. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/step.py +0 -0
  261. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  262. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/transform.py +0 -0
  263. {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/visualizer.py +0 -0
  264. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_basic.py +0 -0
  265. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_context_providers.py +0 -0
  266. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_event_types.py +0 -0
  267. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_memory_integration.py +0 -0
  268. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_middleware_integration.py +0 -0
  269. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_retry_middleware.py +0 -0
  270. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_stream_events.py +0 -0
  271. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_embedding_agent.py +0 -0
  272. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_tool_approval.py +0 -0
  273. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/cli/test_registry_check.py +0 -0
  274. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/__init__.py +0 -0
  275. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/test_skill_tools.py +0 -0
  276. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/test_skills_provider.py +0 -0
  277. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_loader.py +0 -0
  278. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_multi_table.py +0 -0
  279. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_publish.py +0 -0
  280. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_eval_dataset.py +0 -0
  281. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_pairwise.py +0 -0
  282. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  283. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  284. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_types_and_judges.py +0 -0
  285. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_azure_client.py +0 -0
  286. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_azure_embedding_client.py +0 -0
  287. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_llm_types.py +0 -0
  288. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_openai_client.py +0 -0
  289. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_openai_embedding_client.py +0 -0
  290. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_retry_observability.py +0 -0
  291. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_retry_policy_api.py +0 -0
  292. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/memory/test_memory.py +0 -0
  293. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_middleware_chain.py +0 -0
  294. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_otel.py +0 -0
  295. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_retry_middleware.py +0 -0
  296. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_sql_usage.py +0 -0
  297. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_usage_logger.py +0 -0
  298. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_ai_orchestrator.py +0 -0
  299. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_base_orchestrator.py +0 -0
  300. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  301. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_plan_orchestrator.py +0 -0
  302. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_round_robin.py +0 -0
  303. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_agents.py +0 -0
  304. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_clients.py +0 -0
  305. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_instruction_registry.py +0 -0
  306. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_orchestration.py +0 -0
  307. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_workflow.py +0 -0
  308. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/__init__.py +0 -0
  309. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_base.py +0 -0
  310. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_resources.py +0 -0
  311. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_scripts.py +0 -0
  312. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_sources.py +0 -0
  313. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_base.py +0 -0
  314. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_cancellation.py +0 -0
  315. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_composite.py +0 -0
  316. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_consecutive_agent.py +0 -0
  317. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_external.py +0 -0
  318. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_function_call.py +0 -0
  319. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_handoff.py +0 -0
  320. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_max_message.py +0 -0
  321. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_predicate.py +0 -0
  322. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_source.py +0 -0
  323. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_text_mention.py +0 -0
  324. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_timeout.py +0 -0
  325. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_token_usage.py +0 -0
  326. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_cancellation_token.py +0 -0
  327. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_context.py +0 -0
  328. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_logger.py +0 -0
  329. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_messages.py +0 -0
  330. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_session_store.py +0 -0
  331. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_types.py +0 -0
  332. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_coding_tools.py +0 -0
  333. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_memory_tool.py +0 -0
  334. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_research_tools.py +0 -0
  335. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_tools.py +0 -0
  336. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/__init__.py +0 -0
  337. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/helpers.py +0 -0
  338. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_execution.py +0 -0
  339. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_microwebui_server.py +0 -0
  340. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_package_api.py +0 -0
  341. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_registry.py +0 -0
  342. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_server.py +0 -0
  343. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_sessions.py +0 -0
  344. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_checkpoint.py +0 -0
  345. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_subworkflow_step.py +0 -0
  346. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_class.py +0 -0
  347. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_models.py +0 -0
  348. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_runner.py +0 -0
  349. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_schema.py +0 -0
  350. {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_steps.py +0 -0
  351. {agentbyte-0.20.4 → 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
@@ -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
 
@@ -413,6 +413,20 @@ execution.error # str | None — set when status == FAILED
413
413
 
414
414
  ## 9. Streaming workflow events
415
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
+
416
430
  ```python
417
431
  from agentbyte.logger import StreamEventLogger
418
432
 
@@ -612,4 +626,4 @@ if not validation.is_valid:
612
626
  - `request_input()` and `request_approval()` never return; code after them runs only on resume.
613
627
  - Do not thread `AgentContext` through `WorkflowContext.state` — keep it in `AgentbyteAgentInput.agent_context`.
614
628
  - `WorkflowRunner` is not thread-safe across concurrent runs of the same workflow instance; use one runner per concurrent workflow.
615
- - 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.
@@ -0,0 +1,314 @@
1
+ ---
2
+ name: webui-smoke-test
3
+ description: Step-by-step guide for smoke testing the Agentbyte WebUI server with curl. Use this when you need to validate discovery, agent streaming, multi-turn persistence, orchestrator execution, or workflow execution. Includes curl examples, expected responses, and debugging tips.
4
+ license: MIT
5
+ ---
6
+
7
+ Use this skill when you need to **validate that the WebUI server is working correctly** across all entity types (agents, orchestrators, workflows) with real API credentials.
8
+
9
+ ## Prerequisites
10
+
11
+ 1. **Server running**: `uv run python examples/webui/presets_webui.py`
12
+ 2. **API credentials configured**: `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` exported
13
+ 3. **Tools available**: `curl`, `jq` (optional, for output formatting), `uuidgen`
14
+ 4. **Base URL**: `http://127.0.0.1:8080` (adjust host/port if needed)
15
+
16
+ ## Critical: Message Format
17
+
18
+ **All messages sent to the API must include a `source` field.** This is required by the BaseMessage Pydantic schema.
19
+
20
+ ❌ **Wrong:**
21
+ ```json
22
+ {"role": "user", "content": "What is AI?"}
23
+ ```
24
+
25
+ ✅ **Correct:**
26
+ ```json
27
+ {"role": "user", "content": "What is AI?", "source": "user"}
28
+ ```
29
+
30
+ ## Step 1: Verify Discovery Endpoint
31
+
32
+ **Purpose**: Check that all entities are registered and discoverable.
33
+
34
+ ```bash
35
+ curl -s http://127.0.0.1:8080/api/entities | jq .
36
+ ```
37
+
38
+ **Expected Response**:
39
+ - JSON array of 8+ entity objects
40
+ - Each has: `id`, `name`, `type`, `description`, `model`, `tools`
41
+ - For presets_webui.py: `query_rewriter`, `researcher`, `writer`, `reviewer` (agents)
42
+ - For presets_webui.py: `round_robin_team`, `ai_team`, `plan_based_team` (orchestrators)
43
+ - For presets_webui.py: `research_writer_reviewer_workflow` (workflow)
44
+
45
+ **Debug if it fails**:
46
+ - Server not running? → `uv run python examples/webui/presets_webui.py`
47
+ - Port in use? → Check with `lsof -i :8080` and kill if needed
48
+ - CORS error? → Check server logs for middleware issues
49
+
50
+ ---
51
+
52
+ ## Step 2: Test Agent Streaming (Turn 1)
53
+
54
+ **Purpose**: Verify single-turn agent execution with SSE streaming.
55
+
56
+ ```bash
57
+ session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
58
+ user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
59
+
60
+ echo "Session: $session_id"
61
+ echo "User: $user_id"
62
+
63
+ curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
64
+ -H "Content-Type: application/json" \
65
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Rewrite: impacts of AI on hiring\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\",\"stream_tokens\":false}"
66
+ ```
67
+
68
+ **Expected Sequence**:
69
+ 1. `data:` line with `event_type: "model_call"` → Model is being invoked
70
+ 2. `data:` line with `event_type: "model_response"` → Model returned tokens
71
+ 3. `data:` line with `role: "assistant"` → Final response message
72
+ 4. `data:` line with `event_type: "task_complete"` → Execution finished
73
+ 5. Final `data:` line with `context.messages` array → Session persisted
74
+
75
+ **Expected Content**:
76
+ - All `data:` lines are WebUIStreamEvent JSON: `{session_id, timestamp, event}`
77
+ - `session_id` matches what you sent
78
+ - `event` contains framework payloads (model_call, model_response, message, task_complete)
79
+
80
+ **Debug if it fails**:
81
+ - HTTP 400? → Check message format includes `source` field
82
+ - HTTP 404? → Entity doesn't exist, verify entity_id is correct
83
+ - HTTP 500? → Check server logs for actual error (usually API credential or validation issue)
84
+ - No streaming output? → Try without `-N` flag, or check if server is hung
85
+ - Timeout? → Model may be slow; wait or check OPENAI_API_KEY is valid
86
+
87
+ **Save the session_id** — you'll reuse it in Step 3.
88
+
89
+ ---
90
+
91
+ ## Step 3: Verify Multi-Turn Persistence
92
+
93
+ **Purpose**: Confirm agent sees prior conversation history and adapts responses.
94
+
95
+ ```bash
96
+ # Use session_id and user_id from Step 2
97
+ curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
98
+ -H "Content-Type: application/json" \
99
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Make it even shorter\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\",\"stream_tokens\":false}" \
100
+ | grep -E '"content"|"role"|"event_type"' | head -20
101
+ ```
102
+
103
+ **Expected Behavior**:
104
+ - In the `model_call` event, `input_messages` array should contain:
105
+ 1. System message (if configured)
106
+ 2. Turn 1 user message + response
107
+ 3. Turn 2 user message (the "Make it shorter" request)
108
+ - Agent's response should be **shorter than Turn 1** — proof it understood context
109
+ - Final context should have **4+ messages** (system, turn1_user, turn1_asst, turn2_user, turn2_asst)
110
+
111
+ **Debug if it fails**:
112
+ - No prior messages in input? → Session not persisting, check SessionManager and session store
113
+ - Agent not adapting? → Model may not have received context; check input_messages array size
114
+ - Different response? → Normal variation; ensure it's shorter, not just different wording
115
+
116
+ ---
117
+
118
+ ## Step 4: Test Orchestrator Execution
119
+
120
+ **Purpose**: Verify multi-agent orchestration with non-streaming endpoint.
121
+
122
+ ```bash
123
+ session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
124
+ user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
125
+
126
+ curl -s -X POST http://127.0.0.1:8080/api/entities/round_robin_team/run \
127
+ -H "Content-Type: application/json" \
128
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Research AI and hiring, then write a summary\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\"}" \
129
+ | jq '{final_result: .final_result, messages_count: (.messages | length), stop_reason: .stop_reason}'
130
+ ```
131
+
132
+ **Expected Response**:
133
+ - `final_result` contains the orchestrator's final output (usually from the last agent)
134
+ - `messages` array has **3+ messages**:
135
+ - User's initial request
136
+ - Researcher's contribution
137
+ - Writer's contribution (or other agents in round-robin order)
138
+ - `stop_reason` shows why orchestration terminated (e.g., "Text mention found: 'TERMINATE'")
139
+ - `stop_message` object with details
140
+
141
+ **Expected Behavior**:
142
+ - All agents in the team should have contributed to `messages`
143
+ - Agents should have passed context between turns
144
+ - Output should synthesize contributions (e.g., research facts → written summary)
145
+
146
+ **Debug if it fails**:
147
+ - HTTP 500? → Check if OpenAI API is working (use agent test first)
148
+ - Only 1 message in array? → Agents aren't running; check orchestrator configuration
149
+ - No final_result? → Orchestrator may have failed; check stop_reason and server logs
150
+ - Timeout? → Orchestrator running multiple agents; may take 30+ seconds
151
+
152
+ ---
153
+
154
+ ## Step 5: Test Workflow Execution
155
+
156
+ **Purpose**: Verify deterministic workflow DAG execution.
157
+
158
+ ```bash
159
+ session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
160
+ user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
161
+
162
+ curl -s -X POST http://127.0.0.1:8080/api/entities/research_writer_reviewer_workflow/run \
163
+ -H "Content-Type: application/json" \
164
+ -d "{\"input_data\":{\"task\":\"Write a 2 sentence note about solar energy benefits.\"},\"session_id\":\"$session_id\",\"user_id\":\"$user_id\"}" \
165
+ | jq '{status: .status, step_count: (.step_executions | length), state_keys: (.state | keys)}'
166
+ ```
167
+
168
+ **Expected Response**:
169
+ - `status: "completed"`
170
+ - `step_executions` is a **dict** keyed by step name with **6+ entries** (one per DAG step); `| length` in jq works on both dicts and arrays
171
+ - `state` object has keys like `researcher_output`, `writer_draft`, `reviewer_output` (varies by workflow)
172
+ - Each step value has a `status: "completed"` field; `duration_ms` may not be present at top level
173
+
174
+ **Expected Behavior**:
175
+ - Steps execute in DAG order (dependencies respected)
176
+ - Each step uses output from prior steps
177
+ - Final state includes all intermediate and final outputs
178
+ - Workflow completes within reasonable time (30-120 seconds for research_writer_reviewer_workflow)
179
+
180
+ **Debug if it fails**:
181
+ - HTTP 500? → Check OpenAI API; workflows use multiple agent calls
182
+ - `step_executions` empty or too few? → Workflow may have errored; check server logs
183
+ - Status not "completed"? → Check error messages in response
184
+ - Timeout? → Workflows run multiple sequential steps; increase curl timeout with `--max-time 120`
185
+
186
+ ---
187
+
188
+ ## Full Smoke Test Script
189
+
190
+ Save this as `smoke_test.sh` for quick reuse:
191
+
192
+ ```bash
193
+ #!/bin/bash
194
+ set -e
195
+
196
+ BASE_URL="${1:-http://127.0.0.1:8080}"
197
+ echo "🔍 Testing WebUI server at $BASE_URL"
198
+ echo ""
199
+
200
+ # Step 1: Discovery
201
+ echo "1️⃣ Testing Discovery Endpoint..."
202
+ ENTITY_COUNT=$(curl -s "$BASE_URL/api/entities" | jq 'length')
203
+ echo " ✅ Found $ENTITY_COUNT entities"
204
+ echo ""
205
+
206
+ # Step 2: Agent Streaming
207
+ echo "2️⃣ Testing Agent Streaming (Turn 1)..."
208
+ SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
209
+ USER_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
210
+ echo " Session: $SESSION_ID"
211
+
212
+ STREAM_EVENTS=$(curl -s -N -X POST "$BASE_URL/api/entities/query_rewriter/run/stream" \
213
+ -H "Content-Type: application/json" \
214
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Rewrite: impacts of AI on hiring\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"stream_tokens\":false}" \
215
+ | grep -c "data:" || true)
216
+ echo " ✅ Received $STREAM_EVENTS SSE frames"
217
+ echo ""
218
+
219
+ # Step 3: Multi-turn
220
+ echo "3️⃣ Testing Multi-Turn Persistence (Turn 2)..."
221
+ STREAM_EVENTS_T2=$(curl -s -N -X POST "$BASE_URL/api/entities/query_rewriter/run/stream" \
222
+ -H "Content-Type: application/json" \
223
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Make it shorter\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"stream_tokens\":false}" \
224
+ | grep -c "data:" || true)
225
+ echo " ✅ Received $STREAM_EVENTS_T2 SSE frames (context preserved)"
226
+ echo ""
227
+
228
+ # Step 4: Orchestrator
229
+ echo "4️⃣ Testing Orchestrator Execution..."
230
+ SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
231
+ ORCH_RESULT=$(curl -s -X POST "$BASE_URL/api/entities/round_robin_team/run" \
232
+ -H "Content-Type: application/json" \
233
+ -d "{\"messages\":[{\"role\":\"user\",\"content\":\"Write a 2 sentence note about solar energy.\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\"}")
234
+ MSG_COUNT=$(echo "$ORCH_RESULT" | jq '.messages | length')
235
+ echo " ✅ Orchestrator produced $MSG_COUNT messages"
236
+ echo ""
237
+
238
+ # Step 5: Workflow
239
+ echo "5️⃣ Testing Workflow Execution..."
240
+ SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
241
+ WF_RESULT=$(curl -s -X POST "$BASE_URL/api/entities/research_writer_reviewer_workflow/run" \
242
+ -H "Content-Type: application/json" \
243
+ -d "{\"input_data\":{\"task\":\"Write 1 sentence about solar energy.\"},\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\"}")
244
+ WF_STATUS=$(echo "$WF_RESULT" | jq -r '.status')
245
+ STEP_COUNT=$(echo "$WF_RESULT" | jq '.step_executions | length')
246
+ echo " ✅ Workflow status: $WF_STATUS ($STEP_COUNT steps)"
247
+ echo ""
248
+
249
+ echo "✅ All smoke tests passed!"
250
+ ```
251
+
252
+ **Run it**:
253
+ ```bash
254
+ chmod +x smoke_test.sh
255
+ ./smoke_test.sh
256
+ # or with custom base URL:
257
+ ./smoke_test.sh http://prod-server:8080
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Common Issues & Solutions
263
+
264
+ | Issue | Cause | Solution |
265
+ |-------|-------|----------|
266
+ | HTTP 400 | Missing `source` field in message | Add `"source":"user"` to every message |
267
+ | HTTP 404 | Entity doesn't exist | Verify entity_id in discovery response |
268
+ | HTTP 500 | API credential invalid/expired | Check `$OPENAI_API_KEY` or Azure credentials |
269
+ | HTTP 500 | Rate limit hit | Wait 60s and retry |
270
+ | No output | Server not running | `uv run python examples/webui/presets_webui.py` |
271
+ | No SSE frames | `-N` flag needed | Use `-N` flag for streaming: `curl -N ...` |
272
+ | Timeout | Model responding slowly | Increase timeout: `--max-time 120` |
273
+ | Session not persisting | Wrong session store | Check config; use in-memory for dev tests |
274
+
275
+ ---
276
+
277
+ ## Debugging with Verbose Output
278
+
279
+ ```bash
280
+ # See full HTTP headers and response:
281
+ curl -v -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
282
+ -H "Content-Type: application/json" \
283
+ -d '{"messages":[{"role":"user","content":"test","source":"user"}],"session_id":"xyz","user_id":"abc","stream_tokens":false}' \
284
+ 2>&1 | head -50
285
+
286
+ # See just the first SSE frame:
287
+ curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
288
+ -H "Content-Type: application/json" \
289
+ -d '...' \
290
+ 2>/dev/null | head -1 | jq .
291
+
292
+ # Parse event types from stream:
293
+ curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
294
+ -H "Content-Type: application/json" \
295
+ -d '...' \
296
+ 2>/dev/null | grep -oP '"event_type":\s*"\K[^"]+' | sort | uniq -c
297
+ ```
298
+
299
+ ---
300
+
301
+ ## Success Criteria
302
+
303
+ ✅ **Smoke tests pass if**:
304
+ 1. Discovery returns entity array
305
+ 2. Agent streaming produces 4+ SSE frames
306
+ 3. Multi-turn context includes prior messages
307
+ 4. Orchestrator produces 2+ agent messages
308
+ 5. Workflow completes all steps
309
+
310
+ ✅ **You can now**:
311
+ - Deploy to dev/staging with confidence
312
+ - Debug specific entity types using this guide
313
+ - Add new entities and rerun smoke tests
314
+ - Use curl patterns as frontend request templates
@@ -4,6 +4,23 @@ All notable changes to Agentbyte are documented in this file.
4
4
 
5
5
  The format follows Keep a Changelog principles and semantic versioning.
6
6
 
7
+ ## [0.20.5] - 2026-05-20
8
+
9
+ ### Added
10
+
11
+ - Added `agentbyte.presets.streaming` with `ConsoleStreamPrinter`, `render_stream_item`, `run_agent_stream()`, `run_orchestrator_stream()`, and `run_workflow_stream()` for readable terminal/notebook stream inspection.
12
+ - Exported the console streaming helpers from `agentbyte.presets` and the top-level `agentbyte` package.
13
+ - Added focused tests for stream rendering, helper return values, package exports, workflow-as-agent event forwarding, and delegated agent-as-tool streaming.
14
+ - Added `docs/study/01-agent_topics/topic_console_streaming_preset.md` and cross-referenced it from the agent and stream logger study topics.
15
+
16
+ ### Changed
17
+
18
+ - `WorkflowAgent.run_stream(verbose=True)` now forwards underlying workflow events before yielding the final agent-style `AssistantMessage` and `AgentResponse`; `verbose=False` preserves the quiet final-output behavior.
19
+ - `AgentAsTool.execute_stream()` now invokes delegated child agents with `verbose=True` and `stream_tokens=False`, allowing nested child-agent events to flow through parent verbose streams without nested token noise.
20
+ - Updated repo-local `.github/skills` guidance for agents, workflows, orchestration, and middleware logging, including explicit `LoggingMiddleware` setup with Python logging configuration.
21
+
22
+ ---
23
+
7
24
  ## [0.20.4] - 2026-05-18
8
25
 
9
26
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbyte
3
- Version: 0.20.4
3
+ Version: 0.20.5
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
@@ -76,7 +76,7 @@ Description-Content-Type: text/markdown
76
76
 
77
77
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
78
78
 
79
- Current release: **0.20.4**
79
+ Current release: **0.20.5**
80
80
 
81
81
  ## Current Capabilities
82
82
 
@@ -84,6 +84,7 @@ Current release: **0.20.4**
84
84
  - Tooling system (function tools + core tools + memory tool).
85
85
  - Middleware chain for request/response/error handling.
86
86
  - Built-in middleware: logging, security, rate limiting, approval, telemetry.
87
+ - Console stream printing presets for readable agent, orchestrator, and workflow debugging.
87
88
  - Memory abstractions: list memory, file memory, context injection.
88
89
  - OpenAI and Azure OpenAI model client support.
89
90
  - OpenTelemetry-first tracing with model-call and task-level usage telemetry.