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.
- autobyteus/agent/agent.py +15 -5
- autobyteus/agent/bootstrap_steps/__init__.py +1 -3
- autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +3 -59
- autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
- autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
- autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
- autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
- autobyteus/agent/context/agent_config.py +43 -20
- autobyteus/agent/context/agent_context.py +23 -18
- autobyteus/agent/context/agent_runtime_state.py +23 -19
- autobyteus/agent/events/__init__.py +16 -1
- autobyteus/agent/events/agent_events.py +43 -3
- autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
- autobyteus/agent/events/event_store.py +57 -0
- autobyteus/agent/events/notifiers.py +74 -60
- autobyteus/agent/events/worker_event_dispatcher.py +21 -64
- autobyteus/agent/factory/agent_factory.py +52 -0
- autobyteus/agent/handlers/__init__.py +2 -0
- autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
- autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
- autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
- autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
- autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
- autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
- autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
- autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
- autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
- autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
- autobyteus/agent/input_processor/memory_ingest_input_processor.py +40 -0
- autobyteus/agent/lifecycle/__init__.py +12 -0
- autobyteus/agent/lifecycle/base_processor.py +109 -0
- autobyteus/agent/lifecycle/events.py +35 -0
- autobyteus/agent/lifecycle/processor_definition.py +36 -0
- autobyteus/agent/lifecycle/processor_registry.py +106 -0
- autobyteus/agent/llm_request_assembler.py +98 -0
- autobyteus/agent/llm_response_processor/__init__.py +1 -8
- autobyteus/agent/message/context_file_type.py +1 -1
- autobyteus/agent/message/send_message_to.py +5 -4
- autobyteus/agent/runtime/agent_runtime.py +29 -21
- autobyteus/agent/runtime/agent_worker.py +98 -19
- autobyteus/agent/shutdown_steps/__init__.py +2 -0
- autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
- autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
- autobyteus/agent/status/__init__.py +14 -0
- autobyteus/agent/status/manager.py +93 -0
- autobyteus/agent/status/status_deriver.py +96 -0
- autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
- autobyteus/agent/status/status_update_utils.py +73 -0
- autobyteus/agent/streaming/__init__.py +52 -5
- autobyteus/agent/streaming/adapters/__init__.py +18 -0
- autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
- autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
- autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
- autobyteus/agent/streaming/agent_event_stream.py +3 -178
- autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
- autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
- autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
- autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/events/__init__.py +6 -0
- autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
- autobyteus/agent/streaming/events/stream_events.py +141 -0
- autobyteus/agent/streaming/handlers/__init__.py +15 -0
- autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
- autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
- autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
- autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
- autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
- autobyteus/agent/streaming/parser/__init__.py +61 -0
- autobyteus/agent/streaming/parser/event_emitter.py +181 -0
- autobyteus/agent/streaming/parser/events.py +4 -0
- autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
- autobyteus/agent/streaming/parser/parser_context.py +227 -0
- autobyteus/agent/streaming/parser/parser_factory.py +132 -0
- autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
- autobyteus/agent/streaming/parser/state_factory.py +62 -0
- autobyteus/agent/streaming/parser/states/__init__.py +1 -0
- autobyteus/agent/streaming/parser/states/base_state.py +60 -0
- autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
- autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
- autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
- autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
- autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
- autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
- autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
- autobyteus/agent/streaming/parser/states/text_state.py +78 -0
- autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
- autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
- autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
- autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
- autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
- autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
- autobyteus/agent/streaming/parser/strategies/base.py +24 -0
- autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
- autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
- autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
- autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
- autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
- autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
- autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
- autobyteus/agent/streaming/parser/tool_constants.py +7 -0
- autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
- autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
- autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/queue_streamer.py +3 -57
- autobyteus/agent/streaming/segments/__init__.py +5 -0
- autobyteus/agent/streaming/segments/segment_events.py +81 -0
- autobyteus/agent/streaming/stream_event_payloads.py +2 -198
- autobyteus/agent/streaming/stream_events.py +3 -128
- autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
- autobyteus/agent/streaming/streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/streams/__init__.py +5 -0
- autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
- autobyteus/agent/streaming/utils/__init__.py +5 -0
- autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
- autobyteus/agent/system_prompt_processor/__init__.py +2 -0
- autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
- autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
- autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
- autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
- autobyteus/agent/token_budget.py +56 -0
- autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
- autobyteus/agent/tool_invocation.py +16 -40
- autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
- autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
- autobyteus/agent/utils/wait_for_idle.py +12 -14
- autobyteus/agent/workspace/base_workspace.py +6 -27
- autobyteus/agent_team/agent_team.py +3 -3
- autobyteus/agent_team/agent_team_builder.py +1 -41
- autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
- autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
- autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
- autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
- autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
- autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +5 -6
- autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +15 -15
- autobyteus/agent_team/context/agent_team_config.py +6 -3
- autobyteus/agent_team/context/agent_team_context.py +25 -3
- autobyteus/agent_team/context/agent_team_runtime_state.py +11 -8
- autobyteus/agent_team/events/__init__.py +11 -0
- autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
- autobyteus/agent_team/events/agent_team_events.py +16 -0
- autobyteus/agent_team/events/event_store.py +57 -0
- autobyteus/agent_team/factory/agent_team_factory.py +8 -0
- autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
- autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
- autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
- autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
- autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
- autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
- autobyteus/agent_team/status/__init__.py +14 -0
- autobyteus/agent_team/status/agent_team_status.py +18 -0
- autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
- autobyteus/agent_team/status/status_deriver.py +62 -0
- autobyteus/agent_team/status/status_update_utils.py +42 -0
- autobyteus/agent_team/streaming/__init__.py +2 -2
- autobyteus/agent_team/streaming/agent_team_event_notifier.py +10 -10
- autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +7 -7
- autobyteus/agent_team/streaming/agent_team_stream_events.py +11 -11
- autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
- autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
- autobyteus/agent_team/task_notification/activation_policy.py +1 -1
- autobyteus/agent_team/task_notification/system_event_driven_agent_task_notifier.py +22 -22
- autobyteus/agent_team/task_notification/task_notification_mode.py +20 -1
- autobyteus/agent_team/utils/wait_for_idle.py +4 -4
- autobyteus/cli/agent_cli.py +18 -10
- autobyteus/cli/agent_team_tui/app.py +18 -15
- autobyteus/cli/agent_team_tui/state.py +21 -23
- autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
- autobyteus/cli/agent_team_tui/widgets/focus_pane.py +146 -39
- autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
- autobyteus/cli/agent_team_tui/widgets/shared.py +26 -26
- autobyteus/cli/agent_team_tui/widgets/{task_board_panel.py → task_plan_panel.py} +5 -5
- autobyteus/cli/cli_display.py +193 -44
- autobyteus/cli/workflow_tui/app.py +9 -10
- autobyteus/cli/workflow_tui/state.py +14 -16
- autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
- autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
- autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
- autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
- autobyteus/clients/autobyteus_client.py +94 -1
- autobyteus/events/event_types.py +15 -21
- autobyteus/llm/api/autobyteus_llm.py +33 -29
- autobyteus/llm/api/claude_llm.py +142 -36
- autobyteus/llm/api/gemini_llm.py +163 -59
- autobyteus/llm/api/grok_llm.py +1 -1
- autobyteus/llm/api/minimax_llm.py +26 -0
- autobyteus/llm/api/mistral_llm.py +113 -87
- autobyteus/llm/api/ollama_llm.py +9 -42
- autobyteus/llm/api/openai_compatible_llm.py +127 -91
- autobyteus/llm/api/openai_llm.py +3 -3
- autobyteus/llm/api/openai_responses_llm.py +324 -0
- autobyteus/llm/api/zhipu_llm.py +21 -2
- autobyteus/llm/autobyteus_provider.py +70 -60
- autobyteus/llm/base_llm.py +85 -81
- autobyteus/llm/converters/__init__.py +14 -0
- autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
- autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
- autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
- autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
- autobyteus/llm/extensions/base_extension.py +6 -12
- autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
- autobyteus/llm/llm_factory.py +282 -204
- autobyteus/llm/lmstudio_provider.py +60 -49
- autobyteus/llm/models.py +35 -2
- autobyteus/llm/ollama_provider.py +60 -49
- autobyteus/llm/ollama_provider_resolver.py +0 -1
- autobyteus/llm/prompt_renderers/__init__.py +19 -0
- autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
- autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
- autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
- autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
- autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
- autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
- autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
- autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
- autobyteus/llm/providers.py +1 -3
- autobyteus/llm/token_counter/claude_token_counter.py +56 -25
- autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
- autobyteus/llm/token_counter/openai_token_counter.py +24 -5
- autobyteus/llm/token_counter/token_counter_factory.py +12 -5
- autobyteus/llm/utils/llm_config.py +6 -12
- autobyteus/llm/utils/media_payload_formatter.py +27 -20
- autobyteus/llm/utils/messages.py +55 -3
- autobyteus/llm/utils/response_types.py +3 -0
- autobyteus/llm/utils/tool_call_delta.py +31 -0
- autobyteus/memory/__init__.py +32 -0
- autobyteus/memory/active_transcript.py +69 -0
- autobyteus/memory/compaction/__init__.py +9 -0
- autobyteus/memory/compaction/compaction_result.py +8 -0
- autobyteus/memory/compaction/compactor.py +89 -0
- autobyteus/memory/compaction/summarizer.py +11 -0
- autobyteus/memory/compaction_snapshot_builder.py +84 -0
- autobyteus/memory/memory_manager.py +183 -0
- autobyteus/memory/models/__init__.py +14 -0
- autobyteus/memory/models/episodic_item.py +41 -0
- autobyteus/memory/models/memory_types.py +7 -0
- autobyteus/memory/models/raw_trace_item.py +79 -0
- autobyteus/memory/models/semantic_item.py +41 -0
- autobyteus/memory/models/tool_interaction.py +20 -0
- autobyteus/memory/policies/__init__.py +5 -0
- autobyteus/memory/policies/compaction_policy.py +16 -0
- autobyteus/memory/retrieval/__init__.py +7 -0
- autobyteus/memory/retrieval/memory_bundle.py +11 -0
- autobyteus/memory/retrieval/retriever.py +13 -0
- autobyteus/memory/store/__init__.py +7 -0
- autobyteus/memory/store/base_store.py +14 -0
- autobyteus/memory/store/file_store.py +98 -0
- autobyteus/memory/tool_interaction_builder.py +46 -0
- autobyteus/memory/turn_tracker.py +9 -0
- autobyteus/multimedia/audio/api/__init__.py +3 -2
- autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
- autobyteus/multimedia/audio/api/gemini_audio_client.py +108 -16
- autobyteus/multimedia/audio/api/openai_audio_client.py +112 -0
- autobyteus/multimedia/audio/audio_client_factory.py +84 -9
- autobyteus/multimedia/audio/audio_model.py +2 -1
- autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
- autobyteus/multimedia/image/api/gemini_image_client.py +38 -17
- autobyteus/multimedia/image/api/openai_image_client.py +125 -43
- autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
- autobyteus/multimedia/image/image_client_factory.py +47 -15
- autobyteus/multimedia/image/image_model.py +5 -2
- autobyteus/multimedia/providers.py +3 -2
- autobyteus/skills/loader.py +71 -0
- autobyteus/skills/model.py +11 -0
- autobyteus/skills/registry.py +70 -0
- autobyteus/task_management/__init__.py +43 -20
- autobyteus/task_management/{base_task_board.py → base_task_plan.py} +16 -13
- autobyteus/task_management/converters/__init__.py +2 -2
- autobyteus/task_management/converters/{task_board_converter.py → task_plan_converter.py} +13 -13
- autobyteus/task_management/events.py +7 -7
- autobyteus/task_management/{in_memory_task_board.py → in_memory_task_plan.py} +34 -22
- autobyteus/task_management/schemas/__init__.py +3 -0
- autobyteus/task_management/schemas/task_status_report.py +2 -2
- autobyteus/task_management/schemas/todo_definition.py +15 -0
- autobyteus/task_management/todo.py +29 -0
- autobyteus/task_management/todo_list.py +75 -0
- autobyteus/task_management/tools/__init__.py +24 -8
- autobyteus/task_management/tools/task_tools/__init__.py +19 -0
- autobyteus/task_management/tools/{assign_task_to.py → task_tools/assign_task_to.py} +18 -18
- autobyteus/task_management/tools/{publish_task.py → task_tools/create_task.py} +16 -18
- autobyteus/task_management/tools/{publish_tasks.py → task_tools/create_tasks.py} +19 -19
- autobyteus/task_management/tools/{get_my_tasks.py → task_tools/get_my_tasks.py} +15 -15
- autobyteus/task_management/tools/{get_task_board_status.py → task_tools/get_task_plan_status.py} +16 -16
- autobyteus/task_management/tools/{update_task_status.py → task_tools/update_task_status.py} +16 -16
- autobyteus/task_management/tools/todo_tools/__init__.py +18 -0
- autobyteus/task_management/tools/todo_tools/add_todo.py +78 -0
- autobyteus/task_management/tools/todo_tools/create_todo_list.py +79 -0
- autobyteus/task_management/tools/todo_tools/get_todo_list.py +55 -0
- autobyteus/task_management/tools/todo_tools/update_todo_status.py +85 -0
- autobyteus/tools/__init__.py +43 -52
- autobyteus/tools/base_tool.py +7 -0
- autobyteus/tools/file/__init__.py +9 -0
- autobyteus/tools/file/patch_file.py +149 -0
- autobyteus/tools/file/{file_reader.py → read_file.py} +38 -7
- autobyteus/tools/file/{file_writer.py → write_file.py} +7 -4
- autobyteus/tools/functional_tool.py +53 -14
- autobyteus/tools/mcp/__init__.py +2 -0
- autobyteus/tools/mcp/config_service.py +5 -1
- autobyteus/tools/mcp/server/__init__.py +2 -0
- autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
- autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
- autobyteus/tools/mcp/server_instance_manager.py +8 -1
- autobyteus/tools/mcp/tool.py +3 -3
- autobyteus/tools/mcp/tool_registrar.py +5 -2
- autobyteus/tools/mcp/types.py +61 -0
- autobyteus/tools/multimedia/__init__.py +2 -1
- autobyteus/tools/multimedia/audio_tools.py +72 -19
- autobyteus/tools/{download_media_tool.py → multimedia/download_media_tool.py} +21 -7
- autobyteus/tools/multimedia/image_tools.py +248 -64
- autobyteus/tools/multimedia/media_reader_tool.py +1 -1
- autobyteus/tools/operation_executor/journal_manager.py +107 -0
- autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
- autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
- autobyteus/tools/operation_executor/operation_executor.py +58 -0
- autobyteus/tools/registry/tool_definition.py +108 -14
- autobyteus/tools/registry/tool_registry.py +29 -0
- autobyteus/tools/search/__init__.py +17 -0
- autobyteus/tools/search/base_strategy.py +35 -0
- autobyteus/tools/search/client.py +24 -0
- autobyteus/tools/search/factory.py +81 -0
- autobyteus/tools/search/google_cse_strategy.py +68 -0
- autobyteus/tools/search/providers.py +10 -0
- autobyteus/tools/search/serpapi_strategy.py +65 -0
- autobyteus/tools/search/serper_strategy.py +87 -0
- autobyteus/tools/search_tool.py +83 -0
- autobyteus/tools/skill/load_skill.py +50 -0
- autobyteus/tools/terminal/__init__.py +45 -0
- autobyteus/tools/terminal/ansi_utils.py +32 -0
- autobyteus/tools/terminal/background_process_manager.py +233 -0
- autobyteus/tools/terminal/output_buffer.py +105 -0
- autobyteus/tools/terminal/prompt_detector.py +63 -0
- autobyteus/tools/terminal/pty_session.py +241 -0
- autobyteus/tools/terminal/session_factory.py +20 -0
- autobyteus/tools/terminal/terminal_session_manager.py +226 -0
- autobyteus/tools/terminal/tools/__init__.py +13 -0
- autobyteus/tools/terminal/tools/get_process_output.py +81 -0
- autobyteus/tools/terminal/tools/run_bash.py +109 -0
- autobyteus/tools/terminal/tools/start_background_process.py +104 -0
- autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
- autobyteus/tools/terminal/types.py +54 -0
- autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
- autobyteus/tools/terminal/wsl_utils.py +156 -0
- autobyteus/tools/tool_meta.py +4 -24
- autobyteus/tools/transaction_management/backup_handler.py +48 -0
- autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
- autobyteus/tools/usage/__init__.py +1 -2
- autobyteus/tools/usage/formatters/__init__.py +17 -1
- autobyteus/tools/usage/formatters/base_formatter.py +8 -0
- autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
- autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
- autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
- autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
- autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
- autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
- autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
- autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
- autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
- autobyteus/tools/usage/registries/__init__.py +1 -3
- autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
- autobyteus/tools/usage/tool_schema_provider.py +51 -0
- autobyteus/tools/web/__init__.py +4 -0
- autobyteus/tools/web/read_url_tool.py +80 -0
- autobyteus/utils/diff_utils.py +271 -0
- autobyteus/utils/download_utils.py +109 -0
- autobyteus/utils/file_utils.py +57 -2
- autobyteus/utils/gemini_helper.py +56 -0
- autobyteus/utils/gemini_model_mapping.py +71 -0
- autobyteus/utils/llm_output_formatter.py +75 -0
- autobyteus/utils/tool_call_format.py +36 -0
- autobyteus/workflow/agentic_workflow.py +3 -3
- autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +4 -11
- autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
- autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
- autobyteus/workflow/context/workflow_context.py +3 -3
- autobyteus/workflow/context/workflow_runtime_state.py +5 -5
- autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
- autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
- autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
- autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
- autobyteus/workflow/runtime/workflow_runtime.py +8 -8
- autobyteus/workflow/runtime/workflow_worker.py +3 -3
- autobyteus/workflow/status/__init__.py +11 -0
- autobyteus/workflow/status/workflow_status.py +19 -0
- autobyteus/workflow/status/workflow_status_manager.py +48 -0
- autobyteus/workflow/streaming/__init__.py +2 -2
- autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
- autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
- autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
- autobyteus/workflow/utils/wait_for_idle.py +4 -4
- autobyteus-1.2.3.dist-info/METADATA +293 -0
- autobyteus-1.2.3.dist-info/RECORD +600 -0
- {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/WHEEL +1 -1
- {autobyteus-1.2.0.dist-info → autobyteus-1.2.3.dist-info}/top_level.txt +0 -1
- autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
- autobyteus/agent/hooks/__init__.py +0 -16
- autobyteus/agent/hooks/base_phase_hook.py +0 -78
- autobyteus/agent/hooks/hook_definition.py +0 -36
- autobyteus/agent/hooks/hook_meta.py +0 -37
- autobyteus/agent/hooks/hook_registry.py +0 -106
- autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
- autobyteus/agent/phases/__init__.py +0 -18
- autobyteus/agent/phases/discover.py +0 -53
- autobyteus/agent/phases/manager.py +0 -265
- autobyteus/agent/phases/transition_decorator.py +0 -40
- autobyteus/agent/phases/transition_info.py +0 -33
- autobyteus/agent/remote_agent.py +0 -244
- autobyteus/agent/workspace/workspace_definition.py +0 -36
- autobyteus/agent/workspace/workspace_meta.py +0 -37
- autobyteus/agent/workspace/workspace_registry.py +0 -72
- autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
- autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
- autobyteus/agent_team/phases/__init__.py +0 -11
- autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
- autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
- autobyteus/llm/api/bedrock_llm.py +0 -92
- autobyteus/llm/api/groq_llm.py +0 -94
- autobyteus/llm/api/nvidia_llm.py +0 -108
- autobyteus/llm/utils/token_pricing_config.py +0 -87
- autobyteus/person/examples/sample_persons.py +0 -14
- autobyteus/person/examples/sample_roles.py +0 -14
- autobyteus/person/person.py +0 -29
- autobyteus/person/role.py +0 -14
- autobyteus/rpc/__init__.py +0 -73
- autobyteus/rpc/client/__init__.py +0 -17
- autobyteus/rpc/client/abstract_client_connection.py +0 -124
- autobyteus/rpc/client/client_connection_manager.py +0 -153
- autobyteus/rpc/client/sse_client_connection.py +0 -306
- autobyteus/rpc/client/stdio_client_connection.py +0 -280
- autobyteus/rpc/config/__init__.py +0 -13
- autobyteus/rpc/config/agent_server_config.py +0 -153
- autobyteus/rpc/config/agent_server_registry.py +0 -152
- autobyteus/rpc/hosting.py +0 -244
- autobyteus/rpc/protocol.py +0 -244
- autobyteus/rpc/server/__init__.py +0 -20
- autobyteus/rpc/server/agent_server_endpoint.py +0 -181
- autobyteus/rpc/server/base_method_handler.py +0 -40
- autobyteus/rpc/server/method_handlers.py +0 -259
- autobyteus/rpc/server/sse_server_handler.py +0 -182
- autobyteus/rpc/server/stdio_server_handler.py +0 -151
- autobyteus/rpc/server_main.py +0 -198
- autobyteus/rpc/transport_type.py +0 -13
- autobyteus/tools/bash/__init__.py +0 -2
- autobyteus/tools/bash/bash_executor.py +0 -100
- autobyteus/tools/browser/__init__.py +0 -2
- autobyteus/tools/browser/session_aware/__init__.py +0 -0
- autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
- autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
- autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
- autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
- autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
- autobyteus/tools/browser/session_aware/factory/__init__.py +0 -0
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
- autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
- autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
- autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
- autobyteus/tools/browser/standalone/__init__.py +0 -6
- autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
- autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
- autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
- autobyteus/tools/browser/standalone/navigate_to.py +0 -80
- autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -97
- autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -165
- autobyteus/tools/browser/standalone/webpage_reader.py +0 -101
- autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -101
- autobyteus/tools/file/file_editor.py +0 -200
- autobyteus/tools/google_search.py +0 -149
- autobyteus/tools/timer.py +0 -171
- autobyteus/tools/usage/parsers/__init__.py +0 -22
- autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
- autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
- autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
- autobyteus/tools/usage/parsers/base_parser.py +0 -41
- autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
- autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
- autobyteus/tools/usage/parsers/exceptions.py +0 -13
- autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
- autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
- autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
- autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
- autobyteus/workflow/phases/__init__.py +0 -11
- autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
- autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
- autobyteus-1.2.0.dist-info/METADATA +0 -205
- autobyteus-1.2.0.dist-info/RECORD +0 -496
- examples/__init__.py +0 -1
- examples/agent_team/__init__.py +0 -1
- examples/discover_phase_transitions.py +0 -104
- examples/run_browser_agent.py +0 -262
- examples/run_google_slides_agent.py +0 -287
- examples/run_mcp_browser_client.py +0 -174
- examples/run_mcp_google_slides_client.py +0 -270
- examples/run_mcp_list_tools.py +0 -189
- examples/run_poem_writer.py +0 -284
- examples/run_sqlite_agent.py +0 -295
- /autobyteus/{person → skills}/__init__.py +0 -0
- /autobyteus/{person/examples → tools/skill}/__init__.py +0 -0
- {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
|
-
|
|
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="
|
|
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
|
-
|
|
51
|
-
name="
|
|
52
|
-
|
|
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=
|
|
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.
|
|
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
|
|
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
|
|
70
|
-
value="gemini-2.5-flash-image
|
|
71
|
-
provider=MultimediaProvider.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -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,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
|
|
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 .
|
|
11
|
-
from .
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
18
|
-
# This allows other parts of the code to import `
|
|
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
|
-
|
|
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
|
-
"
|
|
42
|
+
"ToDoDefinitionSchema",
|
|
43
|
+
"ToDosDefinitionSchema",
|
|
44
|
+
"BaseTaskPlan",
|
|
30
45
|
"TaskStatus",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
46
|
+
"InMemoryTaskPlan",
|
|
47
|
+
"TaskPlan", # Exposing the alias
|
|
33
48
|
"FileDeliverable",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
49
|
+
"GetTaskPlanStatus",
|
|
50
|
+
"CreateTasks",
|
|
51
|
+
"CreateTask",
|
|
37
52
|
"UpdateTaskStatus",
|
|
38
53
|
"AssignTaskTo",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
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/
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/base_task_plan.py
|
|
2
2
|
"""
|
|
3
|
-
Defines the abstract interface for a
|
|
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
|
|
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
|
|
31
|
+
class BaseTaskPlan(ABC, EventEmitter):
|
|
29
32
|
"""
|
|
30
|
-
Abstract base class for a
|
|
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
|
|
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"
|
|
44
|
+
logger.debug(f"BaseTaskPlan initialized for team '{self.team_id}'.")
|
|
42
45
|
|
|
43
46
|
@abstractmethod
|
|
44
|
-
def add_tasks(self,
|
|
47
|
+
def add_tasks(self, task_definitions: List['TaskDefinitionSchema']) -> List[Task]:
|
|
45
48
|
"""
|
|
46
|
-
|
|
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,
|
|
54
|
+
def add_task(self, task_definition: 'TaskDefinitionSchema') -> Optional[Task]:
|
|
52
55
|
"""
|
|
53
|
-
|
|
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
|
|
70
|
+
Returns a serializable dictionary of the plan's current state.
|
|
68
71
|
"""
|
|
69
72
|
raise NotImplementedError
|
|
70
73
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/task_management/converters/
|
|
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.
|
|
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
|
|
15
|
-
"""A converter to transform
|
|
14
|
+
class TaskPlanConverter:
|
|
15
|
+
"""A converter to transform TaskPlan state into LLM-friendly schemas."""
|
|
16
16
|
|
|
17
17
|
@staticmethod
|
|
18
|
-
def to_schema(
|
|
18
|
+
def to_schema(task_plan: BaseTaskPlan) -> Optional[TaskStatusReportSchema]:
|
|
19
19
|
"""
|
|
20
|
-
Converts the current state of a
|
|
20
|
+
Converts the current state of a TaskPlan into a TaskStatusReportSchema.
|
|
21
21
|
|
|
22
22
|
Args:
|
|
23
|
-
|
|
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
|
|
29
|
-
logger.debug(f"
|
|
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 =
|
|
32
|
+
internal_status = task_plan.get_status_overview()
|
|
33
33
|
|
|
34
|
-
id_to_name_map = {task.task_id: task.task_name for task in
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
9
|
+
from autobyteus.task_management.base_task_plan import TaskStatus
|
|
10
10
|
from .deliverable import FileDeliverable
|
|
11
11
|
|
|
12
|
-
class
|
|
13
|
-
"""Base class for all task
|
|
12
|
+
class BaseTaskPlanEvent(BaseModel):
|
|
13
|
+
"""Base class for all task plan events."""
|
|
14
14
|
team_id: str
|
|
15
15
|
|
|
16
|
-
class
|
|
16
|
+
class TasksCreatedEvent(BaseTaskPlanEvent):
|
|
17
17
|
"""
|
|
18
|
-
Payload for when one or more tasks are
|
|
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(
|
|
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
|