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
autobyteus/agent/agent.py CHANGED
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import AsyncIterator, Optional, List, Any, Dict, TYPE_CHECKING
5
5
 
6
6
  from autobyteus.agent.runtime.agent_runtime import AgentRuntime
7
- from autobyteus.agent.phases.phase_enum import AgentOperationalPhase
7
+ from autobyteus.agent.status.status_enum import AgentStatus
8
8
  from autobyteus.agent.message.agent_input_user_message import AgentInputUserMessage
9
9
  from autobyteus.agent.message.inter_agent_message import InterAgentMessage
10
10
  from autobyteus.agent.events import UserMessageReceivedEvent, InterAgentMessageReceivedEvent, ToolExecutionApprovalEvent, BaseEvent
@@ -81,8 +81,18 @@ class Agent:
81
81
  )
82
82
  await self._submit_event_to_runtime(approval_event)
83
83
 
84
- def get_current_phase(self) -> AgentOperationalPhase:
85
- return self._runtime.current_phase_property
84
+ def get_current_status(self) -> AgentStatus:
85
+ """
86
+ Returns the current status of the agent.
87
+
88
+ Returns:
89
+ AgentStatus: The current status of the agent.
90
+ """
91
+ # If the runtime hasn't started yet, we are uninitialized.
92
+ if not self._runtime:
93
+ return AgentStatus.UNINITIALIZED
94
+
95
+ return self._runtime.current_status_property
86
96
 
87
97
  @property
88
98
  def is_running(self) -> bool:
@@ -102,5 +112,5 @@ class Agent:
102
112
 
103
113
 
104
114
  def __repr__(self) -> str:
105
- phase_val = self._runtime.current_phase_property.value
106
- return f"<Agent agent_id='{self.agent_id}', current_phase='{phase_val}'>"
115
+ status_val = self._runtime.current_status_property.value
116
+ return f"<Agent agent_id='{self.agent_id}', current_status='{status_val}'>"
@@ -1,11 +1,10 @@
1
1
  # file: autobyteus/autobyteus/agent/bootstrap_steps/__init__.py
2
2
  """
3
3
  Defines individual, self-contained steps for the agent bootstrapping process.
4
- These steps are orchestrated by the BootstrapAgentEventHandler.
4
+ These steps are orchestrated by the BootstrapEventHandler.
5
5
  """
6
6
 
7
7
  from .base_bootstrap_step import BaseBootstrapStep
8
- from .agent_runtime_queue_initialization_step import AgentRuntimeQueueInitializationStep # UPDATED
9
8
  from .workspace_context_initialization_step import WorkspaceContextInitializationStep
10
9
  # ToolInitializationStep is no longer a bootstrap step.
11
10
  from .system_prompt_processing_step import SystemPromptProcessingStep
@@ -14,7 +13,6 @@ from .mcp_server_prewarming_step import McpServerPrewarmingStep
14
13
 
