agentbyte 0.22.0__tar.gz → 0.22.1__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 (343) hide show
  1. {agentbyte-0.22.0 → agentbyte-0.22.1}/.gitignore +12 -1
  2. {agentbyte-0.22.0 → agentbyte-0.22.1}/CHANGELOG.md +32 -0
  3. {agentbyte-0.22.0 → agentbyte-0.22.1}/PKG-INFO +4 -2
  4. {agentbyte-0.22.0 → agentbyte-0.22.1}/README.md +1 -1
  5. {agentbyte-0.22.0 → agentbyte-0.22.1}/pyproject.toml +7 -0
  6. agentbyte-0.22.1/src/agentbyte/__about__.py +2 -0
  7. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/__init__.py +2 -0
  8. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/base.py +4 -0
  9. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/importer.py +69 -3
  10. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/loader.py +10 -0
  11. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/sources.py +35 -4
  12. agentbyte-0.22.1/src/agentbyte/dataset/sqlite_db.py +172 -0
  13. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/logger.py +39 -18
  14. agentbyte-0.22.1/tests/dataset/test_sqlite_db.py +288 -0
  15. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_logger.py +9 -12
  16. agentbyte-0.22.0/src/agentbyte/__about__.py +0 -2
  17. {agentbyte-0.22.0 → agentbyte-0.22.1}/LICENSE +0 -0
  18. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/__init__.py +0 -0
  19. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/__init__.py +0 -0
  20. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/agent.py +0 -0
  21. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/agent_as_tool.py +0 -0
  22. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/base.py +0 -0
  23. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/embedding_agent.py +0 -0
  24. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/agents/types.py +0 -0
  25. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/cancellation_token.py +0 -0
  26. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/catalog.py +0 -0
  27. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/cli/__init__.py +0 -0
  28. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/cli/main.py +0 -0
  29. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/component.py +0 -0
  30. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/context.py +0 -0
  31. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/context_providers/__init__.py +0 -0
  32. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/context_providers/base.py +0 -0
  33. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/context_providers/skill_tools.py +0 -0
  34. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/context_providers/skills.py +0 -0
  35. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/config.py +0 -0
  36. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/json.py +0 -0
  37. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/publish.py +0 -0
  38. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/publish_config.py +0 -0
  39. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/publishers.py +0 -0
  40. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/sqlite.py +0 -0
  41. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/write_config.py +0 -0
  42. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/dataset/writers.py +0 -0
  43. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/entity.py +0 -0
  44. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/__init__.py +0 -0
  45. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/base.py +0 -0
  46. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/__init__.py +0 -0
  47. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/decorator.py +0 -0
  48. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/keyword.py +0 -0
  49. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/local.py +0 -0
  50. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/tool.py +0 -0
  51. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/checks/types.py +0 -0
  52. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/comparison.py +0 -0
  53. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/eval_dataset.py +0 -0
  54. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/__init__.py +0 -0
  55. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/base.py +0 -0
  56. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/composite.py +0 -0
  57. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/llm.py +0 -0
  58. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/pairwise.py +0 -0
  59. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/judges/reference.py +0 -0
  60. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/pairwise.py +0 -0
  61. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/report.py +0 -0
  62. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/runner.py +0 -0
  63. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/targets/__init__.py +0 -0
  64. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/targets/agent.py +0 -0
  65. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/targets/model.py +0 -0
  66. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/targets/multi_turn.py +0 -0
  67. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  68. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/eval/types.py +0 -0
  69. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/__init__.py +0 -0
  70. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/_retry_observability.py +0 -0
  71. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/auth.py +0 -0
  72. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure/__init__.py +0 -0
  73. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure/auth.py +0 -0
  74. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure/chat.py +0 -0
  75. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure/embedding.py +0 -0
  76. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure/settings.py +0 -0
  77. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure_openai.py +0 -0
  78. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  79. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/base.py +0 -0
  80. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/embeddings_base.py +0 -0
  81. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai/__init__.py +0 -0
  82. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai/chat.py +0 -0
  83. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai/embedding.py +0 -0
  84. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai/settings.py +0 -0
  85. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai.py +0 -0
  86. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/openai_embedding.py +0 -0
  87. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/pricing.py +0 -0
  88. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/retry_policy.py +0 -0
  89. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/settings.py +0 -0
  90. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/llm/types.py +0 -0
  91. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/memory/__init__.py +0 -0
  92. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/memory/base.py +0 -0
  93. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/messages.py +0 -0
  94. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/microwebui/__init__.py +0 -0
  95. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/microwebui/server.py +0 -0
  96. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/microwebui/ui/index.html +0 -0
  97. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/__init__.py +0 -0
  98. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/base.py +0 -0
  99. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/otel.py +0 -0
  100. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/retry.py +0 -0
  101. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/sql_usage.py +0 -0
  102. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/middleware/usage_logger.py +0 -0
  103. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/notebook.py +0 -0
  104. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/__init__.py +0 -0
  105. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/ai.py +0 -0
  106. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/base.py +0 -0
  107. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/handoff.py +0 -0
  108. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/plan.py +0 -0
  109. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/policies.py +0 -0
  110. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/orchestration/round_robin.py +0 -0
  111. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/__init__.py +0 -0
  112. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/agents.py +0 -0
  113. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/clients.py +0 -0
  114. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instruction_registry.py +0 -0
  115. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  116. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  117. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  118. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  119. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  120. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/orchestration.py +0 -0
  121. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  122. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
  123. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
  124. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
  125. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
  126. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/streaming.py +0 -0
  127. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/presets/workflow.py +0 -0
  128. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/session_store.py +0 -0
  129. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/skills/__init__.py +0 -0
  130. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/skills/base.py +0 -0
  131. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/skills/resources.py +0 -0
  132. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/skills/scripts.py +0 -0
  133. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/skills/sources.py +0 -0
  134. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/__init__.py +0 -0
  135. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/base.py +0 -0
  136. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/cancellation.py +0 -0
  137. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/composite.py +0 -0
  138. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/consecutive_agent.py +0 -0
  139. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/external.py +0 -0
  140. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/function_call.py +0 -0
  141. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/handoff.py +0 -0
  142. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/max_message.py +0 -0
  143. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/predicate.py +0 -0
  144. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/source.py +0 -0
  145. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/text_mention.py +0 -0
  146. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/timeout.py +0 -0
  147. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/termination/token_usage.py +0 -0
  148. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/__init__.py +0 -0
  149. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/base.py +0 -0
  150. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/coding_tools.py +0 -0
  151. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/core_tools.py +0 -0
  152. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/decorator.py +0 -0
  153. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/memory_tool.py +0 -0
  154. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/tools/research_tools.py +0 -0
  155. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/types.py +0 -0
  156. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/__init__.py +0 -0
  157. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/discovery.py +0 -0
  158. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/execution.py +0 -0
  159. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/.gitignore +0 -0
  160. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/README.md +0 -0
  161. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/components.json +0 -0
  162. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
  163. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/index.html +0 -0
  164. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/package-lock.json +0 -0
  165. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/package.json +0 -0
  166. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/plan.md +0 -0
  167. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/public/vite.svg +0 -0
  168. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/App.css +0 -0
  169. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/App.tsx +0 -0
  170. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
  171. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +0 -0
  172. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
  173. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
  174. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
  175. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
  176. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
  177. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -0
  178. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +0 -0
  179. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +0 -0
  180. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
  181. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +0 -0
  182. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +0 -0
  183. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
  184. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +0 -0
  185. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
  186. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
  187. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
  188. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
  189. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
  190. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
  191. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
  192. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  193. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
  194. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
  195. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
  196. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
  197. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
  198. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
  199. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
  200. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
  201. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
  202. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
  203. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +0 -0
  204. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +0 -0
  205. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +0 -0
  206. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +0 -0
  207. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/index.css +0 -0
  208. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/lib/format-utils.ts +0 -0
  209. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/lib/user-id.ts +0 -0
  210. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/lib/utils.ts +0 -0
  211. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
  212. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/services/api.ts +0 -0
  213. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/types/index.ts +0 -0
  214. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/types/picoagents.ts +0 -0
  215. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
  216. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
  217. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
  218. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
  219. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
  220. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
  221. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/frontend/yarn.lock +0 -0
  222. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/models.py +0 -0
  223. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/registry.py +0 -0
  224. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/server.py +0 -0
  225. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/session_store.py +0 -0
  226. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/sessions.py +0 -0
  227. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +0 -0
  228. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -0
  229. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/ui/index.html +0 -0
  230. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/webui/ui/vite.svg +0 -0
  231. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/__init__.py +0 -0
  232. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/agent.py +0 -0
  233. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/__init__.py +0 -0
  234. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  235. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  236. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/models.py +0 -0
  237. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/runner.py +0 -0
  238. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/core/workflow.py +0 -0
  239. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/defaults.py +0 -0
  240. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/loader.py +0 -0
  241. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/schema.py +0 -0
  242. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/schema_utils.py +0 -0
  243. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/__init__.py +0 -0
  244. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
  245. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/echo.py +0 -0
  246. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/function.py +0 -0
  247. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/http.py +0 -0
  248. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/step.py +0 -0
  249. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  250. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/steps/transform.py +0 -0
  251. {agentbyte-0.22.0 → agentbyte-0.22.1}/src/agentbyte/workflow/visualizer.py +0 -0
  252. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_as_tool.py +0 -0
  253. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_basic.py +0 -0
  254. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_context_providers.py +0 -0
  255. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_event_types.py +0 -0
  256. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_memory_integration.py +0 -0
  257. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_middleware_integration.py +0 -0
  258. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_retry_middleware.py +0 -0
  259. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_agent_stream_events.py +0 -0
  260. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_embedding_agent.py +0 -0
  261. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/agents/test_tool_approval.py +0 -0
  262. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/cli/test_registry_check.py +0 -0
  263. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/context_providers/__init__.py +0 -0
  264. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/context_providers/test_skill_tools.py +0 -0
  265. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/context_providers/test_skills_provider.py +0 -0
  266. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/dataset/test_loader.py +0 -0
  267. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/dataset/test_multi_table.py +0 -0
  268. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/dataset/test_publish.py +0 -0
  269. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_eval_dataset.py +0 -0
  270. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_multi_turn.py +0 -0
  271. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_pairwise.py +0 -0
  272. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  273. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  274. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/eval/test_types_and_judges.py +0 -0
  275. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_azure_client.py +0 -0
  276. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_azure_embedding_client.py +0 -0
  277. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_llm_types.py +0 -0
  278. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_openai_client.py +0 -0
  279. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_openai_embedding_client.py +0 -0
  280. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_retry_observability.py +0 -0
  281. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/llm/test_retry_policy_api.py +0 -0
  282. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/memory/test_memory.py +0 -0
  283. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/middleware/test_middleware_chain.py +0 -0
  284. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/middleware/test_otel.py +0 -0
  285. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/middleware/test_retry_middleware.py +0 -0
  286. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/middleware/test_sql_usage.py +0 -0
  287. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/middleware/test_usage_logger.py +0 -0
  288. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/orchestration/test_ai_orchestrator.py +0 -0
  289. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/orchestration/test_base_orchestrator.py +0 -0
  290. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  291. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/orchestration/test_plan_orchestrator.py +0 -0
  292. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/orchestration/test_round_robin.py +0 -0
  293. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_agents.py +0 -0
  294. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_clients.py +0 -0
  295. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_instruction_registry.py +0 -0
  296. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_orchestration.py +0 -0
  297. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_streaming.py +0 -0
  298. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/presets/test_workflow.py +0 -0
  299. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/skills/__init__.py +0 -0
  300. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/skills/test_base.py +0 -0
  301. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/skills/test_resources.py +0 -0
  302. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/skills/test_scripts.py +0 -0
  303. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/skills/test_sources.py +0 -0
  304. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_base.py +0 -0
  305. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_cancellation.py +0 -0
  306. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_composite.py +0 -0
  307. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_consecutive_agent.py +0 -0
  308. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_external.py +0 -0
  309. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_function_call.py +0 -0
  310. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_handoff.py +0 -0
  311. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_max_message.py +0 -0
  312. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_predicate.py +0 -0
  313. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_source.py +0 -0
  314. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_text_mention.py +0 -0
  315. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_timeout.py +0 -0
  316. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/termination/test_token_usage.py +0 -0
  317. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_cancellation_token.py +0 -0
  318. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_context.py +0 -0
  319. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_messages.py +0 -0
  320. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_package_api.py +0 -0
  321. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_session_store.py +0 -0
  322. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/test_types.py +0 -0
  323. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/tools/test_coding_tools.py +0 -0
  324. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/tools/test_memory_tool.py +0 -0
  325. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/tools/test_research_tools.py +0 -0
  326. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/tools/test_tools.py +0 -0
  327. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/__init__.py +0 -0
  328. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/helpers.py +0 -0
  329. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_execution.py +0 -0
  330. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_microwebui_server.py +0 -0
  331. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_package_api.py +0 -0
  332. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_registry.py +0 -0
  333. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_server.py +0 -0
  334. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/webui/test_sessions.py +0 -0
  335. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_checkpoint.py +0 -0
  336. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_subworkflow_step.py +0 -0
  337. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_agent.py +0 -0
  338. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_class.py +0 -0
  339. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_models.py +0 -0
  340. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_runner.py +0 -0
  341. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_schema.py +0 -0
  342. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_steps.py +0 -0
  343. {agentbyte-0.22.0 → agentbyte-0.22.1}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -7,8 +7,15 @@ wheels/
