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
@@ -7,7 +7,6 @@ from autobyteus.agent_team.context.agent_team_config import AgentTeamConfig
7
7
  from autobyteus.agent_team.context.team_node_config import TeamNodeConfig
8
8
  from autobyteus.agent.context.agent_config import AgentConfig
9
9
  from autobyteus.agent_team.factory.agent_team_factory import AgentTeamFactory
10
- from autobyteus.agent_team.task_notification.task_notification_mode import TaskNotificationMode
11
10
 
12
11
  logger = logging.getLogger(__name__)
13
12
 
@@ -44,8 +43,6 @@ class AgentTeamBuilder:
44
43
  self._nodes: Dict[NodeDefinition, List[NodeDefinition]] = {}
45
44
  self._coordinator_config: Optional[AgentConfig] = None
46
45
  self._added_node_names: Set[str] = set()
47
- self._task_notification_mode: TaskNotificationMode = TaskNotificationMode.AGENT_MANUAL_NOTIFICATION
48
- self._use_xml_tool_format: Optional[bool] = None
49
46
  logger.info(f"AgentTeamBuilder initialized for team: '{self._name}'.")
50
47
 
51
48
  def add_agent_node(self, agent_config: AgentConfig, dependencies: Optional[List[NodeDefinition]] = None) -> 'AgentTeamBuilder':
@@ -127,41 +124,6 @@ class AgentTeamBuilder:
127
124
  logger.debug(f"Set coordinator for team to '{agent_config.name}'.")
128
125
  return self
129
126
 
130
- def set_task_notification_mode(self, mode: TaskNotificationMode) -> 'AgentTeamBuilder':
131
- """
132
- Sets the task notification mode for the team.
133
-
134
- Args:
135
- mode: The desired TaskNotificationMode (AGENT_MANUAL_NOTIFICATION or SYSTEM_EVENT_DRIVEN).
136
-
137
- Returns:
138
- The builder instance for fluent chaining.
139
- """
140
- if not isinstance(mode, TaskNotificationMode):
141
- raise TypeError("mode must be an instance of TaskNotificationMode.")
142
- self._task_notification_mode = mode
143
- logger.debug(f"Task notification mode set to '{mode.value}'.")
144
- return self
145
-
146
- def set_use_xml_tool_format(self, use_xml: bool) -> 'AgentTeamBuilder':
147
- """
148
- Sets the team-level override for using XML tool format.
149
-
150
- If set, this will override the setting on all individual agents within the team.
151
-
152
- Args:
153
- use_xml: If True, forces the team to use XML format for tool
154
- definitions and parsing.
155
-
156
- Returns:
157
- The builder instance for fluent chaining.
158
- """
159
- if not isinstance(use_xml, bool):
160
- raise TypeError("use_xml must be a boolean.")
161
- self._use_xml_tool_format = use_xml
162
- logger.debug(f"Team-level XML tool format override set to '{use_xml}'.")
163
- return self
164
-
165
127
  def build(self) -> AgentTeam:
166
128
  """
167
129
  Constructs and returns the final AgentTeam instance using the
@@ -194,9 +156,7 @@ class AgentTeamBuilder:
194
156
  description=self._description,
195
157
  role=self._role,
196
158
  nodes=tuple(final_nodes),
197
- coordinator_node=coordinator_node_instance,
198
- task_notification_mode=self._task_notification_mode,
199
- use_xml_tool_format=self._use_xml_tool_format
159
+ coordinator_node=coordinator_node_instance
200
160
  )
201
161
 
202
162
  logger.info(f"AgentTeamConfig created successfully. Name: '{team_config.name}'. Total nodes: {len(final_nodes)}. Coordinator: '{coordinator_node_instance.name}'.")
@@ -4,20 +4,16 @@ Defines individual, self-contained steps for the agent team bootstrapping proces
4
4
  """
5
5
 
6
6
  from autobyteus.agent_team.bootstrap_steps.base_agent_team_bootstrap_step import BaseAgentTeamBootstrapStep
7
- from autobyteus.agent_team.bootstrap_steps.agent_team_runtime_queue_initialization_step import AgentTeamRuntimeQueueInitializationStep
8
7
  from autobyteus.agent_team.bootstrap_steps.team_context_initialization_step import TeamContextInitializationStep
