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,4 +1,4 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/task_management/tools/get_my_tasks.py
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/task_tools/get_my_tasks.py
|
|
2
2
|
import json
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TYPE_CHECKING, Optional, List
|
|
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Optional, List
|
|
|
6
6
|
from autobyteus.tools.base_tool import BaseTool
|
|
7
7
|
from autobyteus.tools.tool_category import ToolCategory
|
|
8
8
|
from autobyteus.task_management.schemas import TaskDefinitionSchema
|
|
9
|
-
from autobyteus.task_management.
|
|
9
|
+
from autobyteus.task_management.base_task_plan import TaskStatus
|
|
10
10
|
|
|
11
11
|
if TYPE_CHECKING:
|
|
12
12
|
from autobyteus.agent.context import AgentContext
|
|
@@ -15,18 +15,18 @@ if TYPE_CHECKING:
|
|
|
15
15
|
logger = logging.getLogger(__name__)
|
|
16
16
|
|
|
17
17
|
class GetMyTasks(BaseTool):
|
|
18
|
-
"""A tool for an agent to inspect its own assigned tasks from the central
|
|
18
|
+
"""A tool for an agent to inspect its own assigned tasks from the central TaskPlan."""
|
|
19
19
|
|
|
20
20
|
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
21
21
|
|
|
22
22
|
@classmethod
|
|
23
23
|
def get_name(cls) -> str:
|
|
24
|
-
return "
|
|
24
|
+
return "get_my_tasks"
|
|
25
25
|
|
|
26
26
|
@classmethod
|
|
27
27
|
def get_description(cls) -> str:
|
|
28
28
|
return (
|
|
29
|
-
"Retrieves the list of tasks currently assigned to you from the team's shared task
|
|
29
|
+
"Retrieves the list of tasks currently assigned to you from the team's shared task plan. "
|
|
30
30
|
"This is your personal to-do list. Use this to understand your current workload and decide what to do next."
|
|
31
31
|
)
|
|
32
32
|
|
|
@@ -37,29 +37,29 @@ class GetMyTasks(BaseTool):
|
|
|
37
37
|
|
|
38
38
|
async def _execute(self, context: 'AgentContext') -> str:
|
|
39
39
|
"""
|
|
40
|
-
Executes the tool by fetching tasks from the team's
|
|
40
|
+
Executes the tool by fetching tasks from the team's TaskPlan and
|
|
41
41
|
filtering them for the current agent.
|
|
42
42
|
"""
|
|
43
43
|
agent_name = context.config.name
|
|
44
|
-
logger.info(f"Agent '{agent_name}' is executing
|
|
44
|
+
logger.info(f"Agent '{agent_name}' is executing get_my_tasks.")
|
|
45
45
|
|
|
46
46
|
team_context: Optional['AgentTeamContext'] = context.custom_data.get("team_context")
|
|
47
47
|
if not team_context:
|
|
48
|
-
error_msg = "Error: Team context is not available. Cannot access the task
|
|
48
|
+
error_msg = "Error: Team context is not available. Cannot access the task plan."
|
|
49
49
|
logger.error(f"Agent '{agent_name}': {error_msg}")
|
|
50
50
|
return error_msg
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
if not
|
|
54
|
-
error_msg = "Error: Task
|
|
52
|
+
task_plan = getattr(team_context.state, 'task_plan', None)
|
|
53
|
+
if not task_plan:
|
|
54
|
+
error_msg = "Error: Task plan has not been initialized for this team."
|
|
55
55
|
logger.error(f"Agent '{agent_name}': {error_msg}")
|
|
56
56
|
return error_msg
|
|
57
57
|
|
|
58
|
-
# Filter the tasks from the central
|
|
58
|
+
# Filter the tasks from the central plan for this agent.
|
|
59
59
|
# An agent should only see tasks that are specifically for them and are ready to be worked on.
|
|
60
60
|
my_tasks = [
|
|
61
|
-
task for task in
|
|
62
|
-
if task.assignee_name == agent_name and
|
|
61
|
+
task for task in task_plan.tasks
|
|
62
|
+
if task.assignee_name == agent_name and task_plan.task_statuses.get(task.task_id) == TaskStatus.QUEUED
|
|
63
63
|
]
|
|
64
64
|
|
|
65
65
|
if not my_tasks:
|
|
@@ -71,7 +71,7 @@ class GetMyTasks(BaseTool):
|
|
|
71
71
|
TaskDefinitionSchema.model_validate(task).model_dump() for task in my_tasks
|
|
72
72
|
]
|
|
73
73
|
|
|
74
|
-
logger.info(f"Agent '{agent_name}' retrieved {len(tasks_for_llm)} tasks from the central task
|
|
74
|
+
logger.info(f"Agent '{agent_name}' retrieved {len(tasks_for_llm)} tasks from the central task plan.")
|
|
75
75
|
return json.dumps(tasks_for_llm, indent=2)
|
|
76
76
|
|
|
77
77
|
except Exception as e:
|
autobyteus/task_management/tools/{get_task_board_status.py → task_tools/get_task_plan_status.py}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# file: autobyteus/autobyteus/task_management/tools/
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/task_tools/get_task_plan_status.py
|
|
2
2
|
import json
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TYPE_CHECKING, Optional
|
|
5
5
|
|
|
6
6
|
from autobyteus.tools.base_tool import BaseTool
|
|
7
7
|
from autobyteus.tools.tool_category import ToolCategory
|
|
8
|
-
from autobyteus.task_management.converters import
|
|
8
|
+
from autobyteus.task_management.converters import TaskPlanConverter
|
|
9
9
|
|
|
10
10
|
if TYPE_CHECKING:
|
|
11
11
|
from autobyteus.agent.context import AgentContext
|
|
@@ -13,19 +13,19 @@ if TYPE_CHECKING:
|
|
|
13
13
|
|
|
14
14
|
logger = logging.getLogger(__name__)
|
|
15
15
|
|
|
16
|
-
class
|
|
17
|
-
"""A tool for agents to get a current snapshot of the team's
|
|
16
|
+
class GetTaskPlanStatus(BaseTool):
|
|
17
|
+
"""A tool for agents to get a current snapshot of the team's TaskPlan."""
|
|
18
18
|
|
|
19
19
|
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
20
20
|
|
|
21
21
|
@classmethod
|
|
22
22
|
def get_name(cls) -> str:
|
|
23
|
-
return "
|
|
23
|
+
return "get_task_plan_status"
|
|
24
24
|
|
|
25
25
|
@classmethod
|
|
26
26
|
def get_description(cls) -> str:
|
|
27
27
|
return (
|
|
28
|
-
"Retrieves the current status of the team's task
|
|
28
|
+
"Retrieves the current status of the team's task plan, including the status of all individual tasks. "
|
|
29
29
|
"Returns the status as a structured, LLM-friendly JSON string."
|
|
30
30
|
)
|
|
31
31
|
|
|
@@ -36,33 +36,33 @@ class GetTaskBoardStatus(BaseTool):
|
|
|
36
36
|
|
|
37
37
|
async def _execute(self, context: 'AgentContext') -> str:
|
|
38
38
|
"""
|
|
39
|
-
Executes the tool by fetching the task
|
|
39
|
+
Executes the tool by fetching the task plan and using a converter to
|
|
40
40
|
generate an LLM-friendly report.
|
|
41
41
|
"""
|
|
42
|
-
logger.info(f"Agent '{context.agent_id}' is executing
|
|
42
|
+
logger.info(f"Agent '{context.agent_id}' is executing get_task_plan_status.")
|
|
43
43
|
|
|
44
44
|
team_context: Optional['AgentTeamContext'] = context.custom_data.get("team_context")
|
|
45
45
|
if not team_context:
|
|
46
|
-
error_msg = "Error: Team context is not available to the agent. Cannot access the task
|
|
46
|
+
error_msg = "Error: Team context is not available to the agent. Cannot access the task plan."
|
|
47
47
|
logger.error(f"Agent '{context.agent_id}': {error_msg}")
|
|
48
48
|
return error_msg
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
if not
|
|
52
|
-
error_msg = "Error: Task
|
|
50
|
+
task_plan = getattr(team_context.state, 'task_plan', None)
|
|
51
|
+
if not task_plan:
|
|
52
|
+
error_msg = "Error: Task plan has not been initialized for this team."
|
|
53
53
|
logger.error(f"Agent '{context.agent_id}': {error_msg}")
|
|
54
54
|
return error_msg
|
|
55
55
|
|
|
56
56
|
try:
|
|
57
|
-
status_report_schema =
|
|
57
|
+
status_report_schema = TaskPlanConverter.to_schema(task_plan)
|
|
58
58
|
|
|
59
59
|
if not status_report_schema:
|
|
60
|
-
return "The task
|
|
60
|
+
return "The task plan is currently empty. No tasks have been published."
|
|
61
61
|
|
|
62
|
-
logger.info(f"Agent '{context.agent_id}' successfully retrieved and formatted task
|
|
62
|
+
logger.info(f"Agent '{context.agent_id}' successfully retrieved and formatted task plan status.")
|
|
63
63
|
return status_report_schema.model_dump_json(indent=2)
|
|
64
64
|
|
|
65
65
|
except Exception as e:
|
|
66
|
-
error_msg = f"An unexpected error occurred while retrieving or formatting task
|
|
66
|
+
error_msg = f"An unexpected error occurred while retrieving or formatting task plan status: {e}"
|
|
67
67
|
logger.error(f"Agent '{context.agent_id}': {error_msg}", exc_info=True)
|
|
68
68
|
return error_msg
|
|
@@ -7,7 +7,7 @@ from autobyteus.tools.base_tool import BaseTool
|
|
|
7
7
|
from autobyteus.tools.tool_category import ToolCategory
|
|
8
8
|
from autobyteus.utils.parameter_schema import ParameterSchema, ParameterDefinition, ParameterType
|
|
9
9
|
from autobyteus.tools.pydantic_schema_converter import pydantic_to_parameter_schema
|
|
10
|
-
from autobyteus.task_management.
|
|
10
|
+
from autobyteus.task_management.base_task_plan import TaskStatus
|
|
11
11
|
from autobyteus.task_management.deliverable import FileDeliverable
|
|
12
12
|
from autobyteus.task_management.schemas import FileDeliverableSchema
|
|
13
13
|
|
|
@@ -18,18 +18,18 @@ if TYPE_CHECKING:
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
19
|
|
|
20
20
|
class UpdateTaskStatus(BaseTool):
|
|
21
|
-
"""A tool for member agents to update their progress and submit file deliverables on the
|
|
21
|
+
"""A tool for member agents to update their progress and submit file deliverables on the TaskPlan."""
|
|
22
22
|
|
|
23
23
|
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
24
24
|
|
|
25
25
|
@classmethod
|
|
26
26
|
def get_name(cls) -> str:
|
|
27
|
-
return "
|
|
27
|
+
return "update_task_status"
|
|
28
28
|
|
|
29
29
|
@classmethod
|
|
30
30
|
def get_description(cls) -> str:
|
|
31
31
|
return (
|
|
32
|
-
"Updates the status of a specific task on the team's shared task
|
|
32
|
+
"Updates the status of a specific task on the team's shared task plan. "
|
|
33
33
|
"When completing a task, this tool can also be used to formally submit a list of file deliverables."
|
|
34
34
|
)
|
|
35
35
|
|
|
@@ -60,29 +60,29 @@ class UpdateTaskStatus(BaseTool):
|
|
|
60
60
|
|
|
61
61
|
async def _execute(self, context: 'AgentContext', task_name: str, status: str, deliverables: Optional[List[Dict[str, Any]]] = None) -> str:
|
|
62
62
|
agent_name = context.config.name
|
|
63
|
-
log_msg = f"Agent '{agent_name}' is executing
|
|
63
|
+
log_msg = f"Agent '{agent_name}' is executing update_task_status for task '{task_name}' to status '{status}'"
|
|
64
64
|
if deliverables:
|
|
65
65
|
log_msg += f" with {len(deliverables)} deliverable(s)."
|
|
66
66
|
logger.info(log_msg)
|
|
67
67
|
|
|
68
68
|
team_context: Optional['AgentTeamContext'] = context.custom_data.get("team_context")
|
|
69
69
|
if not team_context:
|
|
70
|
-
error_msg = "Error: Team context is not available. Cannot access the task
|
|
70
|
+
error_msg = "Error: Team context is not available. Cannot access the task plan."
|
|
71
71
|
logger.error(f"Agent '{agent_name}': {error_msg}")
|
|
72
72
|
return error_msg
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
if not
|
|
76
|
-
error_msg = "Error: Task
|
|
74
|
+
task_plan = getattr(team_context.state, 'task_plan', None)
|
|
75
|
+
if not task_plan:
|
|
76
|
+
error_msg = "Error: Task plan has not been initialized for this team."
|
|
77
77
|
logger.error(f"Agent '{agent_name}': {error_msg}")
|
|
78
78
|
return error_msg
|
|
79
79
|
|
|
80
|
-
if not
|
|
81
|
-
error_msg = "Error: No tasks are currently loaded on the task
|
|
82
|
-
logger.warning(f"Agent '{agent_name}' tried to update task status, but the
|
|
80
|
+
if not task_plan.tasks:
|
|
81
|
+
error_msg = "Error: No tasks are currently loaded on the task plan."
|
|
82
|
+
logger.warning(f"Agent '{agent_name}' tried to update task status, but the plan is empty.")
|
|
83
83
|
return error_msg
|
|
84
84
|
|
|
85
|
-
target_task = next((t for t in
|
|
85
|
+
target_task = next((t for t in task_plan.tasks if t.task_name == task_name), None)
|
|
86
86
|
|
|
87
87
|
if not target_task:
|
|
88
88
|
error_msg = f"Failed to update status for task '{task_name}'. The task name does not exist on the current plan."
|
|
@@ -93,7 +93,7 @@ class UpdateTaskStatus(BaseTool):
|
|
|
93
93
|
status_enum = TaskStatus(status)
|
|
94
94
|
except ValueError:
|
|
95
95
|
error_msg = f"Invalid status '{status}'. Must be one of: {', '.join([s.value for s in TaskStatus])}."
|
|
96
|
-
logger.warning(f"Agent '{agent_name}' provided invalid status for
|
|
96
|
+
logger.warning(f"Agent '{agent_name}' provided invalid status for update_task_status: {status}")
|
|
97
97
|
return f"Error: {error_msg}"
|
|
98
98
|
|
|
99
99
|
if deliverables:
|
|
@@ -108,8 +108,8 @@ class UpdateTaskStatus(BaseTool):
|
|
|
108
108
|
logger.warning(f"Agent '{agent_name}': {error_msg}")
|
|
109
109
|
return f"Error: {error_msg}"
|
|
110
110
|
|
|
111
|
-
if not
|
|
112
|
-
error_msg = f"Failed to update status for task '{task_name}'. An unexpected error occurred on the task
|
|
111
|
+
if not task_plan.update_task_status(target_task.task_id, status_enum, agent_name):
|
|
112
|
+
error_msg = f"Failed to update status for task '{task_name}'. An unexpected error occurred on the task plan."
|
|
113
113
|
logger.error(f"Agent '{agent_name}': {error_msg}")
|
|
114
114
|
return f"Error: {error_msg}"
|
|
115
115
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# file: autobyteus/task_management/tools/todo_tools/__init__.py
|
|
2
|
+
"""
|
|
3
|
+
To-do management tool package containing list creation and update utilities.
|
|
4
|
+
"""
|
|
5
|
+
from .create_todo_list import CreateToDoList
|
|
6
|
+
from .add_todo import AddToDo
|
|
7
|
+
from .get_todo_list import GetToDoList
|
|
8
|
+
from .update_todo_status import UpdateToDoStatus
|
|
9
|
+
|
|
10
|
+
UpdateToDoStatusTool = UpdateToDoStatus
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"CreateToDoList",
|
|
14
|
+
"AddToDo",
|
|
15
|
+
"GetToDoList",
|
|
16
|
+
"UpdateToDoStatus",
|
|
17
|
+
"UpdateToDoStatusTool",
|
|
18
|
+
]
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/todo_tools/add_todo.py
|
|
2
|
+
import logging
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from pydantic import ValidationError
|
|
6
|
+
|
|
7
|
+
from autobyteus.tools.base_tool import BaseTool
|
|
8
|
+
from autobyteus.tools.tool_category import ToolCategory
|
|
9
|
+
from autobyteus.tools.pydantic_schema_converter import pydantic_to_parameter_schema
|
|
10
|
+
from autobyteus.task_management.schemas.todo_definition import ToDoDefinitionSchema
|
|
11
|
+
from autobyteus.task_management.todo_list import ToDoList
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from autobyteus.agent.context import AgentContext
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
def _notify_todo_update(context: 'AgentContext'):
|
|
19
|
+
if context.status_manager and context.status_manager.notifier:
|
|
20
|
+
todo_list = context.state.todo_list
|
|
21
|
+
if todo_list:
|
|
22
|
+
todos_for_llm = [todo.model_dump(mode='json') for todo in todo_list.get_all_todos()]
|
|
23
|
+
context.status_manager.notifier.notify_agent_data_todo_list_updated(todos_for_llm)
|
|
24
|
+
logger.debug(f"Agent '{context.agent_id}': Notified ToDo list update with {len(todos_for_llm)} items.")
|
|
25
|
+
|
|
26
|
+
class AddToDo(BaseTool):
|
|
27
|
+
"""A tool for an agent to add a new item to its personal to-do list."""
|
|
28
|
+
|
|
29
|
+
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def get_name(cls) -> str:
|
|
33
|
+
return "add_todo"
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def get_description(cls) -> str:
|
|
37
|
+
return (
|
|
38
|
+
"Adds a single new item to your personal to-do list. "
|
|
39
|
+
"Use this if you discover a new step is needed to complete your task."
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def get_argument_schema(cls) -> Any:
|
|
44
|
+
return pydantic_to_parameter_schema(ToDoDefinitionSchema)
|
|
45
|
+
|
|
46
|
+
async def _execute(self, context: 'AgentContext', **kwargs: Any) -> str:
|
|
47
|
+
agent_id = context.agent_id
|
|
48
|
+
logger.info(f"Agent '{agent_id}' is executing add_todo.")
|
|
49
|
+
|
|
50
|
+
if context.state.todo_list is None:
|
|
51
|
+
# If no list exists, create one.
|
|
52
|
+
context.state.todo_list = ToDoList(agent_id=agent_id)
|
|
53
|
+
logger.info(f"Agent '{agent_id}': No existing to-do list found, created a new one.")
|
|
54
|
+
|
|
55
|
+
todo_list = context.state.todo_list
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
todo_def_schema = ToDoDefinitionSchema(**kwargs)
|
|
59
|
+
except ValidationError as e:
|
|
60
|
+
error_msg = f"Invalid to-do item definition provided: {e}"
|
|
61
|
+
logger.warning(f"Agent '{agent_id}' provided an invalid definition for add_todo: {error_msg}")
|
|
62
|
+
return f"Error: {error_msg}"
|
|
63
|
+
|
|
64
|
+
# The add_todo method now takes the definition and returns the created ToDo object
|
|
65
|
+
new_todo = todo_list.add_todo(todo_def_schema)
|
|
66
|
+
|
|
67
|
+
if new_todo:
|
|
68
|
+
# Notify about the update
|
|
69
|
+
_notify_todo_update(context)
|
|
70
|
+
|
|
71
|
+
success_msg = f"Successfully added new item to your to-do list: '{new_todo.description}' (ID: {new_todo.todo_id})."
|
|
72
|
+
logger.info(f"Agent '{agent_id}': {success_msg}")
|
|
73
|
+
return success_msg
|
|
74
|
+
else:
|
|
75
|
+
# This path is unlikely given the refactoring but kept for robustness.
|
|
76
|
+
error_msg = "Failed to add item to the to-do list for an unknown reason."
|
|
77
|
+
logger.error(f"Agent '{agent_id}': {error_msg}")
|
|
78
|
+
return f"Error: {error_msg}"
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/todo_tools/create_todo_list.py
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from pydantic import ValidationError
|
|
7
|
+
|
|
8
|
+
from autobyteus.tools.base_tool import BaseTool
|
|
9
|
+
from autobyteus.tools.tool_category import ToolCategory
|
|
10
|
+
from autobyteus.tools.pydantic_schema_converter import pydantic_to_parameter_schema
|
|
11
|
+
from autobyteus.task_management.schemas.todo_definition import ToDosDefinitionSchema
|
|
12
|
+
from autobyteus.task_management.todo_list import ToDoList
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from autobyteus.agent.context import AgentContext
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
def _notify_todo_update(context: 'AgentContext'):
|
|
20
|
+
if context.status_manager and context.status_manager.notifier:
|
|
21
|
+
todo_list = context.state.todo_list
|
|
22
|
+
if todo_list:
|
|
23
|
+
todos_for_llm = [todo.model_dump(mode='json') for todo in todo_list.get_all_todos()]
|
|
24
|
+
context.status_manager.notifier.notify_agent_data_todo_list_updated(todos_for_llm)
|
|
25
|
+
logger.debug(f"Agent '{context.agent_id}': Notified ToDo list update with {len(todos_for_llm)} items.")
|
|
26
|
+
|
|
27
|
+
class CreateToDoList(BaseTool):
|
|
28
|
+
"""A tool for an agent to create or overwrite its own personal to-do list."""
|
|
29
|
+
|
|
30
|
+
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def get_name(cls) -> str:
|
|
34
|
+
return "create_todo_list"
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def get_description(cls) -> str:
|
|
38
|
+
return (
|
|
39
|
+
"Creates a new personal to-do list for you to manage your own sub-tasks. "
|
|
40
|
+
"This will overwrite any existing to-do list you have. Use this to break down a larger task into smaller steps. "
|
|
41
|
+
"Returns the full list of created to-do items with their new IDs."
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def get_argument_schema(cls) -> Any:
|
|
46
|
+
return pydantic_to_parameter_schema(ToDosDefinitionSchema)
|
|
47
|
+
|
|
48
|
+
async def _execute(self, context: 'AgentContext', **kwargs: Any) -> str:
|
|
49
|
+
agent_id = context.agent_id
|
|
50
|
+
logger.info(f"Agent '{agent_id}' is executing create_todo_list.")
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
todos_def_schema = ToDosDefinitionSchema(**kwargs)
|
|
54
|
+
except ValidationError as e:
|
|
55
|
+
error_msg = f"Invalid to-do list definition provided: {e}"
|
|
56
|
+
logger.warning(f"Agent '{agent_id}' provided an invalid definition for create_todo_list: {error_msg}")
|
|
57
|
+
return f"Error: {error_msg}"
|
|
58
|
+
|
|
59
|
+
# Create a new ToDoList, which overwrites any existing one.
|
|
60
|
+
todo_list = ToDoList(agent_id=agent_id)
|
|
61
|
+
# Add items from definitions; this now returns the created ToDo objects.
|
|
62
|
+
new_todos = todo_list.add_todos(todos_def_schema.todos)
|
|
63
|
+
|
|
64
|
+
# Set the new list on the agent's state.
|
|
65
|
+
context.state.todo_list = todo_list
|
|
66
|
+
|
|
67
|
+
# Notify any UI components about the update.
|
|
68
|
+
_notify_todo_update(context)
|
|
69
|
+
|
|
70
|
+
# Return the created list to the LLM so it knows the new IDs.
|
|
71
|
+
try:
|
|
72
|
+
todos_for_llm = [todo.model_dump(mode='json') for todo in new_todos]
|
|
73
|
+
logger.info(f"Agent '{agent_id}' successfully created a new to-do list with {len(new_todos)} items.")
|
|
74
|
+
return json.dumps(todos_for_llm, indent=2)
|
|
75
|
+
except Exception as e:
|
|
76
|
+
error_msg = f"An unexpected error occurred while formatting the new to-do list: {e}"
|
|
77
|
+
logger.error(f"Agent '{agent_id}': {error_msg}", exc_info=True)
|
|
78
|
+
# Fallback message
|
|
79
|
+
return f"Successfully created {len(new_todos)} to-do items, but failed to return them in the response."
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/todo_tools/get_todo_list.py
|
|
2
|
+
import logging
|
|
3
|
+
import json
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from autobyteus.tools.base_tool import BaseTool
|
|
7
|
+
from autobyteus.tools.tool_category import ToolCategory
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.agent.context import AgentContext
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
class GetToDoList(BaseTool):
|
|
15
|
+
"""A tool for an agent to retrieve its own personal to-do list."""
|
|
16
|
+
|
|
17
|
+
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def get_name(cls) -> str:
|
|
21
|
+
return "get_todo_list"
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def get_description(cls) -> str:
|
|
25
|
+
return (
|
|
26
|
+
"Retrieves your current personal to-do list. "
|
|
27
|
+
"Use this to see your plan, check the status of your steps, and decide what to do next."
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def get_argument_schema(cls) -> Any:
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
async def _execute(self, context: 'AgentContext') -> str:
|
|
35
|
+
agent_id = context.agent_id
|
|
36
|
+
logger.info(f"Agent '{agent_id}' is executing get_todo_list.")
|
|
37
|
+
|
|
38
|
+
if context.state.todo_list is None or not context.state.todo_list.get_all_todos():
|
|
39
|
+
return "Your to-do list is empty."
|
|
40
|
+
|
|
41
|
+
todo_list = context.state.todo_list
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
# Convert the internal ToDo objects to a JSON-friendly list of dicts
|
|
45
|
+
todos_for_llm = [
|
|
46
|
+
todo.model_dump(mode='json') for todo in todo_list.get_all_todos()
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
logger.info(f"Agent '{agent_id}' retrieved {len(todos_for_llm)} items from their to-do list.")
|
|
50
|
+
return json.dumps(todos_for_llm, indent=2)
|
|
51
|
+
|
|
52
|
+
except Exception as e:
|
|
53
|
+
error_msg = f"An unexpected error occurred while formatting your to-do list: {e}"
|
|
54
|
+
logger.error(f"Agent '{agent_id}': {error_msg}", exc_info=True)
|
|
55
|
+
return f"Error: {error_msg}"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/task_management/tools/todo_tools/update_todo_status.py
|
|
2
|
+
import logging
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from autobyteus.tools.base_tool import BaseTool
|
|
6
|
+
from autobyteus.tools.tool_category import ToolCategory
|
|
7
|
+
from autobyteus.utils.parameter_schema import ParameterSchema, ParameterDefinition, ParameterType
|
|
8
|
+
from autobyteus.task_management.todo import ToDoStatus
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from autobyteus.agent.context import AgentContext
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
def _notify_todo_update(context: 'AgentContext'):
|
|
16
|
+
if context.status_manager and context.status_manager.notifier:
|
|
17
|
+
todo_list = context.state.todo_list
|
|
18
|
+
if todo_list:
|
|
19
|
+
todos_for_llm = [todo.model_dump(mode='json') for todo in todo_list.get_all_todos()]
|
|
20
|
+
context.status_manager.notifier.notify_agent_data_todo_list_updated(todos_for_llm)
|
|
21
|
+
logger.debug(f"Agent '{context.agent_id}': Notified ToDo list update with {len(todos_for_llm)} items.")
|
|
22
|
+
|
|
23
|
+
class UpdateToDoStatus(BaseTool):
|
|
24
|
+
"""A tool for an agent to update the status of an item on its personal to-do list."""
|
|
25
|
+
|
|
26
|
+
CATEGORY = ToolCategory.TASK_MANAGEMENT
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def get_name(cls) -> str:
|
|
30
|
+
return "update_todo_status"
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def get_description(cls) -> str:
|
|
34
|
+
return "Updates the status of a specific item on your personal to-do list."
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def get_argument_schema(cls) -> Any:
|
|
38
|
+
schema = ParameterSchema()
|
|
39
|
+
schema.add_parameter(ParameterDefinition(
|
|
40
|
+
name="todo_id",
|
|
41
|
+
param_type=ParameterType.STRING,
|
|
42
|
+
description="The unique ID of the to-do item to update (e.g., 'todo_...').",
|
|
43
|
+
required=True
|
|
44
|
+
))
|
|
45
|
+
schema.add_parameter(ParameterDefinition(
|
|
46
|
+
name="status",
|
|
47
|
+
param_type=ParameterType.ENUM,
|
|
48
|
+
description=f"The new status. Must be one of: {', '.join([s.value for s in ToDoStatus])}.",
|
|
49
|
+
required=True,
|
|
50
|
+
enum_values=[s.value for s in ToDoStatus]
|
|
51
|
+
))
|
|
52
|
+
return schema
|
|
53
|
+
|
|
54
|
+
async def _execute(self, context: 'AgentContext', todo_id: str, status: str) -> str:
|
|
55
|
+
agent_id = context.agent_id
|
|
56
|
+
logger.info(f"Agent '{agent_id}' is executing update_todo_status for item '{todo_id}' to status '{status}'.")
|
|
57
|
+
|
|
58
|
+
if context.state.todo_list is None:
|
|
59
|
+
return "Error: You do not have a to-do list to update."
|
|
60
|
+
|
|
61
|
+
todo_list = context.state.todo_list
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
status_enum = ToDoStatus(status)
|
|
65
|
+
except ValueError:
|
|
66
|
+
error_msg = f"Invalid status '{status}'. Must be one of: {', '.join([s.value for s in ToDoStatus])}."
|
|
67
|
+
logger.warning(f"Agent '{agent_id}' provided invalid status for update_todo_status: {status}")
|
|
68
|
+
return f"Error: {error_msg}"
|
|
69
|
+
|
|
70
|
+
if not todo_list.get_todo_by_id(todo_id):
|
|
71
|
+
error_msg = f"Failed to update status. A to-do item with ID '{todo_id}' does not exist on your list."
|
|
72
|
+
logger.warning(f"Agent '{agent_id}' failed to update status for non-existent to-do item '{todo_id}'.")
|
|
73
|
+
return f"Error: {error_msg}"
|
|
74
|
+
|
|
75
|
+
if todo_list.update_todo_status(todo_id, status_enum):
|
|
76
|
+
# Notify about the update
|
|
77
|
+
_notify_todo_update(context)
|
|
78
|
+
|
|
79
|
+
success_msg = f"Successfully updated status of to-do item '{todo_id}' to '{status}'."
|
|
80
|
+
logger.info(f"Agent '{agent_id}': {success_msg}")
|
|
81
|
+
return success_msg
|
|
82
|
+
else:
|
|
83
|
+
error_msg = f"Failed to update status for item '{todo_id}'. An unexpected error occurred."
|
|
84
|
+
logger.error(f"Agent '{agent_id}': {error_msg}")
|
|
85
|
+
return f"Error: {error_msg}"
|