autobyteus 1.2.0__py3-none-any.whl → 1.2.3__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 (512) hide show
  1. autobyteus/agent/agent.py +15 -5
  2. autobyteus/agent/bootstrap_steps/__init__.py +1 -3
  3. autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +3 -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/workspace_context_initialization_step.py +2 -4
  8. autobyteus/agent/context/agent_config.py +43 -20
  9. autobyteus/agent/context/agent_context.py +23 -18
  10. autobyteus/agent/context/agent_runtime_state.py +23 -19
  11. autobyteus/agent/events/__init__.py +16 -1
  12. autobyteus/agent/events/agent_events.py +43 -3
  13. autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
  14. autobyteus/agent/events/event_store.py +57 -0
  15. autobyteus/agent/events/notifiers.py +74 -60
  16. autobyteus/agent/events/worker_event_dispatcher.py +21 -64
  17. autobyteus/agent/factory/agent_factory.py +52 -0
  18. autobyteus/agent/handlers/__init__.py +2 -0
  19. autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
  20. autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
  21. autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
  22. autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
  23. autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
  24. autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
  25. autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
  26. autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
  27. autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
  28. autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
  29. autobyteus/agent/input_processor/memory_ingest_input_processor.py +40 -0
  30. autobyteus/agent/lifecycle/__init__.py +12 -0
  31. autobyteus/agent/lifecycle/base_processor.py +109 -0
  32. autobyteus/agent/lifecycle/events.py +35 -0
  33. autobyteus/agent/lifecycle/processor_definition.py +36 -0
  34. autobyteus/agent/lifecycle/processor_registry.py +106 -0
  35. autobyteus/agent/llm_request_assembler.py +98 -0
  36. autobyteus/agent/llm_response_processor/__init__.py +1 -8
  37. autobyteus/agent/message/context_file_type.py +1 -1
  38. autobyteus/agent/message/send_message_to.py +5 -4
  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 -178
  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 +81 -0
  114. autobyteus/agent/streaming/stream_event_payloads.py +2 -198
  115. autobyteus/agent/streaming/stream_events.py +3 -128
  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 +5 -6
  145. autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +15 -15
  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 +11 -8
  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 +10 -10
  167. autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +7 -7
  168. autobyteus/agent_team/streaming/agent_team_stream_events.py +11 -11
  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/activation_policy.py +1 -1
  172. autobyteus/agent_team/task_notification/system_event_driven_agent_task_notifier.py +22 -22
  173. autobyteus/agent_team/task_notification/task_notification_mode.py +20 -1
  174. autobyteus/agent_team/utils/wait_for_idle.py +4 -4
  175. autobyteus/cli/agent_cli.py +18 -10
  176. autobyteus/cli/agent_team_tui/app.py +18 -15
  177. autobyteus/cli/agent_team_tui/state.py +21 -23
  178. autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
  179. autobyteus/cli/agent_team_tui/widgets/focus_pane.py +146 -39
  180. autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
  181. autobyteus/cli/agent_team_tui/widgets/shared.py +26 -26
  182. autobyteus/cli/agent_team_tui/widgets/{task_board_panel.py → task_plan_panel.py} +5 -5
  183. autobyteus/cli/cli_display.py +193 -44
  184. autobyteus/cli/workflow_tui/app.py +9 -10
  185. autobyteus/cli/workflow_tui/state.py +14 -16
  186. autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
  187. autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
  188. autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
  189. autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
  190. autobyteus/clients/autobyteus_client.py +94 -1
  191. autobyteus/events/event_types.py +15 -21
  192. autobyteus/llm/api/autobyteus_llm.py +33 -29
  193. autobyteus/llm/api/claude_llm.py +142 -36
  194. autobyteus/llm/api/gemini_llm.py +163 -59
  195. autobyteus/llm/api/grok_llm.py +1 -1
  196. autobyteus/llm/api/minimax_llm.py +26 -0
  197. autobyteus/llm/api/mistral_llm.py +113 -87
  198. autobyteus/llm/api/ollama_llm.py +9 -42
  199. autobyteus/llm/api/openai_compatible_llm.py +127 -91
  200. autobyteus/llm/api/openai_llm.py +3 -3
  201. autobyteus/llm/api/openai_responses_llm.py +324 -0
  202. autobyteus/llm/api/zhipu_llm.py +21 -2
  203. autobyteus/llm/autobyteus_provider.py +70 -60
  204. autobyteus/llm/base_llm.py +85 -81
  205. autobyteus/llm/converters/__init__.py +14 -0
  206. autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
  207. autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
  208. autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
  209. autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
  210. autobyteus/llm/extensions/base_extension.py +6 -12
  211. autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
  212. autobyteus/llm/llm_factory.py +282 -204
  213. autobyteus/llm/lmstudio_provider.py +60 -49
  214. autobyteus/llm/models.py +35 -2
  215. autobyteus/llm/ollama_provider.py +60 -49
  216. autobyteus/llm/ollama_provider_resolver.py +0 -1
  217. autobyteus/llm/prompt_renderers/__init__.py +19 -0
  218. autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
  219. autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
  220. autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
  221. autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
  222. autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
  223. autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
  224. autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
  225. autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
  226. autobyteus/llm/providers.py +1 -3
  227. autobyteus/llm/token_counter/claude_token_counter.py +56 -25
  228. autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
  229. autobyteus/llm/token_counter/openai_token_counter.py +24 -5
  230. autobyteus/llm/token_counter/token_counter_factory.py +12 -5
  231. autobyteus/llm/utils/llm_config.py +6 -12
  232. autobyteus/llm/utils/media_payload_formatter.py +27 -20
  233. autobyteus/llm/utils/messages.py +55 -3
  234. autobyteus/llm/utils/response_types.py +3 -0
  235. autobyteus/llm/utils/tool_call_delta.py +31 -0
  236. autobyteus/memory/__init__.py +32 -0
  237. autobyteus/memory/active_transcript.py +69 -0
  238. autobyteus/memory/compaction/__init__.py +9 -0
  239. autobyteus/memory/compaction/compaction_result.py +8 -0
  240. autobyteus/memory/compaction/compactor.py +89 -0
  241. autobyteus/memory/compaction/summarizer.py +11 -0
  242. autobyteus/memory/compaction_snapshot_builder.py +84 -0
  243. autobyteus/memory/memory_manager.py +183 -0
  244. autobyteus/memory/models/__init__.py +14 -0
  245. autobyteus/memory/models/episodic_item.py +41 -0
  246. autobyteus/memory/models/memory_types.py +7 -0
  247. autobyteus/memory/models/raw_trace_item.py +79 -0
  248. autobyteus/memory/models/semantic_item.py +41 -0
  249. autobyteus/memory/models/tool_interaction.py +20 -0
  250. autobyteus/memory/policies/__init__.py +5 -0
  251. autobyteus/memory/policies/compaction_policy.py +16 -0
  252. autobyteus/memory/retrieval/__init__.py +7 -0
  253. autobyteus/memory/retrieval/memory_bundle.py +11 -0
  254. autobyteus/memory/retrieval/retriever.py +13 -0
  255. autobyteus/memory/store/__init__.py +7 -0
  256. autobyteus/memory/store/base_store.py +14 -0
  257. autobyteus/memory/store/file_store.py +98 -0
  258. autobyteus/memory/tool_interaction_builder.py +46 -0
  259. autobyteus/memory/turn_tracker.py +9 -0
  260. autobyteus/multimedia/audio/api/__init__.py +3 -2
  261. autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
  262. autobyteus/multimedia/audio/api/gemini_audio_client.py +108 -16
  263. autobyteus/multimedia/audio/api/openai_audio_client.py +112 -0
  264. autobyteus/multimedia/audio/audio_client_factory.py +84 -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 +38 -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/__init__.py +43 -20
  277. autobyteus/task_management/{base_task_board.py → base_task_plan.py} +16 -13
  278. autobyteus/task_management/converters/__init__.py +2 -2
  279. autobyteus/task_management/converters/{task_board_converter.py → task_plan_converter.py} +13 -13
  280. autobyteus/task_management/events.py +7 -7
  281. autobyteus/task_management/{in_memory_task_board.py → in_memory_task_plan.py} +34 -22
  282. autobyteus/task_management/schemas/__init__.py +3 -0
  283. autobyteus/task_management/schemas/task_status_report.py +2 -2
  284. autobyteus/task_management/schemas/todo_definition.py +15 -0
  285. autobyteus/task_management/todo.py +29 -0
  286. autobyteus/task_management/todo_list.py +75 -0
  287. autobyteus/task_management/tools/__init__.py +24 -8
  288. autobyteus/task_management/tools/task_tools/__init__.py +19 -0
  289. autobyteus/task_management/tools/{assign_task_to.py → task_tools/assign_task_to.py} +18 -18
  290. autobyteus/task_management/tools/{publish_task.py → task_tools/create_task.py} +16 -18
  291. autobyteus/task_management/tools/{publish_tasks.py → task_tools/create_tasks.py} +19 -19
  292. autobyteus/task_management/tools/{get_my_tasks.py → task_tools/get_my_tasks.py} +15 -15
  293. autobyteus/task_management/tools/{get_task_board_status.py → task_tools/get_task_plan_status.py} +16 -16
  294. autobyteus/task_management/tools/{update_task_status.py → task_tools/update_task_status.py} +16 -16
  295. autobyteus/task_management/tools/todo_tools/__init__.py +18 -0
  296. autobyteus/task_management/tools/todo_tools/add_todo.py +78 -0
  297. autobyteus/task_management/tools/todo_tools/create_todo_list.py +79 -0
  298. autobyteus/task_management/tools/todo_tools/get_todo_list.py +55 -0
  299. autobyteus/task_management/tools/todo_tools/update_todo_status.py +85 -0
  300. autobyteus/tools/__init__.py +43 -52
  301. autobyteus/tools/base_tool.py +7 -0
  302. autobyteus/tools/file/__init__.py +9 -0
  303. autobyteus/tools/file/patch_file.py +149 -0
  304. autobyteus/tools/file/{file_reader.py → read_file.py} +38 -7
  305. autobyteus/tools/file/{file_writer.py → write_file.py} +7 -4
  306. autobyteus/tools/functional_tool.py +53 -14
  307. autobyteus/tools/mcp/__init__.py +2 -0
  308. autobyteus/tools/mcp/config_service.py +5 -1
  309. autobyteus/tools/mcp/server/__init__.py +2 -0
  310. autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
  311. autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
  312. autobyteus/tools/mcp/server_instance_manager.py +8 -1
  313. autobyteus/tools/mcp/tool.py +3 -3
  314. autobyteus/tools/mcp/tool_registrar.py +5 -2
  315. autobyteus/tools/mcp/types.py +61 -0
  316. autobyteus/tools/multimedia/__init__.py +2 -1
  317. autobyteus/tools/multimedia/audio_tools.py +72 -19
  318. autobyteus/tools/{download_media_tool.py → multimedia/download_media_tool.py} +21 -7
  319. autobyteus/tools/multimedia/image_tools.py +248 -64
  320. autobyteus/tools/multimedia/media_reader_tool.py +1 -1
  321. autobyteus/tools/operation_executor/journal_manager.py +107 -0
  322. autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
  323. autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
  324. autobyteus/tools/operation_executor/operation_executor.py +58 -0
  325. autobyteus/tools/registry/tool_definition.py +108 -14
  326. autobyteus/tools/registry/tool_registry.py +29 -0
  327. autobyteus/tools/search/__init__.py +17 -0
  328. autobyteus/tools/search/base_strategy.py +35 -0
  329. autobyteus/tools/search/client.py +24 -0
  330. autobyteus/tools/search/factory.py +81 -0
  331. autobyteus/tools/search/google_cse_strategy.py +68 -0
  332. autobyteus/tools/search/providers.py +10 -0
  333. autobyteus/tools/search/serpapi_strategy.py +65 -0
  334. autobyteus/tools/search/serper_strategy.py +87 -0
  335. autobyteus/tools/search_tool.py +83 -0
  336. autobyteus/tools/skill/load_skill.py +50 -0
  337. autobyteus/tools/terminal/__init__.py +45 -0
  338. autobyteus/tools/terminal/ansi_utils.py +32 -0
  339. autobyteus/tools/terminal/background_process_manager.py +233 -0
  340. autobyteus/tools/terminal/output_buffer.py +105 -0
  341. autobyteus/tools/terminal/prompt_detector.py +63 -0
  342. autobyteus/tools/terminal/pty_session.py +241 -0
  343. autobyteus/tools/terminal/session_factory.py +20 -0
  344. autobyteus/tools/terminal/terminal_session_manager.py +226 -0
  345. autobyteus/tools/terminal/tools/__init__.py +13 -0
  346. autobyteus/tools/terminal/tools/get_process_output.py +81 -0
  347. autobyteus/tools/terminal/tools/run_bash.py +109 -0
  348. autobyteus/tools/terminal/tools/start_background_process.py +104 -0
  349. autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
  350. autobyteus/tools/terminal/types.py +54 -0
  351. autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
  352. autobyteus/tools/terminal/wsl_utils.py +156 -0
  353. autobyteus/tools/tool_meta.py +4 -24
  354. autobyteus/tools/transaction_management/backup_handler.py +48 -0
  355. autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
  356. autobyteus/tools/usage/__init__.py +1 -2
  357. autobyteus/tools/usage/formatters/__init__.py +17 -1
  358. autobyteus/tools/usage/formatters/base_formatter.py +8 -0
  359. autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
  360. autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
  361. autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
  362. autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
  363. autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
  364. autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
  365. autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
  366. autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
  367. autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
  368. autobyteus/tools/usage/registries/__init__.py +1 -3
  369. autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
  370. autobyteus/tools/usage/tool_schema_provider.py +51 -0
  371. autobyteus/tools/web/__init__.py +4 -0
  372. autobyteus/tools/web/read_url_tool.py +80 -0
  373. autobyteus/utils/diff_utils.py +271 -0
  374. autobyteus/utils/download_utils.py +109 -0
  375. autobyteus/utils/file_utils.py +57 -2
  376. autobyteus/utils/gemini_helper.py +56 -0
  377. autobyteus/utils/gemini_model_mapping.py +71 -0
  378. autobyteus/utils/llm_output_formatter.py +75 -0
  379. autobyteus/utils/tool_call_format.py +36 -0
  380. autobyteus/workflow/agentic_workflow.py +3 -3
  381. autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
  382. autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
  383. autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
  384. autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +4 -11
  385. autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
  386. autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
  387. autobyteus/workflow/context/workflow_context.py +3 -3
  388. autobyteus/workflow/context/workflow_runtime_state.py +5 -5
  389. autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
  390. autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
  391. autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
  392. autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
  393. autobyteus/workflow/runtime/workflow_runtime.py +8 -8
  394. autobyteus/workflow/runtime/workflow_worker.py +3 -3
  395. autobyteus/workflow/status/__init__.py +11 -0
  396. autobyteus/workflow/status/workflow_status.py +19 -0
  397. autobyteus/workflow/status/workflow_status_manager.py +48 -0
  398. autobyteus/workflow/streaming/__init__.py +2 -2
  399. autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
  400. autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
  401. autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
  402. autobyteus/workflow/utils/wait_for_idle.py +4 -4
  403. autobyteus-1.2.3.dist-info/METADATA +293 -0
  404. autobyteus-1.2.3.dist-info/RECORD +600 -0
  405. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/WHEEL +1 -1
  406. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/top_level.txt +0 -1
  407. autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
  408. autobyteus/agent/hooks/__init__.py +0 -16
  409. autobyteus/agent/hooks/base_phase_hook.py +0 -78
  410. autobyteus/agent/hooks/hook_definition.py +0 -36
  411. autobyteus/agent/hooks/hook_meta.py +0 -37
  412. autobyteus/agent/hooks/hook_registry.py +0 -106
  413. autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
  414. autobyteus/agent/phases/__init__.py +0 -18
  415. autobyteus/agent/phases/discover.py +0 -53
  416. autobyteus/agent/phases/manager.py +0 -265
  417. autobyteus/agent/phases/transition_decorator.py +0 -40
  418. autobyteus/agent/phases/transition_info.py +0 -33
  419. autobyteus/agent/remote_agent.py +0 -244
  420. autobyteus/agent/workspace/workspace_definition.py +0 -36
  421. autobyteus/agent/workspace/workspace_meta.py +0 -37
  422. autobyteus/agent/workspace/workspace_registry.py +0 -72
  423. autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
  424. autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
  425. autobyteus/agent_team/phases/__init__.py +0 -11
  426. autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
  427. autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
  428. autobyteus/llm/api/bedrock_llm.py +0 -92
  429. autobyteus/llm/api/groq_llm.py +0 -94
  430. autobyteus/llm/api/nvidia_llm.py +0 -108
  431. autobyteus/llm/utils/token_pricing_config.py +0 -87
  432. autobyteus/person/examples/sample_persons.py +0 -14
  433. autobyteus/person/examples/sample_roles.py +0 -14
  434. autobyteus/person/person.py +0 -29
  435. autobyteus/person/role.py +0 -14
  436. autobyteus/rpc/__init__.py +0 -73
  437. autobyteus/rpc/client/__init__.py +0 -17
  438. autobyteus/rpc/client/abstract_client_connection.py +0 -124
  439. autobyteus/rpc/client/client_connection_manager.py +0 -153
  440. autobyteus/rpc/client/sse_client_connection.py +0 -306
  441. autobyteus/rpc/client/stdio_client_connection.py +0 -280
  442. autobyteus/rpc/config/__init__.py +0 -13
  443. autobyteus/rpc/config/agent_server_config.py +0 -153
  444. autobyteus/rpc/config/agent_server_registry.py +0 -152
  445. autobyteus/rpc/hosting.py +0 -244
  446. autobyteus/rpc/protocol.py +0 -244
  447. autobyteus/rpc/server/__init__.py +0 -20
  448. autobyteus/rpc/server/agent_server_endpoint.py +0 -181
  449. autobyteus/rpc/server/base_method_handler.py +0 -40
  450. autobyteus/rpc/server/method_handlers.py +0 -259
  451. autobyteus/rpc/server/sse_server_handler.py +0 -182
  452. autobyteus/rpc/server/stdio_server_handler.py +0 -151
  453. autobyteus/rpc/server_main.py +0 -198
  454. autobyteus/rpc/transport_type.py +0 -13
  455. autobyteus/tools/bash/__init__.py +0 -2
  456. autobyteus/tools/bash/bash_executor.py +0 -100
  457. autobyteus/tools/browser/__init__.py +0 -2
  458. autobyteus/tools/browser/session_aware/__init__.py +0 -0
  459. autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
  460. autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
  461. autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
  462. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
  463. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
  464. autobyteus/tools/browser/session_aware/factory/__init__.py +0 -0
  465. autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
  466. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
  467. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
  468. autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
  469. autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
  470. autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
  471. autobyteus/tools/browser/standalone/__init__.py +0 -6
  472. autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
  473. autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
  474. autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
  475. autobyteus/tools/browser/standalone/navigate_to.py +0 -80
  476. autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -97
  477. autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -165
  478. autobyteus/tools/browser/standalone/webpage_reader.py +0 -101
  479. autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -101
  480. autobyteus/tools/file/file_editor.py +0 -200
  481. autobyteus/tools/google_search.py +0 -149
  482. autobyteus/tools/timer.py +0 -171
  483. autobyteus/tools/usage/parsers/__init__.py +0 -22
  484. autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
  485. autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
  486. autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
  487. autobyteus/tools/usage/parsers/base_parser.py +0 -41
  488. autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
  489. autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
  490. autobyteus/tools/usage/parsers/exceptions.py +0 -13
  491. autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
  492. autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
  493. autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
  494. autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
  495. autobyteus/workflow/phases/__init__.py +0 -11
  496. autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
  497. autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
  498. autobyteus-1.2.0.dist-info/METADATA +0 -205
  499. autobyteus-1.2.0.dist-info/RECORD +0 -496
  500. examples/__init__.py +0 -1
  501. examples/agent_team/__init__.py +0 -1
  502. examples/discover_phase_transitions.py +0 -104
  503. examples/run_browser_agent.py +0 -262
  504. examples/run_google_slides_agent.py +0 -287
  505. examples/run_mcp_browser_client.py +0 -174
  506. examples/run_mcp_google_slides_client.py +0 -270
  507. examples/run_mcp_list_tools.py +0 -189
  508. examples/run_poem_writer.py +0 -284
  509. examples/run_sqlite_agent.py +0 -295
  510. /autobyteus/{person → skills}/__init__.py +0 -0
  511. /autobyteus/{person/examples → tools/skill}/__init__.py +0 -0
  512. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.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
 
