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
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from autobyteus.person.role import Role
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
RESEARCHER_ROLE = Role(
|
|
5
|
-
name="Researcher",
|
|
6
|
-
skills=["data analysis", "literature review", "critical thinking"],
|
|
7
|
-
responsibilities=["gather information", "analyze data", "report findings"]
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
WRITER_ROLE = Role(
|
|
11
|
-
name="Writer",
|
|
12
|
-
skills=["content creation", "editing", "storytelling"],
|
|
13
|
-
responsibilities=["draft articles", "revise content", "adapt to different styles"]
|
|
14
|
-
)
|
autobyteus/person/person.py
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
from autobyteus.person.role import Role
|
|
3
|
-
|
|
4
|
-
class Person:
|
|
5
|
-
def __init__(self, name: str, role: Role, characteristics: List[str]):
|
|
6
|
-
self.name = name
|
|
7
|
-
self.role = role
|
|
8
|
-
self.characteristics = characteristics
|
|
9
|
-
self.tasks = []
|
|
10
|
-
|
|
11
|
-
def get_description(self) -> str:
|
|
12
|
-
characteristics_str = ", ".join(self.characteristics)
|
|
13
|
-
return (f"Person: {self.name}\n"
|
|
14
|
-
f"{self.role.get_description()}\n"
|
|
15
|
-
f"Characteristics: {characteristics_str}")
|
|
16
|
-
|
|
17
|
-
def __str__(self) -> str:
|
|
18
|
-
return f"{self.name} ({self.role.name})"
|
|
19
|
-
|
|
20
|
-
def assign_task(self, task):
|
|
21
|
-
if task not in self.tasks:
|
|
22
|
-
self.tasks.append(task)
|
|
23
|
-
|
|
24
|
-
def unassign_task(self, task):
|
|
25
|
-
if task in self.tasks:
|
|
26
|
-
self.tasks.remove(task)
|
|
27
|
-
|
|
28
|
-
def get_tasks(self):
|
|
29
|
-
return self.tasks
|
autobyteus/person/role.py
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
class Role:
|
|
4
|
-
def __init__(self, name: str, skills: List[str], responsibilities: List[str]):
|
|
5
|
-
self.name = name
|
|
6
|
-
self.skills = skills
|
|
7
|
-
self.responsibilities = responsibilities
|
|
8
|
-
|
|
9
|
-
def get_description(self) -> str:
|
|
10
|
-
skills_str = ", ".join(self.skills)
|
|
11
|
-
responsibilities_str = ", ".join(self.responsibilities)
|
|
12
|
-
return (f"Role: {self.name}\n"
|
|
13
|
-
f"Skills: {skills_str}\n"
|
|
14
|
-
f"Responsibilities: {responsibilities_str}")
|
autobyteus/rpc/__init__.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/rpc/__init__.py
|
|
2
|
-
"""
|
|
3
|
-
AutoByteUs Remote Procedure Call (RPC) Framework.
|
|
4
|
-
|
|
5
|
-
This package provides components for enabling communication between AutoByteUs agents
|
|
6
|
-
running in separate processes or on different machines. It includes:
|
|
7
|
-
- Protocol definitions for structured messaging.
|
|
8
|
-
- Configuration management for RPC servers.
|
|
9
|
-
- Client-side components for connecting to and interacting with remote agents.
|
|
10
|
-
- Server-side components for exposing an agent's capabilities remotely.
|
|
11
|
-
- High-level hosting utilities for easily serving agents.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
from .protocol import ProtocolMessage, MessageType, RequestType, ResponseType, ErrorCode, ErrorDetails, EventType
|
|
15
|
-
from .transport_type import TransportType
|
|
16
|
-
from .config import AgentServerConfig, AgentServerRegistry, default_agent_server_registry
|
|
17
|
-
from .client import (
|
|
18
|
-
AbstractClientConnection,
|
|
19
|
-
StdioClientConnection,
|
|
20
|
-
SseClientConnection,
|
|
21
|
-
ClientConnectionManager,
|
|
22
|
-
default_client_connection_manager
|
|
23
|
-
)
|
|
24
|
-
from .server import (
|
|
25
|
-
AgentServerEndpoint,
|
|
26
|
-
StdioServerHandler,
|
|
27
|
-
SseServerHandler,
|
|
28
|
-
BaseMethodHandler,
|
|
29
|
-
DiscoverCapabilitiesHandler,
|
|
30
|
-
InvokeMethodHandler,
|
|
31
|
-
InitiateStreamDownloadHandler # Added InitiateStreamDownloadHandler
|
|
32
|
-
)
|
|
33
|
-
from .hosting import serve_agent_stdio, serve_agent_http_sse, serve_single_agent_http_sse, serve_multiple_agents_http_sse # Added all hosting functions
|
|
34
|
-
|
|
35
|
-
# RemoteAgentProxy is part of the agent package, but closely related
|
|
36
|
-
# from ..agent.remote_agent import RemoteAgentProxy
|
|
37
|
-
|
|
38
|
-
__all__ = [
|
|
39
|
-
# Protocol
|
|
40
|
-
"ProtocolMessage",
|
|
41
|
-
"MessageType",
|
|
42
|
-
"RequestType",
|
|
43
|
-
"ResponseType",
|
|
44
|
-
"ErrorCode",
|
|
45
|
-
"ErrorDetails",
|
|
46
|
-
"EventType",
|
|
47
|
-
# Transport
|
|
48
|
-
"TransportType",
|
|
49
|
-
# Config
|
|
50
|
-
"AgentServerConfig",
|
|
51
|
-
"AgentServerRegistry",
|
|
52
|
-
"default_agent_server_registry",
|
|
53
|
-
# Client
|
|
54
|
-
"AbstractClientConnection",
|
|
55
|
-
"StdioClientConnection",
|
|
56
|
-
"SseClientConnection",
|
|
57
|
-
"ClientConnectionManager",
|
|
58
|
-
"default_client_connection_manager",
|
|
59
|
-
# Server
|
|
60
|
-
"AgentServerEndpoint",
|
|
61
|
-
"StdioServerHandler",
|
|
62
|
-
"SseServerHandler",
|
|
63
|
-
"BaseMethodHandler",
|
|
64
|
-
"DiscoverCapabilitiesHandler",
|
|
65
|
-
"InvokeMethodHandler",
|
|
66
|
-
"InitiateStreamDownloadHandler", # Added
|
|
67
|
-
# Hosting
|
|
68
|
-
"serve_agent_stdio",
|
|
69
|
-
"serve_agent_http_sse", # Main alias
|
|
70
|
-
"serve_single_agent_http_sse", # Specific for one agent
|
|
71
|
-
"serve_multiple_agents_http_sse", # Specific for multiple agents
|
|
72
|
-
]
|
|
73
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/rpc/client/__init__.py
|
|
2
|
-
"""
|
|
3
|
-
Client-side components for the AutoByteUs RPC framework.
|
|
4
|
-
These components are used to connect to and interact with remote Agent Servers.
|
|
5
|
-
"""
|
|
6
|
-
from .abstract_client_connection import AbstractClientConnection
|
|
7
|
-
from .stdio_client_connection import StdioClientConnection
|
|
8
|
-
from .sse_client_connection import SseClientConnection # Added SseClientConnection
|
|
9
|
-
from .client_connection_manager import ClientConnectionManager, default_client_connection_manager
|
|
10
|
-
|
|
11
|
-
__all__ = [
|
|
12
|
-
"AbstractClientConnection",
|
|
13
|
-
"StdioClientConnection",
|
|
14
|
-
"SseClientConnection", # Added SseClientConnection to exports
|
|
15
|
-
"ClientConnectionManager",
|
|
16
|
-
"default_client_connection_manager",
|
|
17
|
-
]
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/rpc/client/abstract_client_connection.py
|
|
2
|
-
import asyncio
|
|
3
|
-
import logging
|
|
4
|
-
from abc import ABC, abstractmethod
|
|
5
|
-
from typing import AsyncIterator, Optional, Dict, Any # Added Dict, Any
|
|
6
|
-
|
|
7
|
-
from autobyteus.rpc.protocol import ProtocolMessage
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
class AbstractClientConnection(ABC):
|
|
12
|
-
"""
|
|
13
|
-
Abstract base class for client-side connections to an Agent Server.
|
|
14
|
-
Defines the common interface for sending requests and handling responses/events.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
def __init__(self, server_id: str):
|
|
18
|
-
self.server_id = server_id
|
|
19
|
-
self._is_connected: bool = False
|
|
20
|
-
self._connection_lock = asyncio.Lock()
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def is_connected(self) -> bool:
|
|
24
|
-
"""Indicates if the connection is currently active."""
|
|
25
|
-
return self._is_connected
|
|
26
|
-
|
|
27
|
-
@abstractmethod
|
|
28
|
-
async def connect(self) -> None:
|
|
29
|
-
"""
|
|
30
|
-
Establishes the connection to the remote server.
|
|
31
|
-
Sets _is_connected to True on success.
|
|
32
|
-
Raises:
|
|
33
|
-
ConnectionError: If connection fails.
|
|
34
|
-
"""
|
|
35
|
-
raise NotImplementedError
|
|
36
|
-
|
|
37
|
-
@abstractmethod
|
|
38
|
-
async def close(self) -> None:
|
|
39
|
-
"""
|
|
40
|
-
Closes the connection to the remote server.
|
|
41
|
-
Sets _is_connected to False.
|
|
42
|
-
"""
|
|
43
|
-
raise NotImplementedError
|
|
44
|
-
|
|
45
|
-
@abstractmethod
|
|
46
|
-
async def send_request(self, request_message: ProtocolMessage) -> ProtocolMessage:
|
|
47
|
-
"""
|
|
48
|
-
Sends a request ProtocolMessage to the server and awaits a corresponding
|
|
49
|
-
response ProtocolMessage (either a result or an error).
|
|
50
|
-
|
|
51
|
-
Args:
|
|
52
|
-
request_message: The ProtocolMessage to send (must be of type REQUEST).
|
|
53
|
-
|
|
54
|
-
Returns:
|
|
55
|
-
The response ProtocolMessage from the server.
|
|
56
|
-
|
|
57
|
-
Raises:
|
|
58
|
-
ConnectionError: If not connected or if communication fails.
|
|
59
|
-
TimeoutError: If the server does not respond within a reasonable time.
|
|
60
|
-
ValueError: If request_message is not a valid request.
|
|
61
|
-
"""
|
|
62
|
-
raise NotImplementedError
|
|
63
|
-
|
|
64
|
-
async def events(self) -> AsyncIterator[ProtocolMessage]: # pragma: no cover
|
|
65
|
-
"""
|
|
66
|
-
(Optional for some connection types like stdio, primary for SSE)
|
|
67
|
-
Provides an asynchronous iterator for server-pushed events.
|
|
68
|
-
|
|
69
|
-
Yields:
|
|
70
|
-
ProtocolMessage objects of type EVENT from the server.
|
|
71
|
-
|
|
72
|
-
Raises:
|
|
73
|
-
ConnectionError: If not connected or if the event stream fails.
|
|
74
|
-
"""
|
|
75
|
-
# Default implementation for connection types that don't support server-pushed events.
|
|
76
|
-
if False: # This makes the method an async generator while doing nothing
|
|
77
|
-
yield
|
|
78
|
-
logger.warning(f"Connection type {self.__class__.__name__} does not support server-pushed events via events().")
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@abstractmethod
|
|
83
|
-
async def request_and_download_stream(
|
|
84
|
-
self,
|
|
85
|
-
stream_request_params: Dict[str, Any],
|
|
86
|
-
target_agent_id: str
|
|
87
|
-
) -> AsyncIterator[bytes]: # pragma: no cover
|
|
88
|
-
"""
|
|
89
|
-
Requests a stream download from the server and then streams the data.
|
|
90
|
-
This typically involves a two-step process:
|
|
91
|
-
1. An RPC call to initiate the stream download and get a download URL.
|
|
92
|
-
2. An HTTP GET request to the download URL to fetch the stream.
|
|
93
|
-
|
|
94
|
-
Args:
|
|
95
|
-
stream_request_params: Parameters for the REQUEST_STREAM_DOWNLOAD RPC call,
|
|
96
|
-
e.g., `{"resource_id": "some_file"}`.
|
|
97
|
-
target_agent_id: The ID of the target agent on the server that owns/provides the stream.
|
|
98
|
-
This is used to construct the `target_agent_id` field in the RPC request params.
|
|
99
|
-
|
|
100
|
-
Yields:
|
|
101
|
-
bytes: Chunks of the downloaded data.
|
|
102
|
-
|
|
103
|
-
Raises:
|
|
104
|
-
ConnectionError: If not connected or if communication fails.
|
|
105
|
-
ValueError: If the server response for stream initiation is invalid.
|
|
106
|
-
NotImplementedError: If the connection type does not support this.
|
|
107
|
-
"""
|
|
108
|
-
# Default implementation for connection types that don't support this.
|
|
109
|
-
if False: # Makes it an async generator
|
|
110
|
-
yield b''
|
|
111
|
-
logger.warning(f"Connection type {self.__class__.__name__} does not support request_and_download_stream().")
|
|
112
|
-
raise NotImplementedError(f"{self.__class__.__name__} does not support stream downloads.")
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
async def __aenter__(self):
|
|
116
|
-
await self.connect()
|
|
117
|
-
return self
|
|
118
|
-
|
|
119
|
-
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
120
|
-
await self.close()
|
|
121
|
-
|
|
122
|
-
def __repr__(self) -> str:
|
|
123
|
-
return f"<{self.__class__.__name__} server_id='{self.server_id}', connected={self.is_connected}>"
|
|
124
|
-
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/rpc/client/client_connection_manager.py
|
|
2
|
-
import logging
|
|
3
|
-
from typing import Dict, Optional
|
|
4
|
-
|
|
5
|
-
from autobyteus.utils.singleton import SingletonMeta
|
|
6
|
-
from autobyteus.rpc.config import AgentServerConfig, AgentServerRegistry, default_agent_server_registry
|
|
7
|
-
from autobyteus.rpc.transport_type import TransportType
|
|
8
|
-
from .abstract_client_connection import AbstractClientConnection
|
|
9
|
-
from .stdio_client_connection import StdioClientConnection
|
|
10
|
-
from .sse_client_connection import SseClientConnection # Import SseClientConnection
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
class ClientConnectionManager(metaclass=SingletonMeta):
|
|
15
|
-
"""
|
|
16
|
-
Manages the creation and caching of AbstractClientConnection instances.
|
|
17
|
-
Uses AgentServerRegistry to find server configurations.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
def __init__(self, agent_server_registry: AgentServerRegistry = default_agent_server_registry):
|
|
21
|
-
self._agent_server_registry: AgentServerRegistry = agent_server_registry
|
|
22
|
-
self._active_connections: Dict[str, AbstractClientConnection] = {} # Cache connections by server_id
|
|
23
|
-
logger.info("ClientConnectionManager initialized.")
|
|
24
|
-
|
|
25
|
-
async def get_connection(self, server_config_id: str) -> AbstractClientConnection:
|
|
26
|
-
"""
|
|
27
|
-
Gets or creates a client connection for the given server configuration ID.
|
|
28
|
-
If a connection for this ID already exists and is connected, it's returned.
|
|
29
|
-
Otherwise, a new connection is established.
|
|
30
|
-
|
|
31
|
-
Args:
|
|
32
|
-
server_config_id: The ID of the AgentServerConfig to connect to.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
An AbstractClientConnection instance.
|
|
36
|
-
|
|
37
|
-
Raises:
|
|
38
|
-
ValueError: If server_config_id is not found or config is invalid.
|
|
39
|
-
ConnectionError: If establishing a new connection fails.
|
|
40
|
-
"""
|
|
41
|
-
if server_config_id in self._active_connections:
|
|
42
|
-
conn = self._active_connections[server_config_id]
|
|
43
|
-
if conn.is_connected:
|
|
44
|
-
logger.debug(f"Returning cached and connected connection for '{server_config_id}'.")
|
|
45
|
-
return conn
|
|
46
|
-
else:
|
|
47
|
-
logger.info(f"Cached connection for '{server_config_id}' found but not connected. Attempting to recreate.")
|
|
48
|
-
await self.close_connection(server_config_id)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
server_config: Optional[AgentServerConfig] = self._agent_server_registry.get_config(server_config_id)
|
|
52
|
-
if not server_config:
|
|
53
|
-
raise ValueError(f"AgentServerConfig not found in registry for server_id: '{server_config_id}'.")
|
|
54
|
-
|
|
55
|
-
connection: AbstractClientConnection
|
|
56
|
-
if server_config.transport_type == TransportType.STDIO:
|
|
57
|
-
connection = StdioClientConnection(server_config)
|
|
58
|
-
elif server_config.transport_type == TransportType.SSE:
|
|
59
|
-
connection = SseClientConnection(server_config) # Added SSE case
|
|
60
|
-
else:
|
|
61
|
-
raise NotImplementedError(f"Unsupported transport type '{server_config.transport_type}' for server_id '{server_config_id}'.")
|
|
62
|
-
|
|
63
|
-
try:
|
|
64
|
-
await connection.connect()
|
|
65
|
-
self._active_connections[server_config_id] = connection
|
|
66
|
-
logger.info(f"Successfully established new connection for server_id '{server_config_id}' type '{server_config.transport_type}'.")
|
|
67
|
-
return connection
|
|
68
|
-
except Exception as e:
|
|
69
|
-
logger.error(f"Failed to establish connection for server_id '{server_config_id}': {e}", exc_info=True)
|
|
70
|
-
await connection.close() # Ensure cleanup on failed connect
|
|
71
|
-
if server_config_id in self._active_connections:
|
|
72
|
-
del self._active_connections[server_config_id]
|
|
73
|
-
raise ConnectionError(f"Failed to connect to server '{server_config_id}': {e}") from e
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
async def close_connection(self, server_config_id: str) -> None:
|
|
77
|
-
"""
|
|
78
|
-
Closes and removes a specific connection from the manager.
|
|
79
|
-
|
|
80
|
-
Args:
|
|
81
|
-
server_config_id: The ID of the server connection to close.
|
|
82
|
-
"""
|
|
83
|
-
connection = self._active_connections.pop(server_config_id, None)
|
|
84
|
-
if connection:
|
|
85
|
-
logger.info(f"Closing connection for server_id '{server_config_id}'.")
|
|
86
|
-
try:
|
|
87
|
-
await connection.close()
|
|
88
|
-
except Exception as e:
|
|
89
|
-
logger.error(f"Error closing connection for server_id '{server_config_id}': {e}", exc_info=True)
|
|
90
|
-
else:
|
|
91
|
-
logger.debug(f"No active connection found for server_id '{server_config_id}' to close.")
|
|
92
|
-
|
|
93
|
-
async def close_all_connections(self) -> None:
|
|
94
|
-
"""Closes all active connections managed by this instance."""
|
|
95
|
-
logger.info(f"Closing all {len(self._active_connections)} active connections.")
|
|
96
|
-
for server_id in list(self._active_connections.keys()):
|
|
97
|
-
await self.close_connection(server_id)
|
|
98
|
-
logger.info("All active connections have been requested to close.")
|
|
99
|
-
|
|
100
|
-
default_client_connection_manager = ClientConnectionManager()
|
|
101
|
-
|
|
102
|
-
if __name__ == "__main__": # pragma: no cover
|
|
103
|
-
logging.basicConfig(level=logging.DEBUG)
|
|
104
|
-
|
|
105
|
-
# Mock server configs
|
|
106
|
-
mock_stdio_id = "mock_stdio_ccm"
|
|
107
|
-
mock_stdio_cfg = AgentServerConfig(
|
|
108
|
-
server_id=mock_stdio_id,
|
|
109
|
-
transport_type=TransportType.STDIO,
|
|
110
|
-
stdio_command=["python", "-c", "import sys, time, json; print(json.dumps({'type':'response', 'id':'1', 'result':{'status':'ok'}}), flush=True); time.sleep(0.1); sys.exit(0)"]
|
|
111
|
-
)
|
|
112
|
-
default_agent_server_registry.register_config(mock_stdio_cfg)
|
|
113
|
-
|
|
114
|
-
mock_sse_id = "mock_sse_ccm"
|
|
115
|
-
mock_sse_cfg = AgentServerConfig(
|
|
116
|
-
server_id=mock_sse_id,
|
|
117
|
-
transport_type=TransportType.SSE,
|
|
118
|
-
sse_base_url="http://localhost:12345", # Dummy URL, server won't actually run here
|
|
119
|
-
sse_request_endpoint="/rpc",
|
|
120
|
-
sse_events_endpoint="/stream"
|
|
121
|
-
)
|
|
122
|
-
default_agent_server_registry.register_config(mock_sse_cfg)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
manager = default_client_connection_manager
|
|
126
|
-
|
|
127
|
-
async def main_ccm_test():
|
|
128
|
-
stdio_conn = None
|
|
129
|
-
sse_conn = None
|
|
130
|
-
try:
|
|
131
|
-
logger.info(f"Testing CCM with Stdio: {mock_stdio_id}")
|
|
132
|
-
stdio_conn = await manager.get_connection(mock_stdio_id)
|
|
133
|
-
logger.info(f"Stdio connection: {stdio_conn}")
|
|
134
|
-
if stdio_conn.is_connected:
|
|
135
|
-
# Test send_request on stdio_conn
|
|
136
|
-
req = ProtocolMessage.create_request(method="test", id="1")
|
|
137
|
-
resp = await stdio_conn.send_request(req)
|
|
138
|
-
logger.info(f"Stdio test response: {resp}")
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
logger.info(f"Testing CCM with SSE: {mock_sse_id}")
|
|
142
|
-
sse_conn = await manager.get_connection(mock_sse_id) # This will create SseClientConnection and its session
|
|
143
|
-
logger.info(f"SSE connection: {sse_conn}")
|
|
144
|
-
# Actual SSE requests would fail here as no server is running at localhost:12345
|
|
145
|
-
|
|
146
|
-
except Exception as e:
|
|
147
|
-
logger.error(f"Error in CCM main_ccm_test: {e}", exc_info=True)
|
|
148
|
-
finally:
|
|
149
|
-
logger.info("Closing all connections via CCM.")
|
|
150
|
-
await manager.close_all_connections()
|
|
151
|
-
default_agent_server_registry.clear() # Clean up registry for other tests if any
|
|
152
|
-
|
|
153
|
-
asyncio.run(main_ccm_test())
|