15
14
  __all__ = [
16
15
  "BaseBootstrapStep",
17
- "AgentRuntimeQueueInitializationStep", # UPDATED
18
16
  "WorkspaceContextInitializationStep",
19
17
  "SystemPromptProcessingStep",
20
18
  "McpServerPrewarmingStep",
@@ -1,24 +1,18 @@
1
1
  # file: autobyteus/autobyteus/agent/bootstrap_steps/agent_bootstrapper.py
2
2
  import logging
3
- from typing import TYPE_CHECKING, List, Optional
3
+ from typing import List, Optional
4
4
 
5
5
  from .base_bootstrap_step import BaseBootstrapStep
6
- from .agent_runtime_queue_initialization_step import AgentRuntimeQueueInitializationStep
7
6
  from .workspace_context_initialization_step import WorkspaceContextInitializationStep
8
7
  from .system_prompt_processing_step import SystemPromptProcessingStep
9
8
  from .mcp_server_prewarming_step import McpServerPrewarmingStep
10
- from autobyteus.agent.events import AgentReadyEvent
11
-
12
- if TYPE_CHECKING:
13
- from autobyteus.agent.context import AgentContext
14
- from autobyteus.agent.phases import AgentPhaseManager
15
9
 
16
10
  logger = logging.getLogger(__name__)
17
11
 
18
12
  class AgentBootstrapper:
19
13
  """
20
- Orchestrates the agent's bootstrapping process by executing a sequence of
21
- self-contained bootstrap steps.
14
+ Provides the ordered bootstrap steps for the agent.
15
+ Execution is driven by bootstrap lifecycle events.
22
16
  """
23
17
  def __init__(self, steps: Optional[List[BaseBootstrapStep]] = None):
24
18
  """
@@ -30,7 +24,6 @@ class AgentBootstrapper:
30
24
  """
31
25
  if steps is None:
32
26
  self.bootstrap_steps: List[BaseBootstrapStep] = [
33
- AgentRuntimeQueueInitializationStep(),
34
27
  WorkspaceContextInitializationStep(),
35
28
  McpServerPrewarmingStep(),
36
29
  SystemPromptProcessingStep(),
@@ -39,52 +32,3 @@ class AgentBootstrapper:
39
32
  else:
40
33
  self.bootstrap_steps = steps
41
34
  logger.debug(f"AgentBootstrapper initialized with {len(steps)} custom steps.")
42
-
43
- async def run(self, context: 'AgentContext', phase_manager: 'AgentPhaseManager') -> bool:
44
- """
45
- Executes the configured sequence of bootstrap steps.
46
-
47
- Args:
48
- context: The agent's context.
49
- phase_manager: The agent's phase manager.
50
-
51
- Returns:
52
- True if all steps completed successfully, False otherwise.
53
- """
54
- agent_id = context.agent_id
55
-
56
- # Set the agent phase to BOOTSTRAPPING and wait for any associated hooks.
57
- await phase_manager.notify_bootstrapping_started()
58
- logger.info(f"Agent '{agent_id}': AgentBootstrapper starting execution. Phase set to BOOTSTRAPPING.")
59
-
60
- for step_index, step_instance in enumerate(self.bootstrap_steps):
61
- step_name = step_instance.__class__.__name__
62
- logger.debug(f"Agent '{agent_id}': Executing bootstrap step {step_index + 1}/{len(self.bootstrap_steps)}: {step_name}")
63
-
64
- success = await step_instance.execute(context, phase_manager)
65
-
66
- if not success:
67
- error_message = f"Bootstrap step {step_name} failed."
68
- logger.error(f"Agent '{agent_id}': {error_message} Halting bootstrap process.")
69
- # The step itself is responsible for detailed error logging.
70
- # We are responsible for notifying the phase manager to set the agent to an error state.
71
- await phase_manager.notify_error_occurred(
72
- error_message=f"Critical bootstrap failure at {step_name}",
73
- error_details=f"Agent '{agent_id}' failed during bootstrap step '{step_name}'. Check logs for details."
74
- )
75
- return False
76
-
77
- logger.info(f"Agent '{agent_id}': All bootstrap steps completed successfully. Enqueuing AgentReadyEvent.")
78
- # After successful bootstrapping, enqueue the ready event.
79
- if context.state.input_event_queues:
80
- await context.state.input_event_queues.enqueue_internal_system_event(AgentReadyEvent())
81
- else: # pragma: no cover
82
- # Should not happen if AgentRuntimeQueueInitializationStep is present and successful
83
- logger.critical(f"Agent '{agent_id}': Bootstrap succeeded but input queues are not available to enqueue AgentReadyEvent.")
84
- await phase_manager.notify_error_occurred(
85
- error_message="Input queues unavailable after bootstrap",
86
- error_details=f"Agent '{agent_id}' bootstrap process seemed to succeed, but input event queues are missing."
87
- )
88
- return False
89
-
90
- return True
@@ -5,7 +5,6 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  if TYPE_CHECKING:
7
7
  from autobyteus.agent.context import AgentContext
8
- from autobyteus.agent.phases import AgentPhaseManager
9
8
 
10
9
  logger = logging.getLogger(__name__)
11
10
 
@@ -18,14 +17,12 @@ class BaseBootstrapStep(ABC):
18
17
 
19
18
  @abstractmethod
20
19
  async def execute(self,
21
- context: 'AgentContext',
22
- phase_manager: 'AgentPhaseManager') -> bool:
20
+ context: 'AgentContext') -> bool:
23
21
  """
24
22
  Executes the bootstrap step.
25
23
 
26
24
  Args:
27
25
  context: The agent's context, providing access to configuration and state.
28
- phase_manager: The agent's phase manager for notifying phase transitions.
29
26
 
30
27
  Returns:
31
28
  True if the step completed successfully, False otherwise.
@@ -9,7 +9,6 @@ from autobyteus.tools.tool_category import ToolCategory
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from autobyteus.agent.context import AgentContext
12
- from autobyteus.agent.phases import AgentPhaseManager
13
12
 
14
13
  logger = logging.getLogger(__name__)
15
14
 
@@ -25,8 +24,7 @@ class McpServerPrewarmingStep(BaseBootstrapStep):
25
24
  logger.debug("McpServerPrewarmingStep initialized.")
26
25
 
27
26
  async def execute(self,
28
- context: 'AgentContext',
29
- phase_manager: 'AgentPhaseManager') -> bool:
27
+ context: 'AgentContext') -> bool:
30
28
  agent_id = context.agent_id
31
29
  logger.info(f"Agent '{agent_id}': Executing McpServerPrewarmingStep.")
32
30
 
@@ -3,12 +3,11 @@ import logging
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  from .base_bootstrap_step import BaseBootstrapStep
6
- from autobyteus.agent.events import AgentErrorEvent
7
6
  from autobyteus.agent.system_prompt_processor.base_processor import BaseSystemPromptProcessor
7
+ from autobyteus.agent.events import AgentErrorEvent
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from autobyteus.agent.context import AgentContext
11
- from autobyteus.agent.phases import AgentPhaseManager
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -22,10 +21,9 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
22
21
  logger.debug("SystemPromptProcessingStep initialized.")
23
22
 
24
23
  async def execute(self,
25
- context: 'AgentContext',
26
- phase_manager: 'AgentPhaseManager') -> bool:
24
+ context: 'AgentContext') -> bool:
27
25
  agent_id = context.agent_id
28
- # The phase is now managed by the AgentBootstrapper.
26
+ # The status is managed by the bootstrap process.
29
27
  logger.info(f"Agent '{agent_id}': Executing SystemPromptProcessingStep.")
30
28
 
31
29
  try:
@@ -36,12 +34,22 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
36
34
 
37
35
  # If a specific system_prompt is not provided in AgentConfig, fall back
38
36
  # to the default system_message from the LLM's own configuration.
39
- current_system_prompt = context.config.system_prompt or llm_instance.config.system_message
37
+ base_system_prompt = context.config.system_prompt or llm_instance.config.system_message
40
38
  logger.debug(f"Agent '{agent_id}': Retrieved base system prompt.")
41
-
39
+
42
40
  processor_instances = context.config.system_prompt_processors
43
41
  tool_instances_for_processor = context.tool_instances
44
42
 
43
+ # --- Validation Section ---
44
+ if processor_instances:
45
+ for p in processor_instances:
46
+ if not isinstance(p, BaseSystemPromptProcessor):
47
+ error_message = f"Invalid system prompt processor configuration type: {type(p)}. Expected BaseSystemPromptProcessor."
48
+ logger.error(error_message)
49
+ raise TypeError(error_message)
50
+
51
+ current_system_prompt = base_system_prompt
52
+
45
53
  if not processor_instances:
46
54
  logger.debug(f"Agent '{agent_id}': No system prompt processors configured. Using system prompt as is.")
47
55
  else:
@@ -51,11 +59,6 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
51
59
  logger.debug(f"Agent '{agent_id}': Found {len(sorted_processors)} configured system prompt processors. Applying sequentially in order: {processor_names}")
52
60
 
53
61
  for processor_instance in sorted_processors:
54
- if not isinstance(processor_instance, BaseSystemPromptProcessor):
55
- error_message = f"Agent '{agent_id}': Invalid system prompt processor configuration type: {type(processor_instance)}. Expected BaseSystemPromptProcessor."
56
- logger.error(error_message)
57
- raise TypeError(error_message)
58
-
59
62
  processor_name = processor_instance.get_name()
60
63
  try:
61
64
  logger.debug(f"Agent '{agent_id}': Applying system prompt processor '{processor_name}'.")
@@ -93,7 +96,7 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
93
96
  error_message = f"Agent '{agent_id}': Critical failure during system prompt processing step: {e}"
94
97
  logger.error(error_message, exc_info=True)
95
98
  if context.state.input_event_queues:
96
- await context.input_event_queues.enqueue_internal_system_event(
99
+ await context.state.input_event_queues.enqueue_internal_system_event(
97
100
  AgentErrorEvent(error_message=error_message, exception_details=str(e))
98
101
  )
99
102
  return False
@@ -6,7 +6,6 @@ from .base_bootstrap_step import BaseBootstrapStep
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from autobyteus.agent.context import AgentContext
9
- from autobyteus.agent.phases import AgentPhaseManager
10
9
 
11
10
  logger = logging.getLogger(__name__)
12
11
 
@@ -19,8 +18,7 @@ class WorkspaceContextInitializationStep(BaseBootstrapStep):
19
18
  logger.debug("WorkspaceContextInitializationStep initialized.")
20
19
 
21
20
  async def execute(self,
22
- context: 'AgentContext',
23
- phase_manager: 'AgentPhaseManager') -> bool:
21
+ context: 'AgentContext') -> bool:
24
22
  agent_id = context.agent_id
25
23
  logger.info(f"Agent '{agent_id}': Executing WorkspaceContextInitializationStep.")
26
24
 
@@ -43,5 +41,5 @@ class WorkspaceContextInitializationStep(BaseBootstrapStep):
43
41
  error_message = f"Agent '{agent_id}': Critical failure during WorkspaceContextInitializationStep: {e}"
44
42
  logger.error(error_message, exc_info=True)
45
43
  # No easy way to enqueue an error event here if queues aren't even initialized yet.
46
- # The failure of a bootstrap step is handled by the bootstrapper, which will log and set error phase.
44
+ # The failure of a bootstrap step is handled by the bootstrapper, which will log and set error status.
47
45
  return False
@@ -4,30 +4,33 @@ import copy
4
4
  from typing import List, Optional, Union, Tuple, TYPE_CHECKING, Dict, Any
5
5
 
6
6
  # Correctly import the new master processor and the base class
7
- from autobyteus.agent.system_prompt_processor import ToolManifestInjectorProcessor, BaseSystemPromptProcessor
8
- from autobyteus.agent.llm_response_processor import ProviderAwareToolUsageProcessor, BaseLLMResponseProcessor
7
+ from autobyteus.agent.system_prompt_processor import ToolManifestInjectorProcessor, BaseSystemPromptProcessor, AvailableSkillsProcessor
8
+ from autobyteus.agent.llm_response_processor import BaseLLMResponseProcessor
9
+ from autobyteus.utils.tool_call_format import resolve_tool_call_format
9
10
 
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from autobyteus.tools.base_tool import BaseTool
13
14
  from autobyteus.agent.input_processor import BaseAgentUserInputMessageProcessor
14
15
  from autobyteus.agent.tool_execution_result_processor import BaseToolExecutionResultProcessor
16
+ from autobyteus.agent.tool_invocation_preprocessor import BaseToolInvocationPreprocessor
15
17
  from autobyteus.llm.base_llm import BaseLLM
16
18
  from autobyteus.agent.workspace.base_workspace import BaseAgentWorkspace
17
- from autobyteus.agent.hooks.base_phase_hook import BasePhaseHook
19
+ from autobyteus.agent.lifecycle import BaseLifecycleEventProcessor
18
20
 
19
21
  logger = logging.getLogger(__name__)
20
22
 
23
+
21
24
  class AgentConfig:
22
25
  """
23
26
  Represents the complete, static configuration for an agent instance.
24
27
  This is the single source of truth for an agent's definition, including
25
28
  its identity, capabilities, and default behaviors.
26
29
  """
27
- # Use the new ProviderAwareToolUsageProcessor as the default
28
- DEFAULT_LLM_RESPONSE_PROCESSORS = [ProviderAwareToolUsageProcessor()]
30
+ # Default to no LLM response processors; tool parsing happens during streaming.
31
+ DEFAULT_LLM_RESPONSE_PROCESSORS: List['BaseLLMResponseProcessor'] = []
29
32
  # Use the new, single, unified processor as the default
30
- DEFAULT_SYSTEM_PROMPT_PROCESSORS = [ToolManifestInjectorProcessor()]
33
+ DEFAULT_SYSTEM_PROMPT_PROCESSORS = [ToolManifestInjectorProcessor(), AvailableSkillsProcessor()]
31
34
 
32
35
  def __init__(self,
33
36
  name: str,
@@ -37,14 +40,15 @@ class AgentConfig:
37
40
  system_prompt: Optional[str] = None,
38
41
  tools: Optional[List['BaseTool']] = None,
39
42
  auto_execute_tools: bool = True,
40
- use_xml_tool_format: bool = False,
41
43
  input_processors: Optional[List['BaseAgentUserInputMessageProcessor']] = None,
42
44
  llm_response_processors: Optional[List['BaseLLMResponseProcessor']] = None,
43
45
  system_prompt_processors: Optional[List['BaseSystemPromptProcessor']] = None,
44
46
  tool_execution_result_processors: Optional[List['BaseToolExecutionResultProcessor']] = None,
47
+ tool_invocation_preprocessors: Optional[List['BaseToolInvocationPreprocessor']] = None,
45
48
  workspace: Optional['BaseAgentWorkspace'] = None,
46
- phase_hooks: Optional[List['BasePhaseHook']] = None,
47
- initial_custom_data: Optional[Dict[str, Any]] = None):
49
+ lifecycle_processors: Optional[List['BaseLifecycleEventProcessor']] = None,
50
+ initial_custom_data: Optional[Dict[str, Any]] = None,
51
+ skills: Optional[List[str]] = None):
48
52
  """
49
53
  Initializes the AgentConfig.
50
54
 
@@ -58,16 +62,15 @@ class AgentConfig:
58
62
  llm_instance's config will be used as the base.
59
63
  tools: An optional list of pre-initialized tool instances (subclasses of BaseTool).
60
64
  auto_execute_tools: If True, the agent will execute tools without approval.
61
- use_xml_tool_format: If True, forces the agent to use XML format for tool
62
- definitions and parsing, overriding provider defaults.
63
65
  input_processors: A list of input processor instances.
64
66
  llm_response_processors: A list of LLM response processor instances.
65
67
  system_prompt_processors: A list of system prompt processor instances.
66
68
  tool_execution_result_processors: A list of tool execution result processor instances.
67
69
  workspace: An optional pre-initialized workspace instance for the agent.
68
- phase_hooks: An optional list of phase transition hook instances.
70
+ lifecycle_processors: An optional list of lifecycle processor instances.
69
71
  initial_custom_data: An optional dictionary of data to pre-populate
70
72
  the agent's runtime state `custom_data`.
73
+ skills: An optional list of skill names or paths to be preloaded for this agent.
71
74
  """
72
75
  self.name = name
73
76
  self.role = role
@@ -77,15 +80,34 @@ class AgentConfig:
77
80
  self.tools = tools or []
78
81
  self.workspace = workspace
79
82
  self.auto_execute_tools = auto_execute_tools
80
- self.use_xml_tool_format = use_xml_tool_format
81
83
  self.input_processors = input_processors or []
82
84
  self.llm_response_processors = llm_response_processors if llm_response_processors is not None else list(self.DEFAULT_LLM_RESPONSE_PROCESSORS)
83
- self.system_prompt_processors = system_prompt_processors if system_prompt_processors is not None else list(self.DEFAULT_SYSTEM_PROMPT_PROCESSORS)
85
+
86
+ # Initialize processors first
87
+ default_processors = self.system_prompt_processors = system_prompt_processors if system_prompt_processors is not None else list(self.DEFAULT_SYSTEM_PROMPT_PROCESSORS)
88
+
84
89
  self.tool_execution_result_processors = tool_execution_result_processors or []
85
- self.phase_hooks = phase_hooks or []
90
+ self.tool_invocation_preprocessors = tool_invocation_preprocessors or []
91
+ self.lifecycle_processors = lifecycle_processors or []
86
92
  self.initial_custom_data = initial_custom_data
93
+ self.skills = skills or []
94
+
95
+ # Filter out ToolManifestInjectorProcessor if in API_TOOL_CALL mode
96
+ tool_call_format = resolve_tool_call_format()
97
+ if tool_call_format == "api_tool_call":
98
+ self.system_prompt_processors = [
99
+ p for p in default_processors
100
+ if not isinstance(p, ToolManifestInjectorProcessor)
101
+ ]
102
+ else:
103
+ self.system_prompt_processors = default_processors
87
104
 
88
- logger.debug(f"AgentConfig created for name '{self.name}', role '{self.role}'. XML tool format override: {self.use_xml_tool_format}")
105
+ logger.debug(
106
+ "AgentConfig created for name='%s', role='%s'. Tool call format: %s",
107
+ self.name,
108
+ self.role,
109
+ tool_call_format,
110
+ )
89
111
 
90
112
  def copy(self) -> 'AgentConfig':
91
113
  """
@@ -102,15 +124,16 @@ class AgentConfig:
102
124
  system_prompt=self.system_prompt,
103
125
  tools=self.tools.copy(), # Shallow copy the list, but reference the original tool instances
104
126
  auto_execute_tools=self.auto_execute_tools,
105
- use_xml_tool_format=self.use_xml_tool_format,
106
127
  input_processors=self.input_processors.copy(), # Shallow copy the list
107
128
  llm_response_processors=self.llm_response_processors.copy(), # Shallow copy the list
108
129
  system_prompt_processors=self.system_prompt_processors.copy(), # Shallow copy the list
109
130
  tool_execution_result_processors=self.tool_execution_result_processors.copy(), # Shallow copy the list
131
+ tool_invocation_preprocessors=self.tool_invocation_preprocessors.copy(),
110
132
  workspace=self.workspace, # Pass by reference, do not copy
111
- phase_hooks=self.phase_hooks.copy(), # Shallow copy the list
112
- initial_custom_data=copy.deepcopy(self.initial_custom_data) # Deep copy for simple data
133
+ lifecycle_processors=self.lifecycle_processors.copy(), # Shallow copy the list
134
+ initial_custom_data=copy.deepcopy(self.initial_custom_data), # Deep copy for simple data
135
+ skills=self.skills.copy(), # Shallow copy the list
113
136
  )
