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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. autobyteus/agent/agent.py +15 -5
  2. autobyteus/agent/bootstrap_steps/__init__.py +3 -3
  3. autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +5 -59
  4. autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
  5. autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
  6. autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
  7. autobyteus/agent/bootstrap_steps/working_context_snapshot_restore_step.py +38 -0
  8. autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
  9. autobyteus/agent/context/agent_config.py +47 -20
  10. autobyteus/agent/context/agent_context.py +23 -18
  11. autobyteus/agent/context/agent_runtime_state.py +21 -19
  12. autobyteus/agent/events/__init__.py +16 -1
  13. autobyteus/agent/events/agent_events.py +43 -3
  14. autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
  15. autobyteus/agent/events/event_store.py +57 -0
  16. autobyteus/agent/events/notifiers.py +69 -59
  17. autobyteus/agent/events/worker_event_dispatcher.py +21 -64
  18. autobyteus/agent/factory/agent_factory.py +83 -6
  19. autobyteus/agent/handlers/__init__.py +2 -0
  20. autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
  21. autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
  22. autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
  23. autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
  24. autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
  25. autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
  26. autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
  27. autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
  28. autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
  29. autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
  30. autobyteus/agent/input_processor/memory_ingest_input_processor.py +44 -0
  31. autobyteus/agent/lifecycle/__init__.py +12 -0
  32. autobyteus/agent/lifecycle/base_processor.py +109 -0
  33. autobyteus/agent/lifecycle/events.py +35 -0
  34. autobyteus/agent/lifecycle/processor_definition.py +36 -0
  35. autobyteus/agent/lifecycle/processor_registry.py +106 -0
  36. autobyteus/agent/llm_request_assembler.py +98 -0
  37. autobyteus/agent/llm_response_processor/__init__.py +1 -8
  38. autobyteus/agent/message/context_file_type.py +1 -1
  39. autobyteus/agent/runtime/agent_runtime.py +29 -21
  40. autobyteus/agent/runtime/agent_worker.py +98 -19
  41. autobyteus/agent/shutdown_steps/__init__.py +2 -0
  42. autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
  43. autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
  44. autobyteus/agent/status/__init__.py +14 -0
  45. autobyteus/agent/status/manager.py +93 -0
  46. autobyteus/agent/status/status_deriver.py +96 -0
  47. autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
  48. autobyteus/agent/status/status_update_utils.py +73 -0
  49. autobyteus/agent/streaming/__init__.py +52 -5
  50. autobyteus/agent/streaming/adapters/__init__.py +18 -0
  51. autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
  52. autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
  53. autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
  54. autobyteus/agent/streaming/agent_event_stream.py +3 -183
  55. autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
  56. autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
  57. autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
  58. autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
  59. autobyteus/agent/streaming/events/__init__.py +6 -0
  60. autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
  61. autobyteus/agent/streaming/events/stream_events.py +141 -0
  62. autobyteus/agent/streaming/handlers/__init__.py +15 -0
  63. autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
  64. autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
  65. autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
  66. autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
  67. autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
  68. autobyteus/agent/streaming/parser/__init__.py +61 -0
  69. autobyteus/agent/streaming/parser/event_emitter.py +181 -0
  70. autobyteus/agent/streaming/parser/events.py +4 -0
  71. autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
  72. autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
  73. autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
  74. autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
  75. autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
  76. autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
  77. autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
  78. autobyteus/agent/streaming/parser/parser_context.py +227 -0
  79. autobyteus/agent/streaming/parser/parser_factory.py +132 -0
  80. autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
  81. autobyteus/agent/streaming/parser/state_factory.py +62 -0
  82. autobyteus/agent/streaming/parser/states/__init__.py +1 -0
  83. autobyteus/agent/streaming/parser/states/base_state.py +60 -0
  84. autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
  85. autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
  86. autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
  87. autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
  88. autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
  89. autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
  90. autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
  91. autobyteus/agent/streaming/parser/states/text_state.py +78 -0
  92. autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
  93. autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
  94. autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
  95. autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
  96. autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
  97. autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
  98. autobyteus/agent/streaming/parser/strategies/base.py +24 -0
  99. autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
  100. autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
  101. autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
  102. autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
  103. autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
  104. autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
  105. autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
  106. autobyteus/agent/streaming/parser/tool_constants.py +7 -0
  107. autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
  108. autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
  109. autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
  110. autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
  111. autobyteus/agent/streaming/queue_streamer.py +3 -57
  112. autobyteus/agent/streaming/segments/__init__.py +5 -0
  113. autobyteus/agent/streaming/segments/segment_events.py +82 -0
  114. autobyteus/agent/streaming/stream_event_payloads.py +2 -223
  115. autobyteus/agent/streaming/stream_events.py +3 -140
  116. autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
  117. autobyteus/agent/streaming/streaming_response_handler.py +4 -0
  118. autobyteus/agent/streaming/streams/__init__.py +5 -0
  119. autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
  120. autobyteus/agent/streaming/utils/__init__.py +5 -0
  121. autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
  122. autobyteus/agent/system_prompt_processor/__init__.py +2 -0
  123. autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
  124. autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
  125. autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
  126. autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
  127. autobyteus/agent/token_budget.py +56 -0
  128. autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
  129. autobyteus/agent/tool_invocation.py +16 -40
  130. autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
  131. autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
  132. autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
  133. autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
  134. autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
  135. autobyteus/agent/utils/wait_for_idle.py +12 -14
  136. autobyteus/agent/workspace/base_workspace.py +6 -27
  137. autobyteus/agent_team/agent_team.py +3 -3
  138. autobyteus/agent_team/agent_team_builder.py +1 -41
  139. autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
  140. autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
  141. autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
  142. autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
  143. autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
  144. autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +1 -2
  145. autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +4 -4
  146. autobyteus/agent_team/context/agent_team_config.py +6 -3
  147. autobyteus/agent_team/context/agent_team_context.py +25 -3
  148. autobyteus/agent_team/context/agent_team_runtime_state.py +9 -6
  149. autobyteus/agent_team/events/__init__.py +11 -0
  150. autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
  151. autobyteus/agent_team/events/agent_team_events.py +16 -0
  152. autobyteus/agent_team/events/event_store.py +57 -0
  153. autobyteus/agent_team/factory/agent_team_factory.py +8 -0
  154. autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
  155. autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
  156. autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
  157. autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
  158. autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
  159. autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
  160. autobyteus/agent_team/status/__init__.py +14 -0
  161. autobyteus/agent_team/status/agent_team_status.py +18 -0
  162. autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
  163. autobyteus/agent_team/status/status_deriver.py +62 -0
  164. autobyteus/agent_team/status/status_update_utils.py +42 -0
  165. autobyteus/agent_team/streaming/__init__.py +2 -2
  166. autobyteus/agent_team/streaming/agent_team_event_notifier.py +6 -6
  167. autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +4 -4
  168. autobyteus/agent_team/streaming/agent_team_stream_events.py +3 -3
  169. autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
  170. autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
  171. autobyteus/agent_team/task_notification/task_notification_mode.py +19 -0
  172. autobyteus/agent_team/utils/wait_for_idle.py +4 -4
  173. autobyteus/cli/agent_cli.py +18 -10
  174. autobyteus/cli/agent_team_tui/app.py +14 -11
  175. autobyteus/cli/agent_team_tui/state.py +13 -15
  176. autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
  177. autobyteus/cli/agent_team_tui/widgets/focus_pane.py +143 -36
  178. autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
  179. autobyteus/cli/agent_team_tui/widgets/shared.py +25 -25
  180. autobyteus/cli/cli_display.py +193 -44
  181. autobyteus/cli/workflow_tui/app.py +9 -10
  182. autobyteus/cli/workflow_tui/state.py +14 -16
  183. autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
  184. autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
  185. autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
  186. autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
  187. autobyteus/clients/autobyteus_client.py +94 -1
  188. autobyteus/events/event_types.py +11 -18
  189. autobyteus/llm/api/autobyteus_llm.py +33 -29
  190. autobyteus/llm/api/claude_llm.py +142 -36
  191. autobyteus/llm/api/gemini_llm.py +163 -59
  192. autobyteus/llm/api/grok_llm.py +1 -1
  193. autobyteus/llm/api/minimax_llm.py +26 -0
  194. autobyteus/llm/api/mistral_llm.py +113 -87
  195. autobyteus/llm/api/ollama_llm.py +9 -42
  196. autobyteus/llm/api/openai_compatible_llm.py +127 -91
  197. autobyteus/llm/api/openai_llm.py +3 -3
  198. autobyteus/llm/api/openai_responses_llm.py +324 -0
  199. autobyteus/llm/api/zhipu_llm.py +21 -2
  200. autobyteus/llm/autobyteus_provider.py +70 -60
  201. autobyteus/llm/base_llm.py +85 -81
  202. autobyteus/llm/converters/__init__.py +14 -0
  203. autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
  204. autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
  205. autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
  206. autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
  207. autobyteus/llm/extensions/base_extension.py +6 -12
  208. autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
  209. autobyteus/llm/llm_factory.py +282 -204
  210. autobyteus/llm/lmstudio_provider.py +60 -49
  211. autobyteus/llm/models.py +35 -2
  212. autobyteus/llm/ollama_provider.py +60 -49
  213. autobyteus/llm/ollama_provider_resolver.py +0 -1
  214. autobyteus/llm/prompt_renderers/__init__.py +19 -0
  215. autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
  216. autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
  217. autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
  218. autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
  219. autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
  220. autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
  221. autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
  222. autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
  223. autobyteus/llm/providers.py +1 -3
  224. autobyteus/llm/token_counter/claude_token_counter.py +56 -25
  225. autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
  226. autobyteus/llm/token_counter/openai_token_counter.py +24 -5
  227. autobyteus/llm/token_counter/token_counter_factory.py +12 -5
  228. autobyteus/llm/utils/llm_config.py +6 -12
  229. autobyteus/llm/utils/media_payload_formatter.py +27 -20
  230. autobyteus/llm/utils/messages.py +55 -3
  231. autobyteus/llm/utils/response_types.py +3 -0
  232. autobyteus/llm/utils/tool_call_delta.py +31 -0
  233. autobyteus/memory/__init__.py +35 -0
  234. autobyteus/memory/compaction/__init__.py +9 -0
  235. autobyteus/memory/compaction/compaction_result.py +8 -0
  236. autobyteus/memory/compaction/compactor.py +89 -0
  237. autobyteus/memory/compaction/summarizer.py +11 -0
  238. autobyteus/memory/compaction_snapshot_builder.py +84 -0
  239. autobyteus/memory/memory_manager.py +205 -0
  240. autobyteus/memory/models/__init__.py +14 -0
  241. autobyteus/memory/models/episodic_item.py +41 -0
  242. autobyteus/memory/models/memory_types.py +7 -0
  243. autobyteus/memory/models/raw_trace_item.py +79 -0
  244. autobyteus/memory/models/semantic_item.py +41 -0
  245. autobyteus/memory/models/tool_interaction.py +20 -0
  246. autobyteus/memory/path_resolver.py +27 -0
  247. autobyteus/memory/policies/__init__.py +5 -0
  248. autobyteus/memory/policies/compaction_policy.py +16 -0
  249. autobyteus/memory/restore/__init__.py +1 -0
  250. autobyteus/memory/restore/working_context_snapshot_bootstrapper.py +61 -0
  251. autobyteus/memory/retrieval/__init__.py +7 -0
  252. autobyteus/memory/retrieval/memory_bundle.py +11 -0
  253. autobyteus/memory/retrieval/retriever.py +13 -0
  254. autobyteus/memory/store/__init__.py +9 -0
  255. autobyteus/memory/store/base_store.py +14 -0
  256. autobyteus/memory/store/file_store.py +98 -0
  257. autobyteus/memory/store/working_context_snapshot_store.py +28 -0
  258. autobyteus/memory/tool_interaction_builder.py +46 -0
  259. autobyteus/memory/turn_tracker.py +9 -0
  260. autobyteus/memory/working_context_snapshot.py +69 -0
  261. autobyteus/memory/working_context_snapshot_serializer.py +135 -0
  262. autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
  263. autobyteus/multimedia/audio/api/gemini_audio_client.py +109 -16
  264. autobyteus/multimedia/audio/audio_client_factory.py +47 -9
  265. autobyteus/multimedia/audio/audio_model.py +2 -1
  266. autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
  267. autobyteus/multimedia/image/api/gemini_image_client.py +39 -17
  268. autobyteus/multimedia/image/api/openai_image_client.py +125 -43
  269. autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
  270. autobyteus/multimedia/image/image_client_factory.py +47 -15
  271. autobyteus/multimedia/image/image_model.py +5 -2
  272. autobyteus/multimedia/providers.py +3 -2
  273. autobyteus/skills/loader.py +71 -0
  274. autobyteus/skills/model.py +11 -0
  275. autobyteus/skills/registry.py +70 -0
  276. autobyteus/task_management/tools/todo_tools/add_todo.py +2 -2
  277. autobyteus/task_management/tools/todo_tools/create_todo_list.py +2 -2
  278. autobyteus/task_management/tools/todo_tools/update_todo_status.py +2 -2
  279. autobyteus/tools/__init__.py +34 -47
  280. autobyteus/tools/base_tool.py +7 -0
  281. autobyteus/tools/file/__init__.py +2 -6
  282. autobyteus/tools/file/patch_file.py +149 -0
  283. autobyteus/tools/file/read_file.py +36 -5
  284. autobyteus/tools/file/write_file.py +4 -1
  285. autobyteus/tools/functional_tool.py +43 -6
  286. autobyteus/tools/mcp/__init__.py +2 -0
  287. autobyteus/tools/mcp/config_service.py +5 -1
  288. autobyteus/tools/mcp/server/__init__.py +2 -0
  289. autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
  290. autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
  291. autobyteus/tools/mcp/server_instance_manager.py +8 -1
  292. autobyteus/tools/mcp/types.py +61 -0
  293. autobyteus/tools/multimedia/audio_tools.py +70 -17
  294. autobyteus/tools/multimedia/download_media_tool.py +18 -4
  295. autobyteus/tools/multimedia/image_tools.py +246 -62
  296. autobyteus/tools/operation_executor/journal_manager.py +107 -0
  297. autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
  298. autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
  299. autobyteus/tools/operation_executor/operation_executor.py +58 -0
  300. autobyteus/tools/registry/tool_definition.py +43 -2
  301. autobyteus/tools/skill/load_skill.py +50 -0
  302. autobyteus/tools/terminal/__init__.py +45 -0
  303. autobyteus/tools/terminal/ansi_utils.py +32 -0
  304. autobyteus/tools/terminal/background_process_manager.py +233 -0
  305. autobyteus/tools/terminal/output_buffer.py +105 -0
  306. autobyteus/tools/terminal/prompt_detector.py +63 -0
  307. autobyteus/tools/terminal/pty_session.py +241 -0
  308. autobyteus/tools/terminal/session_factory.py +20 -0
  309. autobyteus/tools/terminal/terminal_session_manager.py +226 -0
  310. autobyteus/tools/terminal/tools/__init__.py +13 -0
  311. autobyteus/tools/terminal/tools/get_process_output.py +81 -0
  312. autobyteus/tools/terminal/tools/run_bash.py +109 -0
  313. autobyteus/tools/terminal/tools/start_background_process.py +104 -0
  314. autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
  315. autobyteus/tools/terminal/types.py +54 -0
  316. autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
  317. autobyteus/tools/terminal/wsl_utils.py +156 -0
  318. autobyteus/tools/transaction_management/backup_handler.py +48 -0
  319. autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
  320. autobyteus/tools/usage/__init__.py +1 -2
  321. autobyteus/tools/usage/formatters/__init__.py +17 -1
  322. autobyteus/tools/usage/formatters/base_formatter.py +8 -0
  323. autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
  324. autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
  325. autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
  326. autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
  327. autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
  328. autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
  329. autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
  330. autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
  331. autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
  332. autobyteus/tools/usage/registries/__init__.py +1 -3
  333. autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
  334. autobyteus/tools/usage/tool_schema_provider.py +51 -0
  335. autobyteus/tools/web/__init__.py +4 -0
  336. autobyteus/tools/web/read_url_tool.py +80 -0
  337. autobyteus/utils/diff_utils.py +271 -0
  338. autobyteus/utils/download_utils.py +109 -0
  339. autobyteus/utils/file_utils.py +57 -2
  340. autobyteus/utils/gemini_helper.py +64 -0
  341. autobyteus/utils/gemini_model_mapping.py +71 -0
  342. autobyteus/utils/llm_output_formatter.py +75 -0
  343. autobyteus/utils/tool_call_format.py +36 -0
  344. autobyteus/workflow/agentic_workflow.py +3 -3
  345. autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
  346. autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
  347. autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
  348. autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +3 -9
  349. autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
  350. autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
  351. autobyteus/workflow/context/workflow_context.py +3 -3
  352. autobyteus/workflow/context/workflow_runtime_state.py +5 -5
  353. autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
  354. autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
  355. autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
  356. autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
  357. autobyteus/workflow/runtime/workflow_runtime.py +8 -8
  358. autobyteus/workflow/runtime/workflow_worker.py +3 -3
  359. autobyteus/workflow/status/__init__.py +11 -0
  360. autobyteus/workflow/status/workflow_status.py +19 -0
  361. autobyteus/workflow/status/workflow_status_manager.py +48 -0
  362. autobyteus/workflow/streaming/__init__.py +2 -2
  363. autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
  364. autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
  365. autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
  366. autobyteus/workflow/utils/wait_for_idle.py +4 -4
  367. autobyteus-1.3.0.dist-info/METADATA +293 -0
  368. autobyteus-1.3.0.dist-info/RECORD +606 -0
  369. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/WHEEL +1 -1
  370. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/top_level.txt +0 -1
  371. autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
  372. autobyteus/agent/hooks/__init__.py +0 -16
  373. autobyteus/agent/hooks/base_phase_hook.py +0 -78
  374. autobyteus/agent/hooks/hook_definition.py +0 -36
  375. autobyteus/agent/hooks/hook_meta.py +0 -37
  376. autobyteus/agent/hooks/hook_registry.py +0 -106
  377. autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
  378. autobyteus/agent/phases/__init__.py +0 -18
  379. autobyteus/agent/phases/discover.py +0 -53
  380. autobyteus/agent/phases/manager.py +0 -265
  381. autobyteus/agent/phases/transition_decorator.py +0 -40
  382. autobyteus/agent/phases/transition_info.py +0 -33
  383. autobyteus/agent/remote_agent.py +0 -244
  384. autobyteus/agent/workspace/workspace_definition.py +0 -36
  385. autobyteus/agent/workspace/workspace_meta.py +0 -37
  386. autobyteus/agent/workspace/workspace_registry.py +0 -72
  387. autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
  388. autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
  389. autobyteus/agent_team/phases/__init__.py +0 -11
  390. autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
  391. autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
  392. autobyteus/llm/api/bedrock_llm.py +0 -92
  393. autobyteus/llm/api/groq_llm.py +0 -94
  394. autobyteus/llm/api/nvidia_llm.py +0 -108
  395. autobyteus/llm/utils/token_pricing_config.py +0 -87
  396. autobyteus/rpc/__init__.py +0 -73
  397. autobyteus/rpc/client/__init__.py +0 -17
  398. autobyteus/rpc/client/abstract_client_connection.py +0 -124
  399. autobyteus/rpc/client/client_connection_manager.py +0 -153
  400. autobyteus/rpc/client/sse_client_connection.py +0 -306
  401. autobyteus/rpc/client/stdio_client_connection.py +0 -280
  402. autobyteus/rpc/config/__init__.py +0 -13
  403. autobyteus/rpc/config/agent_server_config.py +0 -153
  404. autobyteus/rpc/config/agent_server_registry.py +0 -152
  405. autobyteus/rpc/hosting.py +0 -244
  406. autobyteus/rpc/protocol.py +0 -244
  407. autobyteus/rpc/server/__init__.py +0 -20
  408. autobyteus/rpc/server/agent_server_endpoint.py +0 -181
  409. autobyteus/rpc/server/base_method_handler.py +0 -40
  410. autobyteus/rpc/server/method_handlers.py +0 -259
  411. autobyteus/rpc/server/sse_server_handler.py +0 -182
  412. autobyteus/rpc/server/stdio_server_handler.py +0 -151
  413. autobyteus/rpc/server_main.py +0 -198
  414. autobyteus/rpc/transport_type.py +0 -13
  415. autobyteus/tools/bash/__init__.py +0 -2
  416. autobyteus/tools/bash/bash_executor.py +0 -100
  417. autobyteus/tools/browser/__init__.py +0 -2
  418. autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
  419. autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
  420. autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
  421. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
  422. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
  423. autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
  424. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
  425. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
  426. autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
  427. autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
  428. autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
  429. autobyteus/tools/browser/standalone/__init__.py +0 -6
  430. autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
  431. autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
  432. autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
  433. autobyteus/tools/browser/standalone/navigate_to.py +0 -84
  434. autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -101
  435. autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -169
  436. autobyteus/tools/browser/standalone/webpage_reader.py +0 -105
  437. autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -105
  438. autobyteus/tools/file/edit_file.py +0 -200
  439. autobyteus/tools/file/list_directory.py +0 -168
  440. autobyteus/tools/file/search_files.py +0 -188
  441. autobyteus/tools/timer.py +0 -175
  442. autobyteus/tools/usage/parsers/__init__.py +0 -22
  443. autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
  444. autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
  445. autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
  446. autobyteus/tools/usage/parsers/base_parser.py +0 -41
  447. autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
  448. autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
  449. autobyteus/tools/usage/parsers/exceptions.py +0 -13
  450. autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
  451. autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
  452. autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
  453. autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
  454. autobyteus/workflow/phases/__init__.py +0 -11
  455. autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
  456. autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
  457. autobyteus-1.2.1.dist-info/METADATA +0 -205
  458. autobyteus-1.2.1.dist-info/RECORD +0 -511
  459. examples/__init__.py +0 -1
  460. examples/agent_team/__init__.py +0 -1
  461. examples/discover_phase_transitions.py +0 -104
  462. examples/run_agentic_software_engineer.py +0 -239
  463. examples/run_browser_agent.py +0 -262
  464. examples/run_google_slides_agent.py +0 -287
  465. examples/run_mcp_browser_client.py +0 -174
  466. examples/run_mcp_google_slides_client.py +0 -270
  467. examples/run_mcp_list_tools.py +0 -189
  468. examples/run_poem_writer.py +0 -284
  469. examples/run_sqlite_agent.py +0 -295
  470. /autobyteus/{tools/browser/session_aware → skills}/__init__.py +0 -0
  471. /autobyteus/tools/{browser/session_aware/factory → skill}/__init__.py +0 -0
  472. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/licenses/LICENSE +0 -0
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,21 +1,21 @@
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
12
11
  from .mcp_server_prewarming_step import McpServerPrewarmingStep