9
8
  from autobyteus.agent_team.bootstrap_steps.task_notifier_initialization_step import TaskNotifierInitializationStep
10
- from autobyteus.agent_team.bootstrap_steps.coordinator_prompt_preparation_step import CoordinatorPromptPreparationStep
11
9
  from autobyteus.agent_team.bootstrap_steps.agent_configuration_preparation_step import AgentConfigurationPreparationStep
12
10
  from autobyteus.agent_team.bootstrap_steps.coordinator_initialization_step import CoordinatorInitializationStep
13
11
  from autobyteus.agent_team.bootstrap_steps.agent_team_bootstrapper import AgentTeamBootstrapper
14
12
 
15
13
  __all__ = [
16
14
  "BaseAgentTeamBootstrapStep",
17
- "AgentTeamRuntimeQueueInitializationStep",
18
15
  "TeamContextInitializationStep",
19
16
  "TaskNotifierInitializationStep",
20
- "CoordinatorPromptPreparationStep",
21
17
  "AgentConfigurationPreparationStep",
22
18
  "CoordinatorInitializationStep",
23
19
  "AgentTeamBootstrapper",
@@ -4,11 +4,10 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  from autobyteus.agent_team.bootstrap_steps.base_agent_team_bootstrap_step import BaseAgentTeamBootstrapStep
6
6
  from autobyteus.agent.context import AgentConfig
7
- from autobyteus.agent.message.send_message_to import SendMessageTo
7
+ from autobyteus.agent_team.system_prompt_processor import TeamManifestInjectorProcessor
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
11
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -18,7 +17,7 @@ class AgentConfigurationPreparationStep(BaseAgentTeamBootstrapStep):
18
17
  agent in the team. It injects team-specific context, applies team-level
19
18
  settings like tool format overrides, and prepares the final coordinator prompt.
20
19
  """
21
- async def execute(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
20
+ async def execute(self, context: 'AgentTeamContext') -> bool:
22
21
  team_id = context.team_id
23
22
  logger.info(f"Team '{team_id}': Executing AgentConfigurationPreparationStep to prepare all agent configurations.")
24
23
 
@@ -28,8 +27,6 @@ class AgentConfigurationPreparationStep(BaseAgentTeamBootstrapStep):
28
27
  return False
29
28
 
30
29
  try:
31
- coordinator_node_config = context.config.coordinator_node
32
-
33
30
  for node_config_wrapper in context.config.nodes:
34
31
  # This step only configures direct agent members, not sub-teams.
35
32
  if node_config_wrapper.is_sub_team:
@@ -44,13 +41,6 @@ class AgentConfigurationPreparationStep(BaseAgentTeamBootstrapStep):
44
41
 
45
42
  final_config = node_definition.copy()
46
43
 
47
- # --- Team-level Setting Propagation ---
48
- # If the team config specifies a tool format, it overrides any agent-level setting.
49
- if context.config.use_xml_tool_format is not None:
50
- final_config.use_xml_tool_format = context.config.use_xml_tool_format
51
- logger.debug(f"Team '{team_id}': Applied team-level use_xml_tool_format={final_config.use_xml_tool_format} to agent '{unique_name}'.")
52
-
53
-
54
44
  # --- Shared Context Injection ---
55
45
  # The shared context is injected into the initial_custom_data dictionary,
56
46
  # which is then used by the AgentFactory to create the AgentRuntimeState.
@@ -63,12 +53,12 @@ class AgentConfigurationPreparationStep(BaseAgentTeamBootstrapStep):
63
53
  # The user is now fully responsible for defining all tools an agent needs
64
54
  # in its AgentConfig. The framework no longer implicitly injects SendMessageTo.
65
55
 
66
- # If this is the coordinator, apply the prompt that was prepared in the previous step.
67
- if node_config_wrapper == coordinator_node_config:
68
- coordinator_prompt = context.state.prepared_coordinator_prompt
69
- if coordinator_prompt:
70
- final_config.system_prompt = coordinator_prompt
71
- logger.info(f"Team '{team_id}': Applied dynamic prompt to coordinator '{unique_name}'.")
56
+ # Ensure the team manifest processor is attached for team agents.
57
+ if final_config.system_prompt_processors is None:
58
+ final_config.system_prompt_processors = []
59
+ if not any(isinstance(p, TeamManifestInjectorProcessor) for p in final_config.system_prompt_processors):
60
+ final_config.system_prompt_processors.append(TeamManifestInjectorProcessor())
61
+ logger.debug(f"Team '{team_id}': Attached TeamManifestInjectorProcessor for agent '{unique_name}'.")
72
62
 
73
63
  # Store the final, ready-to-use config in the team's state
74
64
  context.state.final_agent_configs[unique_name] = final_config
@@ -3,17 +3,12 @@ import logging
3
3
  from typing import TYPE_CHECKING, List, Optional
4
4
 
5
5
  from autobyteus.agent_team.bootstrap_steps.base_agent_team_bootstrap_step import BaseAgentTeamBootstrapStep
6
- from autobyteus.agent_team.bootstrap_steps.agent_team_runtime_queue_initialization_step import AgentTeamRuntimeQueueInitializationStep
7
6
  from autobyteus.agent_team.bootstrap_steps.team_context_initialization_step import TeamContextInitializationStep
8
7
  from autobyteus.agent_team.bootstrap_steps.task_notifier_initialization_step import TaskNotifierInitializationStep
9
- from autobyteus.agent_team.bootstrap_steps.coordinator_prompt_preparation_step import CoordinatorPromptPreparationStep
10
8
  from autobyteus.agent_team.bootstrap_steps.agent_configuration_preparation_step import AgentConfigurationPreparationStep
11
9
  from autobyteus.agent_team.bootstrap_steps.coordinator_initialization_step import CoordinatorInitializationStep
12
- from autobyteus.agent_team.events.agent_team_events import AgentTeamReadyEvent
13
-
14
10
  if TYPE_CHECKING:
15
11
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
16
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
17
12
 
18
13
  logger = logging.getLogger(__name__)
19
14
 
@@ -21,34 +16,27 @@ class AgentTeamBootstrapper:
21
16
  """Orchestrates the agent team's bootstrapping process."""
22
17
  def __init__(self, steps: Optional[List[BaseAgentTeamBootstrapStep]] = None):
23
18
  self.bootstrap_steps = steps or [
24
- AgentTeamRuntimeQueueInitializationStep(),
25
19
  TeamContextInitializationStep(),
26
20
  TaskNotifierInitializationStep(),
27
- CoordinatorPromptPreparationStep(),
28
21
  AgentConfigurationPreparationStep(),
29
22
  CoordinatorInitializationStep(),
30
23
  ]
31
24
 
32
- async def run(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
25
+ async def run(self, context: 'AgentTeamContext') -> bool:
33
26
  team_id = context.team_id
34
- await phase_manager.notify_bootstrapping_started()
35
27
  logger.info(f"Team '{team_id}': Bootstrapper starting.")
36
28
 
37
29
  for step in self.bootstrap_steps:
38
30
  step_name = step.__class__.__name__
39
31
  logger.debug(f"Team '{team_id}': Executing bootstrap step: {step_name}")
40
- if not await step.execute(context, phase_manager):
32
+ if not await step.execute(context):
41
33
  error_message = f"Bootstrap step {step_name} failed."
42
34
  logger.error(f"Team '{team_id}': {error_message}")
43
- await phase_manager.notify_error_occurred(error_message, f"Failed during bootstrap step '{step_name}'.")
44
35
  return False
45
36
 
46
37
  logger.info(f"Team '{team_id}': All bootstrap steps completed successfully.")
47
- if context.state.input_event_queues:
48
- await context.state.input_event_queues.enqueue_internal_system_event(AgentTeamReadyEvent())
49
- else:
38
+ if not context.state.input_event_queues:
50
39
  logger.critical(f"Team '{team_id}': Bootstrap succeeded but queues not available.")
51
- await phase_manager.notify_error_occurred("Queues unavailable after bootstrap.", "")
52
40
  return False
53
-
41
+
54
42
  return True
@@ -5,7 +5,6 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  if TYPE_CHECKING:
7
7
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
8
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
9
8
 
10
9
  logger = logging.getLogger(__name__)
11
10
 
@@ -13,7 +12,7 @@ class BaseAgentTeamBootstrapStep(ABC):
13
12
  """Abstract base class for individual steps in the agent team bootstrapping process."""
14
13
 
15
14
  @abstractmethod
16
- async def execute(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
15
+ async def execute(self, context: 'AgentTeamContext') -> bool:
17
16
  """
18
17
  Executes the bootstrap step.
19
18
 
@@ -6,7 +6,6 @@ from autobyteus.agent_team.bootstrap_steps.base_agent_team_bootstrap_step import
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
9
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
10
9
 
11
10
  logger = logging.getLogger(__name__)
12
11
 
@@ -16,7 +15,7 @@ class CoordinatorInitializationStep(BaseAgentTeamBootstrapStep):
16
15
  using the TeamManager. This ensures the coordinator is ready before the
17
16
  agent team becomes idle.
18
17
  """
19
- async def execute(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
18
+ async def execute(self, context: 'AgentTeamContext') -> bool:
20
19
  team_id = context.team_id
21
20
  logger.info(f"Team '{team_id}': Executing CoordinatorInitializationStep.")
22
21
 
@@ -8,7 +8,6 @@ from autobyteus.agent_team.task_notification.system_event_driven_agent_task_noti
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
11
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -17,7 +16,7 @@ class TaskNotifierInitializationStep(BaseAgentTeamBootstrapStep):
17
16
  Bootstrap step to initialize the SystemEventDrivenAgentTaskNotifier if the
18
17
  team is configured for event-driven notifications.
19
18
  """
20
- async def execute(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
19
+ async def execute(self, context: 'AgentTeamContext') -> bool:
21
20
  team_id = context.team_id
22
21
  logger.info(f"Team '{team_id}': Executing TaskNotifierInitializationStep.")
23
22
 
@@ -8,7 +8,6 @@ from autobyteus.events.event_types import EventType
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
11
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -17,7 +16,7 @@ class TeamContextInitializationStep(BaseAgentTeamBootstrapStep):
17
16
  Bootstrap step to initialize shared team context components, such as the
18
17
  TaskPlan, and bridges its events to the team's notifier.
19
18
  """
20
- async def execute(self, context: 'AgentTeamContext', phase_manager: 'AgentTeamPhaseManager') -> bool:
19
+ async def execute(self, context: 'AgentTeamContext') -> bool:
21
20
  team_id = context.team_id
22
21
  logger.info(f"Team '{team_id}': Executing TeamContextInitializationStep.")
23
22
  try:
@@ -26,7 +25,8 @@ class TeamContextInitializationStep(BaseAgentTeamBootstrapStep):
26
25
  context.state.task_plan = task_plan
27
26
  logger.info(f"Team '{team_id}': TaskPlan initialized and attached to team state.")
28
27
 
29
- notifier = phase_manager.notifier
28
+ status_manager = context.status_manager
29
+ notifier = status_manager.notifier if status_manager else None
30
30
  if notifier:
31
31
  # The notifier, a long-lived component, subscribes to events
32
32
  # from the task_plan, another long-lived component.
@@ -34,7 +34,7 @@ class TeamContextInitializationStep(BaseAgentTeamBootstrapStep):
34
34
  notifier.subscribe_from(sender=task_plan, event=EventType.TASK_PLAN_STATUS_UPDATED, listener=notifier.handle_and_publish_task_plan_event)
35
35
  logger.info(f"Team '{team_id}': Successfully bridged TaskPlan events to the team notifier.")
36
36
  else:
37
- logger.warning(f"Team '{team_id}': Notifier not found in PhaseManager. Cannot bridge TaskPlan events.")
37
+ logger.warning(f"Team '{team_id}': Notifier not found in StatusManager. Cannot bridge TaskPlan events.")
38
38
 
39
39
  else:
40
40
  logger.warning(f"Team '{team_id}': TaskPlan already exists. Skipping initialization.")
@@ -4,7 +4,10 @@ from dataclasses import dataclass, field
4
4
  from typing import List, Optional, Tuple
5
5
 
6
6
  from autobyteus.agent_team.context.team_node_config import TeamNodeConfig
7
- from autobyteus.agent_team.task_notification.task_notification_mode import TaskNotificationMode
7
+ from autobyteus.agent_team.task_notification.task_notification_mode import (
8
+ TaskNotificationMode,
9
+ resolve_task_notification_mode,
10
+ )
8
11
 
9
12
  logger = logging.getLogger(__name__)
10
13
 
@@ -19,10 +22,10 @@ class AgentTeamConfig:
19
22
  nodes: Tuple[TeamNodeConfig, ...]
20
23
  coordinator_node: TeamNodeConfig
21
24
  role: Optional[str] = None
22
- task_notification_mode: TaskNotificationMode = TaskNotificationMode.AGENT_MANUAL_NOTIFICATION
23
- use_xml_tool_format: Optional[bool] = None
25
+ task_notification_mode: TaskNotificationMode = field(init=False)
24
26
 
25
27
  def __post_init__(self):
28
+ object.__setattr__(self, "task_notification_mode", resolve_task_notification_mode())
26
29
  if not self.name or not isinstance(self.name, str):
27
30
  raise ValueError("The 'name' in AgentTeamConfig must be a non-empty string.")
28
31
  if not self.nodes:
@@ -2,11 +2,15 @@
2
2
  import logging
3
3
  from typing import TYPE_CHECKING, List, Optional, Dict
4
4
 
5
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
6
+
5
7
  if TYPE_CHECKING:
6
8
  from autobyteus.agent_team.context.agent_team_config import AgentTeamConfig
7
9
  from autobyteus.agent_team.context.agent_team_runtime_state import AgentTeamRuntimeState
8
10
  from autobyteus.agent.agent import Agent
9
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
11
+ from autobyteus.agent_team.status.agent_team_status_manager import AgentTeamStatusManager
12
+ from autobyteus.agent_team.status.status_deriver import AgentTeamStatusDeriver
13
+ from autobyteus.agent_team.events.event_store import AgentTeamEventStore
10
14
  from autobyteus.agent_team.context.team_manager import TeamManager
11
15
  from autobyteus.agent_team.streaming.agent_event_multiplexer import AgentEventMultiplexer
12
16
  from autobyteus.agent.context import AgentConfig
@@ -49,8 +53,26 @@ class AgentTeamContext:
49
53
  return None
50
54
 
51
55
  @property
52
- def phase_manager(self) -> Optional['AgentTeamPhaseManager']:
53
- return self.state.phase_manager_ref
56
+ def status_manager(self) -> Optional['AgentTeamStatusManager']:
57
+ return self.state.status_manager_ref
58
+
59
+ @property
60
+ def current_status(self) -> 'AgentTeamStatus':
61
+ return self.state.current_status
62
+
63
+ @current_status.setter
64
+ def current_status(self, value: 'AgentTeamStatus'):
65
+ if not isinstance(value, AgentTeamStatus): # pragma: no cover
66
+ raise TypeError(f"current_status must be an AgentTeamStatus instance. Got {type(value)}")
67
+ self.state.current_status = value
68
+
69
+ @property
70
+ def event_store(self) -> Optional['AgentTeamEventStore']:
71
+ return self.state.event_store
72
+
73
+ @property
74
+ def status_deriver(self) -> Optional['AgentTeamStatusDeriver']:
75
+ return self.state.status_deriver
54
76
 
55
77
  @property
56
78
  def team_manager(self) -> Optional['TeamManager']:
@@ -3,13 +3,15 @@ import logging
3
3
  from typing import List, Optional, TYPE_CHECKING, Dict
4
4
  from dataclasses import dataclass, field
5
5
 
6
- from autobyteus.agent_team.phases.agent_team_operational_phase import AgentTeamOperationalPhase
6
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
7
7
  from autobyteus.agent.context import AgentConfig
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent.agent import Agent
11
11
  from autobyteus.agent_team.events.agent_team_input_event_queue_manager import AgentTeamInputEventQueueManager
12
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
12
+ from autobyteus.agent_team.events.event_store import AgentTeamEventStore
13
+ from autobyteus.agent_team.status.agent_team_status_manager import AgentTeamStatusManager
14
+ from autobyteus.agent_team.status.status_deriver import AgentTeamStatusDeriver
13
15
  from autobyteus.agent_team.context.team_node_config import TeamNodeConfig
14
16
  from autobyteus.agent_team.context.team_manager import TeamManager
15
17
  from autobyteus.agent_team.streaming.agent_event_multiplexer import AgentEventMultiplexer
@@ -22,10 +24,9 @@ logger = logging.getLogger(__name__)
22
24
  class AgentTeamRuntimeState:
23
25
  """Encapsulates the dynamic, stateful data of a running agent team instance."""
24
26
  team_id: str
25
- current_phase: AgentTeamOperationalPhase = AgentTeamOperationalPhase.UNINITIALIZED
27
+ current_status: AgentTeamStatus = AgentTeamStatus.UNINITIALIZED
26
28
 
27
29
  # State populated by bootstrap steps
28
- prepared_coordinator_prompt: Optional[str] = None
29
30
  final_agent_configs: Dict[str, 'AgentConfig'] = field(default_factory=dict)
30
31
 
31
32
  # Core services
@@ -34,8 +35,10 @@ class AgentTeamRuntimeState:
34
35
 
35
36
  # Runtime components and references
36
37
  input_event_queues: Optional['AgentTeamInputEventQueueManager'] = None
37
- phase_manager_ref: Optional['AgentTeamPhaseManager'] = None
38
+ status_manager_ref: Optional['AgentTeamStatusManager'] = None
38
39
  multiplexer_ref: Optional['AgentEventMultiplexer'] = None
40
+ event_store: Optional['AgentTeamEventStore'] = None
41
+ status_deriver: Optional['AgentTeamStatusDeriver'] = None
39
42
 
40
43
  # Dynamic planning and artifact state
41
44
  task_plan: Optional['BaseTaskPlan'] = None
@@ -48,7 +51,7 @@ class AgentTeamRuntimeState:
48
51
  def __repr__(self) -> str:
49
52
  agents_count = len(self.team_manager.get_all_agents()) if self.team_manager else 0
50
53
  coordinator_set = self.team_manager.coordinator_agent is not None if self.team_manager else False
51
- return (f"<AgentTeamRuntimeState id='{self.team_id}', phase='{self.current_phase.value}', "
54
+ return (f"<AgentTeamRuntimeState id='{self.team_id}', status='{self.current_status.value}', "
52
55
  f"agents_count={agents_count}, coordinator_set={coordinator_set}, "
53
56
  f"final_configs_count={len(self.final_agent_configs)}, "
54
57
  f"team_manager_set={self.team_manager is not None}>")
@@ -6,7 +6,11 @@ from autobyteus.agent_team.events.agent_team_events import (
6
6
  BaseAgentTeamEvent,
7
7
  LifecycleAgentTeamEvent,
8
8
  OperationalAgentTeamEvent,
9
+ AgentTeamBootstrapStartedEvent,
9
10
  AgentTeamReadyEvent,
11
+ AgentTeamIdleEvent,
12
+ AgentTeamShutdownRequestedEvent,
13
+ AgentTeamStoppedEvent,
10
14
  AgentTeamErrorEvent,
11
15
  ProcessUserMessageEvent,
12
16
  InterAgentMessageRequestEvent,
@@ -14,16 +18,23 @@ from autobyteus.agent_team.events.agent_team_events import (
14
18
  )
15
19
  from autobyteus.agent_team.events.agent_team_event_dispatcher import AgentTeamEventDispatcher
16
20
  from autobyteus.agent_team.events.agent_team_input_event_queue_manager import AgentTeamInputEventQueueManager
21
+ from autobyteus.agent_team.events.event_store import AgentTeamEventStore, EventEnvelope
17
22
 
18
23
  __all__ = [
19
24
  "BaseAgentTeamEvent",
20
25
  "LifecycleAgentTeamEvent",
21
26
  "OperationalAgentTeamEvent",
27
+ "AgentTeamBootstrapStartedEvent",
22
28
  "AgentTeamReadyEvent",
29
+ "AgentTeamIdleEvent",
30
+ "AgentTeamShutdownRequestedEvent",
31
+ "AgentTeamStoppedEvent",
23
32
  "AgentTeamErrorEvent",
24
33
  "ProcessUserMessageEvent",
25
34
  "InterAgentMessageRequestEvent",
26
35
  "ToolApprovalTeamEvent",
27
36
  "AgentTeamEventDispatcher",
28
37
  "AgentTeamInputEventQueueManager",
38
+ "AgentTeamEventStore",
39
+ "EventEnvelope",
29
40
  ]
@@ -3,12 +3,17 @@ import logging
3
3
  import traceback
4
4
  from typing import TYPE_CHECKING
5
5
 
6
- from autobyteus.agent_team.events.agent_team_events import BaseAgentTeamEvent, AgentTeamReadyEvent, ProcessUserMessageEvent
6
+ from autobyteus.agent_team.events.agent_team_events import (
7
+ BaseAgentTeamEvent,
8
+ AgentTeamErrorEvent,
9
+ AgentTeamIdleEvent,
10
+ OperationalAgentTeamEvent,
11
+ )
12
+ from autobyteus.agent_team.status.status_update_utils import apply_event_and_derive_status
7
13
 
8
14
  if TYPE_CHECKING:
9
15
  from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
10
16
  from autobyteus.agent_team.handlers.agent_team_event_handler_registry import AgentTeamEventHandlerRegistry
11
- from autobyteus.agent_team.phases.agent_team_phase_manager import AgentTeamPhaseManager
12
17
 
13
18
  logger = logging.getLogger(__name__)
14
19
 
@@ -16,24 +21,32 @@ class AgentTeamEventDispatcher:
16
21
  """Dispatches agent team events to their appropriate handlers."""
17
22
 
18
23
  def __init__(self,
19
- event_handler_registry: 'AgentTeamEventHandlerRegistry',
20
- phase_manager: 'AgentTeamPhaseManager'):
24
+ event_handler_registry: 'AgentTeamEventHandlerRegistry'):
21
25
  self.registry = event_handler_registry
22
- self.phase_manager = phase_manager
23
26
 
24
27
  async def dispatch(self, event: BaseAgentTeamEvent, context: 'AgentTeamContext'):
25
- handler = self.registry.get_handler(type(event))
26
28
  team_id = context.team_id
27
29
 
30
+ try:
31
+ await apply_event_and_derive_status(event, context)
32
+ except Exception as e: # pragma: no cover
33
+ logger.error(f"Team '{team_id}': Status derivation failed for '{type(event).__name__}': {e}", exc_info=True)
34
+
35
+ handler = self.registry.get_handler(type(event))
28
36
  if not handler:
29
37
  logger.warning(f"Team '{team_id}': No handler for event '{type(event).__name__}'.")
30
38
  return
31
39
 
32
40
  try:
33
41
  await handler.handle(event, context)
34
- if isinstance(event, AgentTeamReadyEvent):
35
- await self.phase_manager.notify_initialization_complete()
36
42
  except Exception as e:
37
43
  error_msg = f"Error handling '{type(event).__name__}' in team '{team_id}': {e}"
38
44
  logger.error(error_msg, exc_info=True)
39
- await self.phase_manager.notify_error_occurred(error_msg, traceback.format_exc())
45
+ if context.state.input_event_queues:
46
+ await context.state.input_event_queues.enqueue_internal_system_event(
47
+ AgentTeamErrorEvent(error_message=error_msg, exception_details=traceback.format_exc())
48
+ )
49
+ else:
50
+ if isinstance(event, OperationalAgentTeamEvent):
51
+ if context.state.input_event_queues:
52
+ await context.state.input_event_queues.enqueue_internal_system_event(AgentTeamIdleEvent())
@@ -17,10 +17,26 @@ class OperationalAgentTeamEvent(BaseAgentTeamEvent):
17
17
  """Base class for events related to the agent team's operational logic."""
18
18
 
19
19
  # Specific Events
20
+ @dataclass
21
+ class AgentTeamBootstrapStartedEvent(LifecycleAgentTeamEvent):
22
+ """Indicates the agent team bootstrap sequence has begun."""
23
+
20
24
  @dataclass
21
25
  class AgentTeamReadyEvent(LifecycleAgentTeamEvent):
22
26
  """Indicates the agent team has completed bootstrapping and is ready for tasks."""
23
27
 
28
+ @dataclass
29
+ class AgentTeamIdleEvent(LifecycleAgentTeamEvent):
30
+ """Indicates the agent team has returned to an idle state after processing."""
31
+
32
+ @dataclass
33
+ class AgentTeamShutdownRequestedEvent(LifecycleAgentTeamEvent):
34
+ """Indicates a shutdown request has been issued for the agent team."""
35
+
36
+ @dataclass
37
+ class AgentTeamStoppedEvent(LifecycleAgentTeamEvent):
38
+ """Indicates the agent team has fully stopped."""
39
+
24
40
  @dataclass
25
41
  class AgentTeamErrorEvent(LifecycleAgentTeamEvent):
26
42
  """Indicates a significant error occurred within the agent team."""
@@ -0,0 +1,57 @@
1
+ # file: autobyteus/autobyteus/agent_team/events/event_store.py
2
+ from __future__ import annotations
3
+
4
+ import logging
5
+ import time
6
+ import uuid
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional
9
+
10
+ from autobyteus.agent_team.events.agent_team_events import BaseAgentTeamEvent
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class EventEnvelope:
17
+ event_id: str
18
+ event_type: str
19
+ timestamp: float
20
+ team_id: str
21
+ event: BaseAgentTeamEvent
22
+ correlation_id: Optional[str] = None
23
+ caused_by_event_id: Optional[str] = None
24
+ sequence: int = 0
25
+
26
+
27
+ class AgentTeamEventStore:
28
+ """
29
+ Simple in-memory event store for agent team events.
30
+ """
31
+ def __init__(self, team_id: str):
32
+ self._team_id = team_id
33
+ self._events: List[EventEnvelope] = []
34
+ self._sequence: int = 0
35
+ logger.debug(f"AgentTeamEventStore initialized for team_id '{team_id}'.")
36
+
37
+ def append(self,
38
+ event: BaseAgentTeamEvent,
39
+ correlation_id: Optional[str] = None,
40
+ caused_by_event_id: Optional[str] = None) -> EventEnvelope:
41
+ envelope = EventEnvelope(
42
+ event_id=str(uuid.uuid4()),
43
+ event_type=type(event).__name__,
44
+ timestamp=time.time(),
45
+ team_id=self._team_id,
46
+ event=event,
47
+ correlation_id=correlation_id,
48
+ caused_by_event_id=caused_by_event_id,
49
+ sequence=self._sequence,
50
+ )
51
+ self._sequence += 1
52
+ self._events.append(envelope)
53
+ logger.debug(f"Appended event '{envelope.event_type}' to store for team '{self._team_id}'.")
54
+ return envelope
55
+
56
+ def all_events(self) -> List[EventEnvelope]:
57
+ return list(self._events)
@@ -17,7 +17,11 @@ from autobyteus.agent_team.handlers.inter_agent_message_request_event_handler im
17
17
  from autobyteus.agent_team.handlers.tool_approval_team_event_handler import ToolApprovalTeamEventHandler
18
18
  from autobyteus.agent_team.events.agent_team_events import (
19
19
  ProcessUserMessageEvent,
20
+ AgentTeamBootstrapStartedEvent,
20
21
  AgentTeamReadyEvent,
22
+ AgentTeamIdleEvent,
23
+ AgentTeamShutdownRequestedEvent,
24
+ AgentTeamStoppedEvent,
21
25
  AgentTeamErrorEvent,
22
26
  InterAgentMessageRequestEvent,
23
27
  ToolApprovalTeamEvent
@@ -41,7 +45,11 @@ class AgentTeamFactory(metaclass=SingletonMeta):
41
45
  registry.register(InterAgentMessageRequestEvent, InterAgentMessageRequestEventHandler())
42
46
  registry.register(ToolApprovalTeamEvent, ToolApprovalTeamEventHandler())
43
47
  lifecycle_handler = LifecycleAgentTeamEventHandler()
48
+ registry.register(AgentTeamBootstrapStartedEvent, lifecycle_handler)
44
49
  registry.register(AgentTeamReadyEvent, lifecycle_handler)
50
+ registry.register(AgentTeamIdleEvent, lifecycle_handler)
51
+ registry.register(AgentTeamShutdownRequestedEvent, lifecycle_handler)
52
+ registry.register(AgentTeamStoppedEvent, lifecycle_handler)
45
53
  registry.register(AgentTeamErrorEvent, lifecycle_handler)
46
54
  return registry
47
55