agentbyte 0.47.0__tar.gz → 0.48.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 (410) hide show
  1. {agentbyte-0.47.0 → agentbyte-0.48.0}/CHANGELOG.md +27 -0
  2. {agentbyte-0.47.0 → agentbyte-0.48.0}/PKG-INFO +5 -4
  3. {agentbyte-0.47.0 → agentbyte-0.48.0}/README.md +3 -3
  4. {agentbyte-0.47.0 → agentbyte-0.48.0}/pyproject.toml +1 -0
  5. agentbyte-0.48.0/src/agentbyte/__about__.py +2 -0
  6. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/base.py +5 -1
  7. agentbyte-0.48.0/src/agentbyte/eval/history/_writer_lock.py +46 -0
  8. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/conformance.py +41 -0
  9. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/models.py +73 -8
  10. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/recorder.py +12 -4
  11. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/sql.py +219 -13
  12. agentbyte-0.48.0/src/agentbyte/eval/history/sqlite.py +48 -0
  13. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/store.py +13 -4
  14. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/agent.py +11 -2
  15. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/__init__.py +4 -0
  16. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/coordinator.py +13 -3
  17. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/jobs.py +18 -2
  18. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/suite.py +77 -2
  19. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/verdict.py +4 -0
  20. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/__init__.py +4 -0
  21. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/base.py +8 -0
  22. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/report.py +133 -7
  23. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/trace.py +12 -1
  24. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/__init__.py +12 -0
  25. agentbyte-0.48.0/src/agentbyte/presets/capitals.py +87 -0
  26. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/eval_routes.py +27 -4
  27. agentbyte-0.48.0/src/agentbyte/webui/ui/assets/index-DGIjPh4H.css +1 -0
  28. agentbyte-0.48.0/src/agentbyte/webui/ui/assets/index-XUXdsPv4.js +82 -0
  29. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/ui/index.html +2 -2
  30. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_eval_history.py +32 -7
  31. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_eval_history_backends.py +1 -1
  32. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_eval_jobs.py +5 -0
  33. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_eval_workbench.py +32 -0
  34. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_report.py +165 -0
  35. agentbyte-0.48.0/tests/presets/test_capitals.py +63 -0
  36. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_eval_routes.py +30 -0
  37. agentbyte-0.47.0/src/agentbyte/__about__.py +0 -2
  38. agentbyte-0.47.0/src/agentbyte/eval/history/sqlite.py +0 -498
  39. agentbyte-0.47.0/src/agentbyte/webui/ui/assets/index-BVwldkgS.js +0 -82
  40. agentbyte-0.47.0/src/agentbyte/webui/ui/assets/index-u5LbPGVH.css +0 -1
  41. {agentbyte-0.47.0 → agentbyte-0.48.0}/.gitignore +0 -0
  42. {agentbyte-0.47.0 → agentbyte-0.48.0}/LICENSE +0 -0
  43. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/__init__.py +0 -0
  44. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/_optional.py +0 -0
  45. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/a2a/__init__.py +0 -0
  46. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/a2a/app.py +0 -0
  47. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/a2a/distributed_context.py +0 -0
  48. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/a2a/executor.py +0 -0
  49. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/a2a/tool.py +0 -0
  50. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/__init__.py +0 -0
  51. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/agent.py +0 -0
  52. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
  53. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/base.py +0 -0
  54. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/embedding_agent.py +0 -0
  55. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/agents/types.py +0 -0
  56. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cancellation_token.py +0 -0
  57. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/catalog.py +0 -0
  58. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/__init__.py +0 -0
  59. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/__main__.py +0 -0
  60. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/eval_commands.py +0 -0
  61. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/loading.py +0 -0
  62. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/main.py +0 -0
  63. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/optim_commands.py +0 -0
  64. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/cli/serve_commands.py +0 -0
  65. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/compaction/__init__.py +0 -0
  66. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/compaction/counters.py +0 -0
  67. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/compaction/errors.py +0 -0
  68. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/compaction/grouping.py +0 -0
  69. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/compaction/strategies.py +0 -0
  70. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/component.py +0 -0
  71. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/context.py +0 -0
  72. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/context_providers/__init__.py +0 -0
  73. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/context_providers/base.py +0 -0
  74. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
  75. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/context_providers/skills.py +0 -0
  76. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/__init__.py +0 -0
  77. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/_aiosqlite.py +0 -0
  78. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/base.py +0 -0
  79. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/config.py +0 -0
  80. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/importer.py +0 -0
  81. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/json.py +0 -0
  82. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/loader.py +0 -0
  83. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/publish.py +0 -0
  84. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/publish_config.py +0 -0
  85. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/publishers.py +0 -0
  86. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/s3.py +0 -0
  87. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/sources.py +0 -0
  88. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/sqlite.py +0 -0
  89. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/sqlite_db.py +0 -0
  90. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/write_config.py +0 -0
  91. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/dataset/writers.py +0 -0
  92. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/entity.py +0 -0
  93. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/__init__.py +0 -0
  94. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/__init__.py +0 -0
  95. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/decorator.py +0 -0
  96. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/keyword.py +0 -0
  97. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/local.py +0 -0
  98. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/process.py +0 -0
  99. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/tool.py +0 -0
  100. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/checks/types.py +0 -0
  101. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/comparison.py +0 -0
  102. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/eval_dataset.py +0 -0
  103. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/__init__.py +0 -0
  104. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/errors.py +0 -0
  105. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/history/transitions.py +0 -0
  106. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/__init__.py +0 -0
  107. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/base.py +0 -0
  108. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/composite.py +0 -0
  109. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/llm.py +0 -0
  110. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
  111. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/reference.py +0 -0
  112. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
  113. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/judges/validation.py +0 -0
  114. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/pairwise.py +0 -0
  115. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/report.py +0 -0
  116. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/runner.py +0 -0
  117. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/splitting.py +0 -0
  118. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/__init__.py +0 -0
  119. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/model.py +0 -0
  120. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
  121. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  122. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/runtime.py +0 -0
  123. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/targets/workflow.py +0 -0
  124. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/types.py +0 -0
  125. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/smoke.py +0 -0
  126. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
  127. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/execution_trace/__init__.py +0 -0
  128. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/execution_trace/collector.py +0 -0
  129. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/execution_trace/models.py +0 -0
  130. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/__init__.py +0 -0
  131. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/_retry_observability.py +0 -0
  132. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/auth.py +0 -0
  133. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure/__init__.py +0 -0
  134. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure/auth.py +0 -0
  135. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure/chat.py +0 -0
  136. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure/embedding.py +0 -0
  137. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure/settings.py +0 -0
  138. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure_openai.py +0 -0
  139. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  140. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/base.py +0 -0
  141. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/embeddings_base.py +0 -0
  142. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/openai/__init__.py +0 -0
  143. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/openai/chat.py +0 -0
  144. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/openai/embedding.py +0 -0
  145. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/openai/settings.py +0 -0
  146. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/openai_embedding.py +0 -0
  147. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/pricing.py +0 -0
  148. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/retry_policy.py +0 -0
  149. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/settings.py +0 -0
  150. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/llm/types.py +0 -0
  151. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/logger.py +0 -0
  152. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/memory/__init__.py +0 -0
  153. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/memory/base.py +0 -0
  154. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/messages.py +0 -0
  155. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/__init__.py +0 -0
  156. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/base.py +0 -0
  157. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/otel.py +0 -0
  158. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/retry.py +0 -0
  159. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/sql_usage.py +0 -0
  160. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/middleware/usage_logger.py +0 -0
  161. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/notebook.py +0 -0
  162. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/config.py +0 -0
  163. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/gepa.py +0 -0
  164. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/mipro.py +0 -0
  165. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/pareto.py +0 -0
  166. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/reflective.py +0 -0
  167. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/optim/spec.py +0 -0
  168. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/__init__.py +0 -0
  169. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/ai.py +0 -0
  170. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/base.py +0 -0
  171. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/handoff.py +0 -0
  172. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/plan.py +0 -0
  173. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/policies.py +0 -0
  174. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/orchestration/round_robin.py +0 -0
  175. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/agents.py +0 -0
  176. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/clients.py +0 -0
  177. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instruction_registry.py +0 -0
  178. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  179. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  180. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  181. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  182. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  183. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/orchestration.py +0 -0
  184. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  185. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
  186. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
  187. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
  188. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
  189. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/streaming.py +0 -0
  190. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/presets/workflow.py +0 -0
  191. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/session_store.py +0 -0
  192. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/__init__.py +0 -0
  193. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/base.py +0 -0
  194. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/resources.py +0 -0
  195. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/scripts.py +0 -0
  196. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/sources.py +0 -0
  197. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/skills/validation.py +0 -0
  198. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/__init__.py +0 -0
  199. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/base.py +0 -0
  200. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/cancellation.py +0 -0
  201. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/composite.py +0 -0
  202. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
  203. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/external.py +0 -0
  204. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/function_call.py +0 -0
  205. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/handoff.py +0 -0
  206. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/max_message.py +0 -0
  207. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/predicate.py +0 -0
  208. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/source.py +0 -0
  209. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/text_mention.py +0 -0
  210. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/timeout.py +0 -0
  211. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/termination/token_usage.py +0 -0
  212. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/__init__.py +0 -0
  213. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/base.py +0 -0
  214. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/coding_tools.py +0 -0
  215. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/core_tools.py +0 -0
  216. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/decorator.py +0 -0
  217. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/__init__.py +0 -0
  218. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/client.py +0 -0
  219. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/config.py +0 -0
  220. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/errors.py +0 -0
  221. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/tool.py +0 -0
  222. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/mcp/transports.py +0 -0
  223. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/memory_tool.py +0 -0
  224. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/tools/research_tools.py +0 -0
  225. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/types.py +0 -0
  226. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/__init__.py +0 -0
  227. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/discovery.py +0 -0
  228. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/execution.py +0 -0
  229. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/__init__.py +0 -0
  230. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/__init__.py +0 -0
  231. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/apps_server.py +0 -0
  232. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/auth_server.py +0 -0
  233. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/basic_server.py +0 -0
  234. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/mrtr_server.py +0 -0
  235. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp/servers/notify_server.py +0 -0
  236. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp_playground.py +0 -0
  237. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/mcp_routes.py +0 -0
  238. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/models.py +0 -0
  239. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/registry.py +0 -0
  240. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/server.py +0 -0
  241. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/session_store.py +0 -0
  242. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/sessions.py +0 -0
  243. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/webui/ui/vite.svg +0 -0
  244. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/__init__.py +0 -0
  245. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/agent.py +0 -0
  246. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/__init__.py +0 -0
  247. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  248. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  249. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/models.py +0 -0
  250. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/runner.py +0 -0
  251. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/core/workflow.py +0 -0
  252. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/defaults.py +0 -0
  253. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/errors.py +0 -0
  254. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/loader.py +0 -0
  255. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/schema.py +0 -0
  256. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/schema_utils.py +0 -0
  257. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
  258. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
  259. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/agent.py +0 -0
  260. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/echo.py +0 -0
  261. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/function.py +0 -0
  262. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/http.py +0 -0
  263. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/step.py +0 -0
  264. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  265. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/steps/transform.py +0 -0
  266. {agentbyte-0.47.0 → agentbyte-0.48.0}/src/agentbyte/workflow/visualizer.py +0 -0
  267. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/a2a/a2a_helpers.py +0 -0
  268. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/a2a/test_a2a_adapters.py +0 -0
  269. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/a2a/test_distributed_context.py +0 -0
  270. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_as_tool.py +0 -0
  271. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_basic.py +0 -0
  272. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_context_providers.py +0 -0
  273. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_error_response.py +0 -0
  274. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_event_types.py +0 -0
  275. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_memory_integration.py +0 -0
  276. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_middleware_integration.py +0 -0
  277. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_response_accessors.py +0 -0
  278. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_retry_middleware.py +0 -0
  279. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_stop_at_tools.py +0 -0
  280. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_agent_stream_events.py +0 -0
  281. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_embedding_agent.py +0 -0
  282. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_tool_approval.py +0 -0
  283. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_tool_batch_resolution.py +0 -0
  284. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/agents/test_tool_metadata.py +0 -0
  285. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/cli/test_loading.py +0 -0
  286. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/cli/test_registry_check.py +0 -0
  287. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/cli/test_serve_command.py +0 -0
  288. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/compaction/test_compaction.py +0 -0
  289. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/context_providers/__init__.py +0 -0
  290. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/context_providers/test_skill_tools.py +0 -0
  291. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/context_providers/test_skills_provider.py +0 -0
  292. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/fake_s3.py +0 -0
  293. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/test_dataset_exit.py +0 -0
  294. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/test_loader.py +0 -0
  295. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/test_multi_table.py +0 -0
  296. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/test_publish.py +0 -0
  297. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/dataset/test_sqlite_db.py +0 -0
  298. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_eval_dataset.py +0 -0
  299. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_execution_trajectories.py +0 -0
  300. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_multi_turn.py +0 -0
  301. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_pairwise.py +0 -0
  302. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  303. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  304. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_score_integrity.py +0 -0
  305. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_splitting.py +0 -0
  306. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/eval/test_types_and_judges.py +0 -0
  307. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/examples/test_compaction_webapp.py +0 -0
  308. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_azure_client.py +0 -0
  309. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_azure_embedding_client.py +0 -0
  310. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_llm_types.py +0 -0
  311. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_openai_client.py +0 -0
  312. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_openai_embedding_client.py +0 -0
  313. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_pricing.py +0 -0
  314. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_retry_observability.py +0 -0
  315. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_retry_policy_api.py +0 -0
  316. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/llm/test_retryable_error_substrings.py +0 -0
  317. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/memory/test_memory.py +0 -0
  318. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_context_compaction.py +0 -0
  319. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
  320. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_middleware_chain.py +0 -0
  321. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_otel.py +0 -0
  322. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_retry_middleware.py +0 -0
  323. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_sql_usage.py +0 -0
  324. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/middleware/test_usage_logger.py +0 -0
  325. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/__init__.py +0 -0
  326. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_base.py +0 -0
  327. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_base_integration.py +0 -0
  328. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_config.py +0 -0
  329. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_description_tunable.py +0 -0
  330. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_gepa.py +0 -0
  331. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_mipro.py +0 -0
  332. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_orchestrator_optim.py +0 -0
  333. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_pareto.py +0 -0
  334. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_reflective.py +0 -0
  335. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_score_integrity.py +0 -0
  336. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_spec.py +0 -0
  337. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/optim/test_trace.py +0 -0
  338. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
  339. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_base_orchestrator.py +0 -0
  340. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  341. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
  342. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestration_usage_breakdown.py +0 -0
  343. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestrator_agent_contract.py +0 -0
  344. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
  345. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestrator_member_events.py +0 -0
  346. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestrator_otel.py +0 -0
  347. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_orchestrator_synthesis.py +0 -0
  348. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
  349. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/orchestration/test_round_robin.py +0 -0
  350. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_agents.py +0 -0
  351. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_clients.py +0 -0
  352. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_instruction_registry.py +0 -0
  353. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_orchestration.py +0 -0
  354. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_streaming.py +0 -0
  355. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/presets/test_workflow.py +0 -0
  356. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/skills/__init__.py +0 -0
  357. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/skills/test_base.py +0 -0
  358. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/skills/test_resources.py +0 -0
  359. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/skills/test_scripts.py +0 -0
  360. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/skills/test_sources.py +0 -0
  361. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_base.py +0 -0
  362. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_cancellation.py +0 -0
  363. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_composite.py +0 -0
  364. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_consecutive_agent.py +0 -0
  365. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_external.py +0 -0
  366. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_function_call.py +0 -0
  367. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_handoff.py +0 -0
  368. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_max_message.py +0 -0
  369. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_predicate.py +0 -0
  370. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_source.py +0 -0
  371. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_text_mention.py +0 -0
  372. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_timeout.py +0 -0
  373. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/termination/test_token_usage.py +0 -0
  374. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_cancellation_token.py +0 -0
  375. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_context.py +0 -0
  376. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_logger.py +0 -0
  377. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_messages.py +0 -0
  378. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_option_enums.py +0 -0
  379. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_optional_extras.py +0 -0
  380. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_package_api.py +0 -0
  381. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_session_store.py +0 -0
  382. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_types.py +0 -0
  383. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/test_vanilla_chunker.py +0 -0
  384. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/fixtures/mcp_stdio_server.py +0 -0
  385. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/test_coding_tools.py +0 -0
  386. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/test_mcp_tools.py +0 -0
  387. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/test_memory_tool.py +0 -0
  388. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/test_research_tools.py +0 -0
  389. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/tools/test_tools.py +0 -0
  390. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/__init__.py +0 -0
  391. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/helpers.py +0 -0
  392. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_execution.py +0 -0
  393. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_mcp_routes.py +0 -0
  394. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_package_api.py +0 -0
  395. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_registry.py +0 -0
  396. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_server.py +0 -0
  397. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_sessions.py +0 -0
  398. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/webui/test_workflow_streaming.py +0 -0
  399. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/recovery_worker.py +0 -0
  400. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_agent_step_imports.py +0 -0
  401. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_checkpoint.py +0 -0
  402. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_subworkflow_step.py +0 -0
  403. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_agent.py +0 -0
  404. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_class.py +0 -0
  405. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_models.py +0 -0
  406. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_reliability.py +0 -0
  407. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_runner.py +0 -0
  408. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_schema.py +0 -0
  409. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_steps.py +0 -0
  410. {agentbyte-0.47.0 → agentbyte-0.48.0}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -6,6 +6,33 @@ The format follows Keep a Changelog principles and semantic versioning.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.48.0] - 2026-10-06