114
137
 
115
138
  def __repr__(self) -> str:
116
- return (f"AgentConfig(name='{self.name}', role='{self.role}', llm_instance='{self.llm_instance.__class__.__name__}', workspace_configured={self.workspace is not None})")
139
+ return (f"AgentConfig(name='{self.name}', role='{self.role}', llm_instance='{self.llm_instance.__class__.__name__}', workspace_configured={self.workspace is not None}, skills={self.skills})")
@@ -1,8 +1,8 @@
1
1
  # file: autobyteus/autobyteus/agent/context/agent_context.py
2
2
  import logging
3
- from typing import TYPE_CHECKING, List, Dict, Any, Optional
3
+ from typing import TYPE_CHECKING, Dict, Any, Optional
4
4
 
5
- from autobyteus.agent.phases import AgentOperationalPhase
5
+
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from .agent_config import AgentConfig
@@ -11,9 +11,13 @@ if TYPE_CHECKING:
11
11
  from autobyteus.tools.base_tool import BaseTool
12
12
  from autobyteus.agent.events.agent_input_event_queue_manager import AgentInputEventQueueManager
13
13
  from autobyteus.agent.tool_invocation import ToolInvocation
14
+ from autobyteus.agent.events.event_store import AgentEventStore
15
+ from autobyteus.agent.status.status_deriver import AgentStatusDeriver
14
16
  # LLMConfig no longer needed here
