autobyteus 1.2.1__py3-none-any.whl → 1.3.0__py3-none-any.whl

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 (472) hide show
  1. autobyteus/agent/agent.py +15 -5
  2. autobyteus/agent/bootstrap_steps/__init__.py +3 -3
  3. autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +5 -59
  4. autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
  5. autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
  6. autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
  7. autobyteus/agent/bootstrap_steps/working_context_snapshot_restore_step.py +38 -0
  8. autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
  9. autobyteus/agent/context/agent_config.py +47 -20
  10. autobyteus/agent/context/agent_context.py +23 -18
  11. autobyteus/agent/context/agent_runtime_state.py +21 -19
  12. autobyteus/agent/events/__init__.py +16 -1
  13. autobyteus/agent/events/agent_events.py +43 -3
  14. autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
  15. autobyteus/agent/events/event_store.py +57 -0
  16. autobyteus/agent/events/notifiers.py +69 -59
  17. autobyteus/agent/events/worker_event_dispatcher.py +21 -64
  18. autobyteus/agent/factory/agent_factory.py +83 -6
  19. autobyteus/agent/handlers/__init__.py +2 -0
  20. autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
  21. autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
  22. autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
  23. autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
  24. autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
  25. autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
  26. autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
  27. autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
  28. autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
  29. autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
  30. autobyteus/agent/input_processor/memory_ingest_input_processor.py +44 -0
  31. autobyteus/agent/lifecycle/__init__.py +12 -0
  32. autobyteus/agent/lifecycle/base_processor.py +109 -0
  33. autobyteus/agent/lifecycle/events.py +35 -0
  34. autobyteus/agent/lifecycle/processor_definition.py +36 -0
  35. autobyteus/agent/lifecycle/processor_registry.py +106 -0
  36. autobyteus/agent/llm_request_assembler.py +98 -0
  37. autobyteus/agent/llm_response_processor/__init__.py +1 -8
  38. autobyteus/agent/message/context_file_type.py +1 -1
  39. autobyteus/agent/runtime/agent_runtime.py +29 -21
  40. autobyteus/agent/runtime/agent_worker.py +98 -19
  41. autobyteus/agent/shutdown_steps/__init__.py +2 -0
  42. autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
  43. autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
  44. autobyteus/agent/status/__init__.py +14 -0
  45. autobyteus/agent/status/manager.py +93 -0
  46. autobyteus/agent/status/status_deriver.py +96 -0
  47. autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
  48. autobyteus/agent/status/status_update_utils.py +73 -0
  49. autobyteus/agent/streaming/__init__.py +52 -5
  50. autobyteus/agent/streaming/adapters/__init__.py +18 -0
  51. autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
  52. autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
  53. autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
  54. autobyteus/agent/streaming/agent_event_stream.py +3 -183
  55. autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
  56. autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
  57. autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
  58. autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
  59. autobyteus/agent/streaming/events/__init__.py +6 -0
  60. autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
  61. autobyteus/agent/streaming/events/stream_events.py +141 -0
  62. autobyteus/agent/streaming/handlers/__init__.py +15 -0
  63. autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
  64. autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
  65. autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
  66. autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
  67. autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
  68. autobyteus/agent/streaming/parser/__init__.py +61 -0
  69. autobyteus/agent/streaming/parser/event_emitter.py +181 -0
  70. autobyteus/agent/streaming/parser/events.py +4 -0
  71. autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
  72. autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
  73. autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
  74. autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
  75. autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
  76. autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
  77. autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
  78. autobyteus/agent/streaming/parser/parser_context.py +227 -0
  79. autobyteus/agent/streaming/parser/parser_factory.py +132 -0
  80. autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
  81. autobyteus/agent/streaming/parser/state_factory.py +62 -0
  82. autobyteus/agent/streaming/parser/states/__init__.py +1 -0
  83. autobyteus/agent/streaming/parser/states/base_state.py +60 -0
  84. autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
  85. autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
  86. autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
  87. autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
  88. autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
  89. autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
  90. autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
  91. autobyteus/agent/streaming/parser/states/text_state.py +78 -0
  92. autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
  93. autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
  94. autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
  95. autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
  96. autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
  97. autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
  98. autobyteus/agent/streaming/parser/strategies/base.py +24 -0
  99. autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
  100. autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
  101. autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
  102. autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
  103. autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
  104. autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
  105. autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
  106. autobyteus/agent/streaming/parser/tool_constants.py +7 -0
  107. autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
  108. autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
  109. autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
  110. autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
  111. autobyteus/agent/streaming/queue_streamer.py +3 -57
  112. autobyteus/agent/streaming/segments/__init__.py +5 -0
  113. autobyteus/agent/streaming/segments/segment_events.py +82 -0
  114. autobyteus/agent/streaming/stream_event_payloads.py +2 -223
  115. autobyteus/agent/streaming/stream_events.py +3 -140
  116. autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
  117. autobyteus/agent/streaming/streaming_response_handler.py +4 -0
  118. autobyteus/agent/streaming/streams/__init__.py +5 -0
  119. autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
  120. autobyteus/agent/streaming/utils/__init__.py +5 -0
  121. autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
  122. autobyteus/agent/system_prompt_processor/__init__.py +2 -0
  123. autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
  124. autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
  125. autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
  126. autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
  127. autobyteus/agent/token_budget.py +56 -0
  128. autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
  129. autobyteus/agent/tool_invocation.py +16 -40
  130. autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
  131. autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
  132. autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
  133. autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
  134. autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
  135. autobyteus/agent/utils/wait_for_idle.py +12 -14
  136. autobyteus/agent/workspace/base_workspace.py +6 -27
  137. autobyteus/agent_team/agent_team.py +3 -3
  138. autobyteus/agent_team/agent_team_builder.py +1 -41
  139. autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
  140. autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
  141. autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
  142. autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
  143. autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
  144. autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +1 -2
  145. autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +4 -4
  146. autobyteus/agent_team/context/agent_team_config.py +6 -3
  147. autobyteus/agent_team/context/agent_team_context.py +25 -3
  148. autobyteus/agent_team/context/agent_team_runtime_state.py +9 -6
  149. autobyteus/agent_team/events/__init__.py +11 -0
  150. autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
  151. autobyteus/agent_team/events/agent_team_events.py +16 -0
  152. autobyteus/agent_team/events/event_store.py +57 -0
  153. autobyteus/agent_team/factory/agent_team_factory.py +8 -0
  154. autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
  155. autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
  156. autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
  157. autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
  158. autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
  159. autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
  160. autobyteus/agent_team/status/__init__.py +14 -0
  161. autobyteus/agent_team/status/agent_team_status.py +18 -0
  162. autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
  163. autobyteus/agent_team/status/status_deriver.py +62 -0
  164. autobyteus/agent_team/status/status_update_utils.py +42 -0
  165. autobyteus/agent_team/streaming/__init__.py +2 -2
  166. autobyteus/agent_team/streaming/agent_team_event_notifier.py +6 -6
  167. autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +4 -4
  168. autobyteus/agent_team/streaming/agent_team_stream_events.py +3 -3
  169. autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
  170. autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
  171. autobyteus/agent_team/task_notification/task_notification_mode.py +19 -0
  172. autobyteus/agent_team/utils/wait_for_idle.py +4 -4
  173. autobyteus/cli/agent_cli.py +18 -10
  174. autobyteus/cli/agent_team_tui/app.py +14 -11
  175. autobyteus/cli/agent_team_tui/state.py +13 -15
  176. autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
  177. autobyteus/cli/agent_team_tui/widgets/focus_pane.py +143 -36
  178. autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
  179. autobyteus/cli/agent_team_tui/widgets/shared.py +25 -25
  180. autobyteus/cli/cli_display.py +193 -44
  181. autobyteus/cli/workflow_tui/app.py +9 -10
  182. autobyteus/cli/workflow_tui/state.py +14 -16
  183. autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
  184. autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
  185. autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
  186. autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
  187. autobyteus/clients/autobyteus_client.py +94 -1
  188. autobyteus/events/event_types.py +11 -18
  189. autobyteus/llm/api/autobyteus_llm.py +33 -29
  190. autobyteus/llm/api/claude_llm.py +142 -36
  191. autobyteus/llm/api/gemini_llm.py +163 -59
  192. autobyteus/llm/api/grok_llm.py +1 -1
  193. autobyteus/llm/api/minimax_llm.py +26 -0
  194. autobyteus/llm/api/mistral_llm.py +113 -87
  195. autobyteus/llm/api/ollama_llm.py +9 -42
  196. autobyteus/llm/api/openai_compatible_llm.py +127 -91
  197. autobyteus/llm/api/openai_llm.py +3 -3
  198. autobyteus/llm/api/openai_responses_llm.py +324 -0
  199. autobyteus/llm/api/zhipu_llm.py +21 -2
  200. autobyteus/llm/autobyteus_provider.py +70 -60
  201. autobyteus/llm/base_llm.py +85 -81
  202. autobyteus/llm/converters/__init__.py +14 -0
  203. autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
  204. autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
  205. autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
  206. autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
  207. autobyteus/llm/extensions/base_extension.py +6 -12
  208. autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
  209. autobyteus/llm/llm_factory.py +282 -204
  210. autobyteus/llm/lmstudio_provider.py +60 -49
  211. autobyteus/llm/models.py +35 -2
  212. autobyteus/llm/ollama_provider.py +60 -49
  213. autobyteus/llm/ollama_provider_resolver.py +0 -1
  214. autobyteus/llm/prompt_renderers/__init__.py +19 -0
  215. autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
  216. autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
  217. autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
  218. autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
  219. autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
  220. autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
  221. autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
  222. autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
  223. autobyteus/llm/providers.py +1 -3
  224. autobyteus/llm/token_counter/claude_token_counter.py +56 -25
  225. autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
  226. autobyteus/llm/token_counter/openai_token_counter.py +24 -5
  227. autobyteus/llm/token_counter/token_counter_factory.py +12 -5
  228. autobyteus/llm/utils/llm_config.py +6 -12
  229. autobyteus/llm/utils/media_payload_formatter.py +27 -20
  230. autobyteus/llm/utils/messages.py +55 -3
  231. autobyteus/llm/utils/response_types.py +3 -0
  232. autobyteus/llm/utils/tool_call_delta.py +31 -0
  233. autobyteus/memory/__init__.py +35 -0
  234. autobyteus/memory/compaction/__init__.py +9 -0
  235. autobyteus/memory/compaction/compaction_result.py +8 -0
  236. autobyteus/memory/compaction/compactor.py +89 -0
  237. autobyteus/memory/compaction/summarizer.py +11 -0
  238. autobyteus/memory/compaction_snapshot_builder.py +84 -0
  239. autobyteus/memory/memory_manager.py +205 -0
  240. autobyteus/memory/models/__init__.py +14 -0
  241. autobyteus/memory/models/episodic_item.py +41 -0
  242. autobyteus/memory/models/memory_types.py +7 -0
  243. autobyteus/memory/models/raw_trace_item.py +79 -0
  244. autobyteus/memory/models/semantic_item.py +41 -0
  245. autobyteus/memory/models/tool_interaction.py +20 -0
  246. autobyteus/memory/path_resolver.py +27 -0
  247. autobyteus/memory/policies/__init__.py +5 -0
  248. autobyteus/memory/policies/compaction_policy.py +16 -0
  249. autobyteus/memory/restore/__init__.py +1 -0
  250. autobyteus/memory/restore/working_context_snapshot_bootstrapper.py +61 -0
  251. autobyteus/memory/retrieval/__init__.py +7 -0
  252. autobyteus/memory/retrieval/memory_bundle.py +11 -0
  253. autobyteus/memory/retrieval/retriever.py +13 -0
  254. autobyteus/memory/store/__init__.py +9 -0
  255. autobyteus/memory/store/base_store.py +14 -0
  256. autobyteus/memory/store/file_store.py +98 -0
  257. autobyteus/memory/store/working_context_snapshot_store.py +28 -0
  258. autobyteus/memory/tool_interaction_builder.py +46 -0
  259. autobyteus/memory/turn_tracker.py +9 -0
  260. autobyteus/memory/working_context_snapshot.py +69 -0
  261. autobyteus/memory/working_context_snapshot_serializer.py +135 -0
  262. autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
  263. autobyteus/multimedia/audio/api/gemini_audio_client.py +109 -16
  264. autobyteus/multimedia/audio/audio_client_factory.py +47 -9
  265. autobyteus/multimedia/audio/audio_model.py +2 -1
  266. autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
  267. autobyteus/multimedia/image/api/gemini_image_client.py +39 -17
  268. autobyteus/multimedia/image/api/openai_image_client.py +125 -43
  269. autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
  270. autobyteus/multimedia/image/image_client_factory.py +47 -15
  271. autobyteus/multimedia/image/image_model.py +5 -2
  272. autobyteus/multimedia/providers.py +3 -2
  273. autobyteus/skills/loader.py +71 -0
  274. autobyteus/skills/model.py +11 -0
  275. autobyteus/skills/registry.py +70 -0
  276. autobyteus/task_management/tools/todo_tools/add_todo.py +2 -2
  277. autobyteus/task_management/tools/todo_tools/create_todo_list.py +2 -2
  278. autobyteus/task_management/tools/todo_tools/update_todo_status.py +2 -2
  279. autobyteus/tools/__init__.py +34 -47
  280. autobyteus/tools/base_tool.py +7 -0
  281. autobyteus/tools/file/__init__.py +2 -6
  282. autobyteus/tools/file/patch_file.py +149 -0
  283. autobyteus/tools/file/read_file.py +36 -5
  284. autobyteus/tools/file/write_file.py +4 -1
  285. autobyteus/tools/functional_tool.py +43 -6
  286. autobyteus/tools/mcp/__init__.py +2 -0
  287. autobyteus/tools/mcp/config_service.py +5 -1
  288. autobyteus/tools/mcp/server/__init__.py +2 -0
  289. autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
  290. autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
  291. autobyteus/tools/mcp/server_instance_manager.py +8 -1
  292. autobyteus/tools/mcp/types.py +61 -0
  293. autobyteus/tools/multimedia/audio_tools.py +70 -17
  294. autobyteus/tools/multimedia/download_media_tool.py +18 -4
  295. autobyteus/tools/multimedia/image_tools.py +246 -62
  296. autobyteus/tools/operation_executor/journal_manager.py +107 -0
  297. autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
  298. autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
  299. autobyteus/tools/operation_executor/operation_executor.py +58 -0
  300. autobyteus/tools/registry/tool_definition.py +43 -2
  301. autobyteus/tools/skill/load_skill.py +50 -0
  302. autobyteus/tools/terminal/__init__.py +45 -0
  303. autobyteus/tools/terminal/ansi_utils.py +32 -0
  304. autobyteus/tools/terminal/background_process_manager.py +233 -0
  305. autobyteus/tools/terminal/output_buffer.py +105 -0
  306. autobyteus/tools/terminal/prompt_detector.py +63 -0
  307. autobyteus/tools/terminal/pty_session.py +241 -0
  308. autobyteus/tools/terminal/session_factory.py +20 -0
  309. autobyteus/tools/terminal/terminal_session_manager.py +226 -0
  310. autobyteus/tools/terminal/tools/__init__.py +13 -0
  311. autobyteus/tools/terminal/tools/get_process_output.py +81 -0
  312. autobyteus/tools/terminal/tools/run_bash.py +109 -0
  313. autobyteus/tools/terminal/tools/start_background_process.py +104 -0
  314. autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
  315. autobyteus/tools/terminal/types.py +54 -0
  316. autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
  317. autobyteus/tools/terminal/wsl_utils.py +156 -0
  318. autobyteus/tools/transaction_management/backup_handler.py +48 -0
  319. autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
  320. autobyteus/tools/usage/__init__.py +1 -2
  321. autobyteus/tools/usage/formatters/__init__.py +17 -1
  322. autobyteus/tools/usage/formatters/base_formatter.py +8 -0
  323. autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
  324. autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
  325. autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
  326. autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
  327. autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
  328. autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
  329. autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
  330. autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
  331. autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
  332. autobyteus/tools/usage/registries/__init__.py +1 -3
  333. autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
  334. autobyteus/tools/usage/tool_schema_provider.py +51 -0
  335. autobyteus/tools/web/__init__.py +4 -0
  336. autobyteus/tools/web/read_url_tool.py +80 -0
  337. autobyteus/utils/diff_utils.py +271 -0
  338. autobyteus/utils/download_utils.py +109 -0
  339. autobyteus/utils/file_utils.py +57 -2
  340. autobyteus/utils/gemini_helper.py +64 -0
  341. autobyteus/utils/gemini_model_mapping.py +71 -0
  342. autobyteus/utils/llm_output_formatter.py +75 -0
  343. autobyteus/utils/tool_call_format.py +36 -0
  344. autobyteus/workflow/agentic_workflow.py +3 -3
  345. autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
  346. autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
  347. autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
  348. autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +3 -9
  349. autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
  350. autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
  351. autobyteus/workflow/context/workflow_context.py +3 -3
  352. autobyteus/workflow/context/workflow_runtime_state.py +5 -5
  353. autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
  354. autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
  355. autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
  356. autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
  357. autobyteus/workflow/runtime/workflow_runtime.py +8 -8
  358. autobyteus/workflow/runtime/workflow_worker.py +3 -3
  359. autobyteus/workflow/status/__init__.py +11 -0
  360. autobyteus/workflow/status/workflow_status.py +19 -0
  361. autobyteus/workflow/status/workflow_status_manager.py +48 -0
  362. autobyteus/workflow/streaming/__init__.py +2 -2
  363. autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
  364. autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
  365. autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
  366. autobyteus/workflow/utils/wait_for_idle.py +4 -4
  367. autobyteus-1.3.0.dist-info/METADATA +293 -0
  368. autobyteus-1.3.0.dist-info/RECORD +606 -0
  369. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/WHEEL +1 -1
  370. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/top_level.txt +0 -1
  371. autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
  372. autobyteus/agent/hooks/__init__.py +0 -16
  373. autobyteus/agent/hooks/base_phase_hook.py +0 -78
  374. autobyteus/agent/hooks/hook_definition.py +0 -36
  375. autobyteus/agent/hooks/hook_meta.py +0 -37
  376. autobyteus/agent/hooks/hook_registry.py +0 -106
  377. autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
  378. autobyteus/agent/phases/__init__.py +0 -18
  379. autobyteus/agent/phases/discover.py +0 -53
  380. autobyteus/agent/phases/manager.py +0 -265
  381. autobyteus/agent/phases/transition_decorator.py +0 -40
  382. autobyteus/agent/phases/transition_info.py +0 -33
  383. autobyteus/agent/remote_agent.py +0 -244
  384. autobyteus/agent/workspace/workspace_definition.py +0 -36
  385. autobyteus/agent/workspace/workspace_meta.py +0 -37
  386. autobyteus/agent/workspace/workspace_registry.py +0 -72
  387. autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
  388. autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
  389. autobyteus/agent_team/phases/__init__.py +0 -11
  390. autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
  391. autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
  392. autobyteus/llm/api/bedrock_llm.py +0 -92
  393. autobyteus/llm/api/groq_llm.py +0 -94
  394. autobyteus/llm/api/nvidia_llm.py +0 -108
  395. autobyteus/llm/utils/token_pricing_config.py +0 -87
  396. autobyteus/rpc/__init__.py +0 -73
  397. autobyteus/rpc/client/__init__.py +0 -17
  398. autobyteus/rpc/client/abstract_client_connection.py +0 -124
  399. autobyteus/rpc/client/client_connection_manager.py +0 -153
  400. autobyteus/rpc/client/sse_client_connection.py +0 -306
  401. autobyteus/rpc/client/stdio_client_connection.py +0 -280
  402. autobyteus/rpc/config/__init__.py +0 -13
  403. autobyteus/rpc/config/agent_server_config.py +0 -153
  404. autobyteus/rpc/config/agent_server_registry.py +0 -152
  405. autobyteus/rpc/hosting.py +0 -244
  406. autobyteus/rpc/protocol.py +0 -244
  407. autobyteus/rpc/server/__init__.py +0 -20
  408. autobyteus/rpc/server/agent_server_endpoint.py +0 -181
  409. autobyteus/rpc/server/base_method_handler.py +0 -40
  410. autobyteus/rpc/server/method_handlers.py +0 -259
  411. autobyteus/rpc/server/sse_server_handler.py +0 -182
  412. autobyteus/rpc/server/stdio_server_handler.py +0 -151
  413. autobyteus/rpc/server_main.py +0 -198
  414. autobyteus/rpc/transport_type.py +0 -13
  415. autobyteus/tools/bash/__init__.py +0 -2
  416. autobyteus/tools/bash/bash_executor.py +0 -100
  417. autobyteus/tools/browser/__init__.py +0 -2
  418. autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
  419. autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
  420. autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
  421. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
  422. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
  423. autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
  424. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
  425. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
  426. autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
  427. autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
  428. autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
  429. autobyteus/tools/browser/standalone/__init__.py +0 -6
  430. autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
  431. autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
  432. autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
  433. autobyteus/tools/browser/standalone/navigate_to.py +0 -84
  434. autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -101
  435. autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -169
  436. autobyteus/tools/browser/standalone/webpage_reader.py +0 -105
  437. autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -105
  438. autobyteus/tools/file/edit_file.py +0 -200
  439. autobyteus/tools/file/list_directory.py +0 -168
  440. autobyteus/tools/file/search_files.py +0 -188
  441. autobyteus/tools/timer.py +0 -175
  442. autobyteus/tools/usage/parsers/__init__.py +0 -22
  443. autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
  444. autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
  445. autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
  446. autobyteus/tools/usage/parsers/base_parser.py +0 -41
  447. autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
  448. autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
  449. autobyteus/tools/usage/parsers/exceptions.py +0 -13
  450. autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
  451. autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
  452. autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
  453. autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
  454. autobyteus/workflow/phases/__init__.py +0 -11
  455. autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
  456. autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
  457. autobyteus-1.2.1.dist-info/METADATA +0 -205
  458. autobyteus-1.2.1.dist-info/RECORD +0 -511
  459. examples/__init__.py +0 -1
  460. examples/agent_team/__init__.py +0 -1
  461. examples/discover_phase_transitions.py +0 -104
  462. examples/run_agentic_software_engineer.py +0 -239
  463. examples/run_browser_agent.py +0 -262
  464. examples/run_google_slides_agent.py +0 -287
  465. examples/run_mcp_browser_client.py +0 -174
  466. examples/run_mcp_google_slides_client.py +0 -270
  467. examples/run_mcp_list_tools.py +0 -189
  468. examples/run_poem_writer.py +0 -284
  469. examples/run_sqlite_agent.py +0 -295
  470. /autobyteus/{tools/browser/session_aware → skills}/__init__.py +0 -0
  471. /autobyteus/tools/{browser/session_aware/factory → skill}/__init__.py +0 -0
  472. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,48 @@