10
+
11
+ ### Added
12
+
13
+ - Evaluation suite workspace and score-aware optimization outcome (spec 0069): `suite` is a
14
+ first-class, indexed column on eval runs (`list_runs(suite=)`, `GET /api/eval/runs?suite=`), and
15
+ `OptimizationReport`/`OptimizationRunRecord` expose a shared `OptimizationOutcome`
16
+ (`improved` / `seed_kept` / `best_candidate_changed`) via `classify_outcome`.
17
+ - Agent as a first-class history dimension (spec 0070): `agent_id`/`agent_name` on `EvalRunRecord`
18
+ and `OptimizationRunRecord` (indexed `agent_id`, defaulted from `target_id`), `list_runs(agent=)`
19
+ / `list_optimizations(agent=)`, `GET /api/eval/agents` and `?agent=` filters. `EvalSuite` declares
20
+ `agent_id`/`agent_name`/`agent_description`; `EvalSuiteRegistry` builds agent cards and raises
21
+ `DuplicateAgentError` when one `agent_id` maps to two names. The WebUI Evaluations tab is now an
22
+ agent-card gallery with per-agent pages (suites + Run, grouped history, server-side pagination).
23
+ - `SqlEvalRunStore.from_sqlite_path` / `from_url` convenience constructors that own the engine
24
+ (spec 0071).
25
+
26
+ ### Changed
27
+
28
+ - One storage backend for evaluation history (spec 0071): `SqlEvalRunStore` (SQLAlchemy Core) now
29
+ serves both SQLite and PostgreSQL. The hand-written raw-SQL SQLite store was retired;
30
+ `SQLiteEvalRunStore` is kept as a thin backward-compatible alias. SQLite gets a single-writer file
31
+ lock, `PRAGMA synchronous=FULL` and schema auto-migration; the row format is unchanged, so existing
32
+ `.sqlite` files open with no data migration. History store schema migrates forward to layout 4.
33
+ - The `sqlite` extra now also provides `sqlalchemy[asyncio]` (needed by the unified store); `import
34
+ agentbyte` with core dependencies only is unchanged.
35
+
9
36
  ## [0.47.0] - 2026-10-06