15
17
  from autobyteus.agent.workspace.base_workspace import BaseAgentWorkspace
16
- from autobyteus.agent.phases import AgentPhaseManager
18
+
19
+ from autobyteus.agent.status.status_enum import AgentStatus
20
+ from autobyteus.agent.status.manager import AgentStatusManager
17
21
 
18
22
  logger = logging.getLogger(__name__)
19
23
 
@@ -65,22 +69,26 @@ class AgentContext:
65
69
  return self.state.input_event_queues
66
70
 
67
71
  @property
68
- def current_phase(self) -> 'AgentOperationalPhase':
69
- return self.state.current_phase
72
+ def current_status(self) -> 'AgentStatus':
73
+ return self.state.current_status
74
+
75
+ @current_status.setter
76
+ def current_status(self, value: 'AgentStatus'):
77
+ if not isinstance(value, AgentStatus): # pragma: no cover
78
+ raise TypeError(f"current_status must be an AgentStatus instance. Got {type(value)}")
79
+ self.state.current_status = value
70
80
 
71
- @current_phase.setter
72
- def current_phase(self, value: 'AgentOperationalPhase'):
73
- if not isinstance(value, AgentOperationalPhase): # pragma: no cover
74
- raise TypeError(f"current_phase must be an AgentOperationalPhase instance. Got {type(value)}")
75
- self.state.current_phase = value
81
+ @property
82
+ def status_manager(self) -> Optional['AgentStatusManager']:
83
+ return self.state.status_manager_ref
76
84
 