1
+ # file: autobyteus/autobyteus/workflow/status/workflow_status_manager.py
2
+ import logging
3
+ from typing import TYPE_CHECKING, Optional
4
+
5
+ from autobyteus.workflow.status.workflow_status import WorkflowStatus
6
+
7
+ if TYPE_CHECKING:
8
+ from autobyteus.workflow.context.workflow_context import WorkflowContext
9
+ from autobyteus.workflow.streaming.workflow_event_notifier import WorkflowExternalEventNotifier
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+ class WorkflowStatusManager:
14
+ """Manages the operational status of a workflow."""
15
+ def __init__(self, context: 'WorkflowContext', notifier: 'WorkflowExternalEventNotifier'):
16
+ self.context = context
17
+ self.notifier = notifier
18
+ self.context.state.current_status = WorkflowStatus.UNINITIALIZED
19
+ logger.debug(f"WorkflowStatusManager initialized for workflow '{context.workflow_id}'.")
20
+
21
+ async def _update_status(self, new_status: WorkflowStatus, extra_data: Optional[dict] = None):
22
+ old_status = self.context.state.current_status
23
+ if old_status == new_status:
24
+ return
25
+ logger.info(f"Workflow '{self.context.workflow_id}' updating status from {old_status.value} to {new_status.value}.")
26
+ self.context.state.current_status = new_status
27
+ self.notifier.notify_status_updated(new_status, old_status, extra_data)
28
+
29
+ async def notify_bootstrapping_started(self):
30
+ await self._update_status(WorkflowStatus.BOOTSTRAPPING)
31
+
32
+ async def notify_initialization_complete(self):
33
+ await self._update_status(WorkflowStatus.IDLE)
34
+
35
+ async def notify_processing_started(self):
36
+ await self._update_status(WorkflowStatus.PROCESSING)
37
+
38
+ async def notify_processing_complete_and_idle(self):
39
+ await self._update_status(WorkflowStatus.IDLE)
40
+
41
+ async def notify_error_occurred(self, error_message: str, error_details: Optional[str] = None):
42
+ await self._update_status(WorkflowStatus.ERROR, {"error_message": error_message, "error_details": error_details})
43
+
44
+ async def notify_shutdown_initiated(self):
45
+ await self._update_status(WorkflowStatus.SHUTTING_DOWN)
46
+
47
+ async def notify_final_shutdown_complete(self):
48
+ await self._update_status(WorkflowStatus.SHUTDOWN_COMPLETE)
@@ -7,7 +7,7 @@ from .workflow_event_stream import WorkflowEventStream
7
7
  from .workflow_stream_events import WorkflowStreamEvent, WorkflowStreamDataPayload