10
37
 
11
38
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentbyte
3
- Version: 0.47.0
3
+ Version: 0.48.0
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
@@ -70,6 +70,7 @@ Requires-Dist: sqlalchemy[asyncio]>=2.0.43; extra == 'sql'
70
70
  Requires-Dist: sqlmodel>=0.0.38; extra == 'sql'
71
71
  Provides-Extra: sqlite
72
72
  Requires-Dist: aiosqlite>=0.22.1; extra == 'sqlite'
73
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.43; extra == 'sqlite'
73
74
  Provides-Extra: tiktoken
74
75
  Requires-Dist: tiktoken>=0.9.0; extra == 'tiktoken'
75
76
  Provides-Extra: viz
@@ -83,7 +84,7 @@ Description-Content-Type: text/markdown
83
84
 
84
85
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
85
86
 
86
- Current release: **0.47.0**
87
+ Current release: **0.48.0**
87
88
 
88
89
  ## Building an Agent
89
90
 
@@ -317,8 +318,8 @@ uv add "agentbyte[openai,sqlite]"
317
318
  | `otel` | OpenTelemetry API, SDK, OTLP exporter | OpenTelemetry tracing and metrics |
318
319
  | `webui` | `fastapi`, `uvicorn` | `agentbyte webui` |
319
320
  | `gunicorn` | `webui` + `gunicorn` | Production single-worker serving (`gunicorn -k uvicorn.workers.UvicornWorker -w 1`) |
