autobyteus 1.2.1__py3-none-any.whl → 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- autobyteus/agent/agent.py +15 -5
- autobyteus/agent/bootstrap_steps/__init__.py +3 -3
- autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +5 -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/working_context_snapshot_restore_step.py +38 -0
- autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
- autobyteus/agent/context/agent_config.py +47 -20
- autobyteus/agent/context/agent_context.py +23 -18
- autobyteus/agent/context/agent_runtime_state.py +21 -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 +69 -59
- autobyteus/agent/events/worker_event_dispatcher.py +21 -64
- autobyteus/agent/factory/agent_factory.py +83 -6
- 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 +44 -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/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 -183
- 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 +82 -0
- autobyteus/agent/streaming/stream_event_payloads.py +2 -223
- autobyteus/agent/streaming/stream_events.py +3 -140
- 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 +1 -2
- autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +4 -4
- 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 +9 -6
- 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 +6 -6
- autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +4 -4
- autobyteus/agent_team/streaming/agent_team_stream_events.py +3 -3
- 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/task_notification_mode.py +19 -0
- autobyteus/agent_team/utils/wait_for_idle.py +4 -4
- autobyteus/cli/agent_cli.py +18 -10
- autobyteus/cli/agent_team_tui/app.py +14 -11
- autobyteus/cli/agent_team_tui/state.py +13 -15
- autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
- autobyteus/cli/agent_team_tui/widgets/focus_pane.py +143 -36
- autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
- autobyteus/cli/agent_team_tui/widgets/shared.py +25 -25
- 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 +11 -18
- 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 +35 -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 +205 -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/path_resolver.py +27 -0
- autobyteus/memory/policies/__init__.py +5 -0
- autobyteus/memory/policies/compaction_policy.py +16 -0
- autobyteus/memory/restore/__init__.py +1 -0
- autobyteus/memory/restore/working_context_snapshot_bootstrapper.py +61 -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 +9 -0
- autobyteus/memory/store/base_store.py +14 -0
- autobyteus/memory/store/file_store.py +98 -0
- autobyteus/memory/store/working_context_snapshot_store.py +28 -0
- autobyteus/memory/tool_interaction_builder.py +46 -0
- autobyteus/memory/turn_tracker.py +9 -0
- autobyteus/memory/working_context_snapshot.py +69 -0
- autobyteus/memory/working_context_snapshot_serializer.py +135 -0
- autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
- autobyteus/multimedia/audio/api/gemini_audio_client.py +109 -16
- autobyteus/multimedia/audio/audio_client_factory.py +47 -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 +39 -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/tools/todo_tools/add_todo.py +2 -2
- autobyteus/task_management/tools/todo_tools/create_todo_list.py +2 -2
- autobyteus/task_management/tools/todo_tools/update_todo_status.py +2 -2
- autobyteus/tools/__init__.py +34 -47
- autobyteus/tools/base_tool.py +7 -0
- autobyteus/tools/file/__init__.py +2 -6
- autobyteus/tools/file/patch_file.py +149 -0
- autobyteus/tools/file/read_file.py +36 -5
- autobyteus/tools/file/write_file.py +4 -1
- autobyteus/tools/functional_tool.py +43 -6
- 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/types.py +61 -0
- autobyteus/tools/multimedia/audio_tools.py +70 -17
- autobyteus/tools/multimedia/download_media_tool.py +18 -4
- autobyteus/tools/multimedia/image_tools.py +246 -62
- 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 +43 -2
- 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/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 +64 -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 +3 -9
- 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.3.0.dist-info/METADATA +293 -0
- autobyteus-1.3.0.dist-info/RECORD +606 -0
- {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/WHEEL +1 -1
- {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.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/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/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/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 -84
- autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -101
- autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -169
- autobyteus/tools/browser/standalone/webpage_reader.py +0 -105
- autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -105
- autobyteus/tools/file/edit_file.py +0 -200
- autobyteus/tools/file/list_directory.py +0 -168
- autobyteus/tools/file/search_files.py +0 -188
- autobyteus/tools/timer.py +0 -175
- 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.1.dist-info/METADATA +0 -205
- autobyteus-1.2.1.dist-info/RECORD +0 -511
- examples/__init__.py +0 -1
- examples/agent_team/__init__.py +0 -1
- examples/discover_phase_transitions.py +0 -104
- examples/run_agentic_software_engineer.py +0 -239
- 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/{tools/browser/session_aware → skills}/__init__.py +0 -0
- /autobyteus/tools/{browser/session_aware/factory → skill}/__init__.py +0 -0
- {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/licenses/LICENSE +0 -0
autobyteus/agent/agent.py
CHANGED
|
@@ -4,7 +4,7 @@ import logging
|
|
|
4
4
|
from typing import AsyncIterator, Optional, List, Any, Dict, TYPE_CHECKING
|
|
5
5
|
|
|
6
6
|
from autobyteus.agent.runtime.agent_runtime import AgentRuntime
|
|
7
|
-
from autobyteus.agent.
|
|
7
|
+
from autobyteus.agent.status.status_enum import AgentStatus
|
|
8
8
|
from autobyteus.agent.message.agent_input_user_message import AgentInputUserMessage
|
|
9
9
|
from autobyteus.agent.message.inter_agent_message import InterAgentMessage
|
|
10
10
|
from autobyteus.agent.events import UserMessageReceivedEvent, InterAgentMessageReceivedEvent, ToolExecutionApprovalEvent, BaseEvent
|
|
@@ -81,8 +81,18 @@ class Agent:
|
|
|
81
81
|
)
|
|
82
82
|
await self._submit_event_to_runtime(approval_event)
|
|
83
83
|
|
|
84
|
-
def
|
|
85
|
-
|
|
84
|
+
def get_current_status(self) -> AgentStatus:
|
|
85
|
+
"""
|
|
86
|
+
Returns the current status of the agent.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
AgentStatus: The current status of the agent.
|
|
90
|
+
"""
|
|
91
|
+
# If the runtime hasn't started yet, we are uninitialized.
|
|
92
|
+
if not self._runtime:
|
|
93
|
+
return AgentStatus.UNINITIALIZED
|
|
94
|
+
|
|
95
|
+
return self._runtime.current_status_property
|
|
86
96
|
|
|
87
97
|
@property
|
|
88
98
|
def is_running(self) -> bool:
|
|
@@ -102,5 +112,5 @@ class Agent:
|
|
|
102
112
|
|
|
103
113
|
|
|
104
114
|
def __repr__(self) -> str:
|
|
105
|
-
|
|
106
|
-
return f"<Agent agent_id='{self.agent_id}',
|
|
115
|
+
status_val = self._runtime.current_status_property.value
|
|
116
|
+
return f"<Agent agent_id='{self.agent_id}', current_status='{status_val}'>"
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/agent/bootstrap_steps/__init__.py
|
|
2
2
|
"""
|
|
3
3
|
Defines individual, self-contained steps for the agent bootstrapping process.
|
|
4
|
-
These steps are orchestrated by the
|
|
4
|
+
These steps are orchestrated by the BootstrapEventHandler.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from .base_bootstrap_step import BaseBootstrapStep
|
|
8
|
-
from .agent_runtime_queue_initialization_step import AgentRuntimeQueueInitializationStep # UPDATED
|
|
9
8
|
from .workspace_context_initialization_step import WorkspaceContextInitializationStep
|
|
10
9
|
# ToolInitializationStep is no longer a bootstrap step.
|
|
11
10
|
from .system_prompt_processing_step import SystemPromptProcessingStep
|
|
12
11
|
from .mcp_server_prewarming_step import McpServerPrewarmingStep
|
|
12
|
+
from .working_context_snapshot_restore_step import WorkingContextSnapshotRestoreStep
|
|
13
13
|
# LLMConfigFinalizationStep and LLMInstanceCreationStep removed.
|
|
14
14
|
|
|
15
15
|
__all__ = [
|
|
16
16
|
"BaseBootstrapStep",
|
|
17
|
-
"AgentRuntimeQueueInitializationStep", # UPDATED
|
|
18
17
|
"WorkspaceContextInitializationStep",
|
|
19
18
|
"SystemPromptProcessingStep",
|
|
20
19
|
"McpServerPrewarmingStep",
|
|
20
|
+
"WorkingContextSnapshotRestoreStep",
|
|
21
21
|
]
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/agent/bootstrap_steps/agent_bootstrapper.py
|
|
2
2
|
import logging
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import List, Optional
|
|
4
4
|
|
|
5
5
|
from .base_bootstrap_step import BaseBootstrapStep
|
|
6
|
-
from .agent_runtime_queue_initialization_step import AgentRuntimeQueueInitializationStep
|
|
7
6
|
from .workspace_context_initialization_step import WorkspaceContextInitializationStep
|
|
8
7
|
from .system_prompt_processing_step import SystemPromptProcessingStep
|
|
8
|
+
from .working_context_snapshot_restore_step import WorkingContextSnapshotRestoreStep
|
|
9
9
|
from .mcp_server_prewarming_step import McpServerPrewarmingStep
|
|
10
|
-
from autobyteus.agent.events import AgentReadyEvent
|
|
11
|
-
|
|
12
|
-
if TYPE_CHECKING:
|
|
13
|
-
from autobyteus.agent.context import AgentContext
|
|
14
|
-
from autobyteus.agent.phases import AgentPhaseManager
|
|
15
10
|
|
|
16
11
|
logger = logging.getLogger(__name__)
|
|
17
12
|
|
|
18
13
|
class AgentBootstrapper:
|
|
19
14
|
"""
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
Provides the ordered bootstrap steps for the agent.
|
|
16
|
+
Execution is driven by bootstrap lifecycle events.
|
|
22
17
|
"""
|
|
23
18
|
def __init__(self, steps: Optional[List[BaseBootstrapStep]] = None):
|
|
24
19
|
"""
|
|
@@ -30,61 +25,12 @@ class AgentBootstrapper:
|
|
|
30
25
|
"""
|
|
31
26
|
if steps is None:
|
|
32
27
|
self.bootstrap_steps: List[BaseBootstrapStep] = [
|
|
33
|
-
AgentRuntimeQueueInitializationStep(),
|
|
34
28
|
WorkspaceContextInitializationStep(),
|
|
35
29
|
McpServerPrewarmingStep(),
|
|
36
30
|
SystemPromptProcessingStep(),
|
|
31
|
+
WorkingContextSnapshotRestoreStep(),
|
|
37
32
|
]
|
|
38
33
|
logger.debug("AgentBootstrapper initialized with default steps.")
|
|
39
34
|
else:
|
|
40
35
|
self.bootstrap_steps = steps
|
|
41
36
|
logger.debug(f"AgentBootstrapper initialized with {len(steps)} custom steps.")
|
|
42
|
-
|
|
43
|
-
async def run(self, context: 'AgentContext', phase_manager: 'AgentPhaseManager') -> bool:
|
|
44
|
-
"""
|
|
45
|
-
Executes the configured sequence of bootstrap steps.
|
|
46
|
-
|
|
47
|
-
Args:
|
|
48
|
-
context: The agent's context.
|
|
49
|
-
phase_manager: The agent's phase manager.
|
|
50
|
-
|
|
51
|
-
Returns:
|
|
52
|
-
True if all steps completed successfully, False otherwise.
|
|
53
|
-
"""
|
|
54
|
-
agent_id = context.agent_id
|
|
55
|
-
|
|
56
|
-
# Set the agent phase to BOOTSTRAPPING and wait for any associated hooks.
|
|
57
|
-
await phase_manager.notify_bootstrapping_started()
|
|
58
|
-
logger.info(f"Agent '{agent_id}': AgentBootstrapper starting execution. Phase set to BOOTSTRAPPING.")
|
|
59
|
-
|
|
60
|
-
for step_index, step_instance in enumerate(self.bootstrap_steps):
|
|
61
|
-
step_name = step_instance.__class__.__name__
|
|
62
|
-
logger.debug(f"Agent '{agent_id}': Executing bootstrap step {step_index + 1}/{len(self.bootstrap_steps)}: {step_name}")
|
|
63
|
-
|
|
64
|
-
success = await step_instance.execute(context, phase_manager)
|
|
65
|
-
|
|
66
|
-
if not success:
|
|
67
|
-
error_message = f"Bootstrap step {step_name} failed."
|
|
68
|
-
logger.error(f"Agent '{agent_id}': {error_message} Halting bootstrap process.")
|
|
69
|
-
# The step itself is responsible for detailed error logging.
|
|
70
|
-
# We are responsible for notifying the phase manager to set the agent to an error state.
|
|
71
|
-
await phase_manager.notify_error_occurred(
|
|
72
|
-
error_message=f"Critical bootstrap failure at {step_name}",
|
|
73
|
-
error_details=f"Agent '{agent_id}' failed during bootstrap step '{step_name}'. Check logs for details."
|
|
74
|
-
)
|
|
75
|
-
return False
|
|
76
|
-
|
|
77
|
-
logger.info(f"Agent '{agent_id}': All bootstrap steps completed successfully. Enqueuing AgentReadyEvent.")
|
|
78
|
-
# After successful bootstrapping, enqueue the ready event.
|
|
79
|
-
if context.state.input_event_queues:
|
|
80
|
-
await context.state.input_event_queues.enqueue_internal_system_event(AgentReadyEvent())
|
|
81
|
-
else: # pragma: no cover
|
|
82
|
-
# Should not happen if AgentRuntimeQueueInitializationStep is present and successful
|
|
83
|
-
logger.critical(f"Agent '{agent_id}': Bootstrap succeeded but input queues are not available to enqueue AgentReadyEvent.")
|
|
84
|
-
await phase_manager.notify_error_occurred(
|
|
85
|
-
error_message="Input queues unavailable after bootstrap",
|
|
86
|
-
error_details=f"Agent '{agent_id}' bootstrap process seemed to succeed, but input event queues are missing."
|
|
87
|
-
)
|
|
88
|
-
return False
|
|
89
|
-
|
|
90
|
-
return True
|
|
@@ -5,7 +5,6 @@ from typing import TYPE_CHECKING
|
|
|
5
5
|
|
|
6
6
|
if TYPE_CHECKING:
|
|
7
7
|
from autobyteus.agent.context import AgentContext
|
|
8
|
-
from autobyteus.agent.phases import AgentPhaseManager
|
|
9
8
|
|
|
10
9
|
logger = logging.getLogger(__name__)
|
|
11
10
|
|
|
@@ -18,14 +17,12 @@ class BaseBootstrapStep(ABC):
|
|
|
18
17
|
|
|
19
18
|
@abstractmethod
|
|
20
19
|
async def execute(self,
|
|
21
|
-
context: 'AgentContext'
|
|
22
|
-
phase_manager: 'AgentPhaseManager') -> bool:
|
|
20
|
+
context: 'AgentContext') -> bool:
|
|
23
21
|
"""
|
|
24
22
|
Executes the bootstrap step.
|
|
25
23
|
|
|
26
24
|
Args:
|
|
27
25
|
context: The agent's context, providing access to configuration and state.
|
|
28
|
-
phase_manager: The agent's phase manager for notifying phase transitions.
|
|
29
26
|
|
|
30
27
|
Returns:
|
|
31
28
|
True if the step completed successfully, False otherwise.
|
|
@@ -9,7 +9,6 @@ from autobyteus.tools.tool_category import ToolCategory
|
|
|
9
9
|
|
|
10
10
|
if TYPE_CHECKING:
|
|
11
11
|
from autobyteus.agent.context import AgentContext
|
|
12
|
-
from autobyteus.agent.phases import AgentPhaseManager
|
|
13
12
|
|
|
14
13
|
logger = logging.getLogger(__name__)
|
|
15
14
|
|
|
@@ -25,8 +24,7 @@ class McpServerPrewarmingStep(BaseBootstrapStep):
|
|
|
25
24
|
logger.debug("McpServerPrewarmingStep initialized.")
|
|
26
25
|
|
|
27
26
|
async def execute(self,
|
|
28
|
-
context: 'AgentContext'
|
|
29
|
-
phase_manager: 'AgentPhaseManager') -> bool:
|
|
27
|
+
context: 'AgentContext') -> bool:
|
|
30
28
|
agent_id = context.agent_id
|
|
31
29
|
logger.info(f"Agent '{agent_id}': Executing McpServerPrewarmingStep.")
|
|
32
30
|
|
|
@@ -3,12 +3,11 @@ import logging
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
5
|
from .base_bootstrap_step import BaseBootstrapStep
|
|
6
|
-
from autobyteus.agent.events import AgentErrorEvent
|
|
7
6
|
from autobyteus.agent.system_prompt_processor.base_processor import BaseSystemPromptProcessor
|
|
7
|
+
from autobyteus.agent.events import AgentErrorEvent
|
|
8
8
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
10
10
|
from autobyteus.agent.context import AgentContext
|
|
11
|
-
from autobyteus.agent.phases import AgentPhaseManager
|
|
12
11
|
|
|
13
12
|
logger = logging.getLogger(__name__)
|
|
14
13
|
|
|
@@ -22,10 +21,9 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
|
|
|
22
21
|
logger.debug("SystemPromptProcessingStep initialized.")
|
|
23
22
|
|
|
24
23
|
async def execute(self,
|
|
25
|
-
context: 'AgentContext'
|
|
26
|
-
phase_manager: 'AgentPhaseManager') -> bool:
|
|
24
|
+
context: 'AgentContext') -> bool:
|
|
27
25
|
agent_id = context.agent_id
|
|
28
|
-
# The
|
|
26
|
+
# The status is managed by the bootstrap process.
|
|
29
27
|
logger.info(f"Agent '{agent_id}': Executing SystemPromptProcessingStep.")
|
|
30
28
|
|
|
31
29
|
try:
|
|
@@ -36,12 +34,22 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
|
|
|
36
34
|
|
|
37
35
|
# If a specific system_prompt is not provided in AgentConfig, fall back
|
|
38
36
|
# to the default system_message from the LLM's own configuration.
|
|
39
|
-
|
|
37
|
+
base_system_prompt = context.config.system_prompt or llm_instance.config.system_message
|
|
40
38
|
logger.debug(f"Agent '{agent_id}': Retrieved base system prompt.")
|
|
41
|
-
|
|
39
|
+
|
|
42
40
|
processor_instances = context.config.system_prompt_processors
|
|
43
41
|
tool_instances_for_processor = context.tool_instances
|
|
44
42
|
|
|
43
|
+
# --- Validation Section ---
|
|
44
|
+
if processor_instances:
|
|
45
|
+
for p in processor_instances:
|
|
46
|
+
if not isinstance(p, BaseSystemPromptProcessor):
|
|
47
|
+
error_message = f"Invalid system prompt processor configuration type: {type(p)}. Expected BaseSystemPromptProcessor."
|
|
48
|
+
logger.error(error_message)
|
|
49
|
+
raise TypeError(error_message)
|
|
50
|
+
|
|
51
|
+
current_system_prompt = base_system_prompt
|
|
52
|
+
|
|
45
53
|
if not processor_instances:
|
|
46
54
|
logger.debug(f"Agent '{agent_id}': No system prompt processors configured. Using system prompt as is.")
|
|
47
55
|
else:
|
|
@@ -51,11 +59,6 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
|
|
|
51
59
|
logger.debug(f"Agent '{agent_id}': Found {len(sorted_processors)} configured system prompt processors. Applying sequentially in order: {processor_names}")
|
|
52
60
|
|
|
53
61
|
for processor_instance in sorted_processors:
|
|
54
|
-
if not isinstance(processor_instance, BaseSystemPromptProcessor):
|
|
55
|
-
error_message = f"Agent '{agent_id}': Invalid system prompt processor configuration type: {type(processor_instance)}. Expected BaseSystemPromptProcessor."
|
|
56
|
-
logger.error(error_message)
|
|
57
|
-
raise TypeError(error_message)
|
|
58
|
-
|
|
59
62
|
processor_name = processor_instance.get_name()
|
|
60
63
|
try:
|
|
61
64
|
logger.debug(f"Agent '{agent_id}': Applying system prompt processor '{processor_name}'.")
|
|
@@ -93,7 +96,7 @@ class SystemPromptProcessingStep(BaseBootstrapStep):
|
|
|
93
96
|
error_message = f"Agent '{agent_id}': Critical failure during system prompt processing step: {e}"
|
|
94
97
|
logger.error(error_message, exc_info=True)
|
|
95
98
|
if context.state.input_event_queues:
|
|
96
|
-
await context.input_event_queues.enqueue_internal_system_event(
|
|
99
|
+
await context.state.input_event_queues.enqueue_internal_system_event(
|
|
97
100
|
AgentErrorEvent(error_message=error_message, exception_details=str(e))
|
|
98
101
|
)
|
|
99
102
|
return False
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from .base_bootstrap_step import BaseBootstrapStep
|
|
5
|
+
from autobyteus.memory.restore.working_context_snapshot_bootstrapper import WorkingContextSnapshotBootstrapper
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from autobyteus.agent.context import AgentContext
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class WorkingContextSnapshotRestoreStep(BaseBootstrapStep):
|
|
14
|
+
def __init__(self, bootstrapper: WorkingContextSnapshotBootstrapper | None = None) -> None:
|
|
15
|
+
self._bootstrapper = bootstrapper or WorkingContextSnapshotBootstrapper()
|
|
16
|
+
logger.debug("WorkingContextSnapshotRestoreStep initialized.")
|
|
17
|
+
|
|
18
|
+
async def execute(self, context: "AgentContext") -> bool:
|
|
19
|
+
restore_options = getattr(context.state, "restore_options", None)
|
|
20
|
+
if not restore_options:
|
|
21
|
+
return True
|
|
22
|
+
|
|
23
|
+
memory_manager = getattr(context.state, "memory_manager", None)
|
|
24
|
+
if not memory_manager:
|
|
25
|
+
logger.error("WorkingContextSnapshotRestoreStep requires a memory manager to restore working context snapshot.")
|
|
26
|
+
return False
|
|
27
|
+
|
|
28
|
+
system_prompt = context.state.processed_system_prompt
|
|
29
|
+
if not system_prompt:
|
|
30
|
+
llm_instance = context.llm_instance
|
|
31
|
+
system_prompt = llm_instance.config.system_message if llm_instance else ""
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
self._bootstrapper.bootstrap(memory_manager, system_prompt, restore_options)
|
|
35
|
+
return True
|
|
36
|
+
except Exception as exc: # pragma: no cover - defensive
|
|
37
|
+
logger.error("WorkingContextSnapshotRestoreStep failed: %s", exc, exc_info=True)
|
|
38
|
+
return False
|
|
@@ -6,7 +6,6 @@ from .base_bootstrap_step import BaseBootstrapStep
|
|
|
6
6
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
8
8
|
from autobyteus.agent.context import AgentContext
|
|
9
|
-
from autobyteus.agent.phases import AgentPhaseManager
|
|
10
9
|
|
|
11
10
|
logger = logging.getLogger(__name__)
|
|
12
11
|
|
|
@@ -19,8 +18,7 @@ class WorkspaceContextInitializationStep(BaseBootstrapStep):
|
|
|
19
18
|
logger.debug("WorkspaceContextInitializationStep initialized.")
|
|
20
19
|
|
|
21
20
|
async def execute(self,
|
|
22
|
-
context: 'AgentContext'
|
|
23
|
-
phase_manager: 'AgentPhaseManager') -> bool:
|
|
21
|
+
context: 'AgentContext') -> bool:
|
|
24
22
|
agent_id = context.agent_id
|
|
25
23
|
logger.info(f"Agent '{agent_id}': Executing WorkspaceContextInitializationStep.")
|
|
26
24
|
|
|
@@ -43,5 +41,5 @@ class WorkspaceContextInitializationStep(BaseBootstrapStep):
|
|
|
43
41
|
error_message = f"Agent '{agent_id}': Critical failure during WorkspaceContextInitializationStep: {e}"
|
|
44
42
|
logger.error(error_message, exc_info=True)
|
|
45
43
|
# No easy way to enqueue an error event here if queues aren't even initialized yet.
|
|
46
|
-
# The failure of a bootstrap step is handled by the bootstrapper, which will log and set error
|
|
44
|
+
# The failure of a bootstrap step is handled by the bootstrapper, which will log and set error status.
|
|
47
45
|
return False
|
|
@@ -4,30 +4,33 @@ import copy
|
|
|
4
4
|
from typing import List, Optional, Union, Tuple, TYPE_CHECKING, Dict, Any
|
|
5
5
|
|
|
6
6
|
# Correctly import the new master processor and the base class
|
|
7
|
-
from autobyteus.agent.system_prompt_processor import ToolManifestInjectorProcessor, BaseSystemPromptProcessor
|
|
8
|
-
from autobyteus.agent.llm_response_processor import
|
|
7
|
+
from autobyteus.agent.system_prompt_processor import ToolManifestInjectorProcessor, BaseSystemPromptProcessor, AvailableSkillsProcessor
|
|
8
|
+
from autobyteus.agent.llm_response_processor import BaseLLMResponseProcessor
|
|
9
|
+
from autobyteus.utils.tool_call_format import resolve_tool_call_format
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
if TYPE_CHECKING:
|
|
12
13
|
from autobyteus.tools.base_tool import BaseTool
|
|
13
14
|
from autobyteus.agent.input_processor import BaseAgentUserInputMessageProcessor
|
|
14
15
|
from autobyteus.agent.tool_execution_result_processor import BaseToolExecutionResultProcessor
|
|
16
|
+
from autobyteus.agent.tool_invocation_preprocessor import BaseToolInvocationPreprocessor
|
|
15
17
|
from autobyteus.llm.base_llm import BaseLLM
|
|
16
18
|
from autobyteus.agent.workspace.base_workspace import BaseAgentWorkspace
|
|
17
|
-
from autobyteus.agent.
|
|
19
|
+
from autobyteus.agent.lifecycle import BaseLifecycleEventProcessor
|
|
18
20
|
|
|
19
21
|
logger = logging.getLogger(__name__)
|
|
20
22
|
|
|
23
|
+
|
|
21
24
|
class AgentConfig:
|
|
22
25
|
"""
|
|
23
26
|
Represents the complete, static configuration for an agent instance.
|
|
24
27
|
This is the single source of truth for an agent's definition, including
|
|
25
28
|
its identity, capabilities, and default behaviors.
|
|
26
29
|
"""
|
|
27
|
-
#
|
|
28
|
-
DEFAULT_LLM_RESPONSE_PROCESSORS = [
|
|
30
|
+
# Default to no LLM response processors; tool parsing happens during streaming.
|
|
31
|
+
DEFAULT_LLM_RESPONSE_PROCESSORS: List['BaseLLMResponseProcessor'] = []
|
|
29
32
|
# Use the new, single, unified processor as the default
|
|
30
|
-
DEFAULT_SYSTEM_PROMPT_PROCESSORS = [ToolManifestInjectorProcessor()]
|
|
33
|
+
DEFAULT_SYSTEM_PROMPT_PROCESSORS = [ToolManifestInjectorProcessor(), AvailableSkillsProcessor()]
|
|
31
34
|
|
|
32
35
|
def __init__(self,
|
|
33
36
|
name: str,
|
|
@@ -37,14 +40,16 @@ class AgentConfig:
|
|
|
37
40
|
system_prompt: Optional[str] = None,
|
|
38
41
|
tools: Optional[List['BaseTool']] = None,
|
|
39
42
|
auto_execute_tools: bool = True,
|
|
40
|
-
use_xml_tool_format: bool = False,
|
|
41
43
|
input_processors: Optional[List['BaseAgentUserInputMessageProcessor']] = None,
|
|
42
44
|
llm_response_processors: Optional[List['BaseLLMResponseProcessor']] = None,
|
|
43
45
|
system_prompt_processors: Optional[List['BaseSystemPromptProcessor']] = None,
|
|
44
46
|
tool_execution_result_processors: Optional[List['BaseToolExecutionResultProcessor']] = None,
|
|
47
|
+
tool_invocation_preprocessors: Optional[List['BaseToolInvocationPreprocessor']] = None,
|
|
45
48
|
workspace: Optional['BaseAgentWorkspace'] = None,
|
|
46
|
-
|
|
47
|
-
initial_custom_data: Optional[Dict[str, Any]] = None
|
|
49
|
+
lifecycle_processors: Optional[List['BaseLifecycleEventProcessor']] = None,
|
|
50
|
+
initial_custom_data: Optional[Dict[str, Any]] = None,
|
|
51
|
+
skills: Optional[List[str]] = None,
|
|
52
|
+
memory_dir: Optional[str] = None):
|
|
48
53
|
"""
|
|
49
54
|
Initializes the AgentConfig.
|
|
50
55
|
|
|
@@ -58,16 +63,16 @@ class AgentConfig:
|
|
|
58
63
|
llm_instance's config will be used as the base.
|
|
59
64
|
tools: An optional list of pre-initialized tool instances (subclasses of BaseTool).
|
|
60
65
|
auto_execute_tools: If True, the agent will execute tools without approval.
|
|
61
|
-
use_xml_tool_format: If True, forces the agent to use XML format for tool
|
|
62
|
-
definitions and parsing, overriding provider defaults.
|
|
63
66
|
input_processors: A list of input processor instances.
|
|
64
67
|
llm_response_processors: A list of LLM response processor instances.
|
|
65
68
|
system_prompt_processors: A list of system prompt processor instances.
|
|
66
69
|
tool_execution_result_processors: A list of tool execution result processor instances.
|
|
67
70
|
workspace: An optional pre-initialized workspace instance for the agent.
|
|
68
|
-
|
|
71
|
+
lifecycle_processors: An optional list of lifecycle processor instances.
|
|
69
72
|
initial_custom_data: An optional dictionary of data to pre-populate
|
|
70
73
|
the agent's runtime state `custom_data`.
|
|
74
|
+
skills: An optional list of skill names or paths to be preloaded for this agent.
|
|
75
|
+
memory_dir: Optional override for the agent memory base directory.
|
|
71
76
|
"""
|
|
72
77
|
self.name = name
|
|
73
78
|
self.role = role
|
|
@@ -77,15 +82,35 @@ class AgentConfig:
|
|
|
77
82
|
self.tools = tools or []
|
|
78
83
|
self.workspace = workspace
|
|
79
84
|
self.auto_execute_tools = auto_execute_tools
|
|
80
|
-
self.use_xml_tool_format = use_xml_tool_format
|
|
81
85
|
self.input_processors = input_processors or []
|
|
82
86
|
self.llm_response_processors = llm_response_processors if llm_response_processors is not None else list(self.DEFAULT_LLM_RESPONSE_PROCESSORS)
|
|
83
|
-
|
|
87
|
+
|
|
88
|
+
# Initialize processors first
|
|
89
|
+
default_processors = self.system_prompt_processors = system_prompt_processors if system_prompt_processors is not None else list(self.DEFAULT_SYSTEM_PROMPT_PROCESSORS)
|
|
90
|
+
|
|
84
91
|
self.tool_execution_result_processors = tool_execution_result_processors or []
|
|
85
|
-
self.
|
|
92
|
+
self.tool_invocation_preprocessors = tool_invocation_preprocessors or []
|
|
93
|
+
self.lifecycle_processors = lifecycle_processors or []
|
|
86
94
|
self.initial_custom_data = initial_custom_data
|
|
95
|
+
self.skills = skills or []
|
|
96
|
+
self.memory_dir = memory_dir
|
|
97
|
+
|
|
98
|
+
# Filter out ToolManifestInjectorProcessor if in API_TOOL_CALL mode
|
|
99
|
+
tool_call_format = resolve_tool_call_format()
|
|
100
|
+
if tool_call_format == "api_tool_call":
|
|
101
|
+
self.system_prompt_processors = [
|
|
102
|
+
p for p in default_processors
|
|
103
|
+
if not isinstance(p, ToolManifestInjectorProcessor)
|
|
104
|
+
]
|
|
105
|
+
else:
|
|
106
|
+
self.system_prompt_processors = default_processors
|
|
87
107
|
|
|
88
|
-
logger.debug(
|
|
108
|
+
logger.debug(
|
|
109
|
+
"AgentConfig created for name='%s', role='%s'. Tool call format: %s",
|
|
110
|
+
self.name,
|
|
111
|
+
self.role,
|
|
112
|
+
tool_call_format,
|
|
113
|
+
)
|
|
89
114
|
|
|
90
115
|
def copy(self) -> 'AgentConfig':
|
|
91
116
|
"""
|
|
@@ -102,15 +127,17 @@ class AgentConfig:
|
|
|
102
127
|
system_prompt=self.system_prompt,
|
|
103
128
|
tools=self.tools.copy(), # Shallow copy the list, but reference the original tool instances
|
|
104
129
|
auto_execute_tools=self.auto_execute_tools,
|
|
105
|
-
use_xml_tool_format=self.use_xml_tool_format,
|
|
106
130
|
input_processors=self.input_processors.copy(), # Shallow copy the list
|
|
107
131
|
llm_response_processors=self.llm_response_processors.copy(), # Shallow copy the list
|
|
108
132
|
system_prompt_processors=self.system_prompt_processors.copy(), # Shallow copy the list
|
|
109
133
|
tool_execution_result_processors=self.tool_execution_result_processors.copy(), # Shallow copy the list
|
|
134
|
+
tool_invocation_preprocessors=self.tool_invocation_preprocessors.copy(),
|
|
110
135
|
workspace=self.workspace, # Pass by reference, do not copy
|
|
111
|
-
|
|
112
|
-
initial_custom_data=copy.deepcopy(self.initial_custom_data) # Deep copy for simple data
|
|
136
|
+
lifecycle_processors=self.lifecycle_processors.copy(), # Shallow copy the list
|
|
137
|
+
initial_custom_data=copy.deepcopy(self.initial_custom_data), # Deep copy for simple data
|
|
138
|
+
skills=self.skills.copy(), # Shallow copy the list
|
|
139
|
+
memory_dir=self.memory_dir,
|
|
113
140
|
)
|
|
114
141
|
|
|
115
142
|
def __repr__(self) -> str:
|
|
116
|
-
return (f"AgentConfig(name='{self.name}', role='{self.role}', llm_instance='{self.llm_instance.__class__.__name__}', workspace_configured={self.workspace is not None})")
|
|
143
|
+
return (f"AgentConfig(name='{self.name}', role='{self.role}', llm_instance='{self.llm_instance.__class__.__name__}', workspace_configured={self.workspace is not None}, skills={self.skills})")
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/agent/context/agent_context.py
|
|
2
2
|
import logging
|
|
3
|
-
from typing import TYPE_CHECKING,
|
|
3
|
+
from typing import TYPE_CHECKING, Dict, Any, Optional
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
8
8
|
from .agent_config import AgentConfig
|
|
@@ -11,9 +11,13 @@ if TYPE_CHECKING:
|
|
|
11
11
|
from autobyteus.tools.base_tool import BaseTool
|
|
12
12
|
from autobyteus.agent.events.agent_input_event_queue_manager import AgentInputEventQueueManager
|
|
13
13
|
from autobyteus.agent.tool_invocation import ToolInvocation
|
|
14
|
+
from autobyteus.agent.events.event_store import AgentEventStore
|
|
15
|
+
from autobyteus.agent.status.status_deriver import AgentStatusDeriver
|
|
14
16
|
# LLMConfig no longer needed here
|
|
15
17
|
from autobyteus.agent.workspace.base_workspace import BaseAgentWorkspace
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
from autobyteus.agent.status.status_enum import AgentStatus
|
|
20
|
+
from autobyteus.agent.status.manager import AgentStatusManager
|
|
17
21
|
|
|
18
22
|
logger = logging.getLogger(__name__)
|
|
19
23
|
|
|
@@ -65,22 +69,26 @@ class AgentContext:
|
|
|
65
69
|
return self.state.input_event_queues
|
|
66
70
|
|
|
67
71
|
@property
|
|
68
|
-
def
|
|
69
|
-
return self.state.
|
|
72
|
+
def current_status(self) -> 'AgentStatus':
|
|
73
|
+
return self.state.current_status
|
|
74
|
+
|
|
75
|
+
@current_status.setter
|
|
76
|
+
def current_status(self, value: 'AgentStatus'):
|
|
77
|
+
if not isinstance(value, AgentStatus): # pragma: no cover
|
|
78
|
+
raise TypeError(f"current_status must be an AgentStatus instance. Got {type(value)}")
|
|
79
|
+
self.state.current_status = value
|
|
70
80
|
|
|
71
|
-
@
|
|
72
|
-
def
|
|
73
|
-
|
|
74
|
-
raise TypeError(f"current_phase must be an AgentOperationalPhase instance. Got {type(value)}")
|
|
75
|
-
self.state.current_phase = value
|
|
81
|
+
@property
|
|
82
|
+
def status_manager(self) -> Optional['AgentStatusManager']:
|
|
83
|
+
return self.state.status_manager_ref
|
|
76
84
|
|
|
77
85
|
@property
|
|
78
|
-
def
|
|
79
|
-
return self.state.
|
|
86
|
+
def event_store(self) -> Optional['AgentEventStore']:
|
|
87
|
+
return self.state.event_store
|
|
80
88
|
|
|
81
89
|
@property
|
|
82
|
-
def
|
|
83
|
-
return self.state.
|
|
90
|
+
def status_deriver(self) -> Optional['AgentStatusDeriver']:
|
|
91
|
+
return self.state.status_deriver
|
|
84
92
|
|
|
85
93
|
@property
|
|
86
94
|
def pending_tool_approvals(self) -> Dict[str, 'ToolInvocation']:
|
|
@@ -104,9 +112,6 @@ class AgentContext:
|
|
|
104
112
|
|
|
105
113
|
# final_llm_config_for_creation property removed
|
|
106
114
|
|
|
107
|
-
def add_message_to_history(self, message: Dict[str, Any]) -> None:
|
|
108
|
-
self.state.add_message_to_history(message)
|
|
109
|
-
|
|
110
115
|
def get_tool(self, tool_name: str) -> Optional['BaseTool']:
|
|
111
116
|
tool = self.tool_instances.get(tool_name)
|
|
112
117
|
if not tool: # pragma: no cover
|
|
@@ -123,7 +128,7 @@ class AgentContext:
|
|
|
123
128
|
def __repr__(self) -> str:
|
|
124
129
|
input_q_status = "Initialized" if self.state.input_event_queues is not None else "Pending Init"
|
|
125
130
|
return (f"AgentContext(agent_id='{self.agent_id}', "
|
|
126
|
-
f"
|
|
131
|
+
f"current_status='{self.state.current_status.value}', "
|
|
127
132
|
f"llm_initialized={self.state.llm_instance is not None}, "
|
|
128
133
|
f"tools_initialized={self.state.tool_instances is not None}, "
|
|
129
134
|
f"input_queues_status='{input_q_status}')")
|