8
8
  from .workflow_stream_event_payloads import (
9
9
  BaseWorkflowSpecificPayload,
10
- WorkflowPhaseTransitionData,
10
+ WorkflowStatusUpdateData,
11
11
  AgentEventRebroadcastPayload,
12
12
  )
13
13
  from .agent_event_bridge import AgentEventBridge
@@ -19,7 +19,7 @@ __all__ = [
19
19
  "WorkflowStreamEvent",
20
20
  "WorkflowStreamDataPayload",
21
21
  "BaseWorkflowSpecificPayload",
22
- "WorkflowPhaseTransitionData",
22
+ "WorkflowStatusUpdateData",
23
23
  "AgentEventRebroadcastPayload",
24
24
  "AgentEventBridge",
25
25
  "AgentEventMultiplexer",
@@ -4,9 +4,9 @@ from typing import Optional, Dict, Any, TYPE_CHECKING
4
4
 
5
5
  from autobyteus.events.event_emitter import EventEmitter
6
6
  from autobyteus.events.event_types import EventType
7
- from autobyteus.workflow.phases.workflow_operational_phase import WorkflowOperationalPhase
7
+ from autobyteus.workflow.status.workflow_status import WorkflowStatus
8
8
  from autobyteus.agent.streaming.stream_events import StreamEvent as AgentStreamEvent
9
- from .workflow_stream_events import WorkflowStreamEvent, AgentEventRebroadcastPayload, WorkflowPhaseTransitionData, SubWorkflowEventRebroadcastPayload
9
+ from .workflow_stream_events import WorkflowStreamEvent, AgentEventRebroadcastPayload, WorkflowStatusUpdateData, SubWorkflowEventRebroadcastPayload
10
10
 
11
11
  if TYPE_CHECKING:
12
12
  from autobyteus.workflow.runtime.workflow_runtime import WorkflowRuntime
@@ -33,14 +33,14 @@ class WorkflowExternalEventNotifier(EventEmitter):
33
33
  """
34
34
  self.emit(EventType.WORKFLOW_STREAM_EVENT, payload=event)
35
35
 
36
- def notify_phase_change(self, new_phase: WorkflowOperationalPhase, old_phase: Optional[WorkflowOperationalPhase], extra_data: Optional[Dict[str, Any]] = None):
36
+ def notify_status_updated(self, new_status: WorkflowStatus, old_status: Optional[WorkflowStatus], extra_data: Optional[Dict[str, Any]] = None):
37
37
  """
38
- Notifies of a workflow phase transition by creating and emitting a
38
+ Notifies of a workflow status update by creating and emitting a
39
39
  'WORKFLOW' sourced event.
40
40
  """
41
41
  payload_dict = {
42
- "new_phase": new_phase,
43
- "old_phase": old_phase,
42
+ "new_status": new_status,
43
+ "old_status": old_status,
44
44
  "error_message": extra_data.get("error_message") if extra_data else None,
45
45
  }
46
46
  filtered_payload_dict = {k: v for k, v in payload_dict.items() if v is not None}
@@ -48,7 +48,7 @@ class WorkflowExternalEventNotifier(EventEmitter):
48
48
  event = WorkflowStreamEvent(
49
49
  workflow_id=self.workflow_id,
50
50
  event_source_type="WORKFLOW",
51
- data=WorkflowPhaseTransitionData(**filtered_payload_dict)
51
+ data=WorkflowStatusUpdateData(**filtered_payload_dict)
52
52
  )
53
53
  self._emit_event(event)
54
54
 
@@ -1,7 +1,7 @@
1
1
  # file: autobyteus/autobyteus/workflow/streaming/workflow_stream_event_payloads.py
2
2
  from typing import Optional, Any
3
3
  from pydantic import BaseModel, Field
4
- from autobyteus.workflow.phases.workflow_operational_phase import WorkflowOperationalPhase
4
+ from autobyteus.workflow.status.workflow_status import WorkflowStatus
5
5
  from autobyteus.agent.streaming.stream_events import StreamEvent as AgentStreamEvent
6
6
  # Need to use a forward reference string to avoid circular import at runtime
7
7
  from typing import TYPE_CHECKING
@@ -12,9 +12,9 @@ if TYPE_CHECKING:
12
12
  class BaseWorkflowSpecificPayload(BaseModel):
13
13
  pass
14
14
 
15
- class WorkflowPhaseTransitionData(BaseWorkflowSpecificPayload):
16
- new_phase: WorkflowOperationalPhase
17
- old_phase: Optional[WorkflowOperationalPhase] = None
15
+ class WorkflowStatusUpdateData(BaseWorkflowSpecificPayload):
16
+ new_status: WorkflowStatus
17
+ old_status: Optional[WorkflowStatus] = None
18
18
  error_message: Optional[str] = None
19
19
 
20
20
  # --- Payload for events originating from the "AGENT" source ---
@@ -4,10 +4,10 @@ import uuid
4
4
  from typing import Literal, Union
5
5
  from pydantic import BaseModel, Field, model_validator
6
6
 
7
- from .workflow_stream_event_payloads import WorkflowPhaseTransitionData, AgentEventRebroadcastPayload, SubWorkflowEventRebroadcastPayload
7
+ from .workflow_stream_event_payloads import WorkflowStatusUpdateData, AgentEventRebroadcastPayload, SubWorkflowEventRebroadcastPayload
8
8
 
9
9
  # A union of all possible payloads for a "WORKFLOW" sourced event.
10
- WorkflowSpecificPayload = Union[WorkflowPhaseTransitionData]
10
+ WorkflowSpecificPayload = Union[WorkflowStatusUpdateData]
11
11
 
12
12
  # The top-level discriminated union for the main event stream's payload.
13
13
  WorkflowStreamDataPayload = Union[WorkflowSpecificPayload, AgentEventRebroadcastPayload, SubWorkflowEventRebroadcastPayload]
@@ -28,7 +28,7 @@ class WorkflowStreamEvent(BaseModel):
28
28
  is_sub_workflow_payload = isinstance(self.data, SubWorkflowEventRebroadcastPayload)
29
29
 
30
30
  is_workflow_event = self.event_source_type == "WORKFLOW"
31
- is_workflow_payload = isinstance(self.data, WorkflowPhaseTransitionData)
31
+ is_workflow_payload = isinstance(self.data, WorkflowStatusUpdateData)
32
32
 
33
33
  if is_agent_event and not is_agent_payload:
34
34
  raise ValueError("event_source_type is 'AGENT' but data is not an AgentEventRebroadcastPayload")
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from autobyteus.workflow.streaming.workflow_event_stream import WorkflowEventStream
7
- from autobyteus.workflow.phases.workflow_operational_phase import WorkflowOperationalPhase
7
+ from autobyteus.workflow.status.workflow_status import WorkflowStatus
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.workflow.agentic_workflow import AgenticWorkflow
@@ -14,10 +14,10 @@ logger = logging.getLogger(__name__)
14
14
  async def _wait_loop(streamer: WorkflowEventStream, workflow_id: str):
15
15
  """Internal helper to listen for the IDLE or ERROR event."""
16
16
  async for event in streamer.all_events():
17
- if event.event_source_type == "WORKFLOW" and event.data.new_phase == WorkflowOperationalPhase.IDLE:
17
+ if event.event_source_type == "WORKFLOW" and event.data.new_status == WorkflowStatus.IDLE:
18
18
  logger.info(f"Workflow '{workflow_id}' has become idle.")
19
19
  return
20
- if event.event_source_type == "WORKFLOW" and event.data.new_phase == WorkflowOperationalPhase.ERROR:
20
+ if event.event_source_type == "WORKFLOW" and event.data.new_status == WorkflowStatus.ERROR:
21
21
  error_message = f"Workflow '{workflow_id}' entered an error state while waiting for idle: {event.data.error_message}"
22
22
  logger.error(error_message)
23
23
  raise RuntimeError(error_message)
@@ -34,7 +34,7 @@ async def wait_for_workflow_to_be_idle(workflow: 'AgenticWorkflow', timeout: flo
34
34
  asyncio.TimeoutError: If the workflow does not become idle within the timeout period.
35
35
  RuntimeError: If the workflow enters an error state.
36
36
  """
37
- if workflow.get_current_phase() == WorkflowOperationalPhase.IDLE:
37
+ if workflow.get_current_status() == WorkflowStatus.IDLE:
38
38
  return
39
39
 
40
40
  logger.info(f"Waiting for workflow '{workflow.workflow_id}' to become idle (timeout: {timeout}s)...")
@@ -0,0 +1,293 @@
1
+ Metadata-Version: 2.4
2
+ Name: autobyteus
3
+ Version: 1.3.0
4
+ Summary: Multi-Agent framework
5
+ Author-email: Ryan Zheng <ryan.zheng.work@gmail.com>
6
+ License: MIT License with Additional Terms for Commercial Use
7
+
8
+ Permission is hereby granted, free of charge, to any person or organization obtaining a copy of this software and associated documentation files (the "Software"), to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, subject to the following conditions:
9
+
10
+ 1. Commercial Use: The use of the Software for commercial purposes requires the payment of a licensing fee. For details regarding licensing and fees, please contact ryan.zheng at ryan.zheng.work@gmail.com.
11
+
12
+ 2. Redistributions: Redistributions of the Software in source code or other forms must include the above copyright notice, this list of conditions, and the following disclaimer.
13
+
14
+ 3. Patent Grant: The provisions of the Apache 2.0 License regarding patent grants apply to this License.
15
+
16
+ 4. No Warranty/Liability: The Software is provided "as is," without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the Software or the use or other dealings in the Software.
17
+
18
+ AutoByteus
19
+ 17.07.2023
20
+
21
+ Project-URL: Homepage, https://github.com/AutoByteus/autobyteus
22
+ Classifier: Development Status :: 3 - Alpha
23
+ Classifier: Intended Audience :: Developers
24
+ Classifier: License :: OSI Approved :: MIT License
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Requires-Python: <3.12,>=3.11
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: aiohttp
30
+ Requires-Dist: anthropic
31
+ Requires-Dist: beautifulsoup4
32
+ Requires-Dist: boto3
33
+ Requires-Dist: botocore
34
+ Requires-Dist: certifi==2025.4.26
35
+ Requires-Dist: cryptography
36
+ Requires-Dist: google-api-python-client
37
+ Requires-Dist: google-genai
38
+ Requires-Dist: httpx
39
+ Requires-Dist: Jinja2
40
+ Requires-Dist: mcp[cli]
41
+ Requires-Dist: mistral_common
42
+ Requires-Dist: mistralai==1.9.9
43
+ Requires-Dist: numpy
44
+ Requires-Dist: ollama
45
+ Requires-Dist: openai
46
+ Requires-Dist: requests
47
+ Requires-Dist: websockets>=12.0
48
+ Requires-Dist: rich
49
+ Requires-Dist: textual
50
+ Requires-Dist: tiktoken
51
+ Requires-Dist: tokenizers
52
+ Provides-Extra: dev
53
+ Requires-Dist: build; extra == "dev"
54
+ Requires-Dist: coverage; extra == "dev"
55
+ Requires-Dist: flake8; extra == "dev"
56
+ Requires-Dist: numpy; extra == "dev"
57
+ Requires-Dist: pre-commit; extra == "dev"
58
+ Requires-Dist: black; extra == "dev"
59
+ Requires-Dist: isort; extra == "dev"
60
+ Requires-Dist: gitpython==3.1.31; extra == "dev"
61
+ Requires-Dist: auto-gpt-plugin-template; extra == "dev"
62
+ Requires-Dist: mkdocs; extra == "dev"
63
+ Requires-Dist: pytest; extra == "dev"
64
+ Requires-Dist: asynctest; extra == "dev"
65
+ Requires-Dist: pytest-asyncio; extra == "dev"
66
+ Requires-Dist: pytest-benchmark; extra == "dev"
67
+ Requires-Dist: pytest-cov; extra == "dev"
68
+ Requires-Dist: pytest-integration; extra == "dev"
69
+ Requires-Dist: pytest-mock; extra == "dev"
70
+ Requires-Dist: vcrpy; extra == "dev"
71
+ Requires-Dist: pytest-vcr; extra == "dev"
72
+ Requires-Dist: load_dotenv; extra == "dev"
73
+ Dynamic: license-file
74
+
75
+ # Autobyteus
76
+
77
+ Autobyteus is an open-source, application-first agentic framework for Python. It is designed to help developers build, test, and deploy complex, stateful, and extensible AI agents by providing a robust architecture and a powerful set of tools.
78
+
79
+ ![Autobyteus TUI Dashboard](docs/images/image_1.png)
80
+
81
+ ## Architecture
82
+
83
+ Autobyteus is built with a modular, event-driven architecture designed for extensibility and clear separation of concerns. The key components are:
84
+
85
+ - **Agent Core**: The heart of the system. Each agent is a stateful, autonomous entity that runs as a background process in its own thread, managed by a dedicated `AgentWorker`. This design makes every agent a truly independent entity capable of handling long-running tasks.
86
+ - **Agent Teams**: ([Design Doc](docs/agent_team_design.md)) The framework provides powerful constructs for building hierarchical multi-agent systems. The `AgentTeam` module allows you to compose teams of individual agents and even nest teams within other teams, enabling sophisticated, real-world organizational structures and delegation patterns.
87
+ - **Context & Configuration**: Agent behavior is defined through a static configuration (`AgentConfig`) and its dynamic state is managed in `AgentRuntimeState`. These are bundled into a comprehensive `AgentContext` that is passed to all components, providing a single source of truth.
88
+ - **Event-Driven System**: ([Design Doc](docs/event_driven_core_design.md)) Agents operate on an internal `asyncio` event loop. User messages, tool results, and internal signals are handled as events, which are processed by dedicated `EventHandlers`. This decouples logic and makes the system highly extensible.
89
+ - **Pluggable Processors & Hooks**: The framework provides a chain of extension points to inject custom logic at every major step of an agent's reasoning loop. This architecture powers features like flexible tool format parsing. You can customize behavior by implementing:
90
+ - **`InputProcessors`**: To modify or enrich user messages _before_ they are sent to the LLM.
91
+ - **`LLMResponseProcessors`**: To parse the LLM's raw output and extract structured actions, such as tool calls.
92
+ - **`ToolExecutionResultProcessors` (Tool Result Processors)**: To modify the result from a tool _before_ it is sent back to the LLM for the next step of reasoning (e.g., formatting, summarization, artifact extraction).
93
+ - **Lifecycle Event Processors**: To run custom code on specific lifecycle events (e.g., `BEFORE_LLM_CALL`, `AFTER_TOOL_EXECUTE`).
94
+ - **Context-Aware Tooling**: Tools are first-class citizens that receive the agent's full `AgentContext` during execution. This allows tools to be deeply integrated with the agent's state, configuration, and workspace, enabling more intelligent and powerful actions.
95
+ - **Tool Approval Flow**: The framework has native support for human-in-the-loop workflows. By setting `auto_execute_tools=False` in the agent's configuration, the agent will pause before executing a tool, emit an event requesting permission, and wait for external approval before proceeding.
96
+ - **MCP Integration**: The framework has native support for the Model Context Protocol (MCP). This allows agents to discover and use tools from external, language-agnostic tool servers, making the ecosystem extremely flexible and ready for enterprise integration.
97
+ - **Agent Skills**: ([Design Doc](docs/skills_design.md)) A powerful mechanism for extending agent capabilities using modular, file-based skills. Each skill is a directory containing a map (`SKILL.md`) and arbitrary assets (code, docs, templates). Skills can be preloaded or dynamically fetched via the `load_skill` tool, enabling human-like, just-in-time retrieval without bloating the context window.
98
+
99
+ ## Key Features
100
+
101
+ #### Interactive TUI Dashboard
102
+
103
+ Launch and monitor your agent teams with our built-in Textual-based TUI.
104
+
105
+ - **Hierarchical View**: See the structure of your team, including sub-teams and their agents.
106
+ - **Real-Time Status**: Agent and team statuses are updated live, showing you who is idle, thinking, or executing a tool.
107
+ - **Detailed Logs**: Select any agent to view a detailed, streaming log of their thoughts, actions, and tool interactions.
108
+ - **Live Task Plan**: Watch your team's `TaskPlan` update in real-time as the coordinator publishes a plan and agents complete their tasks.
109
+
110
+ | TUI - Detailed Agent Log | TUI - Task Plan with Completed Task |
111
+ | :----------------------------------------------: | :----------------------------------------------: |
112
+ | ![Autobyteus Agent Log](docs/images/image_4.png) | ![Autobyteus Task Plan](docs/images/image_3.png) |
113
+
114
+ #### Fluent Team Building
115
+
116
+ Define complex agent and team structures with an intuitive, fluent API. The `AgentTeamBuilder` makes composing your team simple and readable.
117
+
118
+ ```python
119
+ # --- From the Multi-Researcher Team Example ---
120
+ research_team = (
121
+ AgentTeamBuilder(
122
+ name="MultiSpecialistResearchTeam",
123
+ description="A team for delegating to multiple specialists."
124
+ )
125
+ .set_coordinator(coordinator_config)
126
+ .add_agent_node(researcher_web_config)
127
+ .add_agent_node(researcher_db_config)
128
+ .build()
129
+ )
130
+ ```
131
+
132
+ #### Flexible Tool Formatting (JSON & XML)
133
+
134
+ Autobyteus intelligently handles tool communication with LLMs while giving you full control.
135
+
136
+ - **Provider-Aware by Default**: The framework automatically generates tool manifests in the optimal format for the selected LLM provider (e.g., JSON for OpenAI/Gemini, XML for Anthropic).
137
+ - **Format Override via Env**: Set `AUTOBYTEUS_STREAM_PARSER=xml` (or `json`) to force tool-call formatting to that format regardless of provider. This can be useful for consistency or for large, complex schemas.
138
+
139
+ #### Flexible Communication Protocols
140
+
141
+ Choose the collaboration pattern that best fits your use case with configurable `TaskNotificationMode`s.
142
+
143
+ - **Env Override**: Set `AUTOBYTEUS_TASK_NOTIFICATION_MODE=system_event_driven` (or `agent_manual_notification`) to pick the default for all teams.
144
+ - **`AGENT_MANUAL_NOTIFICATION` (Default)**: A traditional approach where a coordinator agent is responsible for creating a plan and then explicitly notifying other agents to begin their work via messages.
145
+ - **`SYSTEM_EVENT_DRIVEN`**: A more automated approach where the coordinator's only job is to publish a plan to the `TaskPlan`. The framework then monitors the board and automatically notifies agents when their tasks become unblocked, enabling parallel execution and reducing coordinator overhead.
146
+
147
+ ## Requirements
148
+
149
+ - **Python Version**: Python 3.11.x is the supported version for this project (>=3.11,<3.12). Using other versions may cause dependency conflicts.
150
+ - **Platform Support**:
151
+ - **Linux/macOS**: Full support for all tools.
152
+ - **Windows**: Supported via **WSL (Windows Subsystem for Linux)**.
153
+ - **WSL Required**: Terminal tools (`run_bash`, etc.) require WSL installed (`wsl --install`) and an active Linux distribution.
154
+ - **Default Distro**: If you have multiple WSL distros, set Ubuntu as the default to avoid Docker's minimal distro:
155
+ - `wsl -l -v`
156
+ - `wsl --set-default Ubuntu`
157
+ - **Dependency**: `tmux` is required inside WSL for terminal integration on Windows.
158
+ - For detailed Windows setup, see the **[Terminal Tools Documentation](docs/terminal_tools.md#platform-support)**.
159
+
160
+ ## Getting Started
161
+
162
+ ### Installation
163
+
164
+ 1. **Clone the repository:**
165
+
166
+ ```bash
167
+ git clone https://github.com/your-username/autobyteus.git
168
+ cd autobyteus
169
+ ```
170
+
171
+ 2. **Create a local `uv` environment (recommended):**
172
+
173
+ ```bash
174
+ uv venv .venv --python 3.11
175
+ ```
176
+
177
+ 3. **Install dependencies:**
178
+
179
+ - **For users:**
180
+ ```bash
181
+ uv sync
182
+ ```
183
+ - **For developers:**
184
+ ```bash
185
+ uv sync --extra dev
186
+ ```
187
+
188
+ 4. **Set up Environment Variables:**
189
+ Create a `.env` file in the root of the project and add your LLM provider API keys:
190
+ ```
191
+ # .env
192
+ OPENAI_API_KEY="sk-..."
193
+ KIMI_API_KEY="your-kimi-api-key"
194
+ # etc.
195
+ ```
196
+
197
+ ### Running the Examples
198
+
199
+ The best way to experience Autobyteus is to run one of the included examples. The event-driven software engineering team is a great showcase of the framework's capabilities.
200
+
201
+ ```bash
202
+ # Run the event-driven software engineering team example
203
+ python autobyteus/examples/agent_team/event_driven/run_software_engineering_team.py --llm-model gpt-4o
204
+
205
+ # Run the hierarchical debate team example
206
+ python autobyteus/examples/agent_team/manual_notification/run_debate_team.py --llm-model gpt-4-turbo
207
+
208
+ # Run the hierarchical skills example (modular, file-based capabilities)
209
+ python examples/run_agent_with_skill.py --llm-model gpt-4o
210
+ ```
211
+
212
+ You can see all available models and their identifiers by running an example with the `--help-models` flag.
213
+
214
+ ## Testing
215
+
216
+ ### Streamable HTTP MCP integration
217
+
218
+ Some integration tests rely on the toy streamable MCP server that lives in
219
+ `autobyteus_mcps/streamable_http_mcp_toy`. Start it in a separate terminal
220
+ before running the test, for example:
221
+
222
+ ```bash
223
+ cd autobyteus_mcps/streamable_http_mcp_toy
224
+ python src/streamable_http_mcp_toy/server.py --host 127.0.0.1 --port 8764
225
+ ```
226
+
227
+ With the server running, execute the HTTP transport test:
228
+
229
+ ```bash
230
+ uv run python -m pytest tests/integration_tests/tools/mcp/test_http_managed_server_integration.py
231
+ ```
232
+
233
+ If you bind the server elsewhere, set `STREAMABLE_HTTP_MCP_URL` to the full
234
+ `http://` or `https://` endpoint before running pytest so the test can find it.
235
+
236
+ ### Secure WebSocket (WSS) MCP integration
237
+
238
+ The toy WebSocket MCP server lives in `autobyteus_mcps/wss_mcp_toy`. It exposes
239
+ the same diagnostic tools as the HTTP toy server but requires TLS and an Origin
240
+ header. To exercise the WebSocket transport:
241
+
242
+ 1. In a separate terminal start the toy server:
243
+
244
+ ```bash
245
+ cd autobyteus_mcps/wss_mcp_toy
246
+ python3 -m venv .venv
247
+ source .venv/bin/activate
248
+ pip install -e .
249
+ ./scripts/generate-dev-cert.sh # creates certs/dev-cert.pem + certs/dev-key.pem
250
+ wss-mcp-toy --cert certs/dev-cert.pem --key certs/dev-key.pem --host 127.0.0.1 --port 8765 --allowed-origin https://localhost
251
+ ```
252
+
253
+ 2. Run the WebSocket transport test (defaults assume the process above is
254
+ listening on `wss://127.0.0.1:8765/mcp`):
255
+
256
+ ```bash
257
+ uv run python -m pytest tests/integration_tests/tools/mcp/test_websocket_managed_server_integration.py
258
+ ```
259
+
260
+ Customize the target URL or TLS behavior via environment variables when
261
+ running pytest:
262
+
263
+ - `WSS_MCP_URL` – full `ws://` or `wss://` endpoint (default `wss://127.0.0.1:8765/mcp`).
264
+ - `WSS_MCP_ORIGIN` – Origin header value (default `https://localhost`).
265
+ - `WSS_MCP_VERIFY_TLS` – set to `true`/`1` to enforce TLS verification
266
+ (default `false` for the self-signed dev cert).
267
+ - `WSS_MCP_CA_FILE`, `WSS_MCP_CLIENT_CERT`, `WSS_MCP_CLIENT_KEY` – optional
268
+ paths if you want to trust a custom CA or present a client certificate.
269
+
270
+ ### Building the Library
271
+
272
+ To build Autobyteus as a distributable package, follow these steps:
273
+
274
+ 1. Ensure dev dependencies are installed:
275
+
276
+ ```bash
277
+ uv sync --extra dev
278
+ ```
279
+
280
+ 2. Build the distribution packages defined in `pyproject.toml`:
281
+ ```
282
+ uv run python -m build
283
+ ```
284
+
285
+ This will create a `dist` directory containing the `sdist` and `wheel` artifacts.
286
+
287
+ ## Contributing
288
+
289
+ (Add guidelines for contributing to the project)
290
+
291
+ ## License
292
+
293
+ This project is licensed under the MIT License.