320
- | `sqlite` | `aiosqlite` | SQLite datasets, workflow checkpoints, evaluation history |
321
- | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, `SqlEvalRunStore` |
321
+ | `sqlite` | `aiosqlite`, `sqlalchemy[asyncio]` | SQLite datasets, workflow checkpoints, evaluation history (`SqlEvalRunStore` over `sqlite+aiosqlite`) |
322
+ | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, PostgreSQL `SqlEvalRunStore` |
322
323
  | `sql` | `sqlite` + `postgres` | Both SQL backends |
323
324
  | `tiktoken` | `tiktoken` | `TiktokenCounter` for exact compaction token counts |
324
325
  | `optim` | `gepa` | `optimize_with_gepa()` |
@@ -2,7 +2,7 @@
2
2
 
3
3
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
4
4
 
5
- Current release: **0.47.0**
5
+ Current release: **0.48.0**
6
6
 
7
7
  ## Building an Agent
8
8
 
@@ -236,8 +236,8 @@ uv add "agentbyte[openai,sqlite]"
236
236
  | `otel` | OpenTelemetry API, SDK, OTLP exporter | OpenTelemetry tracing and metrics |
237
237
  | `webui` | `fastapi`, `uvicorn` | `agentbyte webui` |
238
238
  | `gunicorn` | `webui` + `gunicorn` | Production single-worker serving (`gunicorn -k uvicorn.workers.UvicornWorker -w 1`) |