77
85
  @property
78
- def phase_manager(self) -> Optional['AgentPhaseManager']:
79
- return self.state.phase_manager_ref
86
+ def event_store(self) -> Optional['AgentEventStore']:
87
+ return self.state.event_store
80
88
 
81
89
  @property
82
- def conversation_history(self) -> List[Dict[str, Any]]:
83
- return self.state.conversation_history
90
+ def status_deriver(self) -> Optional['AgentStatusDeriver']:
91
+ return self.state.status_deriver
84
92
 
85
93
  @property
86
94
  def pending_tool_approvals(self) -> Dict[str, 'ToolInvocation']:
@@ -104,9 +112,6 @@ class AgentContext:
104
112
 
105
113
  # final_llm_config_for_creation property removed
106
114
 
107
- def add_message_to_history(self, message: Dict[str, Any]) -> None:
108
- self.state.add_message_to_history(message)
109
-
110
115
  def get_tool(self, tool_name: str) -> Optional['BaseTool']:
111
116
  tool = self.tool_instances.get(tool_name)
112
117
  if not tool: # pragma: no cover
@@ -123,7 +128,7 @@ class AgentContext:
123
128
  def __repr__(self) -> str:
124
129
  input_q_status = "Initialized" if self.state.input_event_queues is not None else "Pending Init"