12
+ from .working_context_snapshot_restore_step import WorkingContextSnapshotRestoreStep
13
13
  # LLMConfigFinalizationStep and LLMInstanceCreationStep removed.
14
14
 
15
15
  __all__ = [
16
16
  "BaseBootstrapStep",
17
- "AgentRuntimeQueueInitializationStep", # UPDATED
18
17
  "WorkspaceContextInitializationStep",
19
18
  "SystemPromptProcessingStep",
20
19
  "McpServerPrewarmingStep",
20
+ "WorkingContextSnapshotRestoreStep",
21
21
  ]
@@ -1,24 +1,19 @@
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
8
+ from .working_context_snapshot_restore_step import WorkingContextSnapshotRestoreStep
9
9
  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
10
 
16
11
  logger = logging.getLogger(__name__)
17
12
 
18
13
  class AgentBootstrapper:
19
14
  """
20
- Orchestrates the agent's bootstrapping process by executing a sequence of
21
- self-contained bootstrap steps.
15
+ Provides the ordered bootstrap steps for the agent.
16
+ Execution is driven by bootstrap lifecycle events.
22
17
  """
23
18
  def __init__(self, steps: Optional[List[BaseBootstrapStep]] = None):
24
19
  """
@@ -30,61 +25,12 @@ class AgentBootstrapper:
30
25
  """