239
- | `sqlite` | `aiosqlite` | SQLite datasets, workflow checkpoints, evaluation history |
240
- | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, `SqlEvalRunStore` |
239
+ | `sqlite` | `aiosqlite`, `sqlalchemy[asyncio]` | SQLite datasets, workflow checkpoints, evaluation history (`SqlEvalRunStore` over `sqlite+aiosqlite`) |
240
+ | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, PostgreSQL `SqlEvalRunStore` |
241
241
  | `sql` | `sqlite` + `postgres` | Both SQL backends |
242
242
  | `tiktoken` | `tiktoken` | `TiktokenCounter` for exact compaction token counts |
243
243
  | `optim` | `gepa` | `optimize_with_gepa()` |
@@ -42,6 +42,7 @@ gunicorn = [
42
42
  ]
43
43
  sqlite = [
44
44
  "aiosqlite>=0.22.1",
45
+ "sqlalchemy[asyncio]>=2.0.43",
45
46
  ]
46
47
  postgres = [
47
48
  "sqlalchemy[asyncio]>=2.0.43",
@@ -0,0 +1,2 @@
1
+ __version__ = "0.48.0"
2
+ VERSION = __version__
@@ -46,8 +46,12 @@ class JudgeScoringError(Exception):
46
46
  class BaseEvalTarget(ABC):
47
47
  """Anything that can execute an evaluation task into a trajectory."""
48
48
 
49
- def __init__(self, name: str):
49
+ def __init__(self, name: str, *, agent_id: str | None = None, agent_name: str | None = None):
50
50
  self.name = name
51
+ # Optional stable agent identity (spec 0070). ``agent_name`` defaults to the target name;
52
+ # ``agent_id`` falls back to the name when not supplied by the caller or suite.
53
+ self.agent_id = agent_id
54
+ self.agent_name = agent_name or name
51
55
 
52
56
  @abstractmethod
53
57
  async def run(
@@ -0,0 +1,46 @@
1
+ """Exclusive single-writer file lock for file-backed history databases (SQLite).
2
+
3
+ Shared by the SQLite path of ``SqlEvalRunStore`` (spec 0071). PostgreSQL uses session-level
4
+ advisory locks instead; SQLite has no server, so a ``<path>.writer.lock`` file holds exclusive
5
+ writer ownership for a store's lifetime and the OS releases it on process exit.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import os
11
+
12
+ from .errors import EvalStoreOwnershipError
13
+
14
+
15
+ class WriterLock:
16
+ """Exclusive per-database writer ownership, released by the OS on process exit."""
17
+
18
+ def __init__(self, path: str) -> None:
19
+ self.path = f"{path}.writer.lock"
20
+ self._fd: int | None = None
21
+
22
+ def acquire(self) -> None:
23
+ fd = os.open(self.path, os.O_RDWR | os.O_CREAT, 0o600)
24
+ try:
25
+ try:
26
+ import fcntl
27
+
28
+ fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
29
+ except ImportError: # pragma: no cover - Windows
30
+ import msvcrt
31
+
32
+ msvcrt.locking(fd, msvcrt.LK_NBLCK, 1)
33
+ except OSError as exc:
34
+ os.close(fd)
35
+ raise EvalStoreOwnershipError(
36
+ f"Another writer owns {self.path.removesuffix('.writer.lock')}"
37
+ ) from exc
38
+ self._fd = fd
39
+
40
+ def release(self) -> None:
41
+ fd, self._fd = self._fd, None
42
+ if fd is not None:
43
+ os.close(fd)
44
+
45
+
46
+ __all__ = ["WriterLock"]
@@ -282,6 +282,47 @@ async def check_queries_paginate_filter_and_delete(store: EvalRunStore) -> None:
282
282
  assert await store.delete_run(runs[0].id) is False
283
283
 
284
284
 
285
+ async def check_suite_is_derived_from_labels_and_filterable(store: EvalRunStore) -> None:
286
+ from .models import SUITE_LABEL_KEY
287
+
288
+ alpha = _run(labels={SUITE_LABEL_KEY: "alpha"})
289
+ beta = _run(labels={SUITE_LABEL_KEY: "beta"})
290
+ unlabelled = _run()
291
+ assert (alpha.suite, beta.suite, unlabelled.suite) == ("alpha", "beta", None)
292
+ explicit = _run(suite="gamma", labels={SUITE_LABEL_KEY: "alpha"})
293
+ assert explicit.suite == "gamma" # an explicit suite wins over the label
294
+
295
+ for run in (alpha, beta, unlabelled):
296
+ await store.create_run(run, _items(run, 1))
297
+
298
+ assert [r.id for r in await store.list_runs(suite="alpha")] == [alpha.id]
299
+ assert [r.id for r in await store.list_runs(suite="beta")] == [beta.id]
300
+ assert await store.list_runs(suite="absent") == []
301
+ assert {r.id for r in await store.list_runs()} == {alpha.id, beta.id, unlabelled.id}
302
+
303
+
304
+ async def check_agent_is_recorded_and_filterable(store: EvalRunStore) -> None:
305
+ # spec 0070: agent_id defaults from target_id and is filterable, orthogonally to suite.
306
+ from .models import SUITE_LABEL_KEY
307
+
308
+ geo = _run(agent_id="geo-support", agent_name="Geo Support", labels={SUITE_LABEL_KEY: "capitals"})
309
+ acme = _run(agent_id="acme-support", labels={SUITE_LABEL_KEY: "capitals"})
310
+ defaulted = _run() # no agent_id -> falls back to target_id ("t")
311
+ assert (geo.agent_id, geo.agent_name) == ("geo-support", "Geo Support")
312
+ assert (acme.agent_id, acme.agent_name) == ("acme-support", "acme-support") # name defaults to id
313
+ assert defaulted.agent_id == "t" # the target_id default
314
+
315
+ for run in (geo, acme, defaulted):
316
+ await store.create_run(run, _items(run, 1))
317
+
318
+ assert [r.id for r in await store.list_runs(agent="geo-support")] == [geo.id]
319
+ assert [r.id for r in await store.list_runs(agent="t")] == [defaulted.id]
320
+ assert await store.list_runs(agent="absent") == []
321
+ # agent and suite filter independently
322
+ assert [r.id for r in await store.list_runs(agent="geo-support", suite="capitals")] == [geo.id]
323
+ assert await store.list_runs(agent="geo-support", suite="other") == []
324
+
325
+
285
326
  async def check_unknown_run_is_reported(store: EvalRunStore) -> None:
286
327
  assert await store.get_run("missing") is None
287
328
  await _raises(EvalRunNotFoundError, store.start_run("missing"))
@@ -16,7 +16,7 @@ from enum import StrEnum
16
16
  from typing import Any
17
17
  from uuid import uuid4
18
18
 
19
- from pydantic import BaseModel, ConfigDict, Field
19
+ from pydantic import BaseModel, ConfigDict, Field, computed_field, model_validator
20
20
 
21
21
  from agentbyte.eval.types import EvalScore, EvalTask, MultiTurnEvalTask, ScoringStatus, WorkflowEvalTask
22
22
  from agentbyte.execution_trace.models import ExecutionStatus
@@ -27,8 +27,14 @@ from .errors import EvalSchemaVersionError, EvalSerializationError
27
27
  SCHEMA_VERSION = 1
28
28
  """Version of the stored run/item record layout."""
29
29
 
30
- STORE_SCHEMA_VERSION = 2
31
- """Version of the history database layout. 2 adds the ``optimization_runs`` table (spec 0068)."""
30
+ STORE_SCHEMA_VERSION = 4
31
+ """Version of the history database layout. 2 adds the ``optimization_runs`` table (spec 0068);
32
+ 3 adds an indexed ``suite`` column on eval runs for suite-scoped listing (spec 0069); 4 adds an
33
+ indexed ``agent_id`` column on eval runs and optimization runs for agent-scoped listing (spec 0070)."""
34
+
35
+ SUITE_LABEL_KEY = "agentbyte.suite"
36
+ """Run-label key carrying the suite name. Workbench's ``SUITE_LABEL`` re-exports this so the
37
+ history layer can derive ``EvalRunRecord.suite`` without importing the workbench package."""
32
38
 
33
39
  EVIDENCE_VERSION = 1
34
40
  """Version of the serialized full-capture evidence envelope."""
@@ -134,10 +140,40 @@ class EvalRunRecord(BaseModel):
134
140
  judge_type: str
135
141
  criteria: list[str] | None = None
136
142
  labels: dict[str, str] = Field(default_factory=dict)
143
+ suite: str | None = None
144
+ agent_id: str | None = None
145
+ agent_name: str | None = None
137
146
  owner: str | None = None
138
147
  worker_id: str | None = None
139
148
  idempotency_key: str | None = None
140
149
  previous_run_id: str | None = None
150
+
151
+ @model_validator(mode="before")
152
+ @classmethod
153
+ def _derive_suite_from_labels(cls, data: Any) -> Any:
154
+ """Default ``suite`` from the suite label so suite-scoped queries work for every run."""
155
+ if isinstance(data, dict) and not data.get("suite"):
156
+ labels = data.get("labels") or {}
157
+ if isinstance(labels, dict) and labels.get(SUITE_LABEL_KEY):
158
+ data = {**data, "suite": labels[SUITE_LABEL_KEY]}
159
+ return data
160
+
161
+ @model_validator(mode="before")
162
+ @classmethod
163
+ def _default_agent_from_target(cls, data: Any) -> Any:
164
+ """Default agent identity from ``target_id`` so agent-scoped queries work for every run.
165
+
166
+ ``agent_id`` is the machine-readable identity; when a caller does not supply one it falls
167
+ back to ``target_id`` (the agent's name). ``agent_name`` is a human label defaulting to the
168
+ resolved ``agent_id`` (spec 0070).
169
+ """
170
+ if isinstance(data, dict):
171
+ agent_id = data.get("agent_id") or data.get("target_id")
172
+ if agent_id and not data.get("agent_id"):
173
+ data = {**data, "agent_id": agent_id}
174
+ if agent_id and not data.get("agent_name"):
175
+ data = {**data, "agent_name": agent_id}
176
+ return data
141
177
  created_at: datetime = Field(default_factory=utc_now)
142
178
  started_at: datetime | None = None
143
179
  finished_at: datetime | None = None
@@ -315,6 +351,8 @@ class OptimizationRunRecord(BaseModel):
315
351
 
316
352
  id: str = Field(default_factory=lambda: str(uuid4()))
317
353
  suite: str
354
+ agent_id: str | None = None
355
+ agent_name: str | None = None
318
356
  created_at: datetime = Field(default_factory=utc_now)
319
357
  title: str = "Optimization run"
320
358
  optimizer: str | None = None
@@ -328,23 +366,50 @@ class OptimizationRunRecord(BaseModel):
328
366
  pass_score: float = 10.0
329
367
  trace: dict[str, Any] | None = None
330
368
 
369
+ @computed_field # serialized so the suite listing shows the outcome without the full trace
370
+ @property
371
+ def outcome(self) -> str:
372
+ """Score-aware outcome string, from the same shared classifier the report uses (spec 0069)."""
373
+ from agentbyte.optim.report import classify_outcome
374
+
375
+ return str(classify_outcome(self.seed, self.best, self.seed_avg, self.best_avg))
376
+
331
377
  @classmethod
332
378
  def from_result(
333
- cls, result: Any, *, suite: str, pass_score: float = 10.0, title: str | None = None
379
+ cls,
380
+ result: Any,
381
+ *,
382
+ suite: str,
383
+ pass_score: float = 10.0,
384
+ title: str | None = None,
385
+ agent_id: str | None = None,
386
+ agent_name: str | None = None,
334
387
  ) -> OptimizationRunRecord:
335
- """Record an ``OptimizationResult`` under ``suite``."""
336
- return cls.from_trace(result.trace, suite=suite, pass_score=pass_score, title=title)
388
+ """Record an ``OptimizationResult`` under ``suite`` (and optionally an agent, spec 0070)."""
389
+ return cls.from_trace(
390
+ result.trace, suite=suite, pass_score=pass_score, title=title,
391
+ agent_id=agent_id, agent_name=agent_name,
392
+ )
337
393
 
338
394
  @classmethod
339
395
  def from_trace(
340
- cls, trace: Any, *, suite: str, pass_score: float = 10.0, title: str | None = None
396
+ cls,
397
+ trace: Any,
398
+ *,
399
+ suite: str,
400
+ pass_score: float = 10.0,
401
+ title: str | None = None,
402
+ agent_id: str | None = None,
403
+ agent_name: str | None = None,
341
404
  ) -> OptimizationRunRecord:
342
- """Record an ``OptimizationTrace`` (live or loaded) under ``suite``."""
405
+ """Record an ``OptimizationTrace`` (live or loaded) under ``suite`` (and optional agent)."""
343
406
  from agentbyte.optim.report import build_report
344
407
 
345
408
  report = build_report(trace, title=title or suite, pass_score=pass_score)
346
409
  return cls(
347
410
  suite=suite,
411
+ agent_id=agent_id,
412
+ agent_name=agent_name or agent_id,
348
413
  title=report.title,
349
414
  optimizer=report.optimizer,
350
415
  seed=report.seed,
@@ -92,6 +92,8 @@ class EvalRunRecorder:
92
92
  dataset_revision: str | None = None,
93
93
  criteria: list[str] | None = None,
94
94
  target_fingerprint: str | None = None,
95
+ agent_id: str | None = None,
96
+ agent_name: str | None = None,
95
97
  labels: dict[str, str] | None = None,
96
98
  owner: str | None = None,
97
99
  previous_run_id: str | None = None,
@@ -106,8 +108,8 @@ class EvalRunRecorder:
106
108
  run, _ = await self.admit(
107
109
  runner, tasks, dataset_id=dataset_id, target_id=target_id,
108
110
  dataset_revision=dataset_revision, criteria=criteria,
109
- target_fingerprint=target_fingerprint, labels=labels, owner=owner,
110
- previous_run_id=previous_run_id,
111
+ target_fingerprint=target_fingerprint, agent_id=agent_id, agent_name=agent_name,
112
+ labels=labels, owner=owner, previous_run_id=previous_run_id,
111
113
  )
112
114
  async with contextlib.aclosing(
113
115
  self.execute_stream(
@@ -132,6 +134,8 @@ class EvalRunRecorder:
132
134
  dataset_revision: str | None = None,
133
135
  criteria: list[str] | None = None,
134
136
  target_fingerprint: str | None = None,
137
+ agent_id: str | None = None,
138
+ agent_name: str | None = None,
135
139
  labels: dict[str, str] | None = None,
136
140
  owner: str | None = None,
137
141
  previous_run_id: str | None = None,
@@ -148,8 +152,8 @@ class EvalRunRecorder:
148
152
  run, _ = await self.admit(
149
153
  runner, tasks, dataset_id=dataset_id, target_id=target_id,
150
154
  dataset_revision=dataset_revision, criteria=criteria,
151
- target_fingerprint=target_fingerprint, labels=labels, owner=owner,
152
- previous_run_id=previous_run_id,
155
+ target_fingerprint=target_fingerprint, agent_id=agent_id, agent_name=agent_name,
156
+ labels=labels, owner=owner, previous_run_id=previous_run_id,
153
157
  )
154
158
  async with contextlib.aclosing(
155
159
  self.execute_stream(
@@ -169,6 +173,8 @@ class EvalRunRecorder:
169
173
  dataset_revision: str | None = None,
170
174
  criteria: list[str] | None = None,
171
175
  target_fingerprint: str | None = None,
176
+ agent_id: str | None = None,
177
+ agent_name: str | None = None,
172
178
  labels: dict[str, str] | None = None,
173
179
  owner: str | None = None,
174
180
  previous_run_id: str | None = None,
@@ -189,6 +195,8 @@ class EvalRunRecorder:
189
195
  dataset_revision=dataset_revision,
190
196
  target_id=target_id,
191
197
  target_fingerprint=target_fingerprint,
198
+ agent_id=agent_id,
199
+ agent_name=agent_name,
192
200
  judge_name=runner.judge.name,
193
201
  judge_type=type(runner.judge).__qualname__,
194
202
  criteria=list(criteria) if criteria is not None else None,