agentbyte 0.3.6__tar.gz → 0.4.2__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 (226) hide show
  1. agentbyte-0.4.2/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +188 -0
  2. agentbyte-0.4.2/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +122 -0
  3. {agentbyte-0.3.6 → agentbyte-0.4.2}/.gitignore +3 -1
  4. {agentbyte-0.3.6 → agentbyte-0.4.2}/CHANGELOG.md +50 -0
  5. {agentbyte-0.3.6 → agentbyte-0.4.2}/PKG-INFO +143 -4
  6. {agentbyte-0.3.6 → agentbyte-0.4.2}/README.md +137 -3
  7. {agentbyte-0.3.6 → agentbyte-0.4.2}/pyproject.toml +12 -1
  8. agentbyte-0.4.2/src/agentbyte/__about__.py +2 -0
  9. agentbyte-0.4.2/src/agentbyte/__init__.py +98 -0
  10. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/agent.py +143 -27
  11. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/agent_as_tool.py +13 -9
  12. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/base.py +8 -2
  13. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cli/main.py +84 -1
  14. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai_embedding.py +1 -0
  15. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/embeddings_base.py +10 -2
  16. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/openai_embedding.py +1 -0
  17. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/types.py +13 -1
  18. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/otel.py +12 -0
  19. agentbyte-0.4.2/src/agentbyte/orchestration/__init__.py +17 -0
  20. agentbyte-0.4.2/src/agentbyte/orchestration/ai.py +198 -0
  21. agentbyte-0.4.2/src/agentbyte/orchestration/base.py +656 -0
  22. agentbyte-0.4.2/src/agentbyte/orchestration/plan.py +425 -0
  23. agentbyte-0.4.2/src/agentbyte/orchestration/round_robin.py +137 -0
  24. agentbyte-0.4.2/src/agentbyte/termination/__init__.py +25 -0
  25. agentbyte-0.4.2/src/agentbyte/termination/base.py +87 -0
  26. agentbyte-0.4.2/src/agentbyte/termination/cancellation.py +45 -0
  27. agentbyte-0.4.2/src/agentbyte/termination/composite.py +84 -0
  28. agentbyte-0.4.2/src/agentbyte/termination/external.py +58 -0
  29. agentbyte-0.4.2/src/agentbyte/termination/function_call.py +58 -0
  30. agentbyte-0.4.2/src/agentbyte/termination/handoff.py +65 -0
  31. agentbyte-0.4.2/src/agentbyte/termination/max_message.py +51 -0
  32. agentbyte-0.4.2/src/agentbyte/termination/text_mention.py +59 -0
  33. agentbyte-0.4.2/src/agentbyte/termination/timeout.py +59 -0
  34. agentbyte-0.4.2/src/agentbyte/termination/token_usage.py +63 -0
  35. agentbyte-0.4.2/src/agentbyte/types.py +241 -0
  36. agentbyte-0.4.2/src/agentbyte/webui/__init__.py +52 -0
  37. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-BzhEszHZ.css +1 -0
  38. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-DByFJNGD.js +245 -0
  39. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/index.html +14 -0
  40. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/vite.svg +1 -0
  41. agentbyte-0.4.2/src/agentbyte/webui/discovery.py +230 -0
  42. agentbyte-0.4.2/src/agentbyte/webui/execution.py +268 -0
  43. agentbyte-0.4.2/src/agentbyte/webui/frontend/.gitignore +22 -0
  44. agentbyte-0.4.2/src/agentbyte/webui/frontend/README.md +69 -0
  45. agentbyte-0.4.2/src/agentbyte/webui/frontend/components.json +21 -0
  46. agentbyte-0.4.2/src/agentbyte/webui/frontend/eslint.config.js +23 -0
  47. agentbyte-0.4.2/src/agentbyte/webui/frontend/index.html +13 -0
  48. agentbyte-0.4.2/src/agentbyte/webui/frontend/package.json +47 -0
  49. agentbyte-0.4.2/src/agentbyte/webui/frontend/plan.md +0 -0
  50. agentbyte-0.4.2/src/agentbyte/webui/frontend/public/vite.svg +1 -0
  51. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.css +42 -0
  52. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.tsx +486 -0
  53. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/assets/react.svg +1 -0
  54. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +312 -0
  55. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +275 -0
  56. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +20 -0
  57. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +7 -0
  58. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +24 -0
  59. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +39 -0
  60. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +280 -0
  61. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +49 -0
  62. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +253 -0
  63. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +460 -0
  64. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +266 -0
  65. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +264 -0
  66. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +41 -0
  67. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/examples-gallery.tsx +268 -0
  68. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +198 -0
  69. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +142 -0
  70. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +33 -0
  71. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +166 -0
  72. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +36 -0
  73. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/button.tsx +59 -0
  74. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/card.tsx +92 -0
  75. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +71 -0
  76. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +255 -0
  77. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +141 -0
  78. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/input.tsx +21 -0
  79. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/label.tsx +22 -0
  80. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +23 -0
  81. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +52 -0
  82. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +237 -0
  83. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +46 -0
  84. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +26 -0
  85. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +53 -0
  86. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +24 -0
  87. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +422 -0
  88. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +274 -0
  89. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +312 -0
  90. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/index.css +147 -0
  91. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/main.tsx +18 -0
  92. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/services/api.ts +290 -0
  93. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/index.ts +52 -0
  94. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/picoagents.ts +261 -0
  95. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/utils/message-utils.ts +149 -0
  96. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/vite-env.d.ts +9 -0
  97. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.app.json +31 -0
  98. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.json +13 -0
  99. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.node.json +25 -0
  100. agentbyte-0.4.2/src/agentbyte/webui/frontend/vite.config.ts +34 -0
  101. agentbyte-0.4.2/src/agentbyte/webui/frontend/yarn.lock +2282 -0
  102. agentbyte-0.4.2/src/agentbyte/webui/models.py +174 -0
  103. agentbyte-0.4.2/src/agentbyte/webui/registry.py +130 -0
  104. agentbyte-0.4.2/src/agentbyte/webui/server.py +431 -0
  105. agentbyte-0.4.2/src/agentbyte/webui/session_store.py +63 -0
  106. agentbyte-0.4.2/src/agentbyte/webui/sessions.py +99 -0
  107. agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-CWk64UM3.js +359 -0
  108. agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-vt1cujlT.css +1 -0
  109. agentbyte-0.4.2/src/agentbyte/webui/ui/index.html +14 -0
  110. agentbyte-0.4.2/src/agentbyte/webui/ui/vite.svg +1 -0
  111. agentbyte-0.4.2/tests/agents/test_agent_as_tool.py +556 -0
  112. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_basic.py +71 -7
  113. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_memory_integration.py +4 -4
  114. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_middleware_integration.py +28 -7
  115. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_stream_events.py +21 -7
  116. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_tool_approval.py +13 -6
  117. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/cli/test_create_skills.py +3 -1
  118. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_azure_embedding_client.py +3 -0
  119. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_openai_embedding_client.py +3 -0
  120. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/middleware/test_otel.py +36 -0
  121. agentbyte-0.4.2/tests/orchestration/test_ai_orchestrator.py +231 -0
  122. agentbyte-0.4.2/tests/orchestration/test_base_orchestrator.py +184 -0
  123. agentbyte-0.4.2/tests/orchestration/test_plan_orchestrator.py +555 -0
  124. agentbyte-0.4.2/tests/orchestration/test_round_robin.py +156 -0
  125. agentbyte-0.4.2/tests/termination/test_base.py +56 -0
  126. agentbyte-0.4.2/tests/termination/test_cancellation.py +23 -0
  127. agentbyte-0.4.2/tests/termination/test_composite.py +57 -0
  128. agentbyte-0.4.2/tests/termination/test_external.py +25 -0
  129. agentbyte-0.4.2/tests/termination/test_function_call.py +37 -0
  130. agentbyte-0.4.2/tests/termination/test_handoff.py +37 -0
  131. agentbyte-0.4.2/tests/termination/test_max_message.py +39 -0
  132. agentbyte-0.4.2/tests/termination/test_text_mention.py +47 -0
  133. agentbyte-0.4.2/tests/termination/test_timeout.py +30 -0
  134. agentbyte-0.4.2/tests/termination/test_token_usage.py +39 -0
  135. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_package_api.py +16 -0
  136. agentbyte-0.4.2/tests/test_types.py +218 -0
  137. agentbyte-0.4.2/tests/webui/__init__.py +1 -0
  138. agentbyte-0.4.2/tests/webui/helpers.py +142 -0
  139. agentbyte-0.4.2/tests/webui/test_execution.py +139 -0
  140. agentbyte-0.4.2/tests/webui/test_package_api.py +14 -0
  141. agentbyte-0.4.2/tests/webui/test_registry.py +79 -0
  142. agentbyte-0.4.2/tests/webui/test_server.py +54 -0
  143. agentbyte-0.3.6/src/agentbyte/__about__.py +0 -2
  144. agentbyte-0.3.6/src/agentbyte/__init__.py +0 -39
  145. agentbyte-0.3.6/src/agentbyte/types.py +0 -65
  146. agentbyte-0.3.6/tests/agents/test_agent_as_tool.py +0 -258
  147. agentbyte-0.3.6/tests/test_types.py +0 -52
  148. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-agent-as-tool/SKILL.md +0 -0
  149. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
  150. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
  151. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
  152. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
  153. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
  154. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-middleware/SKILL.md +0 -0
  155. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-multi-turn-context/SKILL.md +0 -0
  156. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
  157. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-simple-agent/SKILL.md +0 -0
  158. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-tool-approval/SKILL.md +0 -0
  159. {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/skill-authoring/SKILL.md +0 -0
  160. {agentbyte-0.3.6 → agentbyte-0.4.2}/LICENSE +0 -0
  161. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/__init__.py +0 -0
  162. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/types.py +0 -0
  163. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cancellation_token.py +0 -0
  164. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cli/__init__.py +0 -0
  165. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/component.py +0 -0
  166. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/context.py +0 -0
  167. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/__init__.py +0 -0
  168. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/base.py +0 -0
  169. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/json.py +0 -0
  170. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/loader.py +0 -0
  171. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/loaders.py +0 -0
  172. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/sqlite.py +0 -0
  173. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/entity.py +0 -0
  174. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/__init__.py +0 -0
  175. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/auth.py +0 -0
  176. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai.py +0 -0
  177. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/base.py +0 -0
  178. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/openai.py +0 -0
  179. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/pricing.py +0 -0
  180. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/settings.py +0 -0
  181. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/memory/__init__.py +0 -0
  182. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/memory/base.py +0 -0
  183. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/messages.py +0 -0
  184. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/__init__.py +0 -0
  185. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/base.py +0 -0
  186. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/notebook.py +0 -0
  187. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/session.py +0 -0
  188. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/__init__.py +0 -0
  189. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/base.py +0 -0
  190. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/core_tools.py +0 -0
  191. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/decorator.py +0 -0
  192. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/memory_tool.py +0 -0
  193. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/__init__.py +0 -0
  194. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/__init__.py +0 -0
  195. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  196. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/models.py +0 -0
  197. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/runner.py +0 -0
  198. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/workflow.py +0 -0
  199. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/defaults.py +0 -0
  200. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/schema_utils.py +0 -0
  201. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/__init__.py +0 -0
  202. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
  203. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/echo.py +0 -0
  204. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/function.py +0 -0
  205. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/http.py +0 -0
  206. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/step.py +0 -0
  207. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/transform.py +0 -0
  208. {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/visualizer.py +0 -0
  209. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_event_types.py +0 -0
  210. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_azure_client.py +0 -0
  211. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_llm_types.py +0 -0
  212. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_openai_client.py +0 -0
  213. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/memory/test_memory.py +0 -0
  214. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/middleware/test_middleware_chain.py +0 -0
  215. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_cancellation_token.py +0 -0
  216. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_context.py +0 -0
  217. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_messages.py +0 -0
  218. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_session.py +0 -0
  219. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/tools/test_memory_tool.py +0 -0
  220. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/tools/test_tools.py +0 -0
  221. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_checkpoint.py +0 -0
  222. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_class.py +0 -0
  223. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_models.py +0 -0
  224. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_runner.py +0 -0
  225. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_steps.py +0 -0
  226. {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: agentbyte-ai-driven-orchestration
3
+ description: Guide for creating AI-Driven multi-agent orchestration in Agentbyte (Chapter 7.4). Use this when you need LLM-based adaptive agent selection instead of fixed turn sequences.
4
+ license: MIT
5
+ ---
6
+
7
+ Use this skill when implementing multi-agent collaboration where an LLM intelligently selects which agent should respond next based on conversation context and agent capabilities.
8
+
9
+ ## Pattern: Basic AI-Driven Orchestration
10
+
11
+ ```python
12
+ import asyncio
13
+ from agentbyte import AIOrchestrator, Agent, UserMessage
14
+ from agentbyte.llm import OpenAIChatCompletionClient
15
+ from agentbyte.termination import MaxMessageTermination, TextMentionTermination
16
+
17
+ async def main():
18
+ # 1. Create model client
19
+ client = OpenAIChatCompletionClient.from_api_key(model="gpt-4o-mini")
20
+
21
+ # 2. Create agents with clear descriptions (LLM uses these for selection)
22
+ researcher = Agent(
23
+ name="researcher",
24
+ description="Research specialist for factual and contextual information",
25
+ instructions=(
26
+ "You are a research specialist. Provide concise factual insights "
27
+ "and clarify missing context when needed."
28
+ ),
29
+ model_client=client
30
+ )
31
+
32
+ writer = Agent(
33
+ name="writer",
34
+ description="Content specialist for polished user-facing writing",
35
+ instructions=(
36
+ "You are a writer. Synthesize available information into concise, "
37
+ "high-quality prose. End with TERMINATE when complete."
38
+ ),
39
+ model_client=client
40
+ )
41
+
42
+ # 3. Define termination conditions
43
+ termination = MaxMessageTermination(8) | TextMentionTermination("TERMINATE")
44
+
45
+ # 4. Initialize AI orchestrator (requires model_client for selection)
46
+ orchestrator = AIOrchestrator(
47
+ agents=[researcher, writer],
48
+ termination=termination,
49
+ model_client=client, # Required: LLM for agent selection
50
+ max_iterations=6
51
+ )
52
+
53
+ # 5. Run the collaboration
54
+ task = UserMessage(
55
+ content="Write a short note about the benefits of solar energy",
56
+ source="user"
57
+ )
58
+
59
+ result = await orchestrator.run(task)
60
+
61
+ print(f"Stop reason: {result.stop_message.content}")
62
+ print(f"Iterations: {result.pattern_metadata.get('iterations_completed')}")
63
+ print(f"Selector calls: {result.pattern_metadata.get('selector_calls')}")
64
+ print(f"Total tokens: {result.usage.total_tokens}")
65
+
66
+ asyncio.run(main())
67
+ ```
68
+
69
+ ## Pattern: Streaming AI-Driven Orchestration
70
+
71
+ ```python
72
+ async for item in orchestrator.run_stream(task, verbose=True):
73
+ if isinstance(item, Message):
74
+ print(f"[{item.source}] {item.content}")
75
+ elif isinstance(item, OrchestrationEvent):
76
+ # AgentSelectionEvent includes AI reasoning
77
+ if hasattr(item, 'reason'):
78
+ print(f"Selection reason: {item.reason}")
79
+ elif isinstance(item, OrchestrationResponse):
80
+ print(f"Complete: {item.stop_message.content}")
81
+ ```
82
+
83
+ ## How AI Selection Works
84
+
85
+ 1. **Structured Output:** The orchestrator uses LLM with structured output (`AgentSelection` schema) to select the next agent
86
+ 2. **Context Awareness:** The LLM sees conversation history and all agent descriptions
87
+ 3. **Reasoning Included:** Selection events include the LLM's reasoning for why it chose that agent
88
+ 4. **Fallback Safety:** If LLM selection fails or returns invalid agent name, falls back to round-robin
89
+
90
+ ## Configuration Options
91
+
92
+ ```python
93
+ orchestrator = AIOrchestrator(
94
+ agents=[agent1, agent2, agent3], # Required: List of agents
95
+ termination=termination_condition, # Required: When to stop
96
+ model_client=selection_model_client, # Required: LLM for agent selection
97
+ max_iterations=10, # Optional: Safety limit (default: 10)
98
+ verbose=False # Optional: Enable event logging
99
+ )
100
+ ```
101
+
102
+ ## Pattern Metadata
103
+
104
+ After completion, `result.pattern_metadata` contains:
105
+ - `iterations_completed`: Total agent executions
106
+ - `selector_calls`: Number of LLM selection calls made
107
+ - `fallback_count`: How many times round-robin fallback was used
108
+ - `final_reason`: Why orchestration stopped
109
+
110
+ ## Usage Tracking
111
+
112
+ The orchestrator tracks token usage from:
113
+ - All agent executions
114
+ - All selector LLM calls (agent selection)
115
+
116
+ Final `result.usage` includes comprehensive totals across all LLM interactions.
117
+
118
+ ## Agent Description Best Practices
119
+
120
+ The LLM uses agent descriptions to make selection decisions. Write clear, specific descriptions:
121
+
122
+ ✅ **Good:**
123
+ ```python
124
+ description="Research specialist for factual and contextual information"
125
+ description="Content specialist for polished user-facing writing"
126
+ description="Code reviewer that checks for bugs and style issues"
127
+ ```
128
+
129
+ ❌ **Avoid:**
130
+ ```python
131
+ description="A helpful agent" # Too vague
132
+ description="Agent 1" # No capability info
133
+ ```
134
+
135
+ ## Guardrails
136
+
137
+ - **Model Client Required:** `AIOrchestrator` needs a `model_client` parameter for agent selection (unlike `RoundRobinOrchestrator`).
138
+ - **Clear Descriptions:** Write specific agent descriptions—the LLM uses these to decide who should respond.
139
+ - **Termination Required:** Always provide termination conditions to prevent infinite loops.
140
+ - **Safety Fallback:** If LLM selection fails, orchestrator falls back to round-robin (check `fallback_count` in metadata).
141
+ - **Usage Accounting:** Final usage includes both agent tokens AND selector tokens.
142
+ - **Case Insensitive:** Agent name matching is case-insensitive for robustness.
143
+ - **Event Observability:** Use `verbose=True` with `run_stream()` to see AI selection reasoning.
144
+
145
+ ## When to Use AI-Driven vs Round-Robin
146
+
147
+ | Use AI-Driven When | Use Round-Robin When |
148
+ |--------------------|----------------------|
149
+ | Agent roles are specialized | Agents always alternate (poet/critic) |
150
+ | Order should adapt to context | Fixed workflow is desired |
151
+ | You have 3+ agents | You have exactly 2 agents |
152
+ | Complexity requires smart routing | Simple back-and-forth suffices |
153
+ | You want LLM to decide flow | You want deterministic order |
154
+
155
+ ## Common Use Cases
156
+
157
+ 1. **Research → Write → Review:** LLM decides when research is sufficient, when to write, when to review
158
+ 2. **Multi-Specialist Teams:** Route to the right expert (data analyst, writer, coder, reviewer)
159
+ 3. **Adaptive Workflows:** Let LLM determine optimal agent sequence based on task complexity
160
+ 4. **Dynamic Collaboration:** Agents with overlapping capabilities—LLM picks best fit
161
+ 5. **Question Routing:** Route user questions to the most appropriate agent based on content
162
+
163
+ ## Examples
164
+
165
+ - Basic: `examples/orchestration/ai_driven_basic.py`
166
+ - Streaming: `examples/orchestration/ai_driven_stream.py`
167
+ - With OTel: `examples/orchestration/ai_driven_with_otel.py`
168
+
169
+ ## OpenTelemetry Integration
170
+
171
+ For observability with Jaeger:
172
+
173
+ ```python
174
+ import os
175
+ # Set BEFORE importing agentbyte
176
+ os.environ["AGENTBYTE_ENABLE_OTEL"] = "true"
177
+ os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "http://localhost:4318"
178
+ os.environ["OTEL_SERVICE_NAME"] = "my-ai-orchestration"
179
+
180
+ from agentbyte import AIOrchestrator
181
+ # ... rest of code
182
+ ```
183
+
184
+ Traces will show:
185
+ - Orchestration span (parent)
186
+ - Selector LLM calls (for agent selection)
187
+ - Individual agent execution spans
188
+ - Token usage aggregated at orchestration level
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: agentbyte-round-robin-orchestration
3
+ description: Guide for creating Round-Robin multi-agent orchestration in Agentbyte. Use this when coordinating multiple agents in sequential turns until a termination condition is met.
4
+ license: MIT
5
+ ---
6
+
7
+ Use this skill when implementing multi-agent collaboration where agents take turns in a fixed sequence (poet/critic, research/writing, review/revise patterns).
8
+
9
+ ## Pattern: Basic Round-Robin Orchestration
10
+
11
+ ```python
12
+ import asyncio
13
+ from agentbyte import RoundRobinOrchestrator, Agent, UserMessage
14
+ from agentbyte.llm import OpenAIChatCompletionClient
15
+ from agentbyte.termination import MaxMessageTermination, TextMentionTermination
16
+
17
+ async def main():
18
+ # 1. Create model client
19
+ client = OpenAIChatCompletionClient.from_api_key(model="gpt-4o-mini")
20
+
21
+ # 2. Create agents
22
+ poet = Agent(
23
+ name="poet",
24
+ description="A creative poet that writes and refines haikus",
25
+ instructions="Write a haiku. If you received feedback, refine it.",
26
+ model_client=client
27
+ )
28
+
29
+ critic = Agent(
30
+ name="critic",
31
+ description="A strict poetry critic",
32
+ instructions="Review the poem. If good, say APPROVED. Else provide feedback.",
33
+ model_client=client
34
+ )
35
+
36
+ # 3. Define termination conditions (composable with | and &)
37
+ termination = TextMentionTermination("APPROVED") | MaxMessageTermination(6)
38
+
39
+ # 4. Initialize orchestrator
40
+ orchestrator = RoundRobinOrchestrator(
41
+ agents=[poet, critic],
42
+ termination=termination,
43
+ max_iterations=10 # Safety fallback
44
+ )
45
+
46
+ # 5. Run the collaboration
47
+ task = UserMessage(content="Write a haiku about programming", source="user")
48
+ result = await orchestrator.run(task)
49
+
50
+ print(f"Stop reason: {result.stop_message.content}")
51
+ print(f"Total tokens: {result.usage.total_tokens}")
52
+ print(f"Cycles: {result.pattern_metadata['cycles_completed']}")
53
+
54
+ asyncio.run(main())
55
+ ```
56
+
57
+ ## Pattern: Streaming Round-Robin
58
+
59
+ ```python
60
+ async for item in orchestrator.run_stream(task, verbose=True):
61
+ if isinstance(item, Message):
62
+ print(f"[{item.source}] {item.content}")
63
+ elif isinstance(item, OrchestrationEvent):
64
+ # Track selection, execution events
65
+ print(f"Event: {item.__class__.__name__}")
66
+ elif isinstance(item, OrchestrationResponse):
67
+ # Final result
68
+ print(f"Complete: {item.stop_message.content}")
69
+ ```
70
+
71
+ ## Available Termination Conditions
72
+
73
+ | Termination Type | Purpose | Example |
74
+ |-----------------|---------|---------|
75
+ | `MaxMessageTermination(n)` | Stop after n messages | `MaxMessageTermination(10)` |
76
+ | `TextMentionTermination("X")` | Stop when text appears | `TextMentionTermination("APPROVED")` |
77
+ | `TokenUsageTermination(n)` | Stop after n tokens | `TokenUsageTermination(5000)` |
78
+ | `TimeoutTermination(sec)` | Stop after timeout | `TimeoutTermination(60.0)` |
79
+ | `CancellationTermination()` | Stop when cancelled | `CancellationTermination()` |
80
+ | Composite (OR) | Stop if any condition met | `T1 \| T2 \| T3` |
81
+ | Composite (AND) | Stop if all conditions met | `T1 & T2 & T3` |
82
+
83
+ ## Configuration Options
84
+
85
+ ```python
86
+ orchestrator = RoundRobinOrchestrator(
87
+ agents=[agent1, agent2, agent3], # Required: List of agents
88
+ termination=termination_condition, # Required: When to stop
89
+ max_iterations=10, # Optional: Safety limit (default: 10)
90
+ verbose=False # Optional: Enable event logging
91
+ )
92
+ ```
93
+
94
+ ## Pattern Metadata
95
+
96
+ After completion, `result.pattern_metadata` contains:
97
+ - `cycles_completed`: Number of full round-robin cycles
98
+ - `iterations_completed`: Total agent executions
99
+ - `final_reason`: Why orchestration stopped
100
+
101
+ ## Guardrails
102
+
103
+ - **Agent Order:** Agents execute in the order provided in the `agents` list.
104
+ - **Termination Required:** Always provide at least one termination condition to prevent infinite loops.
105
+ - **Safety Limit:** Set `max_iterations` as a failsafe even with other termination conditions.
106
+ - **Shared Context:** All agents see the full conversation history from previous turns.
107
+ - **Model Client:** Each agent needs its own `model_client` configured.
108
+ - **Event Observability:** Use `verbose=True` with `run_stream()` to track selection and execution events.
109
+
110
+ ## Common Use Cases
111
+
112
+ 1. **Poet/Critic Pattern:** Writer creates, reviewer approves or requests changes
113
+ 2. **Research/Writing:** Researcher gathers facts, writer synthesizes into prose
114
+ 3. **Code/Review:** Developer writes code, reviewer provides feedback
115
+ 4. **Plan/Execute:** Planner designs approach, executor implements steps
116
+ 5. **Draft/Polish:** Rough draft agent, then polish/editing agent
117
+
118
+ ## Examples
119
+
120
+ - Basic: `examples/orchestration/round_robin_basic.py`
121
+ - With OTel: `examples/orchestration/orchestrator_with_otel.py`
122
+ - Termination demo: `examples/orchestration/termination_demo.py`
@@ -16,6 +16,8 @@ wheels/
16
16
  *.swp
17
17
  *.swo
18
18
  *~
19
+ node_modules/
20
+ *.tsbuildinfo
19
21
 
20
22
  # OS
21
23
  .DS_Store
@@ -37,4 +39,4 @@ htmlcov/
37
39
 
38
40
  docs/chapters/
39
41
  data/Designing-Multi-Agent-Systems.pdf
40
- artifacts/
42
+ artifacts/
@@ -4,6 +4,56 @@ 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.4.2] - 2026-03-25
8
+
9
+ ### Added
10
+ - Added the copied picoagents `agent_framework_devui` assets under `src/agentbyte/webui/` for local parity/reference work.
11
+ - Added the upstream frontend workspace files that now live under `src/agentbyte/webui/frontend/`, including new public assets and shared UI components.
12
+
13
+ ### Changed
14
+ - Replaced the previous in-repo WebUI frontend source with the picoagents frontend snapshot copied into `src/agentbyte/webui/frontend/`.
15
+ - Removed the redundant Hatch wheel `force-include` for `src/agentbyte/webui/ui`, fixing duplicate archive entries during wheel builds.
16
+
17
+ ### Fixed
18
+ - Fixed PyPI publish failures caused by duplicate `agentbyte/webui/ui/*` filenames in the generated wheel.
19
+
20
+ ## [0.4.1] - 2026-03-25
21
+
22
+ ### Added
23
+ - Added a single-vector `embedding` field to `EmbeddingResult` while preserving the existing `embeddings`, `usage`, `model`, and `metadata` payload.
24
+
25
+ ### Changed
26
+ - Updated OpenAI and Azure embedding clients so `create()` and `create_batch()` both return an `EmbeddingResult` with `embedding == embeddings[0]`.
27
+ - Shipped the packaged Chapter 8 WebUI assets and parity updates that landed after `0.4.0`.
28
+
29
+ ### Testing
30
+ - Added focused embedding assertions for the dual-field result contract across OpenAI and Azure embedding clients.
31
+
32
+ ## [0.4.0] - 2026-03-24
33
+
34
+ ### Added
35
+ - New multi-agent orchestration module with shared `BaseOrchestrator` execution loop.
36
+ - New orchestration patterns:
37
+ - `RoundRobinOrchestrator`
38
+ - `AIOrchestrator`
39
+ - `PlanBasedOrchestrator`
40
+ - New plan-based orchestration public models:
41
+ - `PlanStep`
42
+ - `ExecutionPlan`
43
+ - `StepProgressEvaluation`
44
+ - New orchestration examples for basic, streaming, and OpenTelemetry-backed execution.
45
+ - New Chapter 7 study/tutorial docs for round-robin, AI-driven, and plan-based orchestration.
46
+
47
+ ### Changed
48
+ - Extended orchestration execution to support focused message-list context payloads and pattern-level completion hooks.
49
+ - Improved agent-as-tool streaming telemetry so tool middleware spans are preserved for delegated agent execution.
50
+ - Added aggregate usage summaries on workflow and orchestration root spans while keeping detailed `chat ...` and `tool ...` spans at the agent/middleware layer.
51
+ - Updated study docs to clarify the telemetry boundary across agents, workflows, and orchestrators.
52
+
53
+ ### Testing
54
+ - Added dedicated tests for plan-based orchestration behavior and package-level export coverage.
55
+ - Added telemetry regression coverage for delegated agent-as-tool execution and workflow root usage summaries.
56
+
7
57
  ## [0.3.6] - 2026-03-23
8
58
 
9
59
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbyte
3
- Version: 0.3.6
3
+ Version: 0.4.2
4
4
  Summary: A toolkit for designing multiagent systems
5
5
  Project-URL: Homepage, https://gitlab.com/pyninja/aiengineering/agentbyte
6
6
  Project-URL: Repository, https://gitlab.com/pyninja/aiengineering/agentbyte
@@ -15,10 +15,12 @@ Requires-Dist: pydantic-settings>=2.13.0
15
15
  Requires-Dist: pydantic>=2.12.5
16
16
  Provides-Extra: all
17
17
  Requires-Dist: azure-identity>=1.25.1; extra == 'all'
18
+ Requires-Dist: fastapi>=0.135.2; extra == 'all'
18
19
  Requires-Dist: openai>=1.107.1; extra == 'all'
19
20
  Requires-Dist: opentelemetry-api>=1.39.1; extra == 'all'
20
21
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
21
22
  Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
23
+ Requires-Dist: uvicorn>=0.42.0; extra == 'all'
22
24
  Provides-Extra: azureopenai
23
25
  Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
24
26
  Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
@@ -28,20 +30,44 @@ Provides-Extra: otel
28
30
  Requires-Dist: opentelemetry-api>=1.39.1; extra == 'otel'
29
31
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'otel'
30
32
  Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'otel'
33
+ Provides-Extra: webui
34
+ Requires-Dist: fastapi>=0.135.2; extra == 'webui'
35
+ Requires-Dist: uvicorn>=0.42.0; extra == 'webui'
31
36
  Description-Content-Type: text/markdown
32
37
 
33
38
  <p align="center">
34
- <img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.3.2/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
39
+ <img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.4.2/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
35
40
  </p>
36
41
 
37
42
  # Agentbyte
38
43
 
39
44
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
40
45
 
41
- Current release: **0.3.5**
46
+ Current release: **0.4.2**
42
47
 
43
48
  Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyninja/aiengineering/agentbyte)
44
49
 
50
+ ## What's New in 0.4.2
51
+
52
+ - Rebased the WebUI source frontend on the picoagents frontend snapshot copied into `src/agentbyte/webui/frontend/`.
53
+ - Added the packaged picoagents-style `agent_framework_devui` assets under `src/agentbyte/webui/` for parity/reference work.
54
+ - Fixed wheel packaging so the bundled WebUI assets are included once, unblocking PyPI publish.
55
+
56
+ ## What's New in 0.4.1
57
+
58
+ - Extended `EmbeddingResult` with a single-vector `embedding` field while preserving `embeddings`, `usage`, `model`, and `metadata`.
59
+ - Updated OpenAI and Azure embedding clients so single-input calls are easier to consume without losing batch compatibility.
60
+ - Added and validated focused embedding client coverage for the new dual-field result contract.
61
+
62
+ ## What's New in 0.4.0
63
+
64
+ - Added multi-agent orchestration foundations with `BaseOrchestrator`.
65
+ - Added `RoundRobinOrchestrator`, `AIOrchestrator`, and `PlanBasedOrchestrator`.
66
+ - Added a full termination system for autonomous orchestration flows.
67
+ - Added plan-based orchestration examples, tests, and study/tutorial docs.
68
+ - Expanded OpenTelemetry coverage across agents, workflows, and orchestration roots with aggregate usage summaries.
69
+ - Added a packaged Chapter 8 WebUI with FastAPI + SSE, session handling, discovery, and a browser UI for agents, workflows, and orchestrators.
70
+
45
71
  ## What's New in 0.3.5
46
72
 
47
73
  - Added first-class async embeddings clients in `agentbyte.llm` for OpenAI and Azure OpenAI.
@@ -124,6 +150,7 @@ Optional extras:
124
150
  uv sync --extra openai
125
151
  uv sync --extra azureopenai
126
152
  uv sync --extra otel
153
+ uv sync --extra webui
127
154
  ```
128
155
 
129
156
  ### Install in another project (pip / uv add)
@@ -138,6 +165,14 @@ pip install "agentbyte[azureopenai,otel]"
138
165
  uv add "agentbyte[azureopenai,otel]"
139
166
  ```
140
167
 
168
+ For the browser WebUI:
169
+
170
+ ```bash
171
+ pip install "agentbyte[webui]"
172
+ # or
173
+ uv add "agentbyte[webui]"
174
+ ```
175
+
141
176
  Install all optional features:
142
177
 
143
178
  ```bash
@@ -173,6 +208,111 @@ agent = Agent(
173
208
  )
174
209
  ```
175
210
 
211
+ ## Run The WebUI
212
+
213
+ ### Option 1: Run the included demo app
214
+
215
+ This is the easiest way to see the WebUI working end to end with:
216
+ - one demo agent
217
+ - one demo workflow
218
+ - one demo orchestrator
219
+
220
+ Step 1. Install the WebUI extra:
221
+
222
+ ```bash
223
+ uv sync --extra webui
224
+ ```
225
+
226
+ Step 2. Start the demo app:
227
+
228
+ ```bash
229
+ uv run python examples/webui/basic_webui.py
230
+ ```
231
+
232
+ Step 3. Open the browser:
233
+
234
+ ```text
235
+ http://127.0.0.1:8080
236
+ ```
237
+
238
+ If auto-open is enabled in your environment, the browser may open automatically.
239
+
240
+ ### Option 2: Run the WebUI against your current project directory
241
+
242
+ Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
243
+
244
+ Important: discovery is convention-based. The scanned directory must contain Python modules that expose top-level variables literally named `agent`, `workflow`, or `orchestrator`. If you point `--dir` at a folder that does not export those names, the UI will load but show `No entities found`.
245
+
246
+ Step 1. Install the WebUI extra:
247
+
248
+ ```bash
249
+ uv sync --extra webui
250
+ ```
251
+
252
+ Step 2. Launch the WebUI and scan the current directory:
253
+
254
+ ```bash
255
+ uv run agentbyte webui --dir .
256
+ ```
257
+
258
+ Step 3. Open the browser:
259
+
260
+ ```text
261
+ http://127.0.0.1:8080
262
+ ```
263
+
264
+ Useful variants:
265
+
266
+ ```bash
267
+ uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
268
+ uv run agentbyte webui --dir examples --port 8090
269
+ ```
270
+
271
+ For this repository, the most reliable first-run path is still the bundled demo:
272
+
273
+ ```bash
274
+ uv run python examples/webui/basic_webui.py
275
+ ```
276
+
277
+ Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
278
+
279
+ ```python
280
+ # my_entities.py
281
+ agent = ...
282
+ workflow = ...
283
+ orchestrator = ...
284
+ ```
285
+
286
+ ### Option 3: Run it programmatically
287
+
288
+ Use this when you want to serve in-memory entities directly from Python.
289
+
290
+ ```python
291
+ from agentbyte.webui import serve
292
+
293
+ serve(entities=[agent], port=8080, auto_open=True)
294
+ ```
295
+
296
+ ### Quick Troubleshooting
297
+
298
+ If the app does not start:
299
+
300
+ ```bash
301
+ uv sync --extra webui
302
+ ```
303
+
304
+ If port `8080` is already in use:
305
+
306
+ ```bash
307
+ uv run agentbyte webui --dir . --port 8090
308
+ ```
309
+
310
+ If you do not want the browser to open automatically:
311
+
312
+ ```bash
313
+ uv run agentbyte webui --dir . --no-open
314
+ ```
315
+
176
316
  ## Project Layout
177
317
 
178
318
  ```
@@ -202,4 +342,3 @@ MIT — see [LICENSE](LICENSE).
202
342
 
203
343
  - [Designing Multi-Agent Systems](https://github.com/victordibia/designing-multiagent-systems/tree/main)
204
344
  - [Microsoft Agent Framework](https://github.com/microsoft/agent-framework)
205
-