31
26
  if steps is None:
32
27
  self.bootstrap_steps: List[BaseBootstrapStep] = [
33
- AgentRuntimeQueueInitializationStep(),
34
28
  WorkspaceContextInitializationStep(),
35
29
  McpServerPrewarmingStep(),
36
30
  SystemPromptProcessingStep(),
31
+ WorkingContextSnapshotRestoreStep(),
37
32
  ]
38
33
  logger.debug("AgentBootstrapper initialized with default steps.")
39
34
  else:
40
35
  self.bootstrap_steps = steps
41
36
  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
@@ -0,0 +1,38 @@
1
+ import logging
2
+ from typing import TYPE_CHECKING
3
+
4
+ from .base_bootstrap_step import BaseBootstrapStep
5
+ from autobyteus.memory.restore.working_context_snapshot_bootstrapper import WorkingContextSnapshotBootstrapper
6
+
7
+ if TYPE_CHECKING:
8
+ from autobyteus.agent.context import AgentContext
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ class WorkingContextSnapshotRestoreStep(BaseBootstrapStep):
14
+ def __init__(self, bootstrapper: WorkingContextSnapshotBootstrapper | None = None) -> None:
15
+ self._bootstrapper = bootstrapper or WorkingContextSnapshotBootstrapper()
16
+ logger.debug("WorkingContextSnapshotRestoreStep initialized.")
17
+
18
+ async def execute(self, context: "AgentContext") -> bool:
19
+ restore_options = getattr(context.state, "restore_options", None)
20
+ if not restore_options:
21
+ return True
22
+
23
+ memory_manager = getattr(context.state, "memory_manager", None)
24
+ if not memory_manager:
25
+ logger.error("WorkingContextSnapshotRestoreStep requires a memory manager to restore working context snapshot.")
26
+ return False
27
+
28
+ system_prompt = context.state.processed_system_prompt
29
+ if not system_prompt:
30
+ llm_instance = context.llm_instance
31
+ system_prompt = llm_instance.config.system_message if llm_instance else ""
32
+
33
+ try:
34
+ self._bootstrapper.bootstrap(memory_manager, system_prompt, restore_options)
35
+ return True
36
+ except Exception as exc: # pragma: no cover - defensive
37
+ logger.error("WorkingContextSnapshotRestoreStep failed: %s", exc, exc_info=True)
38
+ 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,16 @@ 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,
52
+ memory_dir: Optional[str] = None):
48
53
  """
49
54
  Initializes the AgentConfig.
50
55
 
@@ -58,16 +63,16 @@ class AgentConfig:
58
63
  llm_instance's config will be used as the base.
59
64
  tools: An optional list of pre-initialized tool instances (subclasses of BaseTool).
60
65
  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
66
  input_processors: A list of input processor instances.
64
67
  llm_response_processors: A list of LLM response processor instances.
65
68
  system_prompt_processors: A list of system prompt processor instances.
66
69
  tool_execution_result_processors: A list of tool execution result processor instances.
67
70
  workspace: An optional pre-initialized workspace instance for the agent.
68
- phase_hooks: An optional list of phase transition hook instances.
71
+ lifecycle_processors: An optional list of lifecycle processor instances.
69
72
  initial_custom_data: An optional dictionary of data to pre-populate
70
73
  the agent's runtime state `custom_data`.
74
+ skills: An optional list of skill names or paths to be preloaded for this agent.
75
+ memory_dir: Optional override for the agent memory base directory.
71
76
  """