@@ -27,9 +26,9 @@ class TaskNotifierInitializationStep(BaseAgentTeamBootstrapStep):
27
26
 
28
27
  logger.info(f"Team '{team_id}': Mode is SYSTEM_EVENT_DRIVEN. Initializing and activating task notifier.")
29
28
  try:
30
- task_board = context.state.task_board
31
- if not task_board:
32
- logger.error(f"Team '{team_id}': TaskBoard not found. Cannot initialize task notifier. This step should run after TeamContextInitializationStep.")
29
+ task_plan = context.state.task_plan
30
+ if not task_plan:
31
+ logger.error(f"Team '{team_id}': TaskPlan not found. Cannot initialize task notifier. This step should run after TeamContextInitializationStep.")
33
32
  return False
34
33
 
35
34
  team_manager = context.team_manager
@@ -38,7 +37,7 @@ class TaskNotifierInitializationStep(BaseAgentTeamBootstrapStep):
38
37
  return False
39
38
 
40
39
  notifier = SystemEventDrivenAgentTaskNotifier(
41
- task_board=task_board,
40
+ task_plan=task_plan,
42
41
  team_manager=team_manager
43
42
  )
44
43
  notifier.start_monitoring()
@@ -3,41 +3,41 @@ import logging
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  from autobyteus.agent_team.bootstrap_steps.base_agent_team_bootstrap_step import BaseAgentTeamBootstrapStep
6
- from autobyteus.task_management import TaskBoard
6
+ from autobyteus.task_management import TaskPlan
7
7
  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
 