125
130
  return (f"AgentContext(agent_id='{self.agent_id}', "
126
- f"current_phase='{self.state.current_phase.value}', "
131
+ f"current_status='{self.state.current_status.value}', "
127
132
  f"llm_initialized={self.state.llm_instance is not None}, "
128
133
  f"tools_initialized={self.state.tool_instances is not None}, "
129
134
  f"input_queues_status='{input_q_status}')")
@@ -1,35 +1,38 @@
1
1
  # file: autobyteus/autobyteus/agent/context/agent_runtime_state.py
2
2
  import logging
3
- from typing import List, Dict, Any, Optional, TYPE_CHECKING
3
+ from typing import Dict, Any, Optional, TYPE_CHECKING
4
4
 
5
5
  from autobyteus.agent.events.agent_input_event_queue_manager import AgentInputEventQueueManager
6
+ from autobyteus.agent.events.event_store import AgentEventStore
7
+ from autobyteus.agent.status.status_deriver import AgentStatusDeriver
6
8
  # AgentOutputDataManager is no longer part of AgentRuntimeState
7
9
  # from autobyteus.agent.events.agent_output_data_manager import AgentOutputDataManager
8
10
 
9
11
  from autobyteus.llm.base_llm import BaseLLM
10
- from autobyteus.agent.phases import AgentOperationalPhase
12
+ from autobyteus.agent.status.status_enum import AgentStatus
11
13
  from autobyteus.agent.workspace.base_workspace import BaseAgentWorkspace
