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
@@ -1,104 +0,0 @@
1
- # file: autobyteus/examples/discover_phase_transitions.py
2
- """
3
- This example script demonstrates how to use the PhaseTransitionDiscoverer
4
- to programmatically find all valid phase transitions within the agent lifecycle.
5
-
6
- This is useful for developers who want to create their own BasePhaseHook
7
- subclasses, as it provides a definitive list of the source and target phases
8
- they can hook into.
9
- """
10
- import sys
11
- from pathlib import Path
12
- from typing import List, Dict, Any
13
-
14
- # --- Boilerplate to make the script runnable from the project root ---
15
- SCRIPT_DIR = Path(__file__).resolve().parent
16
- PACKAGE_ROOT = SCRIPT_DIR.parent
17
- if str(PACKAGE_ROOT) not in sys.path:
18
- sys.path.insert(0, str(PACKAGE_ROOT))
19
-
20
- try:
21
- from autobyteus.agent.phases import PhaseTransitionDiscoverer, PhaseTransitionInfo
22
- except ImportError as e:
23
- print(f"Error importing autobyteus components: {e}", file=sys.stderr)
24
- print("Please ensure that the autobyteus library is installed and accessible.", file=sys.stderr)
25
- sys.exit(1)
26
-
27
-
28
- def _prepare_table_data(transitions: List[PhaseTransitionInfo]) -> List[Dict[str, str]]:
29
- """Transforms transition info objects into a list of dictionaries for printing."""
30
- table_data = []
31
- for t in transitions:
32
- from_str = "\n".join([p.value for p in t.source_phases])
33
- table_data.append({
34
- "From": from_str,
35
- "To": t.target_phase.value,
36
- "Trigger": f"AgentPhaseManager.{t.triggering_method}()",
37
- "Description": t.description,
38
- })
39
- return table_data
40
-
41
- def _print_as_table(data: List[Dict[str, str]]):
42
- """Calculates column widths and prints the data in a formatted table."""
43
- if not data:
44
- return
45
-
46
- headers = list(data[0].keys())
47
-
48
- # Calculate max widths for each column
49
- widths = {h: len(h) for h in headers}
50
- for row in data:
51
- for h in headers:
52
- # Check max width line-by-line for multiline content
53
- max_line_width = max(len(line) for line in row[h].split('\n')) if row[h] else 0
54
- widths[h] = max(widths[h], max_line_width)
55
-
56
- # --- Print Header ---
57
- header_line = " | ".join(h.ljust(widths[h]) for h in headers)
58
- separator_line = "-+-".join("-" * widths[h] for h in headers)
59
- print(header_line)
60
- print(separator_line)
61
-
62
- # --- Print Rows ---
63
- for row in data:
64
- # Split multiline content to handle rowspan alignment
65
- split_rows = [
66
- {h: row[h].split('\n') for h in headers}
67
- ]
68
-
69
- num_lines = max(len(split_rows[0][h]) for h in headers)
70
-
71
- for i in range(num_lines):
72
- line_parts = []
73
- for h in headers:
74
- cell_lines = split_rows[0][h]
75
- part = cell_lines[i] if i < len(cell_lines) else ""
76
- line_parts.append(part.ljust(widths[h]))
77
- print(" | ".join(line_parts))
78
-
79
- # Print a thin separator between table rows for readability
80
- print("-+-".join("-" * (w) for w in widths.values()))
81
-
82
-
83
- def main():
84
- """
85
- Discovers and prints all available agent phase transitions.
86
- """
87
- print("--- Discovering all available agent phase transitions ---")
88
- print("This table shows every possible transition you can create a custom hook for.\n")
89
-
90
- all_transitions = PhaseTransitionDiscoverer.discover()
91
-
92
- if not all_transitions:
93
- print("No transitions were discovered. This is unexpected.")
94
- return
95
-
96
- # Prepare and print the data
97
- table_data = _prepare_table_data(all_transitions)
98
- _print_as_table(table_data)
99
-
100
- print(f"\nTotal of {len(all_transitions)} unique transitions discovered.")
101
-
102
-
103
- if __name__ == "__main__":
104
- main()
@@ -1,239 +0,0 @@
1
- # file: autobyteus/examples/run_agentic_software_engineer.py
2
- import asyncio
3
- import logging
4
- import argparse
5
- from pathlib import Path
6
- import sys
7
- import os
8
-
9
- # --- Boilerplate to make the script runnable from the project root ---
10
- SCRIPT_DIR = Path(__file__).resolve().parent
11
- PACKAGE_ROOT = SCRIPT_DIR.parent
12
- if str(PACKAGE_ROOT) not in sys.path:
13
- sys.path.insert(0, str(PACKAGE_ROOT))
14
-
15
- # Load environment variables from .env file in the project root
16
- try:
17
- from dotenv import load_dotenv
18
- env_file_path = PACKAGE_ROOT / ".env"
19
- if env_file_path.exists():
20
- load_dotenv(env_file_path)
21
- print(f"Loaded environment variables from: {env_file_path}")
22
- else:
23
- print(f"Info: No .env file found at: {env_file_path}. Relying on exported environment variables.")
24
- except ImportError:
25
- print("Warning: python-dotenv not installed. Cannot load .env file.")
26
-
27
- # --- Imports for the Agentic Software Engineer Example ---
28
- try:
29
- # Tool related imports
30
- from autobyteus.tools.registry import default_tool_registry
31
- from autobyteus.tools.tool_origin import ToolOrigin
32
- # Import local tools to ensure they are registered
33
- import autobyteus.tools.local_tools
34
-
35
- # Workspace imports
36
- from autobyteus.agent.workspace.local_workspace import LocalWorkspace
37
- from autobyteus.agent.workspace.workspace_config import WorkspaceConfig
38
-
39
- # For Agent creation
40
- from autobyteus.agent.context.agent_config import AgentConfig
41
- from autobyteus.llm.models import LLMModel
42
- from autobyteus.llm.llm_factory import default_llm_factory, LLMFactory
43
- from autobyteus.agent.factory.agent_factory import AgentFactory
44
- from autobyteus.cli import agent_cli
45
- except ImportError as e:
46
- print(f"Error importing autobyteus components: {e}", file=sys.stderr)
47
- print("Please ensure that the autobyteus library is installed and accessible.", file=sys.stderr)
48
- sys.exit(1)
49
-
50
- # --- Logging Setup ---
51
- logger = logging.getLogger("agentic_swe_example")
52
- interactive_logger = logging.getLogger("autobyteus.cli.interactive")
53
-
54
- def setup_logging(args: argparse.Namespace):
55
- """
56
- Configures logging for the interactive session.
57
- """
58
- loggers_to_clear = [
59
- logging.getLogger(),
60
- logging.getLogger("autobyteus"),
61
- logging.getLogger("autobyteus.cli"),
62
- interactive_logger,
63
- ]
64
- for l in loggers_to_clear:
65
- if l.hasHandlers():
66
- for handler in l.handlers[:]:
67
- l.removeHandler(handler)
68
- if hasattr(handler, 'close'): handler.close()
69
-
70
- script_log_level = logging.DEBUG if args.debug else logging.INFO
71
-
72
- # 1. Handler for unformatted interactive output
73
- interactive_handler = logging.StreamHandler(sys.stdout)
74
- interactive_logger.addHandler(interactive_handler)
75
- interactive_logger.setLevel(logging.INFO)
76
- interactive_logger.propagate = False
77
-
78
- # 2. Handler for formatted console logs
79
- console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
80
-
81
- class FormattedConsoleFilter(logging.Filter):
82
- def filter(self, record):
83
- if record.name.startswith("agentic_swe_example") or record.name.startswith("autobyteus.cli"):
84
- return True
85
- if record.levelno >= logging.CRITICAL:
86
- return True
87
- return False
88
-
89
- formatted_console_handler = logging.StreamHandler(sys.stdout)
90
- formatted_console_handler.setFormatter(console_formatter)
91
- formatted_console_handler.addFilter(FormattedConsoleFilter())
92
-
93
- root_logger = logging.getLogger()
94
- root_logger.addHandler(formatted_console_handler)
95
- root_logger.setLevel(script_log_level)
96
-
97
- # 3. Handler for the main agent log file
98
- log_file_path = Path(args.agent_log_file).resolve()
99
- log_file_path.parent.mkdir(parents=True, exist_ok=True)
100
- agent_file_handler = logging.FileHandler(log_file_path, mode='w')
101
- agent_file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s:%(lineno)d - %(message)s')
102
- agent_file_handler.setFormatter(agent_file_formatter)
103
- file_log_level = logging.DEBUG if args.debug else logging.INFO
104
-
105
- autobyteus_logger = logging.getLogger("autobyteus")
106
- autobyteus_logger.addHandler(agent_file_handler)
107
- autobyteus_logger.setLevel(file_log_level)
108
- autobyteus_logger.propagate = True
109
-
110
- # 4. Configure `autobyteus.cli` package logging
111
- cli_logger = logging.getLogger("autobyteus.cli")
112
- cli_logger.setLevel(script_log_level)
113
- cli_logger.propagate = True
114
-
115
- logger.info(f"Core library logs (excluding CLI) redirected to: {log_file_path} (level: {logging.getLevelName(file_log_level)})")
116
-
117
- # --- Environment Variable Checks ---
118
- def check_required_env_vars():
119
- """Checks for environment variables required by this example. None are strictly required."""
120
- logger.info("No specific environment variables are required, but ensure your chosen LLM provider's API key is set (e.g., GOOGLE_API_KEY).")
121
- return {}
122
-
123
- async def main(args: argparse.Namespace):
124
- """Main function to configure and run the Agentic Software Engineer."""
125
- logger.info("--- Starting Agentic Software Engineer Example ---")
126
- check_required_env_vars()
127
-
128
- try:
129
- # 1. Create a workspace for the agent.
130
- workspace_path = Path(args.workspace_path).resolve()
131
- workspace_path.mkdir(parents=True, exist_ok=True)
132
- logger.info(f"Agent workspace initialized at: {workspace_path}")
133
- workspace_config = WorkspaceConfig(params={"root_path": str(workspace_path)})
134
- workspace = LocalWorkspace(config=workspace_config)
135
-
136
- # 2. Get all available local tools.
137
- tool_registry = default_tool_registry
138
- local_tool_defs = tool_registry.get_tools_by_origin(ToolOrigin.LOCAL)
139
- local_tool_names = [tool_def.name for tool_def in local_tool_defs]
140
-
141
- if not local_tool_names:
142
- logger.error("No local tools were found in the registry. Cannot create agent.")
143
- return
144
-
145
- logger.info(f"Creating instances for registered local tools: {local_tool_names}")
146
- tools_for_agent = [tool_registry.create_tool(name) for name in local_tool_names]
147
-
148
- # 3. Configure and create the agent.
149
- try:
150
- _ = LLMModel[args.llm_model]
151
- except (KeyError, ValueError):
152
- logger.error(f"LLM Model '{args.llm_model}' is not valid or ambiguous.", file=sys.stderr)
153
- try:
154
- LLMFactory.ensure_initialized()
155
- print("\nAvailable LLM Models (use the 'Identifier' with --llm-model):")
156
- all_models = sorted(list(LLMModel), key=lambda m: m.model_identifier)
157
- if not all_models:
158
- print(" No models found.")
159
- for model in all_models:
160
- print(f" - Display Name: {model.name:<30} Identifier: {model.model_identifier}")
161
- except Exception as e:
162
- print(f"Additionally, an error occurred while listing models: {e}", file=sys.stderr)
163
- sys.exit(1)
164
-
165
- logger.info(f"Creating LLM instance for model: {args.llm_model}")
166
- llm_instance = default_llm_factory.create_llm(model_identifier=args.llm_model)
167
-
168
- # Load system prompt from file
169
- prompt_path = SCRIPT_DIR / "prompts" / "agentic_software_engineer.prompt"
170
- if not prompt_path.exists():
171
- logger.error(f"System prompt file not found at: {prompt_path}")
172
- sys.exit(1)
173
- with open(prompt_path, "r", encoding="utf-8") as f:
174
- system_prompt = f.read()
175
- logger.info(f"Loaded system prompt from: {prompt_path}")
176
-
177
- agent_config = AgentConfig(
178
- name="AgenticSoftwareDeveloper",
179
- role="SoftwareEngineer",
180
- description="An AI agent that can reason, plan, and execute software development tasks.",
181
- llm_instance=llm_instance,
182
- system_prompt=system_prompt,
183
- tools=tools_for_agent,
184
- workspace=workspace,
185
- use_xml_tool_format=True, # As specified in the prompt
186
- auto_execute_tools=False # Require user approval for safety
187
- )
188
-
189
- agent = AgentFactory().create_agent(config=agent_config)
190
- logger.info(f"Agentic Software Engineer instance created: {agent.agent_id}")
191
-
192
- # 4. Run the agent in an interactive CLI session.
193
- logger.info(f"Starting interactive session for agent {agent.agent_id}...")
194
- initial_prompt = f"Hello! I'm ready to work. My current working directory is `{workspace_path}`. What's the first task?"
195
- await agent_cli.run(agent=agent, initial_prompt=initial_prompt, show_tool_logs=not args.no_tool_logs)
196
- logger.info(f"Interactive session for agent {agent.agent_id} finished.")
197
-
198
- except Exception as e:
199
- logger.error(f"An error occurred during the agent workflow: {e}", exc_info=True)
200
-
201
- logger.info("--- Agentic Software Engineer Example Finished ---")
202
-
203
- if __name__ == "__main__":
204
- parser = argparse.ArgumentParser(description="Run the Agentic Software Engineer interactively.")
205
- parser.add_argument("--llm-model", type=str, default="gemini-2.0-flash-", help=f"The LLM model identifier to use. Call --help-models for list.")
206
- parser.add_argument("--workspace-path", type=str, default="./agent_workspace", help="Path to the agent's working directory. (Default: ./agent_workspace)")
207
- parser.add_argument("--help-models", action="store_true", help="Display available LLM models and exit.")
208
- parser.add_argument("--debug", action="store_true", help="Enable debug logging.")
209
- parser.add_argument("--agent-log-file", type=str, default="./agent_logs_swe.txt",
210
- help="Path to the log file for autobyteus.* library logs. (Default: ./agent_logs_swe.txt)")
211
- parser.add_argument("--no-tool-logs", action="store_true",
212
- help="Disable display of [Tool Log (...)] messages on the console by the agent_cli.")
213
-
214
- if "--help-models" in sys.argv:
215
- try:
216
- LLMFactory.ensure_initialized()
217
- print("Available LLM Models (use the 'Identifier' with --llm-model):")
218
- all_models = sorted(list(LLMModel), key=lambda m: m.model_identifier)
219
- if not all_models:
220
- print(" No models found.")
221
- for model in all_models:
222
- print(f" - Display Name: {model.name:<30} Identifier: {model.model_identifier}")
223
- except Exception as e:
224
- print(f"Error listing models: {e}")
225
- sys.exit(0)
226
-
227
- parsed_args = parser.parse_args()
228
-
229
- setup_logging(parsed_args)
230
- check_required_env_vars()
231
-
232
- try:
233
- asyncio.run(main(parsed_args))
234
- except (KeyboardInterrupt, SystemExit):
235
- logger.info("Script interrupted by user. Exiting.")
236
- except Exception as e:
237
- logger.error(f"An unhandled error occurred at the top level: {e}", exc_info=True)
238
- finally:
239
- logger.info("Exiting script.")
@@ -1,262 +0,0 @@
1
- # file: autobyteus/examples/run_browser_agent.py
2
- import asyncio
3
- import logging
4
- import argparse
5
- from pathlib import Path
6
- import sys
7
- import os
8
-
9
- # --- Boilerplate to make the script runnable from the project root ---
10
- SCRIPT_DIR = Path(__file__).resolve().parent
11
- PACKAGE_ROOT = SCRIPT_DIR.parent
12
- if str(PACKAGE_ROOT) not in sys.path:
13
- sys.path.insert(0, str(PACKAGE_ROOT))
14
-
15
- # Load environment variables from .env file in the project root
16
- try:
17
- from dotenv import load_dotenv
18
- env_file_path = PACKAGE_ROOT / ".env"
19
- if env_file_path.exists():
20
- load_dotenv(env_file_path)
21
- print(f"Loaded environment variables from: {env_file_path}")
22
- else:
23
- print(f"Info: No .env file found at: {env_file_path}. Relying on exported environment variables.")
24
- except ImportError:
25
- print("Warning: python-dotenv not installed. Cannot load .env file.")
26
-
27
- # --- Imports for the Browser Agent Example ---
28
- try:
29
- # For MCP Tool Integration
30
- from autobyteus.tools.mcp import McpToolRegistrar
31
- from autobyteus.tools.registry import default_tool_registry
32
-
33
- # For Agent creation
34
- from autobyteus.agent.context.agent_config import AgentConfig
35
- from autobyteus.llm.models import LLMModel
36
- from autobyteus.llm.llm_factory import default_llm_factory, LLMFactory
37
- from autobyteus.agent.factory.agent_factory import AgentFactory
38
- from autobyteus.cli import agent_cli
39
- except ImportError as e:
40
- print(f"Error importing autobyteus components: {e}", file=sys.stderr)
41
- print("Please ensure that the autobyteus library is installed and accessible.", file=sys.stderr)
42
- sys.exit(1)
43
-
44
- # --- Logging Setup ---
45
- logger = logging.getLogger("browser_agent_example")
46
- interactive_logger = logging.getLogger("autobyteus.cli.interactive")
47
-
48
- def setup_logging(args: argparse.Namespace):
49
- """
50
- Configures logging for the interactive session.
51
- """
52
- loggers_to_clear = [
53
- logging.getLogger(),
54
- logging.getLogger("autobyteus"),
55
- logging.getLogger("autobyteus.cli"),
56
- interactive_logger,
57
- ]
58
- for l in loggers_to_clear:
59
- if l.hasHandlers():
60
- for handler in l.handlers[:]:
61
- l.removeHandler(handler)
62
- if hasattr(handler, 'close'): handler.close()
63
-
64
- script_log_level = logging.DEBUG if args.debug else logging.INFO
65
-
66
- # 1. Handler for unformatted interactive output
67
- interactive_handler = logging.StreamHandler(sys.stdout)
68
- interactive_logger.addHandler(interactive_handler)
69
- interactive_logger.setLevel(logging.INFO)
70
- interactive_logger.propagate = False
71
-
72
- # 2. Handler for formatted console logs
73
- console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
74
-
75
- class FormattedConsoleFilter(logging.Filter):
76
- def filter(self, record):
77
- if record.name.startswith("browser_agent_example") or record.name.startswith("autobyteus.cli"):
78
- return True
79
- if record.levelno >= logging.CRITICAL:
80
- return True
81
- return False
82
-
83
- formatted_console_handler = logging.StreamHandler(sys.stdout)
84
- formatted_console_handler.setFormatter(console_formatter)
85
- formatted_console_handler.addFilter(FormattedConsoleFilter())
86
-
87
- root_logger = logging.getLogger()
88
- root_logger.addHandler(formatted_console_handler)
89
- root_logger.setLevel(script_log_level)
90
-
91
- # 3. Handler for the main agent log file
92
- log_file_path = Path(args.agent_log_file).resolve()
93
- log_file_path.parent.mkdir(parents=True, exist_ok=True)
94
- agent_file_handler = logging.FileHandler(log_file_path, mode='w')
95
- agent_file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s:%(lineno)d - %(message)s')
96
- agent_file_handler.setFormatter(agent_file_formatter)
97
- file_log_level = logging.DEBUG if args.debug else logging.INFO
98
-
99
- autobyteus_logger = logging.getLogger("autobyteus")
100
- autobyteus_logger.addHandler(agent_file_handler)
101
- autobyteus_logger.setLevel(file_log_level)
102
- autobyteus_logger.propagate = True
103
-
104
- # 4. Isolate noisy queue manager logs to a separate file in debug mode
105
- if args.debug:
106
- queue_log_file_path = Path(log_file_path.parent / f"{log_file_path.stem}_queue.log").resolve()
107
-
108
- queue_file_handler = logging.FileHandler(queue_log_file_path, mode='w')
109
- queue_file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
110
- queue_file_handler.setFormatter(queue_file_formatter)
111
-
112
- queue_logger = logging.getLogger("autobyteus.agent.events.agent_input_event_queue_manager")
113
-
114
- queue_logger.setLevel(logging.DEBUG)
115
- queue_logger.addHandler(queue_file_handler)
116
- queue_logger.propagate = False # IMPORTANT: Stop logs from bubbling up to the main agent_logs.txt
117
-
118
- logger.info(f"Debug mode: Redirecting noisy queue manager DEBUG logs to: {queue_log_file_path}")
119
-
120
- # 5. Configure `autobyteus.cli` package logging
121
- cli_logger = logging.getLogger("autobyteus.cli")
122
- cli_logger.setLevel(script_log_level)
123
- cli_logger.propagate = True
124
-
125
- logger.info(f"Core library logs (excluding CLI) redirected to: {log_file_path} (level: {logging.getLevelName(file_log_level)})")
126
-
127
- # --- Environment Variable Checks ---
128
- def check_required_env_vars():
129
- """Checks for environment variables required by this example. None are required for the browser agent."""
130
- # The browser MCP server is self-contained via npx and doesn't require env vars.
131
- # This function is kept for structural consistency.
132
- logger.info("No specific environment variables are required for the browser agent example.")
133
- return {}
134
-
135
- async def main(args: argparse.Namespace):
136
- """Main function to configure and run the BrowserAgent."""
137
- logger.info("--- Starting Browser Agent Example ---")
138
- check_required_env_vars()
139
-
140
- # 1. Instantiate the core MCP and registry components.
141
- tool_registry = default_tool_registry
142
- registrar = McpToolRegistrar()
143
-
144
- # 2. Define the configuration for the MCP server as a dictionary.
145
- server_id = "browsermcp"
146
- browser_mcp_config_dict = {
147
- server_id: {
148
- "transport_type": "stdio",
149
- "stdio_params": {
150
- "command": "npx",
151
- "args": ["@browsermcp/mcp@latest"],
152
- "env": {},
153
- },
154
- "enabled": True,
155
- }
156
- }
157
-
158
- try:
159
- # 3. Discover and register tools by passing the config dictionary directly.
160
- logger.info(f"Performing targeted discovery for remote Browser tools from server: '{server_id}'...")
161
- await registrar.discover_and_register_tools(mcp_config=browser_mcp_config_dict)
162
- logger.info("Remote tool registration complete.")
163
-
164
- # 4. Create tool instances from the registry for our agent.
165
- # Use the ToolRegistry to get tools by their source server ID.
166
- browser_tool_defs = tool_registry.get_tools_by_mcp_server(server_id)
167
- browser_tool_names = [tool_def.name for tool_def in browser_tool_defs]
168
-
169
- if not browser_tool_names:
170
- logger.error(f"No Browser tools were found in the registry for server '{server_id}' after discovery. Cannot create agent.")
171
- return
172
-
173
- logger.info(f"Creating instances for registered Browser tools: {browser_tool_names}")
174
- tools_for_agent = [tool_registry.create_tool(name) for name in browser_tool_names]
175
-
176
- # 5. Configure and create the agent.
177
- try:
178
- _ = LLMModel[args.llm_model]
179
- except (KeyError, ValueError):
180
- logger.error(f"LLM Model '{args.llm_model}' is not valid or ambiguous.", file=sys.stderr)
181
- try:
182
- LLMFactory.ensure_initialized()
183
- print("\nAvailable LLM Models (use the 'Identifier' with --llm-model):")
184
- all_models = sorted(list(LLMModel), key=lambda m: m.model_identifier)
185
- if not all_models:
186
- print(" No models found.")
187
- for model in all_models:
188
- print(f" - Display Name: {model.name:<30} Identifier: {model.model_identifier}")
189
- except Exception as e:
190
- print(f"Additionally, an error occurred while listing models: {e}", file=sys.stderr)
191
- sys.exit(1)
192
-
193
- logger.info(f"Creating LLM instance for model: {args.llm_model}")
194
- llm_instance = default_llm_factory.create_llm(model_identifier=args.llm_model)
195
-
196
- system_prompt = (
197
- "You are a helpful assistant that can browse the web to find information. "
198
- "You have access to a set of specialized tools for this purpose.\n"
199
- "When asked to perform a task on a browser, you should understand the user's intent and use the available tools to fulfill it.\n\n"
200
- "Here is the manifest of tools available to you, including their definitions and examples:\n"
201
- "{{tools}}"
202
- )
203
-
204
- browser_agent_config = AgentConfig(
205
- name="BrowserAgent",
206
- role="WebNavigator",
207
- description="An agent that can browse the web using a set of remote tools.",
208
- llm_instance=llm_instance,
209
- system_prompt=system_prompt,
210
- tools=tools_for_agent,
211
- auto_execute_tools=False
212
- )
213
-
214
- agent = AgentFactory().create_agent(config=browser_agent_config)
215
- logger.info(f"Browser Agent instance created: {agent.agent_id}")
216
-
217
- # 6. Run the agent in an interactive CLI session.
218
- logger.info(f"Starting interactive session for agent {agent.agent_id}...")
219
- await agent_cli.run(agent=agent)
220
- logger.info(f"Interactive session for agent {agent.agent_id} finished.")
221
-
222
- except Exception as e:
223
- logger.error(f"An error occurred during the agent workflow: {e}", exc_info=True)
224
-
225
- logger.info("--- Browser Agent Example Finished ---")
226
-
227
- if __name__ == "__main__":
228
- parser = argparse.ArgumentParser(description="Run the BrowserAgent interactively.")
229
- parser.add_argument("--llm-model", type=str, default="gemini-2.0-flash-", help=f"The LLM model identifier to use. Call --help-models for list.")
230
- parser.add_argument("--help-models", action="store_true", help="Display available LLM models and exit.")
231
- parser.add_argument("--debug", action="store_true", help="Enable debug logging.")
232
- parser.add_argument("--agent-log-file", type=str, default="./agent_logs_browser.txt",
233
- help="Path to the log file for autobyteus.* library logs. (Default: ./agent_logs_browser.txt)")
234
- parser.add_argument("--no-tool-logs", action="store_true",
235
- help="Disable display of [Tool Log (...)] messages on the console by the agent_cli.")
236
-
237
- if "--help-models" in sys.argv:
238
- try:
239
- LLMFactory.ensure_initialized()
240
- print("Available LLM Models (use the 'Identifier' with --llm-model):")
241
- all_models = sorted(list(LLMModel), key=lambda m: m.model_identifier)
242
- if not all_models:
243
- print(" No models found.")
244
- for model in all_models:
245
- print(f" - Display Name: {model.name:<30} Identifier: {model.model_identifier}")
246
- except Exception as e:
247
- print(f"Error listing models: {e}")
248
- sys.exit(0)
249
-
250
- parsed_args = parser.parse_args()
251
-
252
- setup_logging(parsed_args)
253
- check_required_env_vars()
254
-
255
- try:
256
- asyncio.run(main(parsed_args))
257
- except (KeyboardInterrupt, SystemExit):
258
- logger.info("Script interrupted by user. Exiting.")
259
- except Exception as e:
260
- logger.error(f"An unhandled error occurred at the top level: {e}", exc_info=True)
261
- finally:
262
- logger.info("Exiting script.")