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,7 @@ from .agent_team_event_stream import AgentTeamEventStream
7
7
  from .agent_team_stream_events import AgentTeamStreamEvent, AgentTeamStreamDataPayload
8
8
  from .agent_team_stream_event_payloads import (
9
9
  BaseTeamSpecificPayload,
10
- AgentTeamPhaseTransitionData,
10
+ AgentTeamStatusUpdateData,
11
11
  AgentEventRebroadcastPayload,
12
12
  )
13
13
  from .agent_event_bridge import AgentEventBridge
@@ -19,7 +19,7 @@ __all__ = [
19
19
  "AgentTeamStreamEvent",
20
20
  "AgentTeamStreamDataPayload",
21
21
  "BaseTeamSpecificPayload",
22
- "AgentTeamPhaseTransitionData",
22
+ "AgentTeamStatusUpdateData",
23
23
  "AgentEventRebroadcastPayload",
24
24
  "AgentEventBridge",
25
25
  "AgentEventMultiplexer",
@@ -4,10 +4,10 @@ from typing import Optional, Dict, Any, TYPE_CHECKING
4
4
 
5
5
  from autobyteus.events.event_emitter import EventEmitter
6
6
  from autobyteus.events.event_types import EventType
7
- from autobyteus.agent_team.phases.agent_team_operational_phase import AgentTeamOperationalPhase
7
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
8
8
  from autobyteus.agent.streaming.stream_events import StreamEvent as AgentStreamEvent
9
- from .agent_team_stream_events import AgentTeamStreamEvent, AgentEventRebroadcastPayload, AgentTeamPhaseTransitionData, SubTeamEventRebroadcastPayload
10
- from autobyteus.task_management.events import BaseTaskBoardEvent
9
+ from .agent_team_stream_events import AgentTeamStreamEvent, AgentEventRebroadcastPayload, AgentTeamStatusUpdateData, SubTeamEventRebroadcastPayload
10
+ from autobyteus.task_management.events import BaseTaskPlanEvent
11
11
 
12
12
  if TYPE_CHECKING:
13
13
  from autobyteus.agent_team.runtime.agent_team_runtime import AgentTeamRuntime
@@ -32,14 +32,14 @@ class AgentTeamExternalEventNotifier(EventEmitter):
32
32
  """
33
33
  self.emit(EventType.TEAM_STREAM_EVENT, payload=event)
34
34
 
35
- def notify_phase_change(self, new_phase: AgentTeamOperationalPhase, old_phase: Optional[AgentTeamOperationalPhase], extra_data: Optional[Dict[str, Any]] = None):
35
+ def notify_status_updated(self, new_status: AgentTeamStatus, old_status: Optional[AgentTeamStatus], extra_data: Optional[Dict[str, Any]] = None):
36
36
  """
37
- Notifies of an agent team phase transition by creating and emitting a
37
+ Notifies of an agent team status update by creating and emitting a
38
38
  'TEAM' sourced event.
39
39
  """
40
- payload_dict = { "new_phase": new_phase, "old_phase": old_phase, "error_message": extra_data.get("error_message") if extra_data else None }
40
+ payload_dict = { "new_status": new_status, "old_status": old_status, "error_message": extra_data.get("error_message") if extra_data else None }
41
41
  filtered_payload_dict = {k: v for k, v in payload_dict.items() if v is not None}
42
- event = AgentTeamStreamEvent(team_id=self.team_id, event_source_type="TEAM", data=AgentTeamPhaseTransitionData(**filtered_payload_dict))
42
+ event = AgentTeamStreamEvent(team_id=self.team_id, event_source_type="TEAM", data=AgentTeamStatusUpdateData(**filtered_payload_dict))
43
43
  self._emit_event(event)
44
44
 
45
45
  def publish_agent_event(self, agent_name: str, agent_event: AgentStreamEvent):
@@ -56,9 +56,9 @@ class AgentTeamExternalEventNotifier(EventEmitter):
56
56
  event = AgentTeamStreamEvent(team_id=self.team_id, event_source_type="SUB_TEAM", data=SubTeamEventRebroadcastPayload(sub_team_node_name=sub_team_node_name, sub_team_event=sub_team_event))
57
57
  self._emit_event(event)
58
58
 
59
- def handle_and_publish_task_board_event(self, payload: BaseTaskBoardEvent, **kwargs):
59
+ def handle_and_publish_task_plan_event(self, payload: BaseTaskPlanEvent, **kwargs):
60
60
  """
61
- Listener for TaskBoard events. It wraps the event and publishes it on the main team stream.
61
+ Listener for TaskPlan events. It wraps the event and publishes it on the main team stream.
62
62
  """
63
- event = AgentTeamStreamEvent(team_id=self.team_id, event_source_type="TASK_BOARD", data=payload)
63
+ event = AgentTeamStreamEvent(team_id=self.team_id, event_source_type="TASK_PLAN", data=payload)
64
64
  self._emit_event(event)
@@ -1,9 +1,9 @@
1
1
  # file: autobyteus/autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py
2
2
  from typing import Optional, Any
3
3
  from pydantic import BaseModel, Field
4
- from autobyteus.agent_team.phases.agent_team_operational_phase import AgentTeamOperationalPhase
4
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
5
5
  from autobyteus.agent.streaming.stream_events import StreamEvent as AgentStreamEvent
6
- from autobyteus.task_management.events import TasksAddedEvent, TaskStatusUpdatedEvent
6
+ from autobyteus.task_management.events import TasksCreatedEvent, TaskStatusUpdatedEvent
7
7
  # Need to use a forward reference string to avoid circular import at runtime
8
8
  from typing import TYPE_CHECKING, Union
9
9
  if TYPE_CHECKING:
@@ -13,9 +13,9 @@ if TYPE_CHECKING:
13
13
  class BaseTeamSpecificPayload(BaseModel):
14
14
  pass
15
15
 
16
- class AgentTeamPhaseTransitionData(BaseTeamSpecificPayload):
17
- new_phase: AgentTeamOperationalPhase
18
- old_phase: Optional[AgentTeamOperationalPhase] = None
16
+ class AgentTeamStatusUpdateData(BaseTeamSpecificPayload):
17
+ new_status: AgentTeamStatus
18
+ old_status: Optional[AgentTeamStatus] = None
19
19
  error_message: Optional[str] = None
20
20
 
21
21
  # --- Payload for events originating from the "AGENT" source ---
@@ -28,5 +28,5 @@ class SubTeamEventRebroadcastPayload(BaseModel):
28
28
  sub_team_node_name: str # The friendly name of the sub-team node
29
29
  sub_team_event: "AgentTeamStreamEvent" = Field(..., description="The original, unmodified event from the sub-team's stream")
30
30
 
31
- # --- Payload for events originating from the "TASK_BOARD" source ---
32
- TaskBoardEventPayload = Union[TasksAddedEvent, TaskStatusUpdatedEvent]
31
+ # --- Payload for events originating from the "TASK_PLAN" source ---
32
+ TaskPlanEventPayload = Union[TasksCreatedEvent, TaskStatusUpdatedEvent]
@@ -5,22 +5,22 @@ from typing import Literal, Union
5
5
  from pydantic import BaseModel, Field, model_validator
6
6
 
7
7
  from .agent_team_stream_event_payloads import (
8
- AgentTeamPhaseTransitionData, AgentEventRebroadcastPayload,
9
- SubTeamEventRebroadcastPayload, TaskBoardEventPayload
8
+ AgentTeamStatusUpdateData, AgentEventRebroadcastPayload,
9
+ SubTeamEventRebroadcastPayload, TaskPlanEventPayload
10
10
  )
11
- from autobyteus.task_management.events import BaseTaskBoardEvent
11
+ from autobyteus.task_management.events import BaseTaskPlanEvent
12
12
 
13
13
  # A union of all possible payloads for a "TEAM" sourced event.
14
- TeamSpecificPayload = Union[AgentTeamPhaseTransitionData]
14
+ TeamSpecificPayload = Union[AgentTeamStatusUpdateData]
15
15
 
16
16
  # The top-level discriminated union for the main event stream's payload.
17
- AgentTeamStreamDataPayload = Union[TeamSpecificPayload, AgentEventRebroadcastPayload, SubTeamEventRebroadcastPayload, TaskBoardEventPayload]
17
+ AgentTeamStreamDataPayload = Union[TeamSpecificPayload, AgentEventRebroadcastPayload, SubTeamEventRebroadcastPayload, TaskPlanEventPayload]
18
18
 
19
19
  class AgentTeamStreamEvent(BaseModel):
20
20
  event_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
21
21
  timestamp: datetime.datetime = Field(default_factory=datetime.datetime.utcnow)
22
22
  team_id: str
23
- event_source_type: Literal["TEAM", "AGENT", "SUB_TEAM", "TASK_BOARD"]
23
+ event_source_type: Literal["TEAM", "AGENT", "SUB_TEAM", "TASK_PLAN"]
24
24
  data: AgentTeamStreamDataPayload
25
25
 
26
26
  @model_validator(mode='after')
@@ -32,10 +32,10 @@ class AgentTeamStreamEvent(BaseModel):
32
32
  is_sub_team_payload = isinstance(self.data, SubTeamEventRebroadcastPayload)
33
33
 
34
34
  is_team_event = self.event_source_type == "TEAM"
35
- is_team_payload = isinstance(self.data, AgentTeamPhaseTransitionData)
35
+ is_team_payload = isinstance(self.data, AgentTeamStatusUpdateData)
36
36
 
37
- is_task_board_event = self.event_source_type == "TASK_BOARD"
38
- is_task_board_payload = isinstance(self.data, BaseTaskBoardEvent)
37
+ is_task_plan_event = self.event_source_type == "TASK_PLAN"
38
+ is_task_plan_payload = isinstance(self.data, BaseTaskPlanEvent)
39
39
 
40
40
  if is_agent_event and not is_agent_payload:
41
41
  raise ValueError("event_source_type is 'AGENT' but data is not an AgentEventRebroadcastPayload")
@@ -46,8 +46,8 @@ class AgentTeamStreamEvent(BaseModel):
46
46
  if is_team_event and not is_team_payload:
47
47
  raise ValueError("event_source_type is 'TEAM' but data is not a valid team-specific payload")
48
48
 
49
- if is_task_board_event and not is_task_board_payload:
50
- raise ValueError("event_source_type is 'TASK_BOARD' but data is not a TaskBoardEventPayload")
49
+ if is_task_plan_event and not is_task_plan_payload:
50
+ raise ValueError("event_source_type is 'TASK_PLAN' but data is not a BaseTaskPlanEvent instance")
51
51
 
52
52
  return self
53
53
 
@@ -0,0 +1,6 @@
1
+ # file: autobyteus/autobyteus/agent_team/system_prompt_processor/__init__.py
2
+ from .team_manifest_injector_processor import TeamManifestInjectorProcessor
3
+
4
+ __all__ = [
5
+ "TeamManifestInjectorProcessor",
6
+ ]
@@ -0,0 +1,76 @@
1
+ # file: autobyteus/autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py
2
+ import logging
3
+ from typing import Dict, List, TYPE_CHECKING
4
+
5
+ from autobyteus.agent.system_prompt_processor.base_processor import BaseSystemPromptProcessor
6
+ from autobyteus.agent_team.context import AgentTeamConfig
7
+
8
+ if TYPE_CHECKING:
9
+ from autobyteus.tools.base_tool import BaseTool
10
+ from autobyteus.agent.context import AgentContext
11
+ from autobyteus.agent_team.context.agent_team_context import AgentTeamContext
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class TeamManifestInjectorProcessor(BaseSystemPromptProcessor):
17
+ """
18
+ Injects a team manifest into the system prompt for agents that belong to a team.
19
+ If the prompt contains {{team}}, the placeholder is replaced. Otherwise, the
20
+ manifest is appended as a dedicated section.
21
+ """
22
+
23
+ @classmethod
24
+ def get_name(cls) -> str:
25
+ return "TeamManifestInjector"
26
+
27
+ @classmethod
28
+ def get_order(cls) -> int:
29
+ return 450
30
+
31
+ def process(
32
+ self,
33
+ system_prompt: str,
34
+ tool_instances: Dict[str, 'BaseTool'],
35
+ agent_id: str,
36
+ context: 'AgentContext',
37
+ ) -> str:
38
+ team_context = context.custom_data.get("team_context")
39
+ if team_context is None:
40
+ logger.debug(f"Agent '{agent_id}': No team_context found; skipping team manifest injection.")
41
+ return system_prompt
42
+
43
+ manifest = self._generate_team_manifest(team_context, exclude_name=context.config.name)
44
+
45
+ if "{{team}}" in system_prompt:
46
+ logger.info(f"Agent '{agent_id}': Replacing {{team}} placeholder with team manifest.")
47
+ return system_prompt.replace("{{team}}", manifest)
48
+
49
+ logger.info(f"Agent '{agent_id}': Appending team manifest to system prompt.")
50
+ return system_prompt + "\n\n## Team Manifest\n\n" + manifest
51
+
52
+ def _generate_team_manifest(self, context: 'AgentTeamContext', exclude_name: str) -> str:
53
+ """
54
+ Builds a manifest string of all team members except the given agent.
55
+ Includes sub-teams so agents see the full collaboration surface.
56
+ """
57
+ prompt_parts: List[str] = []
58
+
59
+ for node in sorted(list(context.config.nodes), key=lambda n: n.name):
60
+ if node.name == exclude_name:
61
+ continue
62
+
63
+ node_def = node.node_definition
64
+ description = "No description available."
65
+
66
+ if hasattr(node_def, "description") and isinstance(node_def.description, str):
67
+ description = node_def.description
68
+ elif isinstance(node_def, AgentTeamConfig):
69
+ description = node_def.role or node_def.description
70
+
71
+ prompt_parts.append(f"- name: {node.name}\n description: {description}")
72
+
73
+ if not prompt_parts:
74
+ return "You are working alone. You have no team members to delegate to."
75
+
76
+ return "\n".join(prompt_parts)
@@ -31,7 +31,7 @@ class ActivationPolicy:
31
31
  def reset(self):
32
32
  """
33
33
  Resets the activation state. This should be called when a new batch of
34
- tasks is published to the task board, signifying a new plan or a
34
+ tasks is published to the task plan, signifying a new plan or a
35
35
  significant change in scope.
36
36
  """
37
37
  logger.info(f"Team '{self._team_id}': ActivationPolicy state has been reset. All agents are now considered inactive.")
@@ -3,39 +3,39 @@ import logging
3
3
  from typing import Union, TYPE_CHECKING
4
4
 
5
5
  from autobyteus.events.event_types import EventType
6
- from autobyteus.task_management.events import TasksAddedEvent, TaskStatusUpdatedEvent
7
- from autobyteus.task_management.base_task_board import TaskStatus
6
+ from autobyteus.task_management.events import TasksCreatedEvent, TaskStatusUpdatedEvent
7
+ from autobyteus.task_management.base_task_plan import TaskStatus
8
8
 
9
9
  # Import the new, separated components
10
10
  from .activation_policy import ActivationPolicy
11
11
  from .task_activator import TaskActivator
12
12
 
13
13
  if TYPE_CHECKING:
14
- from autobyteus.task_management.base_task_board import BaseTaskBoard
14
+ from autobyteus.task_management.base_task_plan import BaseTaskPlan
15
15
  from autobyteus.agent_team.context.team_manager import TeamManager
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
19
  class SystemEventDrivenAgentTaskNotifier:
20
20
  """
21
- An internal component that monitors a TaskBoard and orchestrates agent
21
+ An internal component that monitors a TaskPlan and orchestrates agent
22
22
  activation based on task runnability.
23
23
 
24
24
  This class acts as a conductor, delegating the logic for *when* to activate
25
25
  to an ActivationPolicy and the action of *how* to activate to a TaskActivator.
26
26
  """
27
- def __init__(self, task_board: 'BaseTaskBoard', team_manager: 'TeamManager'):
27
+ def __init__(self, task_plan: 'BaseTaskPlan', team_manager: 'TeamManager'):
28
28
  """
29
29
  Initializes the SystemEventDrivenAgentTaskNotifier.
30
30
 
31
31
  Args:
32
- task_board: The team's shared task board instance.
32
+ task_plan: The team's shared task plan instance.
33
33
  team_manager: The team's manager for activating agents.
34
34
  """
35
- if not task_board or not team_manager:
36
- raise ValueError("TaskBoard and TeamManager are required for the notifier.")
35
+ if not task_plan or not team_manager:
36
+ raise ValueError("TaskPlan and TeamManager are required for the notifier.")
37
37
 
38
- self._task_board = task_board
38
+ self._task_plan = task_plan
39
39
  self._team_manager = team_manager
40
40
 
41
41
  # Instantiate the components that hold the actual logic and action
@@ -46,27 +46,27 @@ class SystemEventDrivenAgentTaskNotifier:
46
46
 
47
47
  def start_monitoring(self):
48
48
  """
49
- Subscribes to task board events to begin monitoring for runnable tasks.
49
+ Subscribes to task plan events to begin monitoring for runnable tasks.
50
50
  """
51
- self._task_board.subscribe(EventType.TASK_BOARD_TASKS_ADDED, self._handle_tasks_changed)
52
- self._task_board.subscribe(EventType.TASK_BOARD_STATUS_UPDATED, self._handle_tasks_changed)
53
- logger.info(f"Team '{self._team_manager.team_id}': Task notifier orchestrator is now monitoring TaskBoard events.")
51
+ self._task_plan.subscribe(EventType.TASK_PLAN_TASKS_CREATED, self._handle_tasks_changed)
52
+ self._task_plan.subscribe(EventType.TASK_PLAN_STATUS_UPDATED, self._handle_tasks_changed)
53
+ logger.info(f"Team '{self._team_manager.team_id}': Task notifier orchestrator is now monitoring TaskPlan events.")
54
54
 
55
- async def _handle_tasks_changed(self, payload: Union[TasksAddedEvent, TaskStatusUpdatedEvent], **kwargs):
55
+ async def _handle_tasks_changed(self, payload: Union[TasksCreatedEvent, TaskStatusUpdatedEvent], **kwargs):
56
56
  """
57
- Orchestrates the agent activation workflow upon any change to the task board.
57
+ Orchestrates the agent activation workflow upon any change to the task plan.
58
58
  """
59
59
  team_id = self._team_manager.team_id
60
- logger.info(f"Team '{team_id}': Task board changed ({type(payload).__name__}). Orchestrating activation check.")
60
+ logger.info(f"Team '{team_id}': Task plan changed ({type(payload).__name__}). Orchestrating activation check.")
61
61
 
62
62
  # If a new batch of tasks was added, it's a new "wave" of work.
63
63
  # We must reset the policy's memory of who has been activated.
64
- if isinstance(payload, TasksAddedEvent):
65
- logger.info(f"Team '{team_id}': New tasks added. Resetting activation policy.")
64
+ if isinstance(payload, TasksCreatedEvent):
65
+ logger.info(f"Team '{team_id}': New tasks created. Resetting activation policy.")
66
66
  self._policy.reset()
67
67
 
68
- # 1. DATA FETCHING: Get the current state of runnable tasks from the board.
69
- runnable_tasks = self._task_board.get_next_runnable_tasks()
68
+ # 1. DATA FETCHING: Get the current state of runnable tasks from the plan.
69
+ runnable_tasks = self._task_plan.get_next_runnable_tasks()
70
70
 
71
71
  if not runnable_tasks:
72
72
  logger.debug(f"Team '{team_id}': No runnable tasks found after change. No action needed.")
@@ -87,8 +87,8 @@ class SystemEventDrivenAgentTaskNotifier:
87
87
  agent_runnable_tasks = [t for t in runnable_tasks if t.assignee_name == agent_name]
88
88
  for task in agent_runnable_tasks:
89
89
  # We only need to queue tasks that are NOT_STARTED.
90
- if self._task_board.task_statuses.get(task.task_id) == TaskStatus.NOT_STARTED:
91
- self._task_board.update_task_status(
90
+ if self._task_plan.task_statuses.get(task.task_id) == TaskStatus.NOT_STARTED:
91
+ self._task_plan.update_task_status(
92
92
  task_id=task.task_id,
93
93
  status=TaskStatus.QUEUED,
94
94
  agent_name="SystemTaskNotifier"
@@ -2,6 +2,7 @@
2
2
  """
3
3
  Defines the enum for controlling how task notifications are handled in an agent team.
4
4
  """
5
+ import os
5
6
  from enum import Enum
6
7
 
7
8
  class TaskNotificationMode(str, Enum):
@@ -16,9 +17,27 @@ class TaskNotificationMode(str, Enum):
16
17
 
17
18
  SYSTEM_EVENT_DRIVEN = "system_event_driven"
18
19
  """
19
- In this mode, the agent team framework automatically monitors the TaskBoard
20
+ In this mode, the agent team framework automatically monitors the TaskPlan
20
21
  and sends notifications to agents when their assigned tasks become runnable.
21
22
  """
22
23
 
23
24
  def __str__(self) -> str:
24
25
  return self.value
26
+
27
+
28
+ ENV_TASK_NOTIFICATION_MODE = "AUTOBYTEUS_TASK_NOTIFICATION_MODE"
29
+ DEFAULT_TASK_NOTIFICATION_MODE = TaskNotificationMode.AGENT_MANUAL_NOTIFICATION
30
+ _VALID_TASK_NOTIFICATION_MODES = {mode.value: mode for mode in TaskNotificationMode}
31
+
32
+
33
+ def resolve_task_notification_mode() -> TaskNotificationMode:
34
+ """
35
+ Resolve task notification mode from environment.
36
+
37
+ Env var: AUTOBYTEUS_TASK_NOTIFICATION_MODE
38
+ """
39
+ raw_value = os.getenv(ENV_TASK_NOTIFICATION_MODE)
40
+ if not raw_value:
41
+ return DEFAULT_TASK_NOTIFICATION_MODE
42
+ normalized = raw_value.strip().lower()
43
+ return _VALID_TASK_NOTIFICATION_MODES.get(normalized, DEFAULT_TASK_NOTIFICATION_MODE)
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from autobyteus.agent_team.streaming.agent_team_event_stream import AgentTeamEventStream
7
- from autobyteus.agent_team.phases.agent_team_operational_phase import AgentTeamOperationalPhase
7
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent_team.agent_team import AgentTeam
@@ -14,10 +14,10 @@ logger = logging.getLogger(__name__)
14
14
  async def _wait_loop(streamer: AgentTeamEventStream, team_id: str):
15
15
  """Internal helper to listen for the IDLE or ERROR event."""
16
16
  async for event in streamer.all_events():
17
- if event.event_source_type == "TEAM" and event.data.new_phase == AgentTeamOperationalPhase.IDLE:
17
+ if event.event_source_type == "TEAM" and event.data.new_status == AgentTeamStatus.IDLE:
18
18
  logger.info(f"Team '{team_id}' has become idle.")
19
19
  return
20
- if event.event_source_type == "TEAM" and event.data.new_phase == AgentTeamOperationalPhase.ERROR:
20
+ if event.event_source_type == "TEAM" and event.data.new_status == AgentTeamStatus.ERROR:
21
21
  error_message = f"Team '{team_id}' entered an error state while waiting for idle: {event.data.error_message}"
22
22
  logger.error(error_message)
23
23
  raise RuntimeError(error_message)
@@ -34,7 +34,7 @@ async def wait_for_team_to_be_idle(team: 'AgentTeam', timeout: float = 60.0):
34
34
  asyncio.TimeoutError: If the team does not become idle within the timeout period.
35
35
  RuntimeError: If the team enters an error state.
36
36
  """
37
- if team.get_current_phase() == AgentTeamOperationalPhase.IDLE:
37
+ if team.get_current_status() == AgentTeamStatus.IDLE:
38
38
  return
39
39
 
40
40
  logger.info(f"Waiting for team '{team.team_id}' to become idle (timeout: {timeout}s)...")
@@ -70,16 +70,24 @@ async def run(agent: Agent, show_tool_logs: bool = True, show_token_usage: bool
70
70
  agent_turn_complete_event.clear()
71
71
 
72
72
  if cli_display.pending_approval_data:
73
- approval_input = await asyncio.get_event_loop().run_in_executor(None, sys.stdin.readline)
74
- approval_input = approval_input.strip().lower()
75
-
76
- approval_data = cli_display.pending_approval_data
77
- cli_display.pending_approval_data = None
78
-
79
- is_approved = approval_input in ["y", "yes"]
80
- reason = "User approved via CLI" if is_approved else "User denied via CLI"
81
-
82
- await agent.post_tool_execution_approval(approval_data.invocation_id, is_approved, reason)
73
+ approval_prompt = cli_display.get_approval_prompt()
74
+ if approval_prompt:
75
+ approval_input = await asyncio.get_event_loop().run_in_executor(None, lambda: input(approval_prompt))
76
+ approval_input = approval_input.strip().lower()
77
+
78
+ approval_data = cli_display.pending_approval_data
79
+ cli_display.clear_pending_approval()
80
+
81
+ is_approved = approval_input in ["y", "yes"]
82
+ reason = "User approved via CLI"
83
+
84
+ if not is_approved:
85
+ reason_input = await asyncio.get_event_loop().run_in_executor(None, lambda: input("Reason (optional): "))
86
+ reason = reason_input.strip()
87
+ if not reason:
88
+ reason = "User denied via CLI"
89
+
90
+ await agent.post_tool_execution_approval(approval_data.invocation_id, is_approved, reason)
83
91
 
84
92
  else:
85
93
  sys.stdout.write("You: ")
@@ -13,11 +13,12 @@ from textual.widgets import Header, Static
13
13
  from textual.reactive import reactive
14
14
 
15
15
  from autobyteus.agent_team.agent_team import AgentTeam
16
+ from autobyteus.agent_team.status.agent_team_status import AgentTeamStatus
16
17
  from autobyteus.agent_team.streaming.agent_team_event_stream import AgentTeamEventStream
17
18
  from autobyteus.agent.message.agent_input_user_message import AgentInputUserMessage
18
19
  from autobyteus.agent.streaming.stream_events import StreamEventType as AgentStreamEventType
19
- from autobyteus.agent.streaming.stream_event_payloads import AssistantChunkData
20
- from autobyteus.agent_team.streaming.agent_team_stream_event_payloads import AgentEventRebroadcastPayload, AgentTeamPhaseTransitionData
20
+ from autobyteus.agent_team.streaming.agent_team_stream_events import AgentTeamStreamEvent
21
+ from autobyteus.agent_team.streaming.agent_team_stream_event_payloads import AgentEventRebroadcastPayload, SubTeamEventRebroadcastPayload, AgentTeamStatusUpdateData
21
22
 
22
23
  from .state import TUIStateStore
23
24
  from .widgets.agent_list_sidebar import AgentListSidebar
@@ -104,7 +105,9 @@ class AgentTeamApp(App):
104
105
  self._ui_update_pending = True
105
106
 
106
107
  # 3. Handle real-time, incremental updates directly.
107
- if isinstance(event.data, AgentEventRebroadcastPayload):
108
+ if event.event_source_type == "TEAM" and isinstance(event.data, AgentTeamStatusUpdateData):
109
+ self.store._team_statuses[self.team.name] = event.data.new_status
110
+ elif isinstance(event.data, AgentEventRebroadcastPayload):
108
111
  payload = event.data
109
112
  agent_name = payload.agent_name
110
113
  agent_event = payload.agent_event
@@ -132,28 +135,28 @@ class AgentTeamApp(App):
132
135
  focus_pane = self.query_one(FocusPane)
133
136
 
134
137
  tree_data = self.store.get_tree_data()
135
- agent_phases = self.store._agent_phases
136
- team_phases = self.store._team_phases
138
+ agent_statuses = self.store._agent_statuses
139
+ team_statuses = self.store._team_statuses
137
140
  speaking_agents = self.store._speaking_agents
138
141
 
139
- sidebar.update_tree(tree_data, agent_phases, team_phases, speaking_agents)
142
+ sidebar.update_tree(tree_data, agent_statuses, team_statuses, speaking_agents)
140
143
 
141
144
  focused_data = self.focused_node_data
142
145
  if focused_data and focused_data.get("type") in ['team', 'subteam']:
143
146
  node_name = focused_data['name']
144
- task_plan = self.store.get_task_board_plan(node_name)
145
- task_statuses = self.store.get_task_board_statuses(node_name)
147
+ task_plan = self.store.get_task_plan_tasks(node_name)
148
+ task_statuses = self.store.get_task_plan_statuses(node_name)
146
149
  await focus_pane.update_content(
147
150
  node_data=focused_data,
148
151
  history=[], # No history for teams
149
152
  pending_approval=None,
150
- all_agent_phases=agent_phases,
151
- all_team_phases=team_phases,
153
+ all_agent_statuses=agent_statuses,
154
+ all_team_statuses=team_statuses,
152
155
  task_plan=task_plan,
153
156
  task_statuses=task_statuses
154
157
  )
155
158
  elif focused_data and focused_data.get("type") == 'agent':
156
- focus_pane.update_current_node_status(agent_phases, team_phases)
159
+ focus_pane.update_current_node_status(agent_statuses, team_statuses)
157
160
 
158
161
 
159
162
  async def watch_focused_node_data(self, new_node_data: Optional[Dict[str, Any]]):
@@ -169,8 +172,8 @@ class AgentTeamApp(App):
169
172
  task_plan = None
170
173
  task_statuses = None
171
174
  if node_type in ['team', 'subteam']:
172
- task_plan = self.store.get_task_board_plan(node_name)
173
- task_statuses = self.store.get_task_board_statuses(node_name)
175
+ task_plan = self.store.get_task_plan_tasks(node_name)
176
+ task_statuses = self.store.get_task_plan_statuses(node_name)
174
177
 
175
178
  sidebar = self.query_one(AgentListSidebar)
176
179
  focus_pane = self.query_one(FocusPane)
@@ -179,8 +182,8 @@ class AgentTeamApp(App):
179
182
  node_data=new_node_data,
180
183
  history=history,
181
184
  pending_approval=pending_approval,
182
- all_agent_phases=self.store._agent_phases,
183
- all_team_phases=self.store._team_phases,
185
+ all_agent_statuses=self.store._agent_statuses,
186
+ all_team_statuses=self.store._team_statuses,
184
187
  task_plan=task_plan,
185
188
  task_statuses=task_statuses
186
189
  )