15
14
  class TeamContextInitializationStep(BaseAgentTeamBootstrapStep):
16
15
  """
17
16
  Bootstrap step to initialize shared team context components, such as the
18
- TaskBoard, and bridges its events to the team's notifier.
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:
24
- if context.state.task_board is None:
25
- task_board = TaskBoard(team_id=team_id)
26
- context.state.task_board = task_board
27
- logger.info(f"Team '{team_id}': TaskBoard initialized and attached to team state.")
23
+ if context.state.task_plan is None:
24
+ task_plan = TaskPlan(team_id=team_id)
25
+ context.state.task_plan = task_plan
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
- # from the task_board, another long-lived component.
33
- notifier.subscribe_from(sender=task_board, event=EventType.TASK_BOARD_TASKS_ADDED, listener=notifier.handle_and_publish_task_board_event)
34
- notifier.subscribe_from(sender=task_board, event=EventType.TASK_BOARD_STATUS_UPDATED, listener=notifier.handle_and_publish_task_board_event)
35
- logger.info(f"Team '{team_id}': Successfully bridged TaskBoard events to the team notifier.")
32
+ # from the task_plan, another long-lived component.
33
+ notifier.subscribe_from(sender=task_plan, event=EventType.TASK_PLAN_TASKS_CREATED, listener=notifier.handle_and_publish_task_plan_event)
34
+ notifier.subscribe_from(sender=task_plan, event=EventType.TASK_PLAN_STATUS_UPDATED, listener=notifier.handle_and_publish_task_plan_event)
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 TaskBoard events.")
37
+ logger.warning(f"Team '{team_id}': Notifier not found in StatusManager. Cannot bridge TaskPlan events.")
38
38
 
39
39
  else:
40
- logger.warning(f"Team '{team_id}': TaskBoard already exists. Skipping initialization.")
40
+ logger.warning(f"Team '{team_id}': TaskPlan already exists. Skipping initialization.")
41
41
 
42
42
  return True
43
43
  except Exception as e:
@@ -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,17 +3,19 @@ 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
16
- from autobyteus.task_management.base_task_board import BaseTaskBoard
18
+ from autobyteus.task_management.base_task_plan import BaseTaskPlan
17
19
  from autobyteus.agent_team.task_notification.system_event_driven_agent_task_notifier import SystemEventDrivenAgentTaskNotifier
18
20
 
19
21
  logger = logging.getLogger(__name__)
@@ -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,11 +35,13 @@ 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
- task_board: Optional['BaseTaskBoard'] = None
44
+ task_plan: Optional['BaseTaskPlan'] = None
42
45
 
43
46
  def __post_init__(self):
44
47
  if not self.team_id or not isinstance(self.team_id, str):
@@ -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."""