72
77
  self.name = name
73
78
  self.role = role
@@ -77,15 +82,35 @@ class AgentConfig:
77
82
  self.tools = tools or []
78
83
  self.workspace = workspace
79
84
  self.auto_execute_tools = auto_execute_tools
80
- self.use_xml_tool_format = use_xml_tool_format
81
85
  self.input_processors = input_processors or []
82
86
  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)
87
+
88
+ # Initialize processors first
89
+ default_processors = self.system_prompt_processors = system_prompt_processors if system_prompt_processors is not None else list(self.DEFAULT_SYSTEM_PROMPT_PROCESSORS)
90
+
84
91
  self.tool_execution_result_processors = tool_execution_result_processors or []
85
- self.phase_hooks = phase_hooks or []
92
+ self.tool_invocation_preprocessors = tool_invocation_preprocessors or []
93
+ self.lifecycle_processors = lifecycle_processors or []
86
94
  self.initial_custom_data = initial_custom_data
95
+ self.skills = skills or []
96
+ self.memory_dir = memory_dir
97
+
98
+ # Filter out ToolManifestInjectorProcessor if in API_TOOL_CALL mode
99
+ tool_call_format = resolve_tool_call_format()
100
+ if tool_call_format == "api_tool_call":
101
+ self.system_prompt_processors = [
102
+ p for p in default_processors
103
+ if not isinstance(p, ToolManifestInjectorProcessor)
104
+ ]
105
+ else:
106
+ self.system_prompt_processors = default_processors
87
107
 