7
7
  *.egg-info
8
8
 
9
9
  # Virtual environments
10
- .venv
10
+ .venv/
11
+ venv/
12
+ env/
13
+
14
+ # Local environment files
11
15
  .env
16
+ .env.*
17
+ !.env.example
18
+ !.env.*.example
12
19
 
13
20
  # IDE
14
21
  .vscode/
@@ -49,3 +56,7 @@ artifacts/
49
56
 
50
57
  # Machine-local agent config (each machine maintains its own)
51
58
  AGENTS.LOCAL.md
59
+ data/datasets/
60
+
61
+ # lean-ctx context runtime cache
62
+ .lean-ctx/
@@ -4,6 +4,38 @@ 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.22.1] - 2026-06-30
8
+
9
+ ### Added
10
+
11
+ - Added `StreamEventLogger.log(event)` — a single dispatcher that routes any stream event to the correct log level, replacing the need for callers to invoke all five level methods per event.
12
+
13
+ ### Changed
14
+
15
+ - `StepProgressEvent` is now logged at `INFO` (moved from `DEBUG`) so that step progress messages emitted via `context.emit_progress()` appear in standard Lambda/application logs without enabling debug output.
16
+
17
+ ## [0.22.0] - 2026-05-30
18
+
19
+ ### Added
20
+
21
+ - Added async-first `SQLiteDataset` rewrite: `connect()` is now async, `__aenter__`/`__aexit__` context manager support added via `aiosqlite`.
22
+ - Added `DatasetImportConfig` and `create_dataset()` importer that converts `list[dict]`, CSV file, and raw CSV string into dataset artifacts on disk.
23
+ - Added `LocalDatasetWriteConfig` and `S3DatasetWriteConfig` as the write-side mirror of the existing source config pattern (`write_config.py`, `writers.py`).
24
+ - Added spec `0020-dataset-importer` registered in `docs/specs/README.md`.
25
+ - Added `hr-analyst` multifile skill demonstrating selective resource loading: agent loads only the schema file relevant to each question rather than injecting the full schema set into every prompt.
26
+ - Added notebook `12.2-agent-skills-multifile-skill` for the HR-analyst pattern.
27
+ - Added notebook `14.1-dataset-importer` covering 10 importer use cases (single/multi-table, all source types, overwrite protection, schema inspection, Pandas DataFrame path).
28
+ - Added `agentbyte-runtime-skills` agent skill (`SKILL.md`) for skill authoring guidance.
29
+ - Added study doc `03_topic_skills_provider.md` under `docs/study/08-skills_topics/`.
30
+
31
+ ### Changed
32
+
33
+ - Reorganised usecase notebooks from flat numbered files into topic subfolders mirroring `notebooks/concepts/`: `agents/`, `configuration/`, `workflows/`, `tools/`, `skills/`, `eval/`, `dataset/`, `rag/`; numbers reset to `01` within each group.
34
+ - Updated `docs/study` dataset topics and concept notebooks (`01-dataset-module-examples`, `02-loading-asmd-esmd-datasets`) for the async API.
35
+ - Removed old `skill-authoring/SKILL.md`; replaced by `agentbyte-runtime-skills/SKILL.md`.
36
+
37
+ ---
38
+
7
39
  ## [0.21.0] - 2026-05-22