12
14
  from autobyteus.agent.tool_invocation import ToolInvocation
13
15
  # LLMConfig is no longer needed here
14
16
  # from autobyteus.llm.utils.llm_config import LLMConfig
17
+ from autobyteus.task_management.todo_list import ToDoList
15
18
 
16
19
  if TYPE_CHECKING:
17
- from autobyteus.agent.phases import AgentPhaseManager
20
+ from autobyteus.agent.status.manager import AgentStatusManager
18
21
  from autobyteus.tools.base_tool import BaseTool
19
22
  from autobyteus.agent.tool_invocation import ToolInvocationTurn
23
+ from autobyteus.memory.memory_manager import MemoryManager
20
24
 
21
25
  logger = logging.getLogger(__name__)
22
26
 
23
27
  class AgentRuntimeState:
24
28
  """
25
29
  Encapsulates the dynamic, stateful data of an agent instance.
26
- Input event queues are initialized by the AgentWorker via a bootstrap step.
30
+ Input event queues are initialized by the AgentWorker during minimal runtime init.
27
31
  Output data is now handled by emitting events via AgentExternalEventNotifier.
28
32
  """
29
33
  def __init__(self,
30
34
  agent_id: str,
31
35
  workspace: Optional[BaseAgentWorkspace] = None,
32
- conversation_history: Optional[List[Dict[str, Any]]] = None,
33
36
  custom_data: Optional[Dict[str, Any]] = None):
34
37
  if not agent_id or not isinstance(agent_id, str):
35
38
  raise ValueError("AgentRuntimeState requires a non-empty string 'agent_id'.")
@@ -37,34 +40,35 @@ class AgentRuntimeState:
37
40
  raise TypeError(f"AgentRuntimeState 'workspace' must be a BaseAgentWorkspace or None. Got {type(workspace)}")