88
- logger.debug(f"AgentConfig created for name '{self.name}', role '{self.role}'. XML tool format override: {self.use_xml_tool_format}")
108
+ logger.debug(
109
+ "AgentConfig created for name='%s', role='%s'. Tool call format: %s",
110
+ self.name,
111
+ self.role,
112
+ tool_call_format,
113
+ )
89
114
 
90
115
  def copy(self) -> 'AgentConfig':
91
116
  """
@@ -102,15 +127,17 @@ class AgentConfig:
102
127
  system_prompt=self.system_prompt,
103
128
  tools=self.tools.copy(), # Shallow copy the list, but reference the original tool instances
104
129
  auto_execute_tools=self.auto_execute_tools,
105
- use_xml_tool_format=self.use_xml_tool_format,
106
130
  input_processors=self.input_processors.copy(), # Shallow copy the list
107
131
  llm_response_processors=self.llm_response_processors.copy(), # Shallow copy the list
108
132
  system_prompt_processors=self.system_prompt_processors.copy(), # Shallow copy the list
109
133
  tool_execution_result_processors=self.tool_execution_result_processors.copy(), # Shallow copy the list
134
+ tool_invocation_preprocessors=self.tool_invocation_preprocessors.copy(),
110
135
  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
136
+ lifecycle_processors=self.lifecycle_processors.copy(), # Shallow copy the list
137
+ initial_custom_data=copy.deepcopy(self.initial_custom_data), # Deep copy for simple data
138
+ skills=self.skills.copy(), # Shallow copy the list
139
+ memory_dir=self.memory_dir,
113
140
  )
114
141
 
115
142
  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})")
143
+ 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}')")