8
40
 
9
41
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbyte
3
- Version: 0.22.0
3
+ Version: 0.22.1
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
@@ -30,6 +30,8 @@ Provides-Extra: azureopenai
30
30
  Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
31
31
  Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
32
32
  Provides-Extra: coding
33
+ Provides-Extra: dataset
34
+ Requires-Dist: aiosqlite>=0.22.1; extra == 'dataset'
33
35
  Provides-Extra: dev
34
36
  Requires-Dist: ipykernel>=7.1.0; extra == 'dev'
35
37
  Requires-Dist: nbclient>=0.10.4; extra == 'dev'
@@ -76,7 +78,7 @@ Description-Content-Type: text/markdown
76
78
 
77
79
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
78
80
 
79
- Current release: **0.21.0**
81
+ Current release: **0.22.1**
80
82
 
81
83
  ## Current Capabilities
82
84
 
@@ -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.21.0**
5
+ Current release: **0.22.1**
6
6
 
7
7
  ## Current Capabilities
8
8
 
@@ -38,6 +38,9 @@ webui = [
38
38
  "fastapi>=0.135.2",
39
39
  "uvicorn[standard]>=0.44.0",
40
40
  ]
41
+ dataset = [
42
+ "aiosqlite>=0.22.1",
43
+ ]
41
44
  sql = [
42
45
  "sqlmodel>=0.0.38",
43
46
  "asyncpg>=0.31.0",
@@ -139,6 +142,9 @@ otel = [
139
142
  "opentelemetry-exporter-otlp-proto-http>=1.39.1",
140
143
  "opentelemetry-sdk>=1.39.1",
141
144
  ]
145
+ dataset = [
146
+ "aiosqlite>=0.22.1",
147
+ ]
142
148
  sql = [
143
149
  "sqlmodel>=0.0.38",
144
150
  "asyncpg>=0.31.0",
@@ -175,6 +181,7 @@ all = [
175
181
  "openai>=1.107.1",
176
182
  "azure-identity>=1.25.1",
177
183
  "aioboto3>=15.5.0",
184
+ "aiosqlite>=0.22.1",
178
185
  "opentelemetry-api>=1.39.1",
179
186
  "opentelemetry-exporter-otlp-proto-http>=1.39.1",
180
187
  "opentelemetry-sdk>=1.39.1",
@@ -0,0 +1,2 @@
1
+ __version__ = "0.22.1"
2
+ VERSION = __version__
@@ -113,6 +113,7 @@ from agentbyte.dataset.sqlite import (
113
113
  SqliteColumn,
114
114
  SqliteSchema,
115
115
  )
116
+ from agentbyte.dataset.sqlite_db import SQLiteDbDataset
116
117
 
117
118
  __all__ = [
118
119
  # Source configuration
@@ -134,6 +135,7 @@ __all__ = [
134
135
  "BaseDataset",
135
136
  # Implementations
136
137
  "SQLiteDataset",
138
+ "SQLiteDbDataset",
137
139
  "JSONDataset",
138
140
  "DatasetPublisher",
139
141
  "S3DatasetPublisher",
@@ -87,11 +87,15 @@ class DatasetConfig(BaseModel):
87
87
  engine: str = Field(default="sqlite", description="Database engine")
88
88
  table_name: str = Field(default="", description="Table name for single-table datasets")
89
89
  tables: list[TableDef] = Field(default_factory=list, description="Table definitions for multi-table datasets")
90
+ table_names: list[str] = Field(default_factory=list, description="Table names for sqlite_db engine")
90
91
  in_memory: bool = Field(default=True, description="Use in-memory storage")
91
92
  description: str = Field(default="", description="Dataset description")
92
93
 
93
94
  @model_validator(mode="after")
94
95
  def _validate_table_mode(self) -> "DatasetConfig":
96
+ # sqlite_db uses table_names instead of table_name/tables
97
+ if self.engine == "sqlite_db":
98
+ return self
95
99
  has_single = bool(self.table_name)
96
100
  has_multi = bool(self.tables)
97
101
  if has_single and has_multi:
@@ -286,6 +286,69 @@ def _assemble_all_files(
286
286
  return files
287
287
 
288
288
 
289
+ # ---------------------------------------------------------------------------
290
+ # sqlite_db binary file assembly — pure sqlite3 + thread, no aiosqlite
291
+ # ---------------------------------------------------------------------------
292
+
293
+
294
+ def _build_db_files(
295
+ config: "DatasetImportConfig",
296
+ sources: list[DataSource],
297
+ ) -> dict[str, bytes]:
298
+ """Build config.json + dataset.db bytes for the sqlite_db engine.
299
+
300
+ Runs in a thread (called via asyncio.to_thread). Uses only stdlib sqlite3
301
+ and sqlite3.Connection.backup() which is available since Python 3.7.
302
+ """
303
+ import os
304
+ import sqlite3
305
+ import tempfile
306
+ from pathlib import Path as _Path
307
+
308
+ table_names: list[str] = []
309
+ mem = sqlite3.connect(":memory:")
310
+ try:
311
+ for source in sources:
312
+ records = source.load()
313
+ schema = _infer_schema(records)
314
+ serialized = _serialize_for_sqlite(records, schema)
315
+ mem.execute(_build_create_table_sql(source.name, schema))
316
+ if serialized:
317
+ col_names = [col["name"] for col in schema]
318
+ placeholders = ", ".join(["?"] * len(col_names))
319
+ insert_sql = (
320
+ f"INSERT INTO {source.name} ({', '.join(col_names)}) "
321
+ f"VALUES ({placeholders})"
322
+ )
323
+ mem.executemany(
324
+ insert_sql,
325
+ [tuple(r.get(c) for c in col_names) for r in serialized],
326
+ )
327
+ table_names.append(source.name)
328
+ mem.commit()
329
+
330
+ with tempfile.NamedTemporaryFile(suffix=".db", delete=False) as f:
331
+ tmp = f.name
332
+ try:
333
+ with sqlite3.connect(tmp) as dst:
334
+ mem.backup(dst)
335
+ db_bytes = _Path(tmp).read_bytes()
336
+ finally:
337
+ os.unlink(tmp)
338
+ finally:
339
+ mem.close()
340
+
341
+ cfg_dict = {
342
+ "engine": "sqlite_db",
343
+ "table_names": table_names,
344
+ "description": config.description,
345
+ }
346
+ return {
347
+ "config.json": json.dumps(cfg_dict, indent=2).encode(),
348
+ "dataset.db": db_bytes,
349
+ }
350
+
351
+
289
352
  # ---------------------------------------------------------------------------
290
353
  # aiosqlite validation — runs before writing any files
291
354
  # ---------------------------------------------------------------------------
@@ -361,10 +424,13 @@ class DatasetImporter:
361
424
  "Set overwrite=True to replace it."
362
425
  )
363
426
 
364
- if self._config.engine == "sqlite":
365
- await _validate_with_aiosqlite(self._config, sources)
427
+ if self._config.engine == "sqlite_db":
428
+ files = await asyncio.to_thread(_build_db_files, self._config, sources)
429
+ else:
430
+ if self._config.engine == "sqlite":
431
+ await _validate_with_aiosqlite(self._config, sources)
432
+ files = await asyncio.to_thread(_assemble_all_files, self._config, sources)
366
433
 
367
- files = await asyncio.to_thread(_assemble_all_files, self._config, sources)
368
434
  return await asyncio.to_thread(writer.write_files, self._config.dataset_id, files)
369
435
 
370
436
 
@@ -5,6 +5,7 @@ from agentbyte.dataset.config import DatasetSourceConfig
5
5
  from agentbyte.dataset.json import JSONDataset
6
6
  from agentbyte.dataset.sources import DatasetFiles
7
7
  from agentbyte.dataset.sqlite import SQLiteDataset
8
+ from agentbyte.dataset.sqlite_db import SQLiteDbDataset
8
9
 
9
10
  # Engine registry: maps engine name → BaseDataset subclass.
10
11
  # Third-party engines can register themselves via register_engine().
@@ -35,6 +36,7 @@ def register_engine(name: str, cls: type[BaseDataset]) -> None:
35
36
  # Pre-register built-in engines
36
37
  register_engine("sqlite", SQLiteDataset)
37
38
  register_engine("json", JSONDataset)
39
+ register_engine("sqlite_db", SQLiteDbDataset)
38
40
 
39
41
 
40
42
  async def load_dataset(dataset_id: str, config: DatasetSourceConfig) -> BaseDataset:
@@ -94,6 +96,14 @@ def _build_dataset(dataset_id: str, dataset_files: DatasetFiles) -> BaseDataset:
94
96
  f"Registered engines: {registered}. "
95
97
  f"Use register_engine() to add a new engine."
96
98
  )
99
+ if config.engine == "sqlite_db":
100
+ return cls(
101
+ dataset_id=dataset_id,
102
+ config=config,
103
+ source_uri=dataset_files.source_uri,
104
+ db_path=dataset_files.db_path,
105
+ db_bytes=dataset_files.db_bytes,
106
+ )
97
107
  return cls(
98
108
  dataset_id=dataset_id,
99
109
  config=config,
@@ -46,6 +46,7 @@ class DatasetFiles:
46
46
 
47
47
  For single-table datasets: ``data_text`` and ``schema_text`` are populated.
48
48
  For multi-table datasets: ``table_files`` is populated; ``data_text`` is empty.
49
+ For sqlite_db datasets: ``db_path`` (local) or ``db_bytes`` (S3) is populated.
49
50
  """
50
51
 
51
52
  dataset_id: str
@@ -54,6 +55,8 @@ class DatasetFiles:
54
55
  data_text: str = ""
55
56
  schema_text: str | None = None
56
57
  table_files: list[TableFiles] = field(default_factory=list)
58
+ db_path: "Path | None" = None
59
+ db_bytes: bytes | None = None
57
60
 
58
61
 
59
62
  def validate_dataset_id(dataset_id: str) -> None:
@@ -99,6 +102,17 @@ class LocalDatasetSource(DatasetSource):
99
102
  config_text = self._read_required_text(config_path, "Config file not found")
100
103
  config = DatasetConfig(**json.loads(config_text))
101
104
 
105
+ if config.engine == "sqlite_db":
106
+ db_path = dataset_dir / "dataset.db"
107
+ if not db_path.exists():
108
+ raise FileNotFoundError(f"dataset.db not found: {db_path}")
109
+ return DatasetFiles(
110
+ dataset_id=dataset_id,
111
+ config=config,
112
+ source_uri=str(dataset_dir),
113
+ db_path=db_path,
114
+ )
115
+
102
116
  if config.is_multi_table:
103
117
  table_files = []
104
118
  for td in config.tables:
@@ -167,6 +181,16 @@ class S3DatasetSource(DatasetSource):
167
181
 
168
182
  source_uri = f"s3://{self.config.s3_bucket}/{self._dataset_prefix(dataset_id)}"
169
183
 
184
+ if config.engine == "sqlite_db":
185
+ db_key = self._build_key(dataset_id, "dataset.db")
186
+ db_bytes = self._read_required_bytes(db_key)
187
+ return DatasetFiles(
188
+ dataset_id=dataset_id,
189
+ config=config,
190
+ source_uri=source_uri,
191
+ db_bytes=db_bytes,
192
+ )
193
+
170
194
  if config.is_multi_table:
171
195
  table_files = []
172
196
  for td in config.tables:
@@ -209,6 +233,12 @@ class S3DatasetSource(DatasetSource):
209
233
  except FileNotFoundError as exc:
210
234
  raise FileNotFoundError(f"Dataset object not found: s3://{self.config.s3_bucket}/{key}") from exc
211
235
 
236
+ def _read_required_bytes(self, key: str) -> bytes:
237
+ try:
238
+ return self._read_raw_bytes(key)
239
+ except FileNotFoundError as exc:
240
+ raise FileNotFoundError(f"Dataset object not found: s3://{self.config.s3_bucket}/{key}") from exc
241
+
212
242
  def _read_optional_text(self, key: str) -> str | None:
213
243
  try:
214
244
  return self._read_text(key)
@@ -216,6 +246,10 @@ class S3DatasetSource(DatasetSource):
216
246
  return None
217
247
 
218
248
  def _read_text(self, key: str) -> str:
249
+ body = self._read_raw_bytes(key)
250
+ return body.decode("utf-8")
251
+
252
+ def _read_raw_bytes(self, key: str) -> bytes:
219
253
  client = self._get_client()
220
254
  try:
221
255
  response = client.get_object(Bucket=self.config.s3_bucket, Key=key)
@@ -223,11 +257,8 @@ class S3DatasetSource(DatasetSource):
223
257
  if self._is_not_found_error(exc):
224
258
  raise FileNotFoundError(f"s3://{self.config.s3_bucket}/{key}") from exc
225
259
  raise
226
-
227
260
  body = response["Body"].read()
228
- if isinstance(body, bytes):
229
- return body.decode("utf-8")
230
- return body
261
+ return body if isinstance(body, bytes) else body.encode("utf-8")
231
262
 
232
263
  @staticmethod
233
264
  def _is_not_found_error(exc: Exception) -> bool:
@@ -0,0 +1,172 @@
1
+ """SQLite .db binary dataset backed by a native SQLite file via aiosqlite."""
2
+
3
+ import os
4
+ import tempfile
5
+ from pathlib import Path
6
+ from typing import Any
7
+
8
+ import aiosqlite
9
+
10
+ from agentbyte.dataset.base import BaseDataset, DatasetConfig
11
+ from agentbyte.dataset.sqlite import SqliteColumn, SqliteSchema, validate_sqlite_identifier
12
+
13
+
14
+ class SQLiteDbDataset(BaseDataset):
15
+ """Async SQLite dataset backed by a native .db binary file.
16
+
17
+ For local sources the .db file is opened directly. For S3 sources the
18
+ binary bytes are written to a temp file which is deleted on ``aclose()``.
19
+
20
+ Use as an async context manager:
21
+
22
+ async with load_dataset("hr/employees", LocalDatasetConfig(...)) as ds:
23
+ rows = await ds.fetch_all()
24
+
25
+ Or call ``aclose()`` explicitly when done.
26
+
27
+ Attributes:
28
+ dataset_id: Canonical ``category/name`` identifier.
29
+ config: Dataset configuration (engine, table_names, description).
30
+ source_uri: Human-readable dataset location.
31
+ """
32
+
33
+ def __init__(
34
+ self,
35
+ dataset_id: str,
36
+ config: DatasetConfig,
37
+ source_uri: str,
38
+ db_path: Path | None = None,
39
+ db_bytes: bytes | None = None,
40
+ # Accept and ignore these for compatibility with _build_dataset()
41
+ data_text: str = "",
42
+ schema_text: str | None = None,
43
+ table_files: list | None = None,
44
+ ) -> None:
45
+ if config.engine != "sqlite_db":
46
+ raise ValueError(
47
+ f"SQLiteDbDataset requires engine='sqlite_db', got {config.engine!r}."
48
+ )
49
+ if db_path is None and db_bytes is None:
50
+ raise ValueError("Either db_path or db_bytes must be provided.")
51
+ self.dataset_id = dataset_id
52
+ self.config = config
53
+ self.source_uri = source_uri
54
+ self._db_path = db_path
55
+ self._db_bytes = db_bytes
56
+ self._connection: aiosqlite.Connection | None = None
57
+ self._tmp_path: str | None = None
58
+ self._schema: SqliteSchema | None = None
59
+
60
+ @property
61
+ def engine(self) -> str:
62
+ return "sqlite_db"
63
+
64
+ @property
65
+ def table_name(self) -> str:
66
+ """First table name, or empty string for multi-table datasets."""
67
+ names = self.config.table_names
68
+ return names[0] if names else ""
69
+
70
+ @property
71
+ def table_names(self) -> list[str]:
72
+ return self.config.table_names
73
+
74
+ @property
75
+ def schema(self) -> SqliteSchema | None:
76
+ """Schema for single-table datasets (populated on first connect())."""
77
+ return self._schema
78
+
79
+ async def _open_connection(self) -> aiosqlite.Connection:
80
+ if self._db_path is not None:
81
+ conn = await aiosqlite.connect(str(self._db_path))
82
+ else:
83
+ with tempfile.NamedTemporaryFile(suffix=".db", delete=False) as f:
84
+ f.write(self._db_bytes) # type: ignore[arg-type]
85
+ self._tmp_path = f.name
86
+ conn = await aiosqlite.connect(self._tmp_path)
87
+ conn.row_factory = aiosqlite.Row
88
+ return conn
89
+
90
+ async def _load_schema(self, conn: aiosqlite.Connection, table_name: str) -> SqliteSchema:
91
+ """Derive SqliteSchema from PRAGMA table_info + index_list."""
92
+ unique_cols: set[str] = set()
93
+ async with conn.execute(f"PRAGMA index_list({table_name})") as cur:
94
+ indexes = await cur.fetchall()
95
+ for idx in indexes:
96
+ if idx["unique"]:
97
+ async with conn.execute(f"PRAGMA index_info({idx['name']})") as cur:
98
+ for info in await cur.fetchall():
99
+ unique_cols.add(info["name"])
100
+
101
+ async with conn.execute(f"PRAGMA table_info({table_name})") as cur:
102
+ rows = await cur.fetchall()
103
+
104
+ columns = [
105
+ SqliteColumn(
106
+ name=row["name"],
107
+ type=row["type"] or "TEXT",
108
+ primary_key=bool(row["pk"]),
109
+ not_null=bool(row["notnull"]),
110
+ unique=row["name"] in unique_cols,
111
+ )
112
+ for row in rows
113
+ ]
114
+ return SqliteSchema(columns=columns)
115
+
116
+ async def connect(self) -> aiosqlite.Connection:
117
+ """Open (or return cached) aiosqlite connection to the .db file.
118
+
119
+ Populates ``schema`` for single-table datasets on first call.
120
+
121
+ Returns:
122
+ aiosqlite.Connection ready to query.
123
+ """
124
+ if self._connection is not None:
125
+ return self._connection
126
+ conn = await self._open_connection()
127
+ if len(self.config.table_names) == 1:
128
+ self._schema = await self._load_schema(conn, self.config.table_names[0])
129
+ self._connection = conn
130
+ return conn
131
+
132
+ async def fetch_all(self) -> list[dict[str, Any]] | dict[str, list[dict[str, Any]]]:
133
+ """Return all rows as a list (single-table) or dict of lists (multi-table).
134
+
135
+ - Single-table: returns ``list[dict[str, Any]]`` — one dict per row.
136
+ - Multi-table: returns ``dict[str, list[dict[str, Any]]]`` — one key per table.
137
+
138
+ Use ``connect()`` directly for SQL JOINs across tables.
139
+ """
140
+ conn = await self.connect()
141
+ if len(self.config.table_names) <= 1:
142
+ table = validate_sqlite_identifier(self.table_name, field_name="table_name")
143
+ async with conn.execute(f"SELECT * FROM {table}") as cursor: # noqa: S608
144
+ return [dict(row) for row in await cursor.fetchall()]
145
+ result: dict[str, list[dict[str, Any]]] = {}
146
+ for name in self.config.table_names:
147
+ table = validate_sqlite_identifier(name, field_name="table_name")
148
+ async with conn.execute(f"SELECT * FROM {table}") as cursor: # noqa: S608
149
+ result[name] = [dict(row) for row in await cursor.fetchall()]
150
+ return result
151
+
152
+ async def aclose(self) -> None:
153
+ """Close the connection and delete any S3-sourced temp file."""
154
+ if self._connection is not None:
155
+ await self._connection.close()
156
+ self._connection = None
157
+ if self._tmp_path is not None:
158
+ try:
159
+ os.unlink(self._tmp_path)
160
+ except OSError:
161
+ pass
162
+ self._tmp_path = None
163
+
164
+ async def __aenter__(self) -> "SQLiteDbDataset":
165
+ return self
166
+
167
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
168
+ await self.aclose()
169
+
170
+ def __repr__(self) -> str:
171
+ tables = ", ".join(self.config.table_names)
172
+ return f"SQLiteDbDataset(id='{self.dataset_id}', tables=[{tables}])"
@@ -103,8 +103,28 @@ class StreamEventLogger:
103
103
  str(event_type),
104
104
  )
105
105
 
106
+ def log(self, item: Any) -> None:
107
+ """Route item to the appropriate log level and emit it.
108
+
109
+ Calls ``info``, ``debug``, ``warning``, ``error``, and ``exception``
110
+ in sequence; each silently ignores items it does not own, so exactly
111
+ one call produces output per event. Unknown or non-event objects are
112
+ silently dropped.
113
+
114
+ This is the recommended entry point for ``run_stream()`` loops::
115
+
116
+ async for event in runner.run_stream(workflow, input_data):
117
+ stream_logger.log(event)
118
+ """
119
+ self.info(item)
120
+ self.debug(item)
121
+ self.warning(item)
122
+ self.error(item)
123
+ self.exception(item)
124
+
106
125
  def info(self, item: Any) -> None:
107
- """Emit INFO for task/tool start-complete and workflow progress milestones.
126
+ """Emit INFO for task/tool start-complete, workflow progress milestones,
127
+ and step progress messages emitted via ``context.emit_progress()``.
108
128
 
109
129
  All other items are silently ignored.
110
130
  """
@@ -122,6 +142,7 @@ class StreamEventLogger:
122
142
  )
123
143
  from agentbyte.workflow.core.models import (
124
144
  StepCompletedEvent,
145
+ StepProgressEvent,
125
146
  StepStartedEvent,
126
147
  WorkflowCompletedEvent,
127
148
  WorkflowEvent,
@@ -195,6 +216,20 @@ class StreamEventLogger:
195
216
  len(item.execution.step_executions),
196
217
  )
197
218
 
219
+ elif isinstance(item, StepProgressEvent):
220
+ progress_suffix = ""
221
+ if item.completed is not None and item.total is not None:
222
+ progress_suffix = f" progress={item.completed}/{item.total}"
223
+ self._logger.info(
224
+ "[%s] %s | %s step=%s message=%s%s",
225
+ source,
226
+ time_str,
227
+ event_type,
228
+ item.step_id,
229
+ item.message,
230
+ progress_suffix,
231
+ )
232
+
198
233
  elif isinstance(item, StepStartedEvent):
199
234
  self._logger.info(
200
235
  "[%s] %s | %s step=%s",
@@ -220,8 +255,9 @@ class StreamEventLogger:
220
255
  Handles ``ModelCallEvent``, ``ModelResponseEvent``,
221
256
  ``ModelStreamChunkEvent``, ``ToolCallResponseEvent``,
222
257
  ``ToolValidationEvent`` (when valid), ``MemoryUpdateEvent``,
223
- ``MemoryRetrievalEvent``, and workflow detail events such as
224
- ``StepProgressEvent``. All other items are silently ignored.
258
+ ``MemoryRetrievalEvent``, and workflow internals such as
259
+ ``EdgeActivatedEvent`` and ``CheckpointSavedEvent``.
260
+ All other items are silently ignored.
225
261
  """
226
262
  from agentbyte.agents.types import (
227
263
  BaseEvent,
@@ -241,7 +277,6 @@ class StreamEventLogger:
241
277
  from agentbyte.workflow.core.models import (
242
278
  CheckpointSavedEvent,
243
279
  EdgeActivatedEvent,
244
- StepProgressEvent,
245
280
  WorkflowEvent,
246
281
  WorkflowResumedEvent,
247
282
  )
@@ -281,20 +316,6 @@ class StreamEventLogger:
281
316
  ):
282
317
  self._logger.debug("[%s] %s | %s", source, time_str, event_type)
283
318
 
284
- elif isinstance(item, StepProgressEvent):
285
- progress_suffix = ""
286
- if item.completed is not None and item.total is not None:
287
- progress_suffix = f" progress={item.completed}/{item.total}"
288
- self._logger.debug(
289
- "[%s] %s | %s step=%s message=%s%s",
290
- source,
291
- time_str,
292
- event_type,
293
- item.step_id,
294
- item.message,
295
- progress_suffix,
296
- )
297
-
298
319
  elif isinstance(item, EdgeActivatedEvent):
299
320
  self._logger.debug(
300
321
  "[%s] %s | %s from=%s to=%s",