38
41
 
39
42
  self.agent_id: str = agent_id
40
- self.current_phase: AgentOperationalPhase = AgentOperationalPhase.UNINITIALIZED
43
+ self.current_status: AgentStatus = AgentStatus.UNINITIALIZED
41
44
  self.llm_instance: Optional[BaseLLM] = None
42
45
  self.tool_instances: Optional[Dict[str, 'BaseTool']] = None
43
46
 
44
47
  self.input_event_queues: Optional[AgentInputEventQueueManager] = None
48
+ self.event_store: Optional[AgentEventStore] = None
49
+ self.status_deriver: Optional[AgentStatusDeriver] = None
45
50
  # REMOVED: self.output_data_queues attribute
46
51
 
47
52
  self.workspace: Optional[BaseAgentWorkspace] = workspace
48
- self.conversation_history: List[Dict[str, Any]] = conversation_history or []
49
53
  self.pending_tool_approvals: Dict[str, ToolInvocation] = {}
50
54
  self.custom_data: Dict[str, Any] = custom_data or {}
51
55
 
52
56
  # NEW: State for multi-tool call invocation turns, with a very explicit name.
53
57
  self.active_multi_tool_call_turn: Optional['ToolInvocationTurn'] = None
54
58
 
59
+ # NEW: State for the agent's personal ToDoList
60
+ self.todo_list: Optional[ToDoList] = None
61
+
62
+ # NEW: Memory manager and active turn tracking
63
+ self.memory_manager: Optional["MemoryManager"] = None
64
+ self.active_turn_id: Optional[str] = None
65
+
55
66
  self.processed_system_prompt: Optional[str] = None
56
67
  # self.final_llm_config_for_creation removed
57
68
 
58
- self.phase_manager_ref: Optional['AgentPhaseManager'] = None
69
+ self.status_manager_ref: Optional['AgentStatusManager'] = None
59
70
 
60
- logger.info(f"AgentRuntimeState initialized for agent_id '{self.agent_id}'. Initial phase: {self.current_phase.value}. Workspace linked. InputQueues pending initialization. Output data via notifier.")
61
-
62
- def add_message_to_history(self, message: Dict[str, Any]) -> None:
63
- if not isinstance(message, dict) or "role" not in message: # pragma: no cover
64
- logger.warning(f"Attempted to add malformed message to history for agent '{self.agent_id}': {message}")
65
- return
66
- self.conversation_history.append(message)
67
- logger.debug(f"Message added to history for agent '{self.agent_id}': role={message['role']}")
71
+ logger.info(f"AgentRuntimeState initialized for agent_id '{self.agent_id}'. Initial status: {self.current_status.value}. Workspace linked. InputQueues pending initialization. Output data via notifier.")
68
72
 
69
73
  def store_pending_tool_invocation(self, invocation: ToolInvocation) -> None:
70
74
  if not isinstance(invocation, ToolInvocation) or not invocation.id: # pragma: no cover
@@ -82,14 +86,14 @@ class AgentRuntimeState:
82
86
  return invocation
83
87
 
84
88
  def __repr__(self) -> str:
85
- phase_repr = self.current_phase.value
89
+ # status_repr removed or renamed
86
90
  llm_status = "Initialized" if self.llm_instance else "Not Initialized"
87
91
  tools_status = f"{len(self.tool_instances)} Initialized" if self.tool_instances is not None else "Not Initialized"
88
92
  input_queues_status = "Initialized" if self.input_event_queues else "Not Initialized"
89
93
  # REMOVED output_queues_status from repr
90
94
  active_turn_status = "Active" if self.active_multi_tool_call_turn else "Inactive"
91
- return (f"AgentRuntimeState(agent_id='{self.agent_id}', current_phase='{phase_repr}', "
95
+ return (f"AgentRuntimeState(agent_id='{self.agent_id}', current_status='{self.current_status.value}', "
92
96
  f"llm_status='{llm_status}', tools_status='{tools_status}', "
93
97
  f"input_queues_status='{input_queues_status}', "
94
- f"pending_approvals={len(self.pending_tool_approvals)}, history_len={len(self.conversation_history)}, "
98
+ f"pending_approvals={len(self.pending_tool_approvals)}, "
95
99
  f"multi_tool_call_turn='{active_turn_status}')")