autobyteus 1.2.0__py3-none-any.whl → 1.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. autobyteus/agent/agent.py +15 -5
  2. autobyteus/agent/bootstrap_steps/__init__.py +1 -3
  3. autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +3 -59
  4. autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
  5. autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
  6. autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
  7. autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
  8. autobyteus/agent/context/agent_config.py +43 -20
  9. autobyteus/agent/context/agent_context.py +23 -18
  10. autobyteus/agent/context/agent_runtime_state.py +23 -19
  11. autobyteus/agent/events/__init__.py +16 -1
  12. autobyteus/agent/events/agent_events.py +43 -3
  13. autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
  14. autobyteus/agent/events/event_store.py +57 -0
  15. autobyteus/agent/events/notifiers.py +74 -60
  16. autobyteus/agent/events/worker_event_dispatcher.py +21 -64
  17. autobyteus/agent/factory/agent_factory.py +52 -0
  18. autobyteus/agent/handlers/__init__.py +2 -0
  19. autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
  20. autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
  21. autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
  22. autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
  23. autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
  24. autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
  25. autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
  26. autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
  27. autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
  28. autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
  29. autobyteus/agent/input_processor/memory_ingest_input_processor.py +40 -0
  30. autobyteus/agent/lifecycle/__init__.py +12 -0
  31. autobyteus/agent/lifecycle/base_processor.py +109 -0
  32. autobyteus/agent/lifecycle/events.py +35 -0
  33. autobyteus/agent/lifecycle/processor_definition.py +36 -0
  34. autobyteus/agent/lifecycle/processor_registry.py +106 -0
  35. autobyteus/agent/llm_request_assembler.py +98 -0
  36. autobyteus/agent/llm_response_processor/__init__.py +1 -8
  37. autobyteus/agent/message/context_file_type.py +1 -1
  38. autobyteus/agent/message/send_message_to.py +5 -4
  39. autobyteus/agent/runtime/agent_runtime.py +29 -21
  40. autobyteus/agent/runtime/agent_worker.py +98 -19
  41. autobyteus/agent/shutdown_steps/__init__.py +2 -0
  42. autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
  43. autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
  44. autobyteus/agent/status/__init__.py +14 -0
  45. autobyteus/agent/status/manager.py +93 -0
  46. autobyteus/agent/status/status_deriver.py +96 -0
  47. autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
  48. autobyteus/agent/status/status_update_utils.py +73 -0
  49. autobyteus/agent/streaming/__init__.py +52 -5
  50. autobyteus/agent/streaming/adapters/__init__.py +18 -0
  51. autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
  52. autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
  53. autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
  54. autobyteus/agent/streaming/agent_event_stream.py +3 -178
  55. autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
  56. autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
  57. autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
  58. autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
  59. autobyteus/agent/streaming/events/__init__.py +6 -0
  60. autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
  61. autobyteus/agent/streaming/events/stream_events.py +141 -0
  62. autobyteus/agent/streaming/handlers/__init__.py +15 -0
  63. autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
  64. autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
  65. autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
  66. autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
  67. autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
  68. autobyteus/agent/streaming/parser/__init__.py +61 -0
  69. autobyteus/agent/streaming/parser/event_emitter.py +181 -0
  70. autobyteus/agent/streaming/parser/events.py +4 -0
  71. autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
  72. autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
  73. autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
  74. autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
  75. autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
  76. autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
  77. autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
  78. autobyteus/agent/streaming/parser/parser_context.py +227 -0
  79. autobyteus/agent/streaming/parser/parser_factory.py +132 -0
  80. autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
  81. autobyteus/agent/streaming/parser/state_factory.py +62 -0
  82. autobyteus/agent/streaming/parser/states/__init__.py +1 -0
  83. autobyteus/agent/streaming/parser/states/base_state.py +60 -0
  84. autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
  85. autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
  86. autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
  87. autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
  88. autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
  89. autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
  90. autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
  91. autobyteus/agent/streaming/parser/states/text_state.py +78 -0
  92. autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
  93. autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
  94. autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
  95. autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
  96. autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
  97. autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
  98. autobyteus/agent/streaming/parser/strategies/base.py +24 -0
  99. autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
  100. autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
  101. autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
  102. autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
  103. autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
  104. autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
  105. autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
  106. autobyteus/agent/streaming/parser/tool_constants.py +7 -0
  107. autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
  108. autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
  109. autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
  110. autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
  111. autobyteus/agent/streaming/queue_streamer.py +3 -57
  112. autobyteus/agent/streaming/segments/__init__.py +5 -0
  113. autobyteus/agent/streaming/segments/segment_events.py +81 -0
  114. autobyteus/agent/streaming/stream_event_payloads.py +2 -198
  115. autobyteus/agent/streaming/stream_events.py +3 -128
  116. autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
  117. autobyteus/agent/streaming/streaming_response_handler.py +4 -0
  118. autobyteus/agent/streaming/streams/__init__.py +5 -0
  119. autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
  120. autobyteus/agent/streaming/utils/__init__.py +5 -0
  121. autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
  122. autobyteus/agent/system_prompt_processor/__init__.py +2 -0
  123. autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
  124. autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
  125. autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
  126. autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
  127. autobyteus/agent/token_budget.py +56 -0
  128. autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
  129. autobyteus/agent/tool_invocation.py +16 -40
  130. autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
  131. autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
  132. autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
  133. autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
  134. autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
  135. autobyteus/agent/utils/wait_for_idle.py +12 -14
  136. autobyteus/agent/workspace/base_workspace.py +6 -27
  137. autobyteus/agent_team/agent_team.py +3 -3
  138. autobyteus/agent_team/agent_team_builder.py +1 -41
  139. autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
  140. autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
  141. autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
  142. autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
  143. autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
  144. autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +5 -6
  145. autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +15 -15
  146. autobyteus/agent_team/context/agent_team_config.py +6 -3
  147. autobyteus/agent_team/context/agent_team_context.py +25 -3
  148. autobyteus/agent_team/context/agent_team_runtime_state.py +11 -8
  149. autobyteus/agent_team/events/__init__.py +11 -0
  150. autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
  151. autobyteus/agent_team/events/agent_team_events.py +16 -0
  152. autobyteus/agent_team/events/event_store.py +57 -0
  153. autobyteus/agent_team/factory/agent_team_factory.py +8 -0
  154. autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
  155. autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
  156. autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
  157. autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
  158. autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
  159. autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
  160. autobyteus/agent_team/status/__init__.py +14 -0
  161. autobyteus/agent_team/status/agent_team_status.py +18 -0
  162. autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
  163. autobyteus/agent_team/status/status_deriver.py +62 -0
  164. autobyteus/agent_team/status/status_update_utils.py +42 -0
  165. autobyteus/agent_team/streaming/__init__.py +2 -2
  166. autobyteus/agent_team/streaming/agent_team_event_notifier.py +10 -10
  167. autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +7 -7
  168. autobyteus/agent_team/streaming/agent_team_stream_events.py +11 -11
  169. autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
  170. autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
  171. autobyteus/agent_team/task_notification/activation_policy.py +1 -1
  172. autobyteus/agent_team/task_notification/system_event_driven_agent_task_notifier.py +22 -22
  173. autobyteus/agent_team/task_notification/task_notification_mode.py +20 -1
  174. autobyteus/agent_team/utils/wait_for_idle.py +4 -4
  175. autobyteus/cli/agent_cli.py +18 -10
  176. autobyteus/cli/agent_team_tui/app.py +18 -15
  177. autobyteus/cli/agent_team_tui/state.py +21 -23
  178. autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
  179. autobyteus/cli/agent_team_tui/widgets/focus_pane.py +146 -39
  180. autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
  181. autobyteus/cli/agent_team_tui/widgets/shared.py +26 -26
  182. autobyteus/cli/agent_team_tui/widgets/{task_board_panel.py → task_plan_panel.py} +5 -5
  183. autobyteus/cli/cli_display.py +193 -44
  184. autobyteus/cli/workflow_tui/app.py +9 -10
  185. autobyteus/cli/workflow_tui/state.py +14 -16
  186. autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
  187. autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
  188. autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
  189. autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
  190. autobyteus/clients/autobyteus_client.py +94 -1
  191. autobyteus/events/event_types.py +15 -21
  192. autobyteus/llm/api/autobyteus_llm.py +33 -29
  193. autobyteus/llm/api/claude_llm.py +142 -36
  194. autobyteus/llm/api/gemini_llm.py +163 -59
  195. autobyteus/llm/api/grok_llm.py +1 -1
  196. autobyteus/llm/api/minimax_llm.py +26 -0
  197. autobyteus/llm/api/mistral_llm.py +113 -87
  198. autobyteus/llm/api/ollama_llm.py +9 -42
  199. autobyteus/llm/api/openai_compatible_llm.py +127 -91
  200. autobyteus/llm/api/openai_llm.py +3 -3
  201. autobyteus/llm/api/openai_responses_llm.py +324 -0
  202. autobyteus/llm/api/zhipu_llm.py +21 -2
  203. autobyteus/llm/autobyteus_provider.py +70 -60
  204. autobyteus/llm/base_llm.py +85 -81
  205. autobyteus/llm/converters/__init__.py +14 -0
  206. autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
  207. autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
  208. autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
  209. autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
  210. autobyteus/llm/extensions/base_extension.py +6 -12
  211. autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
  212. autobyteus/llm/llm_factory.py +282 -204
  213. autobyteus/llm/lmstudio_provider.py +60 -49
  214. autobyteus/llm/models.py +35 -2
  215. autobyteus/llm/ollama_provider.py +60 -49
  216. autobyteus/llm/ollama_provider_resolver.py +0 -1
  217. autobyteus/llm/prompt_renderers/__init__.py +19 -0
  218. autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
  219. autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
  220. autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
  221. autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
  222. autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
  223. autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
  224. autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
  225. autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
  226. autobyteus/llm/providers.py +1 -3
  227. autobyteus/llm/token_counter/claude_token_counter.py +56 -25
  228. autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
  229. autobyteus/llm/token_counter/openai_token_counter.py +24 -5
  230. autobyteus/llm/token_counter/token_counter_factory.py +12 -5
  231. autobyteus/llm/utils/llm_config.py +6 -12
  232. autobyteus/llm/utils/media_payload_formatter.py +27 -20
  233. autobyteus/llm/utils/messages.py +55 -3
  234. autobyteus/llm/utils/response_types.py +3 -0
  235. autobyteus/llm/utils/tool_call_delta.py +31 -0
  236. autobyteus/memory/__init__.py +32 -0
  237. autobyteus/memory/active_transcript.py +69 -0
  238. autobyteus/memory/compaction/__init__.py +9 -0
  239. autobyteus/memory/compaction/compaction_result.py +8 -0
  240. autobyteus/memory/compaction/compactor.py +89 -0
  241. autobyteus/memory/compaction/summarizer.py +11 -0
  242. autobyteus/memory/compaction_snapshot_builder.py +84 -0
  243. autobyteus/memory/memory_manager.py +183 -0
  244. autobyteus/memory/models/__init__.py +14 -0
  245. autobyteus/memory/models/episodic_item.py +41 -0
  246. autobyteus/memory/models/memory_types.py +7 -0
  247. autobyteus/memory/models/raw_trace_item.py +79 -0
  248. autobyteus/memory/models/semantic_item.py +41 -0
  249. autobyteus/memory/models/tool_interaction.py +20 -0
  250. autobyteus/memory/policies/__init__.py +5 -0
  251. autobyteus/memory/policies/compaction_policy.py +16 -0
  252. autobyteus/memory/retrieval/__init__.py +7 -0
  253. autobyteus/memory/retrieval/memory_bundle.py +11 -0
  254. autobyteus/memory/retrieval/retriever.py +13 -0
  255. autobyteus/memory/store/__init__.py +7 -0
  256. autobyteus/memory/store/base_store.py +14 -0
  257. autobyteus/memory/store/file_store.py +98 -0
  258. autobyteus/memory/tool_interaction_builder.py +46 -0
  259. autobyteus/memory/turn_tracker.py +9 -0
  260. autobyteus/multimedia/audio/api/__init__.py +3 -2
  261. autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
  262. autobyteus/multimedia/audio/api/gemini_audio_client.py +108 -16
  263. autobyteus/multimedia/audio/api/openai_audio_client.py +112 -0
  264. autobyteus/multimedia/audio/audio_client_factory.py +84 -9
  265. autobyteus/multimedia/audio/audio_model.py +2 -1
  266. autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
  267. autobyteus/multimedia/image/api/gemini_image_client.py +38 -17
  268. autobyteus/multimedia/image/api/openai_image_client.py +125 -43
  269. autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
  270. autobyteus/multimedia/image/image_client_factory.py +47 -15
  271. autobyteus/multimedia/image/image_model.py +5 -2
  272. autobyteus/multimedia/providers.py +3 -2
  273. autobyteus/skills/loader.py +71 -0
  274. autobyteus/skills/model.py +11 -0
  275. autobyteus/skills/registry.py +70 -0
  276. autobyteus/task_management/__init__.py +43 -20
  277. autobyteus/task_management/{base_task_board.py → base_task_plan.py} +16 -13
  278. autobyteus/task_management/converters/__init__.py +2 -2
  279. autobyteus/task_management/converters/{task_board_converter.py → task_plan_converter.py} +13 -13
  280. autobyteus/task_management/events.py +7 -7
  281. autobyteus/task_management/{in_memory_task_board.py → in_memory_task_plan.py} +34 -22
  282. autobyteus/task_management/schemas/__init__.py +3 -0
  283. autobyteus/task_management/schemas/task_status_report.py +2 -2
  284. autobyteus/task_management/schemas/todo_definition.py +15 -0
  285. autobyteus/task_management/todo.py +29 -0
  286. autobyteus/task_management/todo_list.py +75 -0
  287. autobyteus/task_management/tools/__init__.py +24 -8
  288. autobyteus/task_management/tools/task_tools/__init__.py +19 -0
  289. autobyteus/task_management/tools/{assign_task_to.py → task_tools/assign_task_to.py} +18 -18
  290. autobyteus/task_management/tools/{publish_task.py → task_tools/create_task.py} +16 -18
  291. autobyteus/task_management/tools/{publish_tasks.py → task_tools/create_tasks.py} +19 -19
  292. autobyteus/task_management/tools/{get_my_tasks.py → task_tools/get_my_tasks.py} +15 -15
  293. autobyteus/task_management/tools/{get_task_board_status.py → task_tools/get_task_plan_status.py} +16 -16
  294. autobyteus/task_management/tools/{update_task_status.py → task_tools/update_task_status.py} +16 -16
  295. autobyteus/task_management/tools/todo_tools/__init__.py +18 -0
  296. autobyteus/task_management/tools/todo_tools/add_todo.py +78 -0
  297. autobyteus/task_management/tools/todo_tools/create_todo_list.py +79 -0
  298. autobyteus/task_management/tools/todo_tools/get_todo_list.py +55 -0
  299. autobyteus/task_management/tools/todo_tools/update_todo_status.py +85 -0
  300. autobyteus/tools/__init__.py +43 -52
  301. autobyteus/tools/base_tool.py +7 -0
  302. autobyteus/tools/file/__init__.py +9 -0
  303. autobyteus/tools/file/patch_file.py +149 -0
  304. autobyteus/tools/file/{file_reader.py → read_file.py} +38 -7
  305. autobyteus/tools/file/{file_writer.py → write_file.py} +7 -4
  306. autobyteus/tools/functional_tool.py +53 -14
  307. autobyteus/tools/mcp/__init__.py +2 -0
  308. autobyteus/tools/mcp/config_service.py +5 -1
  309. autobyteus/tools/mcp/server/__init__.py +2 -0
  310. autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
  311. autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
  312. autobyteus/tools/mcp/server_instance_manager.py +8 -1
  313. autobyteus/tools/mcp/tool.py +3 -3
  314. autobyteus/tools/mcp/tool_registrar.py +5 -2
  315. autobyteus/tools/mcp/types.py +61 -0
  316. autobyteus/tools/multimedia/__init__.py +2 -1
  317. autobyteus/tools/multimedia/audio_tools.py +72 -19
  318. autobyteus/tools/{download_media_tool.py → multimedia/download_media_tool.py} +21 -7
  319. autobyteus/tools/multimedia/image_tools.py +248 -64
  320. autobyteus/tools/multimedia/media_reader_tool.py +1 -1
  321. autobyteus/tools/operation_executor/journal_manager.py +107 -0
  322. autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
  323. autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
  324. autobyteus/tools/operation_executor/operation_executor.py +58 -0
  325. autobyteus/tools/registry/tool_definition.py +108 -14
  326. autobyteus/tools/registry/tool_registry.py +29 -0
  327. autobyteus/tools/search/__init__.py +17 -0
  328. autobyteus/tools/search/base_strategy.py +35 -0
  329. autobyteus/tools/search/client.py +24 -0
  330. autobyteus/tools/search/factory.py +81 -0
  331. autobyteus/tools/search/google_cse_strategy.py +68 -0
  332. autobyteus/tools/search/providers.py +10 -0
  333. autobyteus/tools/search/serpapi_strategy.py +65 -0
  334. autobyteus/tools/search/serper_strategy.py +87 -0
  335. autobyteus/tools/search_tool.py +83 -0
  336. autobyteus/tools/skill/load_skill.py +50 -0
  337. autobyteus/tools/terminal/__init__.py +45 -0
  338. autobyteus/tools/terminal/ansi_utils.py +32 -0
  339. autobyteus/tools/terminal/background_process_manager.py +233 -0
  340. autobyteus/tools/terminal/output_buffer.py +105 -0
  341. autobyteus/tools/terminal/prompt_detector.py +63 -0
  342. autobyteus/tools/terminal/pty_session.py +241 -0
  343. autobyteus/tools/terminal/session_factory.py +20 -0
  344. autobyteus/tools/terminal/terminal_session_manager.py +226 -0
  345. autobyteus/tools/terminal/tools/__init__.py +13 -0
  346. autobyteus/tools/terminal/tools/get_process_output.py +81 -0
  347. autobyteus/tools/terminal/tools/run_bash.py +109 -0
  348. autobyteus/tools/terminal/tools/start_background_process.py +104 -0
  349. autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
  350. autobyteus/tools/terminal/types.py +54 -0
  351. autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
  352. autobyteus/tools/terminal/wsl_utils.py +156 -0
  353. autobyteus/tools/tool_meta.py +4 -24
  354. autobyteus/tools/transaction_management/backup_handler.py +48 -0
  355. autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
  356. autobyteus/tools/usage/__init__.py +1 -2
  357. autobyteus/tools/usage/formatters/__init__.py +17 -1
  358. autobyteus/tools/usage/formatters/base_formatter.py +8 -0
  359. autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
  360. autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
  361. autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
  362. autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
  363. autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
  364. autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
  365. autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
  366. autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
  367. autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
  368. autobyteus/tools/usage/registries/__init__.py +1 -3
  369. autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
  370. autobyteus/tools/usage/tool_schema_provider.py +51 -0
  371. autobyteus/tools/web/__init__.py +4 -0
  372. autobyteus/tools/web/read_url_tool.py +80 -0
  373. autobyteus/utils/diff_utils.py +271 -0
  374. autobyteus/utils/download_utils.py +109 -0
  375. autobyteus/utils/file_utils.py +57 -2
  376. autobyteus/utils/gemini_helper.py +56 -0
  377. autobyteus/utils/gemini_model_mapping.py +71 -0
  378. autobyteus/utils/llm_output_formatter.py +75 -0
  379. autobyteus/utils/tool_call_format.py +36 -0
  380. autobyteus/workflow/agentic_workflow.py +3 -3
  381. autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
  382. autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
  383. autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
  384. autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +4 -11
  385. autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
  386. autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
  387. autobyteus/workflow/context/workflow_context.py +3 -3
  388. autobyteus/workflow/context/workflow_runtime_state.py +5 -5
  389. autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
  390. autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
  391. autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
  392. autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
  393. autobyteus/workflow/runtime/workflow_runtime.py +8 -8
  394. autobyteus/workflow/runtime/workflow_worker.py +3 -3
  395. autobyteus/workflow/status/__init__.py +11 -0
  396. autobyteus/workflow/status/workflow_status.py +19 -0
  397. autobyteus/workflow/status/workflow_status_manager.py +48 -0
  398. autobyteus/workflow/streaming/__init__.py +2 -2
  399. autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
  400. autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
  401. autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
  402. autobyteus/workflow/utils/wait_for_idle.py +4 -4
  403. autobyteus-1.2.3.dist-info/METADATA +293 -0
  404. autobyteus-1.2.3.dist-info/RECORD +600 -0
  405. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/WHEEL +1 -1
  406. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/top_level.txt +0 -1
  407. autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
  408. autobyteus/agent/hooks/__init__.py +0 -16
  409. autobyteus/agent/hooks/base_phase_hook.py +0 -78
  410. autobyteus/agent/hooks/hook_definition.py +0 -36
  411. autobyteus/agent/hooks/hook_meta.py +0 -37
  412. autobyteus/agent/hooks/hook_registry.py +0 -106
  413. autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
  414. autobyteus/agent/phases/__init__.py +0 -18
  415. autobyteus/agent/phases/discover.py +0 -53
  416. autobyteus/agent/phases/manager.py +0 -265
  417. autobyteus/agent/phases/transition_decorator.py +0 -40
  418. autobyteus/agent/phases/transition_info.py +0 -33
  419. autobyteus/agent/remote_agent.py +0 -244
  420. autobyteus/agent/workspace/workspace_definition.py +0 -36
  421. autobyteus/agent/workspace/workspace_meta.py +0 -37
  422. autobyteus/agent/workspace/workspace_registry.py +0 -72
  423. autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
  424. autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
  425. autobyteus/agent_team/phases/__init__.py +0 -11
  426. autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
  427. autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
  428. autobyteus/llm/api/bedrock_llm.py +0 -92
  429. autobyteus/llm/api/groq_llm.py +0 -94
  430. autobyteus/llm/api/nvidia_llm.py +0 -108
  431. autobyteus/llm/utils/token_pricing_config.py +0 -87
  432. autobyteus/person/examples/sample_persons.py +0 -14
  433. autobyteus/person/examples/sample_roles.py +0 -14
  434. autobyteus/person/person.py +0 -29
  435. autobyteus/person/role.py +0 -14
  436. autobyteus/rpc/__init__.py +0 -73
  437. autobyteus/rpc/client/__init__.py +0 -17
  438. autobyteus/rpc/client/abstract_client_connection.py +0 -124
  439. autobyteus/rpc/client/client_connection_manager.py +0 -153
  440. autobyteus/rpc/client/sse_client_connection.py +0 -306
  441. autobyteus/rpc/client/stdio_client_connection.py +0 -280
  442. autobyteus/rpc/config/__init__.py +0 -13
  443. autobyteus/rpc/config/agent_server_config.py +0 -153
  444. autobyteus/rpc/config/agent_server_registry.py +0 -152
  445. autobyteus/rpc/hosting.py +0 -244
  446. autobyteus/rpc/protocol.py +0 -244
  447. autobyteus/rpc/server/__init__.py +0 -20
  448. autobyteus/rpc/server/agent_server_endpoint.py +0 -181
  449. autobyteus/rpc/server/base_method_handler.py +0 -40
  450. autobyteus/rpc/server/method_handlers.py +0 -259
  451. autobyteus/rpc/server/sse_server_handler.py +0 -182
  452. autobyteus/rpc/server/stdio_server_handler.py +0 -151
  453. autobyteus/rpc/server_main.py +0 -198
  454. autobyteus/rpc/transport_type.py +0 -13
  455. autobyteus/tools/bash/__init__.py +0 -2
  456. autobyteus/tools/bash/bash_executor.py +0 -100
  457. autobyteus/tools/browser/__init__.py +0 -2
  458. autobyteus/tools/browser/session_aware/__init__.py +0 -0
  459. autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
  460. autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
  461. autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
  462. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
  463. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
  464. autobyteus/tools/browser/session_aware/factory/__init__.py +0 -0
  465. autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
  466. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
  467. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
  468. autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
  469. autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
  470. autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
  471. autobyteus/tools/browser/standalone/__init__.py +0 -6
  472. autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
  473. autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
  474. autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
  475. autobyteus/tools/browser/standalone/navigate_to.py +0 -80
  476. autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -97
  477. autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -165
  478. autobyteus/tools/browser/standalone/webpage_reader.py +0 -101
  479. autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -101
  480. autobyteus/tools/file/file_editor.py +0 -200
  481. autobyteus/tools/google_search.py +0 -149
  482. autobyteus/tools/timer.py +0 -171
  483. autobyteus/tools/usage/parsers/__init__.py +0 -22
  484. autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
  485. autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
  486. autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
  487. autobyteus/tools/usage/parsers/base_parser.py +0 -41
  488. autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
  489. autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
  490. autobyteus/tools/usage/parsers/exceptions.py +0 -13
  491. autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
  492. autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
  493. autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
  494. autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
  495. autobyteus/workflow/phases/__init__.py +0 -11
  496. autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
  497. autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
  498. autobyteus-1.2.0.dist-info/METADATA +0 -205
  499. autobyteus-1.2.0.dist-info/RECORD +0 -496
  500. examples/__init__.py +0 -1
  501. examples/agent_team/__init__.py +0 -1
  502. examples/discover_phase_transitions.py +0 -104
  503. examples/run_browser_agent.py +0 -262
  504. examples/run_google_slides_agent.py +0 -287
  505. examples/run_mcp_browser_client.py +0 -174
  506. examples/run_mcp_google_slides_client.py +0 -270
  507. examples/run_mcp_list_tools.py +0 -189
  508. examples/run_poem_writer.py +0 -284
  509. examples/run_sqlite_agent.py +0 -295
  510. /autobyteus/{person → skills}/__init__.py +0 -0
  511. /autobyteus/{person/examples → tools/skill}/__init__.py +0 -0
  512. {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,2 +1 @@
1
1
  autobyteus
2
- examples
@@ -1,57 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py
2
- import logging
3
- from typing import TYPE_CHECKING
4
-
5
- from .base_bootstrap_step import BaseBootstrapStep
6
- from autobyteus.agent.events import AgentErrorEvent, AgentInputEventQueueManager
7
- # AgentOutputDataManager is no longer initialized here.
8
-
9
- if TYPE_CHECKING:
10
- from autobyteus.agent.context import AgentContext
11
- from autobyteus.agent.phases import AgentPhaseManager
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
- class AgentRuntimeQueueInitializationStep(BaseBootstrapStep):
16
- """
17
- Bootstrap step for initializing the agent's runtime INPUT event queues.
18
- These queues are created within the AgentWorker's event loop.
19
- Output data is now handled by emitting events via AgentExternalEventNotifier.
20
- """
21
- def __init__(self, input_queue_size: int = 0): # Removed output_queue_size
22
- self.input_queue_size = input_queue_size
23
- logger.debug(f"AgentRuntimeQueueInitializationStep initialized with input_q_size={input_queue_size}.")
24
-
25
- async def execute(self,
26
- context: 'AgentContext',
27
- phase_manager: 'AgentPhaseManager') -> bool:
28
- agent_id = context.agent_id
29
- logger.info(f"Agent '{agent_id}': Executing AgentRuntimeQueueInitializationStep (for input queues).")
30
-
31
- try:
32
- if context.state.input_event_queues is not None: # Check only input queues
33
- logger.warning(f"Agent '{agent_id}': Input runtime queues seem to be already initialized. Overwriting. This might indicate a logic error.")
34
-
35
- input_queues = AgentInputEventQueueManager(queue_size=self.input_queue_size)
36
- context.state.input_event_queues = input_queues
37
- # context.state.output_data_queues is no longer set here.
38
-
39
- logger.info(f"Agent '{agent_id}': AgentInputEventQueueManager initialized and set in agent state.")
40
- if context.state.input_event_queues is None: # pragma: no cover
41
- raise RuntimeError("Input event queue manager was not successfully set in agent state during AgentRuntimeQueueInitializationStep.")
42
-
43
- return True
44
- except Exception as e:
45
- error_message = f"Agent '{agent_id}': Critical failure during AgentRuntimeQueueInitializationStep (input queues): {e}"
46
- logger.error(error_message, exc_info=True)
47
-
48
- # Attempt to enqueue an error event if input_event_queues was partially created
49
- # This check itself might be problematic if input_queues is the thing that failed.
50
- # However, if it failed *after* assigning self.input_event_queues, this might work.
51
- if context.state.input_event_queues and context.state.input_event_queues.internal_system_event_queue: # pragma: no cover
52
- await context.state.input_event_queues.enqueue_internal_system_event(
53
- AgentErrorEvent(error_message=error_message, exception_details=str(e))
54
- )
55
- else: # pragma: no cover
56
- logger.error(f"Agent '{agent_id}': Cannot enqueue AgentErrorEvent as input_event_queues are not available after AgentRuntimeQueueInitializationStep failure.")
57
- return False
@@ -1,16 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/hooks/__init__.py
2
- """
3
- Components for defining and running lifecycle hooks based on agent phase transitions.
4
- """
5
- from .base_phase_hook import BasePhaseHook
6
- from .hook_definition import PhaseHookDefinition
7
- from .hook_meta import PhaseHookMeta
8
- from .hook_registry import PhaseHookRegistry, default_phase_hook_registry
9
-
10
- __all__ = [
11
- "BasePhaseHook",
12
- "PhaseHookDefinition",
13
- "PhaseHookMeta",
14
- "PhaseHookRegistry",
15
- "default_phase_hook_registry",
16
- ]
@@ -1,78 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/hooks/base_phase_hook.py
2
- import logging
3
- from abc import ABC, abstractmethod
4
- from typing import TYPE_CHECKING
5
-
6
- from autobyteus.agent.phases import AgentOperationalPhase
7
- from .hook_meta import PhaseHookMeta
8
-
9
- if TYPE_CHECKING:
10
- from autobyteus.agent.context import AgentContext
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
- class BasePhaseHook(ABC, metaclass=PhaseHookMeta):
15
- """
16
- Abstract base class for creating hooks that execute on specific agent
17
- phase transitions.
18
-
19
- Subclasses must define the `source_phase` and `target_phase` to specify
20
- the exact transition they are interested in, and implement the `execute`
21
- method for their custom logic.
22
- """
23
-
24
- @classmethod
25
- def get_name(cls) -> str:
26
- """
27
- Returns the unique registration name for this hook.
28
- Defaults to the class name. Can be overridden by subclasses.
29
- """
30
- return cls.__name__
31
-
32
- @classmethod
33
- def get_order(cls) -> int:
34
- """
35
- Returns the execution order for this hook if multiple hooks are triggered
36
- on the same transition. Lower numbers execute earlier.
37
- Defaults to 500 (normal priority).
38
- """
39
- return 500
40
-
41
- @classmethod
42
- def is_mandatory(cls) -> bool:
43
- """
44
- Returns True if this hook is mandatory for the agent to function correctly.
45
- Defaults to False (optional).
46
- """
47
- return False
48
-
49
- @property
50
- @abstractmethod
51
- def source_phase(self) -> AgentOperationalPhase:
52
- """The source phase for the transition this hook targets."""
53
- raise NotImplementedError
54
-
55
- @property
56
- @abstractmethod
57
- def target_phase(self) -> AgentOperationalPhase:
58
- """The target phase for the transition this hook targets."""
59
- raise NotImplementedError
60
-
61
- @abstractmethod
62
- async def execute(self, context: 'AgentContext') -> None:
63
- """
64
- The method executed when the specified phase transition occurs.
65
-
66
- Args:
67
- context: The agent's context at the time of the transition.
68
- """
69
- raise NotImplementedError
70
-
71
- def __repr__(self) -> str:
72
- # Use try-except in case properties are not yet implemented during introspection
73
- try:
74
- return (f"<{self.__class__.__name__} "
75
- f"source='{self.source_phase.value}' "
76
- f"target='{self.target_phase.value}'>")
77
- except (NotImplementedError, AttributeError):
78
- return f"<{self.__class__.__name__} (unconfigured)>"
@@ -1,36 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/hooks/hook_definition.py
2
- import logging
3
- from typing import Type, TYPE_CHECKING
4
-
5
- if TYPE_CHECKING:
6
- from .base_phase_hook import BasePhaseHook
7
-
8
- logger = logging.getLogger(__name__)
9
-
10
- class PhaseHookDefinition:
11
- """
12
- Represents the definition of a phase hook.
13
- Contains its registered name and the class itself.
14
- """
15
- def __init__(self, name: str, hook_class: Type['BasePhaseHook']):
16
- """
17
- Initializes the PhaseHookDefinition.
18
-
19
- Args:
20
- name: The unique registered name of the hook.
21
- hook_class: The class of the phase hook.
22
-
23
- Raises:
24
- ValueError: If name is empty or hook_class is not a type.
25
- """
26
- if not name or not isinstance(name, str):
27
- raise ValueError("Hook name must be a non-empty string.")
28
- if not isinstance(hook_class, type):
29
- raise ValueError("hook_class must be a class type.")
30
-
31
- self.name: str = name
32
- self.hook_class: Type['BasePhaseHook'] = hook_class
33
- logger.debug(f"PhaseHookDefinition created: name='{name}', class='{hook_class.__name__}'.")
34
-
35
- def __repr__(self) -> str:
36
- return f"<PhaseHookDefinition name='{self.name}', class='{self.hook_class.__name__}'>"
@@ -1,37 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/hooks/hook_meta.py
2
- import logging
3
- from abc import ABCMeta
4
-
5
- from .hook_registry import default_phase_hook_registry
6
- from .hook_definition import PhaseHookDefinition
7
-
8
- logger = logging.getLogger(__name__)
9
-
10
- class PhaseHookMeta(ABCMeta):
11
- """
12
- Metaclass for BasePhaseHook that automatically registers concrete
13
- hook subclasses with the default_phase_hook_registry.
14
- Registration uses the name obtained from the class method `get_name()`.
15
- """
16
- def __init__(cls, name, bases, dct):
17
- super().__init__(name, bases, dct)
18
-
19
- if name == 'BasePhaseHook' or getattr(cls, "__abstractmethods__", None):
20
- logger.debug(f"Skipping registration for abstract phase hook class: {name}")
21
- return
22
-
23
- try:
24
- hook_name = cls.get_name()
25
-
26
- if not hook_name or not isinstance(hook_name, str):
27
- logger.error(f"Phase hook class {name} must return a valid string from static get_name(). Skipping registration.")
28
- return
29
-
30
- definition = PhaseHookDefinition(name=hook_name, hook_class=cls)
31
- default_phase_hook_registry.register_hook(definition)
32
- logger.info(f"Auto-registered phase hook: '{hook_name}' from class {name} (no schema).")
33
-
34
- except AttributeError as e:
35
- logger.error(f"Phase hook class {name} is missing required static/class method 'get_name' ({e}). Skipping registration.")
36
- except Exception as e:
37
- logger.error(f"Failed to auto-register phase hook class {name}: {e}", exc_info=True)
@@ -1,106 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/hooks/hook_registry.py
2
- import logging
3
- from typing import TYPE_CHECKING, Dict, List, Optional
4
-
5
- from autobyteus.utils.singleton import SingletonMeta
6
- from autobyteus.agent.processor_option import HookOption
7
- from .hook_definition import PhaseHookDefinition
8
-
9
- if TYPE_CHECKING:
10
- from .base_phase_hook import BasePhaseHook
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
- class PhaseHookRegistry(metaclass=SingletonMeta):
15
- """
16
- A singleton registry for PhaseHookDefinition objects.
17
- Hooks are typically auto-registered via PhaseHookMeta.
18
- """
19
-
20
- def __init__(self):
21
- """Initializes the PhaseHookRegistry with an empty store."""
22
- self._definitions: Dict[str, PhaseHookDefinition] = {}
23
- logger.info("PhaseHookRegistry initialized.")
24
-
25
- def register_hook(self, definition: PhaseHookDefinition) -> None:
26
- """
27
- Registers a phase hook definition.
28
- """
29
- if not isinstance(definition, PhaseHookDefinition):
30
- raise TypeError(f"Expected PhaseHookDefinition instance, got {type(definition).__name__}.")
31
-
32
- hook_name = definition.name
33
- if hook_name in self._definitions:
34
- logger.warning(f"Overwriting existing phase hook definition for name: '{hook_name}'.")
35
-
36
- self._definitions[hook_name] = definition
37
- logger.info(f"Phase hook definition '{hook_name}' (class: '{definition.hook_class.__name__}') registered successfully.")
38
-
39
- def get_hook_definition(self, name: str) -> Optional[PhaseHookDefinition]:
40
- """
41
- Retrieves a phase hook definition by its name.
42
- """
43
- if not isinstance(name, str):
44
- logger.warning(f"Attempted to retrieve hook definition with non-string name: {type(name).__name__}.")
45
- return None
46
- definition = self._definitions.get(name)
47
- if not definition:
48
- logger.debug(f"Phase hook definition with name '{name}' not found in registry.")
49
- return definition
50
-
51
- def get_hook(self, name: str) -> Optional['BasePhaseHook']:
52
- """
53
- Retrieves an instance of a phase hook by its name.
54
- """
55
- definition = self.get_hook_definition(name)
56
- if definition:
57
- try:
58
- return definition.hook_class()
59
- except Exception as e:
60
- logger.error(f"Failed to instantiate phase hook '{name}' from class '{definition.hook_class.__name__}': {e}", exc_info=True)
61
- return None
62
- return None
63
-
64
- def list_hook_names(self) -> List[str]:
65
- """
66
- Returns an unordered list of names of all registered phase hook definitions.
67
- """
68
- return list(self._definitions.keys())
69
-
70
- def get_ordered_hook_options(self) -> List[HookOption]:
71
- """
72
- Returns a list of HookOption objects, sorted by their execution order.
73
- """
74
- definitions = list(self._definitions.values())
75
- sorted_definitions = sorted(definitions, key=lambda d: d.hook_class.get_order())
76
- return [
77
- HookOption(
78
- name=d.name,
79
- is_mandatory=d.hook_class.is_mandatory()
80
- ) for d in sorted_definitions
81
- ]
82
-
83
- def get_all_definitions(self) -> Dict[str, PhaseHookDefinition]:
84
- """
85
- Returns a shallow copy of the dictionary containing all registered phase hook definitions.
86
- """
87
- return dict(self._definitions)
88
-
89
- def clear(self) -> None:
90
- """Removes all definitions from the registry."""
91
- count = len(self._definitions)
92
- self._definitions.clear()
93
- logger.info(f"Cleared {count} definitions from the PhaseHookRegistry.")
94
-
95
- def __len__(self) -> int:
96
- """Returns the number of registered hook definitions."""
97
- return len(self._definitions)
98
-
99
- def __contains__(self, name: str) -> bool:
100
- """Checks if a hook definition is in the registry by name."""
101
- if isinstance(name, str):
102
- return name in self._definitions
103
- return False
104
-
105
- # Default instance of the registry
106
- default_phase_hook_registry = PhaseHookRegistry()
@@ -1,103 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py
2
- import logging
3
- from typing import TYPE_CHECKING, List
4
-
5
- from .base_processor import BaseLLMResponseProcessor
6
- from autobyteus.agent.events import PendingToolInvocationEvent
7
- from autobyteus.agent.tool_invocation import ToolInvocation, ToolInvocationTurn
8
- from autobyteus.tools.usage.parsers import ProviderAwareToolUsageParser
9
- from autobyteus.tools.usage.parsers.exceptions import ToolUsageParseException
10
-
11
- if TYPE_CHECKING:
12
- from autobyteus.agent.context import AgentContext
13
- from autobyteus.agent.events import LLMCompleteResponseReceivedEvent
14
- from autobyteus.llm.utils.response_types import CompleteResponse
15
-
16
- logger = logging.getLogger(__name__)
17
-
18
- class ProviderAwareToolUsageProcessor(BaseLLMResponseProcessor):
19
- """
20
- A "master" tool usage processor that uses a high-level parser from the
21
- `tools` module to extract tool invocations. It then ensures each invocation
22
- has a session-unique ID before enqueuing the necessary agent events.
23
- """
24
- INVOCATION_COUNTS_KEY = "agent_tool_invocation_counts"
25
-
26
- def __init__(self):
27
- self._parser = ProviderAwareToolUsageParser()
28
- logger.debug("ProviderAwareToolUsageProcessor initialized.")
29
-
30
- @classmethod
31
- def get_name(cls) -> str:
32
- return "ProviderAwareToolUsageProcessor"
33
-
34
- @classmethod
35
- def get_order(cls) -> int:
36
- """Runs with the highest priority to parse for tool calls before any other processing."""
37
- return 100
38
-
39
- @classmethod
40
- def is_mandatory(cls) -> bool:
41
- """This processor is essential for any agent that uses tools."""
42
- return True
43
-
44
- async def process_response(self, response: 'CompleteResponse', context: 'AgentContext', triggering_event: 'LLMCompleteResponseReceivedEvent') -> bool:
45
- """
46
- Uses a ProviderAwareToolUsageParser to get tool invocations, makes their
47
- IDs unique within the agent's session, and then enqueues a
48
- PendingToolInvocationEvent for each one.
49
- Propagates ToolUsageParseException if parsing fails.
50
- """
51
- try:
52
- # Delegate parsing to the high-level parser
53
- tool_invocations = self._parser.parse(response, context)
54
- except ToolUsageParseException:
55
- # Re-raise the exception to be caught by the event handler
56
- raise
57
-
58
- if not tool_invocations:
59
- return False
60
-
61
- # --- NEW LOGIC FOR UNIQUE ID GENERATION ---
62
-
63
- # Ensure the counter map exists in the agent's state's custom data
64
- if self.INVOCATION_COUNTS_KEY not in context.custom_data:
65
- context.custom_data[self.INVOCATION_COUNTS_KEY] = {}
66
-
67
- invocation_counts = context.custom_data[self.INVOCATION_COUNTS_KEY]
68
-
69
- processed_invocations: List[ToolInvocation] = []
70
-
71
- for invocation in tool_invocations:
72
- base_id = invocation.id
73
-
74
- # Get the current count for this base ID, default to 0
75
- count = invocation_counts.get(base_id, 0)
76
-
77
- # Create the new session-unique ID
78
- unique_id = f"{base_id}_{count}"
79
-
80
- # Update the invocation's ID in-place
81
- invocation.id = unique_id
82
-
83
- # Increment the counter for the next time this base ID is seen
84
- invocation_counts[base_id] = count + 1
85
-
86
- processed_invocations.append(invocation)
87
-
88
- # --- END NEW LOGIC ---
89
-
90
- # --- NEW: Initialize the multi-tool turn state ---
91
- if len(processed_invocations) > 0:
92
- logger.info(f"Agent '{context.agent_id}': Initializing multi-tool call turn with {len(processed_invocations)} invocations.")
93
- context.state.active_multi_tool_call_turn = ToolInvocationTurn(invocations=processed_invocations)
94
- # --- END NEW ---
95
-
96
- logger.info(f"Agent '{context.agent_id}': Parsed {len(processed_invocations)} tool invocations. Enqueuing events with unique IDs.")
97
- for invocation in processed_invocations:
98
- logger.info(f"Agent '{context.agent_id}' ({self.get_name()}) identified tool invocation: {invocation.name} with unique ID {invocation.id}. Enqueuing event.")
99
- await context.input_event_queues.enqueue_tool_invocation_request(
100
- PendingToolInvocationEvent(tool_invocation=invocation)
101
- )
102
-
103
- return True
@@ -1,18 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/phases/__init__.py
2
- """
3
- This package contains components for defining and describing agent operational phases
4
- and their transitions.
5
- """
6
- from .phase_enum import AgentOperationalPhase
7
- from .transition_info import PhaseTransitionInfo
8
- from .transition_decorator import phase_transition
9
- from .discover import PhaseTransitionDiscoverer
10
- from .manager import AgentPhaseManager
11
-
12
- __all__ = [
13
- "AgentOperationalPhase",
14
- "PhaseTransitionInfo",
15
- "phase_transition",
16
- "PhaseTransitionDiscoverer",
17
- "AgentPhaseManager",
18
- ]
@@ -1,53 +0,0 @@
1
- # file: autobyteus/autobyteus/agent/phases/discover.py
2
- import inspect
3
- import logging
4
- from typing import List, Optional
5
-
6
- from autobyteus.agent.phases.manager import AgentPhaseManager
7
-
8
- from .transition_info import PhaseTransitionInfo
9
-
10
- logger = logging.getLogger(__name__)
11
-
12
- class PhaseTransitionDiscoverer:
13
- """
14
- A utility class to discover all valid phase transitions within the system.
15
-
16
- It works by introspecting the AgentPhaseManager and finding methods
17
- that have been decorated with the `@phase_transition` decorator.
18
- """
19
- _cached_transitions: Optional[List[PhaseTransitionInfo]] = None
20
-
21
- @classmethod
22
- def discover(cls) -> List[PhaseTransitionInfo]:
23
- """
24
- Discovers and returns a list of all possible phase transitions.
25
-
26
- The result is cached after the first call for performance.
27
-
28
- Returns:
29
- A list of PhaseTransitionInfo objects, each describing a valid transition.
30
- """
31
- if cls._cached_transitions is not None:
32
- return cls._cached_transitions
33
-
34
- logger.debug("Discovering phase transitions from AgentPhaseManager for the first time.")
35
- transitions = []
36
- for name, method in inspect.getmembers(AgentPhaseManager, predicate=inspect.isfunction):
37
- if hasattr(method, '_transition_info'):
38
- info = getattr(method, '_transition_info')
39
- if isinstance(info, PhaseTransitionInfo):
40
- transitions.append(info)
41
-
42
- # Sort for deterministic output
43
- transitions.sort(key=lambda t: (t.target_phase.value, t.triggering_method))
44
-
45
- cls._cached_transitions = transitions
46
- logger.info(f"Discovered and cached {len(transitions)} phase transitions.")
47
- return transitions
48
-
49
- @classmethod
50
- def clear_cache(cls) -> None:
51
- """Clears the cached list of transitions."""
52
- cls._cached_transitions = None
53
- logger.info("Cleared cached phase transitions.")