agentbyte 0.7.0__tar.gz → 0.9.0__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 (292) hide show
  1. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md +6 -1
  2. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-workflow/SKILL.md +56 -8
  3. {agentbyte-0.7.0 → agentbyte-0.9.0}/CHANGELOG.md +49 -0
  4. agentbyte-0.9.0/PKG-INFO +319 -0
  5. agentbyte-0.9.0/README.md +259 -0
  6. {agentbyte-0.7.0 → agentbyte-0.9.0}/pyproject.toml +8 -0
  7. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/__about__.py +1 -1
  8. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/__init__.py +2 -0
  9. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/agent.py +3 -0
  10. agentbyte-0.9.0/src/agentbyte/middleware/sql_usage.py +140 -0
  11. agentbyte-0.9.0/src/agentbyte/middleware/usage_logger.py +177 -0
  12. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/__init__.py +2 -0
  13. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/ai.py +8 -1
  14. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/base.py +40 -7
  15. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/plan.py +8 -15
  16. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/policies.py +17 -1
  17. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/round_robin.py +3 -1
  18. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/agents.py +11 -7
  19. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/orchestration.py +18 -2
  20. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/workflow.py +53 -6
  21. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/__init__.py +4 -1
  22. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/execution.py +33 -5
  23. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/index.html +1 -2
  24. agentbyte-0.9.0/src/agentbyte/webui/frontend/package-lock.json +4893 -0
  25. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/package.json +4 -2
  26. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/App.tsx +22 -48
  27. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +21 -4
  28. agentbyte-0.9.0/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +608 -0
  29. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +12 -8
  30. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +56 -13
  31. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +113 -13
  32. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +2 -24
  33. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +7 -3
  34. agentbyte-0.9.0/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +508 -0
  35. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +97 -33
  36. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +41 -10
  37. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +165 -26
  38. agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/format-utils.ts +3 -0
  39. agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/user-id.ts +23 -0
  40. agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/utils.ts +6 -0
  41. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/services/api.ts +102 -31
  42. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/types/index.ts +2 -2
  43. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/types/picoagents.ts +26 -11
  44. agentbyte-0.9.0/src/agentbyte/webui/frontend/yarn.lock +2401 -0
  45. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/models.py +32 -0
  46. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/registry.py +1 -1
  47. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/server.py +130 -73
  48. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/sessions.py +69 -4
  49. agentbyte-0.9.0/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +82 -0
  50. agentbyte-0.9.0/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +1 -0
  51. agentbyte-0.9.0/src/agentbyte/webui/ui/index.html +13 -0
  52. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/models.py +1 -0
  53. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/runner.py +11 -0
  54. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/agentbyte_agent.py +20 -3
  55. agentbyte-0.9.0/tests/middleware/test_sql_usage.py +245 -0
  56. agentbyte-0.9.0/tests/middleware/test_usage_logger.py +221 -0
  57. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_base_orchestrator.py +121 -0
  58. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_plan_orchestrator.py +3 -4
  59. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_orchestration.py +38 -0
  60. agentbyte-0.9.0/tests/presets/test_workflow.py +96 -0
  61. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_source.py +1 -1
  62. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_package_api.py +3 -0
  63. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_execution.py +34 -2
  64. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_registry.py +10 -1
  65. agentbyte-0.9.0/tests/webui/test_server.py +240 -0
  66. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_sessions.py +51 -1
  67. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_models.py +21 -0
  68. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_runner.py +15 -0
  69. agentbyte-0.7.0/PKG-INFO +0 -433
  70. agentbyte-0.7.0/README.md +0 -377
  71. agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/assets/index-BzhEszHZ.css +0 -1
  72. agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/assets/index-DByFJNGD.js +0 -245
  73. agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/index.html +0 -14
  74. agentbyte-0.7.0/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -280
  75. agentbyte-0.7.0/src/agentbyte/webui/frontend/src/components/shared/examples-gallery.tsx +0 -268
  76. agentbyte-0.7.0/src/agentbyte/webui/frontend/yarn.lock +0 -2282
  77. agentbyte-0.7.0/src/agentbyte/webui/ui/assets/index-CWk64UM3.js +0 -359
  78. agentbyte-0.7.0/src/agentbyte/webui/ui/assets/index-vt1cujlT.css +0 -1
  79. agentbyte-0.7.0/src/agentbyte/webui/ui/index.html +0 -14
  80. agentbyte-0.7.0/src/agentbyte/webui/ui/vite.svg +0 -1
  81. agentbyte-0.7.0/tests/presets/test_workflow.py +0 -30
  82. agentbyte-0.7.0/tests/webui/test_server.py +0 -54
  83. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-agent-as-tool/SKILL.md +0 -0
  84. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +0 -0
  85. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
  86. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-fastapi-sse-streaming/SKILL.md +0 -0
  87. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
  88. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-handoff-orchestration/SKILL.md +0 -0
  89. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
  90. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
  91. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
  92. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-middleware/SKILL.md +0 -0
  93. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-multi-turn-context/SKILL.md +0 -0
  94. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
  95. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +0 -0
  96. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-simple-agent/SKILL.md +0 -0
  97. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-tool-approval/SKILL.md +0 -0
  98. {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/skill-authoring/SKILL.md +0 -0
  99. {agentbyte-0.7.0 → agentbyte-0.9.0}/.gitignore +0 -0
  100. {agentbyte-0.7.0 → agentbyte-0.9.0}/LICENSE +0 -0
  101. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/__init__.py +0 -0
  102. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
  103. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/base.py +0 -0
  104. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/types.py +0 -0
  105. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cancellation_token.py +0 -0
  106. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cli/__init__.py +0 -0
  107. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cli/main.py +0 -0
  108. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/component.py +0 -0
  109. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/context.py +0 -0
  110. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/__init__.py +0 -0
  111. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/base.py +0 -0
  112. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/config.py +0 -0
  113. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/json.py +0 -0
  114. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/loader.py +0 -0
  115. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/loaders.py +0 -0
  116. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/sources.py +0 -0
  117. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/sqlite.py +0 -0
  118. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/entity.py +0 -0
  119. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/__init__.py +0 -0
  120. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/_retry_observability.py +0 -0
  121. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/auth.py +0 -0
  122. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/__init__.py +0 -0
  123. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/auth.py +0 -0
  124. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/chat.py +0 -0
  125. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/embedding.py +0 -0
  126. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/settings.py +0 -0
  127. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure_openai.py +0 -0
  128. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  129. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/base.py +0 -0
  130. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/embeddings_base.py +0 -0
  131. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/__init__.py +0 -0
  132. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/chat.py +0 -0
  133. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/embedding.py +0 -0
  134. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/settings.py +0 -0
  135. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai.py +0 -0
  136. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai_embedding.py +0 -0
  137. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/pricing.py +0 -0
  138. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/retry_policy.py +0 -0
  139. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/settings.py +0 -0
  140. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/types.py +0 -0
  141. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/memory/__init__.py +0 -0
  142. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/memory/base.py +0 -0
  143. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/messages.py +0 -0
  144. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/__init__.py +0 -0
  145. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/server.py +0 -0
  146. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/ui/index.html +0 -0
  147. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/__init__.py +0 -0
  148. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/base.py +0 -0
  149. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/otel.py +0 -0
  150. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/retry.py +0 -0
  151. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/notebook.py +0 -0
  152. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/handoff.py +0 -0
  153. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/__init__.py +0 -0
  154. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/clients.py +0 -0
  155. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/session_store.py +0 -0
  156. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/__init__.py +0 -0
  157. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/base.py +0 -0
  158. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/cancellation.py +0 -0
  159. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/composite.py +0 -0
  160. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
  161. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/external.py +0 -0
  162. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/function_call.py +0 -0
  163. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/handoff.py +0 -0
  164. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/max_message.py +0 -0
  165. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/predicate.py +0 -0
  166. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/source.py +0 -0
  167. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/text_mention.py +0 -0
  168. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/timeout.py +0 -0
  169. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/token_usage.py +0 -0
  170. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/__init__.py +0 -0
  171. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/base.py +0 -0
  172. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/core_tools.py +0 -0
  173. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/decorator.py +0 -0
  174. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/memory_tool.py +0 -0
  175. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/types.py +0 -0
  176. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/discovery.py +0 -0
  177. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/.gitignore +0 -0
  178. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/README.md +0 -0
  179. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/components.json +0 -0
  180. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
  181. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/plan.md +0 -0
  182. {agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui → agentbyte-0.9.0/src/agentbyte/webui/frontend/public}/vite.svg +0 -0
  183. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/App.css +0 -0
  184. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
  185. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
  186. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
  187. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
  188. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
  189. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
  190. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
  191. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
  192. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
  193. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
  194. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
  195. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
  196. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
  197. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
  198. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
  199. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  200. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
  201. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
  202. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
  203. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
  204. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
  205. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
  206. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
  207. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
  208. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
  209. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
  210. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/index.css +0 -0
  211. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
  212. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
  213. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
  214. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
  215. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
  216. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
  217. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
  218. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/session_store.py +0 -0
  219. {agentbyte-0.7.0/src/agentbyte/webui/frontend/public → agentbyte-0.9.0/src/agentbyte/webui/ui}/vite.svg +0 -0
  220. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/__init__.py +0 -0
  221. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/agent.py +0 -0
  222. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/__init__.py +0 -0
  223. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  224. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  225. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/workflow.py +0 -0
  226. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/defaults.py +0 -0
  227. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/loader.py +0 -0
  228. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/schema.py +0 -0
  229. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/schema_utils.py +0 -0
  230. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
  231. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/echo.py +0 -0
  232. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/function.py +0 -0
  233. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/http.py +0 -0
  234. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/step.py +0 -0
  235. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  236. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/transform.py +0 -0
  237. {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/visualizer.py +0 -0
  238. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_as_tool.py +0 -0
  239. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_basic.py +0 -0
  240. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_event_types.py +0 -0
  241. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_memory_integration.py +0 -0
  242. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_middleware_integration.py +0 -0
  243. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_retry_middleware.py +0 -0
  244. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_stream_events.py +0 -0
  245. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_tool_approval.py +0 -0
  246. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/cli/test_create_skills.py +0 -0
  247. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/dataset/test_loader.py +0 -0
  248. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_azure_client.py +0 -0
  249. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_azure_embedding_client.py +0 -0
  250. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_llm_types.py +0 -0
  251. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_openai_client.py +0 -0
  252. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_openai_embedding_client.py +0 -0
  253. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_retry_observability.py +0 -0
  254. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_retry_policy_api.py +0 -0
  255. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/memory/test_memory.py +0 -0
  256. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_middleware_chain.py +0 -0
  257. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_otel.py +0 -0
  258. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_retry_middleware.py +0 -0
  259. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
  260. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  261. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_round_robin.py +0 -0
  262. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_agents.py +0 -0
  263. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_clients.py +0 -0
  264. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_base.py +0 -0
  265. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_cancellation.py +0 -0
  266. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_composite.py +0 -0
  267. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_consecutive_agent.py +0 -0
  268. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_external.py +0 -0
  269. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_function_call.py +0 -0
  270. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_handoff.py +0 -0
  271. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_max_message.py +0 -0
  272. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_predicate.py +0 -0
  273. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_text_mention.py +0 -0
  274. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_timeout.py +0 -0
  275. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_token_usage.py +0 -0
  276. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_cancellation_token.py +0 -0
  277. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_context.py +0 -0
  278. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_messages.py +0 -0
  279. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_session_store.py +0 -0
  280. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_types.py +0 -0
  281. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/tools/test_memory_tool.py +0 -0
  282. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/tools/test_tools.py +0 -0
  283. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/__init__.py +0 -0
  284. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/helpers.py +0 -0
  285. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_package_api.py +0 -0
  286. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_checkpoint.py +0 -0
  287. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_subworkflow_step.py +0 -0
  288. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_agent.py +0 -0
  289. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_class.py +0 -0
  290. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_schema.py +0 -0
  291. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_steps.py +0 -0
  292. {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -19,6 +19,7 @@ import asyncio
19
19
  from agentbyte import (
20
20
  Agent,
21
21
  AgentHistoryPolicy,
22
+ FinalResultPolicy,
22
23
  HistoryContextPolicy,
23
24
  PlanBasedOrchestrator,
24
25
  ReviewGatePolicy,
@@ -84,7 +85,11 @@ async def main():
84
85
  revision_agent_name="writer",
85
86
  approval_signal="APPROVED",
86
87
  max_revision_rounds=2,
87
- prefer_final_result_from_agent="writer",
88
+ ),
89
+ final_result_policy=FinalResultPolicy(
90
+ prefer_agent="writer",
91
+ strip_signals=["APPROVED"],
92
+ strip_mode="trailing",
88
93
  ),
89
94
  )
90
95
 
@@ -82,7 +82,7 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
82
82
  - `FunctionStep`: wrap sync/async Python functions
83
83
  - `TransformStep`: map fields between schemas
84
84
  - `HttpStep`: perform HTTP requests
85
- - `AgentbyteAgentStep`: wrap an Agentbyte agent inside a deterministic workflow
85
+ - `AgentStep`: wrap an Agentbyte agent inside a deterministic workflow
86
86
  - `EchoStep`: simple testing/demo step
87
87
 
88
88
  ## Construction Process
@@ -97,7 +97,7 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
97
97
  - `StepCompletedEvent` and `StepFailedEvent` include `duration_seconds`.
98
98
  - `StepStartedEvent` includes `input_data`.
99
99
  - `StepCompletedEvent` includes `output_data`.
100
- - `Context.emit_progress(...)` inside a step produces `StepProgressEvent`.
100
+ - `context.emit_progress(...)` (`WorkflowContext` method) inside a step produces `StepProgressEvent`.
101
101
  - The runner also creates per-step OTel spans when tracing is enabled.
102
102
 
103
103
  ## Defaults
@@ -105,10 +105,57 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
105
105
  - Use `WorkflowRunner.run_stream(...)` when debugging or logging execution.
106
106
  - Use `context.emit_progress(...)` for long-running steps that should report intermediate status.
107
107
 
108
- ## Pattern: AgentContext Opt-In with AgentbyteAgentStep
108
+ ## Pattern: WorkflowContext — Cross-Step State Sharing
109
+
110
+ Each `FunctionStep` receives a `WorkflowContext` as its second argument.
111
+ Use `context.set()` / `context.get()` to pass values between steps without
112
+ embedding them in typed Pydantic output models.
113
+
114
+ ```python
115
+ from agentbyte.workflow import Workflow, WorkflowConfig, WorkflowRunner, WorkflowContext
116
+ from agentbyte.workflow.steps import FunctionStep, StepMetadata
117
+ from pydantic import BaseModel
118
+
119
+
120
+ class MyInput(BaseModel):
121
+ value: str
122
+
123
+
124
+ class MyOutput(BaseModel):
125
+ value: str
126
+
127
+
128
+ def step_a(input_data: MyInput, context: WorkflowContext) -> dict:
129
+ context.set("shared_value", input_data.value.upper())
130
+ return {"value": input_data.value}
131
+
132
+
133
+ def step_b(input_data: MyOutput, context: WorkflowContext) -> dict:
134
+ shared = context.get("shared_value", "")
135
+ return {"value": f"Got: {shared}"}
136
+
137
+
138
+ workflow = Workflow(WorkflowConfig(name="state_sharing"))
139
+ workflow.chain(
140
+ FunctionStep("step_a", StepMetadata(name="step_a"), MyInput, MyOutput, step_a),
141
+ FunctionStep("step_b", StepMetadata(name="step_b"), MyOutput, MyOutput, step_b),
142
+ )
143
+ ```
144
+
145
+ `WorkflowContext` API:
146
+ - `context.set(key, value)` — write into shared workflow state
147
+ - `context.get(key, default)` — read from shared workflow state
148
+ - `context.update({...})` — bulk write
149
+ - `context.emit_progress(message, completed, total)` — emit a `StepProgressEvent`
150
+ - `context.request_input(...)` — suspend and request typed external input
151
+ - `context.request_approval(...)` — suspend and request human approval
152
+
153
+ Import path: `from agentbyte.workflow import WorkflowContext`
154
+
155
+ ## Pattern: AgentContext Opt-In with AgentStep
109
156
 
110
157
  Workflows are pipelines — they do not thread conversation history by default.
111
- When an `AgentbyteAgentStep` needs session continuity (e.g., the same agent is
158
+ When an `AgentStep` needs session continuity (e.g., the same agent is
112
159
  called across multiple workflow invocations), pass an `AgentContext` via
113
160
  `agent_context` on the input model.
114
161
 
@@ -118,7 +165,8 @@ import asyncio
118
165
  from agentbyte.context import AgentContext
119
166
  from agentbyte.session_store import CachedFileSessionStore
120
167
  from agentbyte.workflow import Workflow, WorkflowConfig, WorkflowRunner
121
- from agentbyte.workflow.steps import AgentbyteAgentStep, AgentbyteAgentInput, StepMetadata
168
+ from agentbyte.workflow.steps import AgentStep, StepMetadata
169
+ from agentbyte.workflow.steps.agentbyte_agent import AgentbyteAgentInput
122
170
 
123
171
  # Retrieve or create a persistent context for the agent in this step
124
172
  store = CachedFileSessionStore(".sessions")
@@ -126,7 +174,7 @@ session_id = "user-abc"
126
174
  ctx = await store.get(session_id) or AgentContext(session_id=session_id)
127
175
 
128
176
  # Pass context as part of the step input — it is not coupled to the workflow graph
129
- step = AgentbyteAgentStep("writer", StepMetadata(name="writer"), writer_agent)
177
+ step = AgentStep("writer", StepMetadata(name="writer"), writer_agent)
130
178
  workflow = Workflow(WorkflowConfig(name="draft_pipeline"))
131
179
  workflow.add_step(step)
132
180
 
@@ -143,7 +191,7 @@ await store.save(session_id, ctx)
143
191
  Two distinct context types coexist in a workflow:
144
192
  | Type | Scope | Purpose |
145
193
  |------|-------|---------|
146
- | `Context` (workflow) | One workflow run | Pass state between steps |
194
+ | `WorkflowContext` | One workflow run | Pass state between steps |
147
195
  | `AgentContext` | Across runs | Persist agent conversation history |
148
196
 
149
197
  `agent_context` is always optional. Omit it (or pass `None`) for a stateless
@@ -154,4 +202,4 @@ step that starts fresh every time.
154
202
  - Do not skip typed input/output models for non-trivial steps.
155
203
  - Do not assume workflow has agent-style middleware; logging should currently be done from streamed workflow events.
156
204
  - Prefer checkpoint/resume only when the workflow graph is stable and long-running execution makes it worthwhile.
157
- - Do not thread `AgentContext` through the workflow `Context` dict — keep it in `AgentbyteAgentInput.agent_context`.
205
+ - Do not thread `AgentContext` through the `WorkflowContext` state dict — keep it in `AgentbyteAgentInput.agent_context`.
@@ -4,6 +4,55 @@ 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.9.0] - 2026-04-14
8
+
9
+ ### Added
10
+
11
+ - Added `FinalResultPolicy` Pydantic model to the orchestration layer with `prefer_agent`, `strip_signals`, and `strip_mode` fields for explicit control over which agent message becomes the canonical `final_result`.
12
+ - Added `_generate_final_result`, `_select_final_message`, and `_strip_signals` methods to `BaseOrchestrator`, replacing the bare last-assistant-message read with a policy-driven selection algorithm.
13
+ - Wired `FinalResultPolicy` into `RoundRobinOrchestrator`, `AIOrchestrator`, and `PlanBasedOrchestrator` constructors and into all three preset builders in `agentbyte.presets`.
14
+ - Added `FinalResultPolicy` to the `agentbyte.orchestration` and root `agentbyte` public exports.
15
+ - Added `final_result` and `stop_reason` fields to `SessionMessagesResponse` so orchestrator session reloads include the persisted primary answer.
16
+ - Added orchestrator-specific final-first presentation to the WebUI: the main chat surface shows only the user prompt and `final_result`, with agent turn-taking inside a collapsible inline Thinking section.
17
+ - Added `final_result` and `stop_reason` persistence to orchestrator session metadata on both streaming and non-streaming paths in the execution engine.
18
+
19
+ ### Changed
20
+
21
+ - Tightened writer preset prompt to prevent coordinator drift: writer now produces the final draft immediately without asking questions or suggesting additions.
22
+ - Tightened reviewer preset prompt to enforce binary output: reviewer outputs only the approval signal or one specific revision sentence, no production or formatting suggestions.
23
+ - Updated all three preset orchestrators to supply a `FinalResultPolicy` aligned with their control flow (TERMINATE strip for round-robin, APPROVED strip for AI-driven and plan-based).
24
+ - Updated notebook `08.1-default-presets.ipynb` and `agentbyte-plan-based-orchestration` skill to use `FinalResultPolicy` instead of the removed `prefer_final_result_from_agent` field.
25
+
26
+ ### Fixed
27
+
28
+ - Fixed orchestrator `final_result` always returning the reviewer's approval signal instead of the writer's output by implementing `FinalResultPolicy.prefer_agent` selection logic.
29
+ - Fixed `_strip_signals` anywhere-mode to be truly case-insensitive using `re.IGNORECASE` instead of string replace variants.
30
+
31
+ ### Breaking Changes
32
+
33
+ - Removed `ReviewGatePolicy.prefer_final_result_from_agent`. Migrate to `FinalResultPolicy(prefer_agent=...)` passed directly to the orchestrator constructor.
34
+
35
+ ## [0.8.0] - 2026-04-13
36
+
37
+ ### Added
38
+
39
+ - Added SQL-backed usage logging middleware with a typed persistence contract plus SQLModel-backed storage for LLM usage records.
40
+ - Added `examples/webui/in_memory.py` and `examples/webui/presets_webui.py` as concrete launchers for the packaged AgentByte WebUI.
41
+ - Added plan-based orchestration to the preset-backed WebUI catalog so round-robin, AI-driven, and plan-based teams are all selectable from the same real-entities launcher.
42
+
43
+ ### Changed
44
+
45
+ - Completed the `agentbyte.webui` session contract: WebUI sessions now support `user_id`, stricter session/entity binding, and injected durable session stores for persisted `AgentContext` reload across restarts.
46
+ - Rebased and adapted the packaged WebUI frontend to AgentByte's backend contracts, including fixed session query handling, stable post-stream message refresh, richer workflow result rendering, cleaner orchestration event classification, and improved debug-panel payload inspection.
47
+ - Extended agent and orchestrator WebUI usage surfaces to show both token counts and cost estimates when providers supply pricing data.
48
+ - Removed the unused bundled examples-gallery flow and other stale picoagents-only frontend assumptions from the packaged WebUI.
49
+
50
+ ### Fixed
51
+
52
+ - Fixed agent stream completion handling in the WebUI so final agent state events no longer fall through to `unknown`, immediate UI finalization works again, and post-stream session refresh reliably recalculates session totals.
53
+ - Fixed round-robin and other orchestrator debug events so lifecycle payloads render as labeled orchestration events instead of opaque `unknown` entries.
54
+ - Fixed workflow completion rendering so the WebUI shows terminal workflow outputs directly instead of dumping the raw completion envelope.
55
+
7
56
  ## [0.7.0] - 2026-04-09
8
57
 
9
58
  ### Added
@@ -0,0 +1,319 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentbyte
3
+ Version: 0.9.0
4
+ Summary: A toolkit for designing multiagent systems
5
+ Project-URL: Homepage, https://gitlab.com/pyninja/aiengineering/agentbyte
6
+ Project-URL: Repository, https://gitlab.com/pyninja/aiengineering/agentbyte
7
+ Project-URL: Issues, https://gitlab.com/pyninja/aiengineering/agentbyte/-/issues
8
+ Project-URL: Changelog, https://gitlab.com/pyninja/aiengineering/agentbyte/-/blob/main/CHANGELOG.md
9
+ Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Requires-Python: >=3.11
13
+ Requires-Dist: httpx>=0.28.1
14
+ Requires-Dist: pydantic-settings>=2.13.0
15
+ Requires-Dist: pydantic>=2.12.5
16
+ Provides-Extra: all
17
+ Requires-Dist: aioboto3>=15.5.0; extra == 'all'
18
+ Requires-Dist: azure-identity>=1.25.1; extra == 'all'
19
+ Requires-Dist: boto3; extra == 'all'
20
+ Requires-Dist: fastapi>=0.135.2; extra == 'all'
21
+ Requires-Dist: graphviz>=0.21; extra == 'all'
22
+ Requires-Dist: openai>=1.107.1; extra == 'all'
23
+ Requires-Dist: opentelemetry-api>=1.39.1; extra == 'all'
24
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
25
+ Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
26
+ Requires-Dist: uvicorn>=0.42.0; extra == 'all'
27
+ Provides-Extra: aws
28
+ Requires-Dist: aioboto3>=15.5.0; extra == 'aws'
29
+ Requires-Dist: boto3; extra == 'aws'
30
+ Provides-Extra: azureopenai
31
+ Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
32
+ Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
33
+ Provides-Extra: dev
34
+ Requires-Dist: ipykernel>=7.1.0; extra == 'dev'
35
+ Requires-Dist: picoagents>=0.4.0; extra == 'dev'
36
+ Requires-Dist: pydantic-settings>=2.13.0; extra == 'dev'
37
+ Requires-Dist: pymupdf-layout>=1.26.6; extra == 'dev'
38
+ Requires-Dist: pymupdf4llm>=0.2.9; extra == 'dev'
39
+ Provides-Extra: openai
40
+ Requires-Dist: openai>=1.107.1; extra == 'openai'
41
+ Provides-Extra: otel
42
+ Requires-Dist: opentelemetry-api>=1.39.1; extra == 'otel'
43
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'otel'
44
+ Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'otel'
45
+ Provides-Extra: sql
46
+ Requires-Dist: aiosqlite>=0.22.1; extra == 'sql'
47
+ Requires-Dist: asyncpg>=0.31.0; extra == 'sql'
48
+ Requires-Dist: sqlmodel>=0.0.38; extra == 'sql'
49
+ Provides-Extra: test
50
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'test'
51
+ Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
52
+ Requires-Dist: pytest>=9.0.1; extra == 'test'
53
+ Requires-Dist: ruff>=0.15.0; extra == 'test'
54
+ Provides-Extra: viz
55
+ Requires-Dist: graphviz>=0.21; extra == 'viz'
56
+ Provides-Extra: webui
57
+ Requires-Dist: fastapi>=0.135.2; extra == 'webui'
58
+ Requires-Dist: uvicorn[standard]>=0.44.0; extra == 'webui'
59
+ Description-Content-Type: text/markdown
60
+
61
+ <p align="center">
62
+ <img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.9.0/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
63
+ </p>
64
+
65
+ # Agentbyte
66
+
67
+ Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
68
+
69
+ Current release: **0.9.0** — see [CHANGELOG.md](CHANGELOG.md) for the full release history.
70
+
71
+ Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyninja/aiengineering/agentbyte)
72
+
73
+ ## Current Capabilities
74
+
75
+ - Agent execution loop with `run()` and `run_stream()` APIs.
76
+ - Tooling system (function tools + core tools + memory tool).
77
+ - Middleware chain for request/response/error handling.
78
+ - Built-in middleware: logging, security, rate limiting, approval, telemetry.
79
+ - Memory abstractions: list memory, file memory, context injection.
80
+ - OpenAI and Azure OpenAI model client support.
81
+ - OpenTelemetry-first tracing with model-call and task-level usage telemetry.
82
+ - Multi-agent orchestration: `RoundRobinOrchestrator`, `AIOrchestrator`, `HandoffOrchestrator`, `PlanBasedOrchestrator` with composable termination conditions.
83
+ - **Workflow runtime:** typed step graphs (`FunctionStep`, `EchoStep`, `HttpStep`, `TransformStep`, `AgentStep`, `SubWorkflowStep`) with conditional routing, parallel execution, checkpoint/resume, human-in-the-loop suspend/resume, staged state semantics, structured streaming events, and declarative JSON/YAML schema serialisation.
84
+
85
+ ## Observability-First Telemetry
86
+
87
+ Agentbyte exposes two complementary telemetry layers:
88
+
89
+ - **Per-call middleware spans** (`chat ...`, `tool ...`) for model/tool-level diagnostics.
90
+ - **Task-level root span attributes** (`agent ...`) for final aggregated usage and outcome.
91
+
92
+ Enable telemetry:
93
+
94
+ ```bash
95
+ export AGENTBYTE_ENABLE_OTEL=true
96
+ ```
97
+
98
+ Per-call span attributes emitted by `OTelMiddleware`:
99
+
100
+ - `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, `gen_ai.usage.total_tokens`
101
+ - `gen_ai.usage.cost_estimate_usd`
102
+ - `gen_ai.response.finish_reason`
103
+ - `gen_ai.request.model`
104
+ - `gen_ai.tool.name`, `gen_ai.tool.success`
105
+
106
+ ## Degugging Traces without UI
107
+ details can be found in the [OTel spans guide](docs/study/topic_otel_spans.md#debugging-traces-without-ui).
108
+
109
+ Practical interpretation:
110
+
111
+ - `chat gpt-4.1-mini` spans show **per-call** usage/cost/finish reason.
112
+ - `agent <name>` span shows **final accumulated** usage and final task outcome.
113
+
114
+ ## Installation
115
+
116
+ Python requirement: **3.11+**
117
+
118
+ ```bash
119
+ uv sync --all-groups
120
+ ```
121
+
122
+ Optional extras:
123
+
124
+ ```bash
125
+ uv sync --extra openai
126
+ uv sync --extra azureopenai
127
+ uv sync --extra otel
128
+ uv sync --extra webui
129
+ ```
130
+
131
+ ### Install in another project (pip / uv add)
132
+
133
+ Use extras to enable provider + telemetry support:
134
+
135
+ ```bash
136
+ pip install "agentbyte[azureopenai,otel]"
137
+ ```
138
+
139
+ ```bash
140
+ uv add "agentbyte[azureopenai,otel]"
141
+ ```
142
+
143
+ For the browser WebUI:
144
+
145
+ ```bash
146
+ pip install "agentbyte[webui]"
147
+ # or
148
+ uv add "agentbyte[webui]"
149
+ ```
150
+
151
+ Install all optional features:
152
+
153
+ ```bash
154
+ pip install "agentbyte[all]"
155
+ # or
156
+ uv add "agentbyte[all]"
157
+ ```
158
+
159
+ Note: the Azure extra is `azureopenai`.
160
+
161
+ ## Quick Start
162
+
163
+ ```python
164
+ from agentbyte.agents import Agent
165
+ from agentbyte.middleware import LoggingMiddleware
166
+
167
+ # model_client = OpenAIChatCompletionClient(...) or AzureOpenAIChatCompletionClient(...)
168
+
169
+ def quick_faq_lookup(topic: str) -> str:
170
+ faq = {
171
+ "middleware": "Middleware handles cross-cutting runtime concerns.",
172
+ "memory": "Memory helps agents keep useful context across interactions.",
173
+ }
174
+ return faq.get(topic.lower(), "No FAQ found.")
175
+
176
+ agent = Agent(
177
+ name="helpful-assistant",
178
+ description="Helpful assistant with middleware",
179
+ instructions="Answer clearly and use tools when needed.",
180
+ model_client=model_client,
181
+ tools=[quick_faq_lookup],
182
+ middlewares=[LoggingMiddleware()],
183
+ )
184
+ ```
185
+
186
+ ## Run The WebUI
187
+
188
+ ### Option 1: Run the included demo app
189
+
190
+ This is the easiest way to see the WebUI working end to end with:
191
+ - one demo agent
192
+ - one demo workflow
193
+ - one demo orchestrator
194
+
195
+ Step 1. Install the WebUI extra:
196
+
197
+ ```bash
198
+ uv sync --extra webui
199
+ ```
200
+
201
+ Step 2. Start the demo app:
202
+
203
+ ```bash
204
+ uv run python examples/webui/basic_webui.py
205
+ ```
206
+
207
+ Step 3. Open the browser:
208
+
209
+ ```text
210
+ http://127.0.0.1:8080
211
+ ```
212
+
213
+ If auto-open is enabled in your environment, the browser may open automatically.
214
+
215
+ ### Option 2: Run the WebUI against your current project directory
216
+
217
+ Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
218
+
219
+ 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`.
220
+
221
+ Step 1. Install the WebUI extra:
222
+
223
+ ```bash
224
+ uv sync --extra webui
225
+ ```
226
+
227
+ Step 2. Launch the WebUI and scan the current directory:
228
+
229
+ ```bash
230
+ uv run agentbyte webui --dir .
231
+ ```
232
+
233
+ Step 3. Open the browser:
234
+
235
+ ```text
236
+ http://127.0.0.1:8080
237
+ ```
238
+
239
+ Useful variants:
240
+
241
+ ```bash
242
+ uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
243
+ uv run agentbyte webui --dir examples --port 8090
244
+ ```
245
+
246
+ For this repository, the most reliable first-run path is still the bundled demo:
247
+
248
+ ```bash
249
+ uv run python examples/webui/basic_webui.py
250
+ ```
251
+
252
+ Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
253
+
254
+ ```python
255
+ # my_entities.py
256
+ agent = ...
257
+ workflow = ...
258
+ orchestrator = ...
259
+ ```
260
+
261
+ ### Option 3: Run it programmatically
262
+
263
+ Use this when you want to serve in-memory entities directly from Python.
264
+
265
+ ```python
266
+ from agentbyte.webui import serve
267
+
268
+ serve(entities=[agent], port=8080, auto_open=True)
269
+ ```
270
+
271
+ ### Quick Troubleshooting
272
+
273
+ If the app does not start:
274
+
275
+ ```bash
276
+ uv sync --extra webui
277
+ ```
278
+
279
+ If port `8080` is already in use:
280
+
281
+ ```bash
282
+ uv run agentbyte webui --dir . --port 8090
283
+ ```
284
+
285
+ If you do not want the browser to open automatically:
286
+
287
+ ```bash
288
+ uv run agentbyte webui --dir . --no-open
289
+ ```
290
+
291
+ ## Project Layout
292
+
293
+ ```
294
+ src/agentbyte/
295
+ agents/
296
+ llm/
297
+ memory/
298
+ middleware/
299
+ tools/
300
+ messages.py
301
+ context.py
302
+ types.py
303
+ ```
304
+
305
+ ## Development
306
+
307
+ ```bash
308
+ uv run ruff check src tests
309
+ uv run pytest tests -v
310
+ ```
311
+
312
+ ## License
313
+
314
+ MIT — see [LICENSE](LICENSE).
315
+
316
+ ## References
317
+
318
+ - [Designing Multi-Agent Systems](https://github.com/victordibia/designing-multiagent-systems/tree/main)
319
+ - [Microsoft Agent Framework](https://github.com/microsoft/agent-framework)