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
@@ -86,7 +86,8 @@ class AutobyteusImageModelProvider:
86
86
  client_class=AutobyteusImageClient,
87
87
  runtime=MultimediaRuntime.AUTOBYTEUS,
88
88
  host_url=host_url,
89
- parameter_schema=model_info.get("parameter_schema")
89
+ parameter_schema=model_info.get("parameter_schema"),
90
+ description=model_info.get("description")
90
91
  )
91
92
 
92
93
  ImageClientFactory.register_model(image_model)
@@ -40,43 +40,75 @@ class ImageClientFactory(metaclass=SingletonMeta):
40
40
  """Initializes the registry with built-in image models and discovers remote ones."""
41
41
 
42
42
  # OpenAI Models
43
- gpt_image_1_schema = ParameterSchema(parameters=[
43
+ gpt_image_15_schema = ParameterSchema(parameters=[
44
44
  ParameterDefinition(name="n", param_type=ParameterType.INTEGER, default_value=1, enum_values=[1], description="The number of images to generate."),
45
45
  ParameterDefinition(name="size", param_type=ParameterType.ENUM, default_value="1024x1024", enum_values=["1024x1024", "1792x1024", "1024x1792"], description="The size of the generated images."),
46
- ParameterDefinition(name="quality", param_type=ParameterType.ENUM, default_value="hd", enum_values=["standard", "hd"], description="The quality of the image that will be generated."),
47
- ParameterDefinition(name="style", param_type=ParameterType.ENUM, default_value="vivid", enum_values=["vivid", "natural"], description="The style of the generated images.")
46
+ ParameterDefinition(name="quality", param_type=ParameterType.ENUM, default_value="auto", enum_values=["auto", "low", "medium", "high"], description="The quality of the image that will be generated.")
48
47
  ])
49
48
 
50
- gpt_image_1_model = ImageModel(
51
- name="gpt-image-1",
52
- value="dall-e-3",
49
+ gemini_image_schema = ParameterSchema(parameters=[
50
+ ParameterDefinition(name="n", param_type=ParameterType.INTEGER, default_value=1, enum_values=[1], description="The number of images to generate."),
51
+ ParameterDefinition(name="size", param_type=ParameterType.ENUM, default_value="1024x1024", enum_values=["1024x1024", "1792x1024", "1024x1792"], description="The size of the generated images."),
52
+ ParameterDefinition(name="quality", param_type=ParameterType.ENUM, default_value="auto", enum_values=["auto", "low", "medium", "high"], description="The quality of the image that will be generated.")
53
+ ])
54
+
55
+ gpt_image_15_model = ImageModel(
56
+ name="gpt-image-1.5",
57
+ value="gpt-image-1.5",
53
58
  provider=MultimediaProvider.OPENAI,
54
59
  client_class=OpenAIImageClient,
55
- parameter_schema=gpt_image_1_schema
60
+ parameter_schema=gpt_image_15_schema,
61
+ description=(
62
+ "OpenAI's latest **stateless (single-turn)** image model with faster renders, improved text rendering, "
63
+ "and higher fidelity edits. Same API surface as gpt-image-1."
64
+ )
56
65
  )
57
66
 
58
67
  # Google Imagen Models (via Gemini API)
59
68
  imagen_model = ImageModel(
60
69
  name="imagen-4",
61
70
  value="imagen-4.0-generate-001",
62
- provider=MultimediaProvider.GOOGLE,
71
+ provider=MultimediaProvider.GEMINI,
63
72
  client_class=GeminiImageClient,
64
- parameter_schema=None # The genai library doesn't expose these as simple params
73
+ parameter_schema=None, # The genai library doesn't expose these as simple params
74
+ description=(
75
+ "A high-fidelity **stateless (single-turn)** model. "
76
+ "Does **NOT** support input images (text-to-image only). "
77
+ "Any provided input images will be ignored."
78
+ )
65
79
  )
66
80
 
67
- # Google Gemini Flash Image Model (aka "Nano Banana")
81
+ # Google Gemini 2.5 Flash Image (legacy, still widely available)
68
82
  gemini_flash_image_model = ImageModel(
69
- name="gemini-2.5-flash-image-preview",
70
- value="gemini-2.5-flash-image-preview",
71
- provider=MultimediaProvider.GOOGLE,
83
+ name="gemini-2.5-flash-image",
84
+ value="gemini-2.5-flash-image",
85
+ provider=MultimediaProvider.GEMINI,
86
+ client_class=GeminiImageClient,
87
+ parameter_schema=None, # Parameters handled by genai library
88
+ description=(
89
+ "Fast **conversational (multi-turn)** multimodal image model. "
90
+ "Supports context retention and input images for edits/variations."
91
+ )
92
+ )
93
+
94
+ # Google Gemini 3 Pro Image (aka "Nano Banana Pro")
95
+ gemini_pro_image_model = ImageModel(
96
+ name="gemini-3-pro-image-preview",
97
+ value="gemini-3-pro-image-preview",
98
+ provider=MultimediaProvider.GEMINI,
72
99
  client_class=GeminiImageClient,
73
- parameter_schema=None # Parameters are not exposed for this model via the genai library.
100
+ parameter_schema=None, # genai library handles options internally
101
+ description=(
102
+ "High-quality **conversational (multi-turn)** image model for complex edits and 4K renders. "
103
+ "Supports up to 14 reference images, advanced text rendering, and thinking mode."
104
+ )
74
105
  )
75
106
 
76
107
  models_to_register = [
77
- gpt_image_1_model,
108
+ gpt_image_15_model,
78
109
  imagen_model,
79
110
  gemini_flash_image_model,
111
+ gemini_pro_image_model,
80
112
  ]
81
113
 
82
114
  for model in models_to_register:
@@ -50,7 +50,8 @@ class ImageModel(metaclass=ImageModelMeta):
50
50
  client_class: Type["BaseImageClient"],
51
51
  parameter_schema: Optional[Union[Dict[str, Any], ParameterSchema]] = None,
52
52
  runtime: MultimediaRuntime = MultimediaRuntime.API,
53
- host_url: Optional[str] = None
53
+ host_url: Optional[str] = None,
54
+ description: Optional[str] = None
54
55
  ):
55
56
  self.name = name
56
57
  self.value = value
@@ -58,6 +59,7 @@ class ImageModel(metaclass=ImageModelMeta):
58
59
  self.client_class = client_class
59
60
  self.runtime = runtime
60
61
  self.host_url = host_url
62
+ self.description = description
61
63
 
62
64
  if isinstance(parameter_schema, dict):
63
65
  self.parameter_schema = ParameterSchema.from_dict(parameter_schema)
@@ -79,7 +81,8 @@ class ImageModel(metaclass=ImageModelMeta):
79
81
  """Returns the unique identifier for the model."""
80
82
  if self.runtime == MultimediaRuntime.AUTOBYTEUS and self.host_url:
81
83
  try:
82
- host = urlparse(self.host_url).hostname
84
+ parsed = urlparse(self.host_url)
85
+ host = parsed.netloc or parsed.hostname or self.host_url
83
86
  return f"{self.name}@{host}"
84
87
  except Exception:
85
88
  return f"{self.name}@{self.host_url}" # Fallback
@@ -2,5 +2,6 @@ from enum import Enum
2
2
 
3
3
  class MultimediaProvider(Enum):
4
4
  OPENAI = "OPENAI"
5
- GOOGLE = "GOOGLE"
6
- ALIBABA_QWEN = "ALIBABA_QWEN"
5
+ GEMINI = "GEMINI"
6
+ QWEN = "QWEN"
7
+ AUTOBYTEUS = "AUTOBYTEUS"
@@ -0,0 +1,71 @@
1
+ import os
2
+ import logging
3
+ import re
4
+ from typing import Optional
5
+ from autobyteus.skills.model import Skill
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class SkillLoader:
10
+ """
11
+ Responsible for loading and parsing SKILL.md files.
12
+ Designed to be forgiving of minor formatting variations in LLM-generated content.
13
+ """
14
+
15
+ @staticmethod
16
+ def load_skill(path: str) -> Skill:
17
+ """
18
+ Loads a skill from a given directory path.
19
+ """
20
+ if not os.path.isdir(path):
21
+ raise FileNotFoundError(f"Skill directory not found: {path}")
22
+
23
+ skill_file = os.path.join(path, "SKILL.md")
24
+ if not os.path.exists(skill_file):
25
+ raise FileNotFoundError(f"SKILL.md not found in {path}")
26
+
27
+ try:
28
+ with open(skill_file, 'r', encoding='utf-8') as f:
29
+ raw_content = f.read()
30
+ except Exception as e:
31
+ raise IOError(f"Failed to read SKILL.md at {skill_file}: {e}")
32
+
33
+ return SkillLoader._parse_skill(raw_content, path)
34
+
35
+ @staticmethod
36
+ def _parse_skill(raw_content: str, root_path: str) -> Skill:
37
+ """
38
+ Parses the content of a SKILL.md file.
39
+ Extracts metadata from the frontmatter block (delimited by ---).
40
+ """
41
+ # Extract the frontmatter block
42
+ # Using a regex that is forgiving of whitespace around delimiters
43
+ match = re.search(r'^\s*---\s*\n(.*?)\n\s*---\s*\n(.*)', raw_content, re.DOTALL | re.MULTILINE)
44
+
45
+ if not match:
46
+ raise ValueError("Invalid SKILL.md format: Could not find frontmatter block delimited by '---'")
47
+
48
+ frontmatter_text = match.group(1)
49
+ body_content = match.group(2).strip()
50
+
51
+ # Parse frontmatter lines (Key: Value)
52
+ metadata = {}
53
+ for line in frontmatter_text.splitlines():
54
+ if ":" in line:
55
+ key, value = line.split(":", 1)
56
+ metadata[key.strip().lower()] = value.strip()
57
+
58
+ name = metadata.get("name")
59
+ description = metadata.get("description")
60
+
61
+ if not name:
62
+ raise ValueError("Missing 'name' in SKILL.md metadata")
63
+ if not description:
64
+ raise ValueError("Missing 'description' in SKILL.md metadata")
65
+
66
+ return Skill(
67
+ name=name,
68
+ description=description,
69
+ content=body_content,
70
+ root_path=root_path
71
+ )
@@ -0,0 +1,11 @@
1
+ from dataclasses import dataclass
2
+
3
+ @dataclass
4
+ class Skill:
5
+ """
6
+ Represents a loaded skill.
7
+ """
8
+ name: str
9
+ description: str
10
+ content: str # The body of the SKILL.md file
11
+ root_path: str # The absolute path to the skill directory
@@ -0,0 +1,70 @@
1
+ import os
2
+ import logging
3
+ from typing import Dict, List, Optional
4
+ from autobyteus.utils.singleton import SingletonMeta
5
+ from autobyteus.skills.model import Skill
6
+ from autobyteus.skills.loader import SkillLoader
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ class SkillRegistry(metaclass=SingletonMeta):
11
+ """
12
+ A singleton registry for managing and discovering agent skills.
13
+ """
14
+
15
+ def __init__(self):
16
+ self._skills: Dict[str, Skill] = {}
17
+ logger.info("SkillRegistry initialized.")
18
+
19
+ def register_skill_from_path(self, path: str) -> Skill:
20
+ """
21
+ Loads a skill from the given path and registers it.
22
+ If a skill with the same name already exists, it will be overwritten.
23
+ """
24
+ try:
25
+ skill = SkillLoader.load_skill(path)
26
+ self._skills[skill.name] = skill
27
+ logger.info(f"Skill '{skill.name}' registered from path: {path}")
28
+ return skill
29
+ except Exception as e:
30
+ logger.error(f"Failed to register skill from path '{path}': {e}")
31
+ raise
32
+
33
+ def discover_skills(self, directory_path: str):
34
+ """
35
+ Scans a directory for skill subdirectories (those containing SKILL.md)
36
+ and registers them.
37
+ """
38
+ if not os.path.isdir(directory_path):
39
+ logger.warning(f"Discovery directory not found: {directory_path}")
40
+ return
41
+
42
+ logger.debug(f"Discovering skills in: {directory_path}")
43
+ for entry in os.scandir(directory_path):
44
+ if entry.is_dir():
45
+ skill_md_path = os.path.join(entry.path, "SKILL.md")
46
+ if os.path.exists(skill_md_path):
47
+ try:
48
+ self.register_skill_from_path(entry.path)
49
+ except Exception:
50
+ # Continue discovering other skills even if one fails
51
+ continue
52
+
53
+ def get_skill(self, name: str) -> Optional[Skill]:
54
+ """
55
+ Retrieves a skill by its name.
56
+ """
57
+ return self._skills.get(name)
58
+
59
+ def list_skills(self) -> List[Skill]:
60
+ """
61
+ Returns a list of all registered skills.
62
+ """
63
+ return list(self._skills.values())
64
+
65
+ def clear(self):
66
+ """
67
+ Clears all registered skills. Primarily for testing.
68
+ """
69
+ self._skills.clear()
70
+ logger.debug("SkillRegistry cleared.")
@@ -1,23 +1,36 @@
1
1
  # file: autobyteus/autobyteus/task_management/__init__.py
2
2
  """
3
3
  This package defines components for task management and state tracking,
4
- including task plans and live task boards. It is designed to be a general-purpose
5
- module usable by various components, such as agents or agent teams.
4
+ including task plans and live plan execution tracking. It is designed to be a
5
+ general-purpose module usable by various components, such as agents or agent teams.
6
6
  """
7
7
  from .task import Task
8
8
  from .schemas import (TasksDefinitionSchema, TaskDefinitionSchema, TaskStatusReportSchema,
9
- TaskStatusReportItemSchema, FileDeliverableSchema)
10
- from .base_task_board import BaseTaskBoard, TaskStatus
11
- from .in_memory_task_board import InMemoryTaskBoard
9
+ TaskStatusReportItemSchema, FileDeliverableSchema, ToDoDefinitionSchema, ToDosDefinitionSchema)
10
+ from .base_task_plan import BaseTaskPlan, TaskStatus
11
+ from .in_memory_task_plan import InMemoryTaskPlan
12
12
  from .deliverable import FileDeliverable
13
- from .tools import GetTaskBoardStatus, PublishTasks, PublishTask, UpdateTaskStatus, AssignTaskTo
14
- from .converters import TaskBoardConverter
15
- from .events import BaseTaskBoardEvent, TasksAddedEvent, TaskStatusUpdatedEvent
13
+ from .tools import (
14
+ GetTaskPlanStatus,
15
+ CreateTasks,
16
+ CreateTask,
17
+ UpdateTaskStatus,
18
+ AssignTaskTo,
19
+ GetMyTasks,
20
+ CreateToDoList,
21
+ AddToDo,
22
+ GetToDoList,
23
+ UpdateToDoStatus as UpdateToDoStatusTool,
24
+ )
25
+ from .converters import TaskPlanConverter
26
+ from .events import BaseTaskPlanEvent, TasksCreatedEvent, TaskStatusUpdatedEvent
27
+ from .todo import ToDo, ToDoStatus
28
+ from .todo_list import ToDoList
16
29
 
17
- # For convenience, we can alias InMemoryTaskBoard as the default TaskBoard.
18
- # This allows other parts of the code to import `TaskBoard` without needing
30
+ # For convenience, we can alias InMemoryTaskPlan as the default TaskPlan.
31
+ # This allows other parts of the code to import `TaskPlan` without needing
19
32
  # to know the specific implementation being used by default.
20
- TaskBoard = InMemoryTaskBoard
33
+ TaskPlan = InMemoryTaskPlan
21
34
 
22
35
  __all__ = [
23
36
  "Task",
@@ -26,18 +39,28 @@ __all__ = [
26
39
  "TaskStatusReportSchema",
27
40
  "TaskStatusReportItemSchema",
28
41
  "FileDeliverableSchema",
29
- "BaseTaskBoard",
42
+ "ToDoDefinitionSchema",
43
+ "ToDosDefinitionSchema",
44
+ "BaseTaskPlan",
30
45
  "TaskStatus",
31
- "InMemoryTaskBoard",
32
- "TaskBoard", # Exposing the alias
46
+ "InMemoryTaskPlan",
47
+ "TaskPlan", # Exposing the alias
33
48
  "FileDeliverable",
34
- "GetTaskBoardStatus",
35
- "PublishTasks",
36
- "PublishTask",
49
+ "GetTaskPlanStatus",
50
+ "CreateTasks",
51
+ "CreateTask",
37
52
  "UpdateTaskStatus",
38
53
  "AssignTaskTo",
39
- "TaskBoardConverter",
40
- "BaseTaskBoardEvent",
41
- "TasksAddedEvent",
54
+ "GetMyTasks",
55
+ "CreateToDoList",
56
+ "AddToDo",
57
+ "GetToDoList",
58
+ "UpdateToDoStatusTool",
59
+ "TaskPlanConverter",
60
+ "BaseTaskPlanEvent",
61
+ "TasksCreatedEvent",
42
62
  "TaskStatusUpdatedEvent",
63
+ "ToDo",
64
+ "ToDoStatus",
65
+ "ToDoList",
43
66
  ]
@@ -1,19 +1,22 @@
1
- # file: autobyteus/autobyteus/task_management/base_task_board.py
1
+ # file: autobyteus/autobyteus/task_management/base_task_plan.py
2
2
  """
3
- Defines the abstract interface for a TaskBoard and its related enums.
3
+ Defines the abstract interface for a TaskPlan and its related enums.
4
4
  """
5
5
  import logging
6
6
  from abc import ABC, abstractmethod
7
7
  from enum import Enum
8
- from typing import Dict, Any, List, Optional
8
+ from typing import Dict, Any, List, Optional, TYPE_CHECKING
9
9
 
10
10
  from autobyteus.events.event_emitter import EventEmitter
11
11
  from .task import Task
12
12
 
13
+ if TYPE_CHECKING:
14
+ from autobyteus.task_management.schemas import TaskDefinitionSchema
15
+
13
16
  logger = logging.getLogger(__name__)
14
17
 
15
18
  class TaskStatus(str, Enum):
16
- """Enumerates the possible lifecycle states of a task on the TaskBoard."""
19
+ """Enumerates the possible lifecycle states of a task on the TaskPlan."""
17
20
  NOT_STARTED = "not_started"
18
21
  QUEUED = "queued"
19
22
  IN_PROGRESS = "in_progress"
@@ -25,12 +28,12 @@ class TaskStatus(str, Enum):
25
28
  """Returns True if the status is a final state."""
26
29
  return self in {TaskStatus.COMPLETED, TaskStatus.FAILED}
27
30
 
28
- class BaseTaskBoard(ABC, EventEmitter):
31
+ class BaseTaskPlan(ABC, EventEmitter):
29
32
  """
30
- Abstract base class for a TaskBoard.
33
+ Abstract base class for a TaskPlan.
31
34
 
32
35
  This class defines the contract for any component that manages the live state
33
- of tasks for a team. It is a dynamic board, not a static plan.
36
+ of tasks for a team. It is a dynamic plan, not a static document.
34
37
  It inherits from EventEmitter to broadcast state changes.
35
38
  """
36
39
 
@@ -38,19 +41,19 @@ class BaseTaskBoard(ABC, EventEmitter):
38
41
  EventEmitter.__init__(self)
39
42
  self.team_id = team_id
40
43
  self.tasks: List[Task] = []
41
- logger.debug(f"BaseTaskBoard initialized for team '{self.team_id}'.")
44
+ logger.debug(f"BaseTaskPlan initialized for team '{self.team_id}'.")
42
45
 
43
46
  @abstractmethod
44
- def add_tasks(self, tasks: List[Task]) -> bool:
47
+ def add_tasks(self, task_definitions: List['TaskDefinitionSchema']) -> List[Task]:
45
48
  """
46
- Adds a list of new tasks to the board. This is an additive-only operation.
49
+ Creates new tasks from definitions, adds them to the plan, and returns the created Task objects.
47
50
  """
48
51
  raise NotImplementedError
49
52
 
50
53
  @abstractmethod
51
- def add_task(self, task: Task) -> bool:
54
+ def add_task(self, task_definition: 'TaskDefinitionSchema') -> Optional[Task]:
52
55
  """
53
- Adds a single new task to the board.
56
+ Creates a single new task from a definition, adds it to the plan, and returns it.
54
57
  """
55
58
  raise NotImplementedError
56
59
 
@@ -64,7 +67,7 @@ class BaseTaskBoard(ABC, EventEmitter):
64
67
  @abstractmethod
65
68
  def get_status_overview(self) -> Dict[str, Any]:
66
69
  """
67
- Returns a serializable dictionary of the board's current state.
70
+ Returns a serializable dictionary of the plan's current state.
68
71
  """
69
72
  raise NotImplementedError
70
73
 
@@ -2,8 +2,8 @@
2
2
  """
3
3
  Exposes the public converters for the task management module.
4
4
  """
5
- from .task_board_converter import TaskBoardConverter
5
+ from .task_plan_converter import TaskPlanConverter
6
6
 
7
7
  __all__ = [
8
- "TaskBoardConverter",
8
+ "TaskPlanConverter",
9
9
  ]
@@ -1,4 +1,4 @@
1
- # file: autobyteus/autobyteus/task_management/converters/task_board_converter.py
1
+ # file: autobyteus/autobyteus/task_management/converters/task_plan_converter.py
2
2
  """
3
3
  Contains converters for translating internal task management objects into
4
4
  LLM-friendly Pydantic schemas.
@@ -6,35 +6,35 @@ LLM-friendly Pydantic schemas.
6
6
  import logging
7
7
  from typing import Optional
8
8
 
9
- from autobyteus.task_management.base_task_board import BaseTaskBoard
9
+ from autobyteus.task_management.base_task_plan import BaseTaskPlan
10
10
  from autobyteus.task_management.schemas import TaskStatusReportSchema, TaskStatusReportItemSchema
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
14
- class TaskBoardConverter:
15
- """A converter to transform TaskBoard state into LLM-friendly schemas."""
14
+ class TaskPlanConverter:
15
+ """A converter to transform TaskPlan state into LLM-friendly schemas."""
16
16
 
17
17
  @staticmethod
18
- def to_schema(task_board: BaseTaskBoard) -> Optional[TaskStatusReportSchema]:
18
+ def to_schema(task_plan: BaseTaskPlan) -> Optional[TaskStatusReportSchema]:
19
19
  """
20
- Converts the current state of a TaskBoard into a TaskStatusReportSchema.
20
+ Converts the current state of a TaskPlan into a TaskStatusReportSchema.
21
21
 
22
22
  Args:
23
- task_board: The task board instance to convert.
23
+ task_plan: The task plan instance to convert.
24
24
 
25
25
  Returns:
26
26
  A TaskStatusReportSchema object if there are tasks, otherwise None.
27
27
  """
28
- if not task_board.tasks:
29
- logger.debug(f"TaskBoard for team '{task_board.team_id}' has no tasks. Cannot generate report.")
28
+ if not task_plan.tasks:
29
+ logger.debug(f"TaskPlan for team '{task_plan.team_id}' has no tasks. Cannot generate report.")
30
30
  return None
31
31
 
32
- internal_status = task_board.get_status_overview()
32
+ internal_status = task_plan.get_status_overview()
33
33
 
34
- id_to_name_map = {task.task_id: task.task_name for task in task_board.tasks}
34
+ id_to_name_map = {task.task_id: task.task_name for task in task_plan.tasks}
35
35
 
36
36
  report_items = []
37
- for task in task_board.tasks:
37
+ for task in task_plan.tasks:
38
38
  dep_names = [id_to_name_map.get(dep_id, str(dep_id)) for dep_id in task.dependencies]
39
39
 
40
40
  report_item = TaskStatusReportItemSchema(
@@ -51,5 +51,5 @@ class TaskBoardConverter:
51
51
  tasks=report_items
52
52
  )
53
53
 
54
- logger.debug(f"Successfully converted TaskBoard state to TaskStatusReportSchema for team '{task_board.team_id}'.")
54
+ logger.debug(f"Successfully converted TaskPlan state to TaskStatusReportSchema for team '{task_plan.team_id}'.")
55
55
  return status_report
@@ -1,25 +1,25 @@
1
1
  # file: autobyteus/autobyteus/task_management/events.py
2
2
  """
3
- Defines the Pydantic models for events emitted by a TaskBoard.
3
+ Defines the Pydantic models for events emitted by a TaskPlan.
4
4
  """
5
5
  from typing import List, Optional
6
6
  from pydantic import BaseModel
7
7
 
8
8
  from autobyteus.task_management.task import Task
9
- from autobyteus.task_management.base_task_board import TaskStatus
9
+ from autobyteus.task_management.base_task_plan import TaskStatus
10
10
  from .deliverable import FileDeliverable
11
11
 
12
- class BaseTaskBoardEvent(BaseModel):
13
- """Base class for all task board events."""
12
+ class BaseTaskPlanEvent(BaseModel):
13
+ """Base class for all task plan events."""
14
14
  team_id: str
15
15
 
16
- class TasksAddedEvent(BaseTaskBoardEvent):
16
+ class TasksCreatedEvent(BaseTaskPlanEvent):
17
17
  """
18
- Payload for when one or more tasks are added to the board.
18
+ Payload for when one or more tasks are created in the plan.
19
19
  """
20
20
  tasks: List[Task]
21
21
 
22
- class TaskStatusUpdatedEvent(BaseTaskBoardEvent):
22
+ class TaskStatusUpdatedEvent(BaseTaskPlanEvent):
23
23
  """Payload for when a task's status is updated."""
24
24
  task_id: str
25
25
  new_status: TaskStatus