siada-cli 1.2.0__tar.gz → 1.3.0__tar.gz
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.
- siada_cli-1.3.0/PKG-INFO +167 -0
- siada_cli-1.3.0/README.md +116 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/pyproject.toml +6 -3
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/bug_fix_agent.py +224 -22
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/issue_review_agent.py +3 -3
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/rules.py +0 -1
- siada_cli-1.3.0/siada/agent_hub/coder/prompt/compact_prompt.py +54 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/issue_review_prompt.py +4 -8
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/select_agent.py +2 -2
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/bug_fix_trace_collector.py +213 -32
- siada_cli-1.3.0/siada/agent_hub/context_filter/__init__.py +28 -0
- siada_cli-1.3.0/siada/agent_hub/context_filter/api_message_transfer_filter.py +592 -0
- siada_cli-1.3.0/siada/agent_hub/context_filter/base_filter.py +26 -0
- siada_cli-1.3.0/siada/agent_hub/context_filter/context_capture_filter.py +64 -0
- siada_cli-1.3.0/siada/agent_hub/context_filter/message_history_capture_filter.py +42 -0
- siada_cli-1.3.0/siada/agent_hub/context_filter/utils.py +19 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/agent_processors/context_track_processor.py +4 -2
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/processors/checkpointing_processor.py +2 -1
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/siada_agent.py +4 -4
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/agent_config_loader.py +6 -6
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/mcp_config_loader.py +1 -1
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/args_parser/args.py +7 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/controller.py +11 -3
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/running_config.py +1 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/conversation_turn.py +159 -56
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/interface.py +7 -2
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/siadahub.py +37 -5
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/code_agent_context.py +20 -1
- siada_cli-1.3.0/siada/foundation/li_telemetry.py +3 -0
- siada_cli-1.3.0/siada/foundation/tools/json_util.py +22 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/model_base_config.py +9 -8
- siada_cli-1.3.0/siada/models/model_setting_converter.py +38 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/coverter.py +2 -0
- siada_cli-1.3.0/siada/services/anomaly_detection/anomaly_detector_text_only.py +437 -0
- siada_cli-1.3.0/siada/services/anomaly_detection/text_anomaly_model.pkl +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/enhanced_fix_result_check.py +107 -13
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/fix_result_check.py +6 -22
- siada_cli-1.3.0/siada/services/internal/handles/internal_handler.py +69 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/model_wrapper.py +4 -0
- siada_cli-1.3.0/siada/services/ps_fr_comparator.py +159 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/session_models.py +14 -13
- siada_cli-1.3.0/siada/session/task_message_state.py +223 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/checkpoint_tracker.py +6 -5
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/slash_commands.py +19 -5
- siada_cli-1.3.0/siada/tools/coder/patch_selection_completion.py +30 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/compression_tool.py +1 -2
- siada_cli-1.2.0/PKG-INFO +0 -572
- siada_cli-1.2.0/README.md +0 -526
- siada_cli-1.2.0/siada/session/task_message_state.py +0 -89
- {siada_cli-1.2.0 → siada_cli-1.3.0}/LICENSE +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/agent_config.yaml +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/browser_agent.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/code_gen_agent.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/fe_gen_agent.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/capabilities.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/non_interactive.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/prompt_builder.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/tool_use.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/bug_prompt/bug_fix_prompt.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/bug_prompt/rules.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/code_gen_prompt.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/fe_gen_prompt.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/logger_tracing_processor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/agent_processors/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/context_capture_filter.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/io_hooks.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/processors/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/siada_agent_hooks.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/siada_run_hooks.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/config_loader.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/mcp_config.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/args_parser/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/base_turn.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/config.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/nointeractive_controller.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/command_turn.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/run_turn.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/turn_factory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn_factory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn_models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/config.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/constants.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/context.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/logging.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/setting.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/telemetry.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/fix_result_checker_validator.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/get_git_diff.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/issue_type_checker_validator.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/swebench_extractor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/banner.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/color_settings.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/color_utils.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/components/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/components/mdstream.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/console_printer.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/io.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/key_bindings.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/notification_command.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/test_banner.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/agent.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/coder/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/converter.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/model_run_config.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/client_factory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/llm_client.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/openroute_provider.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/provider_factory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/c-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/go-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/java-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/php-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/python-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/anomaly_checker.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/at_file_recommendation_design_document.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/bug_desc_optimizer.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/checkpointer_recommendation/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/checkpointer_recommendation/checkpoint_recommend.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/code_context_manager.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/execution_trace_collector.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/completion_engine.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/config.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/file_discovery.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/suggestion.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/path_utils.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/text_utils.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_session.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/git_service.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/exceptions.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/parser.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/processor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/resolver.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/utils.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/input_processor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/issue_type_checker.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/mcp_service.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/model_info_service.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/siada_memory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/siada_runner.py +10 -10
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/strict_fix_result_check.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/base.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/handlers/external_handler.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/version_checker.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/session_manager.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/completer.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/editor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/envprocessor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/message_classifier.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/repo.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/spinner.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/ast_tool.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browser_action_tool.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_action_tool.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_env.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_utils.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/chromium_installer.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/compile_card.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/get_cca_resource.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/ask_followup_question.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/cmd_runner.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_operator.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-linux-arm64 +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-linux-x64 +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-macos-arm64 +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-macos-x64 +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg.exe +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/search.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/setup_package.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/test_search.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/files.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/fix_attempt_completion.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/issue_review_completion.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/error.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/file_observation.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/observation.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/dump.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/io.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/repo_map.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/special.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/token_counter.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/waiting.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/reproduce_completion.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/run_cmd.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/test_completion.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/tool_docs.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/README.md +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/file_processor.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/filters.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/formatters.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/models.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files_tool.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/test_failure_analyzer.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/file_to_language.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/formatter_factory.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/formatters.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/tool_call_formatter.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/web/__init__.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/web/web_crawl.py +0 -0
- {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/utils.py +0 -0
siada_cli-1.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: siada-cli
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Summary: Siada CLI is a Ai Pair Programming Tool in terminal
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.12,<4.0
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Programming Language :: Python
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Topic :: Software Development
|
|
17
|
+
Requires-Dist: aiohttp (>=3.8.0,<4.0.0)
|
|
18
|
+
Requires-Dist: binaryornot (==0.4.4)
|
|
19
|
+
Requires-Dist: click (>=8.2.1,<9.0.0)
|
|
20
|
+
Requires-Dist: configargparse (>=1.7,<2.0.0)
|
|
21
|
+
Requires-Dist: diskcache (==5.6.3)
|
|
22
|
+
Requires-Dist: fastapi (>=0.110.0,<1.0.0)
|
|
23
|
+
Requires-Dist: gitpython (>=3.1.0,<4.0.0)
|
|
24
|
+
Requires-Dist: grep-ast (>=0.9.0,<1.0.0)
|
|
25
|
+
Requires-Dist: litellm (>=1.72.6,<2.0.0)
|
|
26
|
+
Requires-Dist: mcp (>=1.0.0,<2.0.0)
|
|
27
|
+
Requires-Dist: networkx (>=3.5.0,<4.0.0)
|
|
28
|
+
Requires-Dist: numpy (>=1.24.0,<2.0.0)
|
|
29
|
+
Requires-Dist: openai (>=1.102.0,<2.0.0)
|
|
30
|
+
Requires-Dist: openai-agents (==0.3.2)
|
|
31
|
+
Requires-Dist: openhands-aci (==0.3.0)
|
|
32
|
+
Requires-Dist: pandas (>=2.0.0,<3.0.0)
|
|
33
|
+
Requires-Dist: partial-json-parser (>=0.2.1.1.post6,<1.0.0)
|
|
34
|
+
Requires-Dist: patch-ng (>=1.18.1,<2.0.0)
|
|
35
|
+
Requires-Dist: pexpect (>=4.9.0,<5.0.0)
|
|
36
|
+
Requires-Dist: playwright (>=1.40.0,<2.0.0)
|
|
37
|
+
Requires-Dist: prompt-toolkit (>=3.0.51,<4.0.0)
|
|
38
|
+
Requires-Dist: psutil (>=7.0.0,<8.0.0)
|
|
39
|
+
Requires-Dist: pydantic (>=2.6.0,<3.0.0)
|
|
40
|
+
Requires-Dist: pydantic-settings (>=2.2.0,<3.0.0)
|
|
41
|
+
Requires-Dist: pygments (>=2.19.1,<3.0.0)
|
|
42
|
+
Requires-Dist: rich (>=13.0.0,<=14.1.0)
|
|
43
|
+
Requires-Dist: scikit-learn (>=1.3.0,<2.0.0)
|
|
44
|
+
Requires-Dist: shtab (>=1.7,<2.0.0)
|
|
45
|
+
Requires-Dist: termcolor (>=3.1.0,<4.0.0)
|
|
46
|
+
Requires-Dist: tqdm (>=4.67.1,<5.0.0)
|
|
47
|
+
Requires-Dist: trafilatura (>=2.0.0,<3.0.0)
|
|
48
|
+
Requires-Dist: uvicorn (>=0.27.0,<1.0.0)
|
|
49
|
+
Description-Content-Type: text/markdown
|
|
50
|
+
|
|
51
|
+
# Siada CLI
|
|
52
|
+
|
|
53
|
+
**[简体中文](./docs/zh-CN/README_zh.md) | English**
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
This repository contains Siada CLI, a command-line AI workflow tool that provides specialized intelligent agents for code development, debugging, and automation tasks.
|
|
58
|
+
|
|
59
|
+
With Siada CLI you can:
|
|
60
|
+
|
|
61
|
+
- Fix bugs in large codebases through intelligent analysis and automated solutions.
|
|
62
|
+
- Generate new applications and components using specialized frontend and backend agents.
|
|
63
|
+
- Automate development workflows through intelligent code generation and testing.
|
|
64
|
+
- Execute system commands and interact with development environments.
|
|
65
|
+
- Seamlessly support multiple programming languages and frameworks.
|
|
66
|
+
|
|
67
|
+
## Installation/Update
|
|
68
|
+
|
|
69
|
+
1. System Requirements
|
|
70
|
+
- MAC, Linux
|
|
71
|
+
- GCC 11+
|
|
72
|
+
|
|
73
|
+
2. Installation Command
|
|
74
|
+
```bash
|
|
75
|
+
curl -s https://bj.bcebos.com/prod-cnhb01-siada/cli-install/prod/remote_install.sh | sh
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The following output indicates successful installation
|
|
79
|
+

|
|
80
|
+
|
|
81
|
+
After installation, you need to add ~/.local/bin to PATH according to the prompt (skip if already added) to ensure siada-cli can be used in shell
|
|
82
|
+
```bash
|
|
83
|
+
# Bash
|
|
84
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
|
85
|
+
source ~/.bashrc
|
|
86
|
+
|
|
87
|
+
# Zsh
|
|
88
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
|
|
89
|
+
source ~/.zshrc
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Verify successful installation
|
|
93
|
+
```bash
|
|
94
|
+
siada-cli --version
|
|
95
|
+
|
|
96
|
+
# Successfully outputting version number indicates successful installation
|
|
97
|
+
siada-cli 0.0.1
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
## Installation (Developer Mode)
|
|
102
|
+
|
|
103
|
+
1. **Prerequisites:** Ensure you have [Python 3.12](https://www.python.org/downloads/) or higher and [Poetry](https://python-poetry.org/docs/#installation) installed.
|
|
104
|
+
|
|
105
|
+
2. **Clone and Install:**
|
|
106
|
+
```bash
|
|
107
|
+
git clone https://github.com/your-org/siada-agenthub.git
|
|
108
|
+
cd siada-agenthub
|
|
109
|
+
poetry install
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
3. **Run CLI:**
|
|
113
|
+
```bash
|
|
114
|
+
# Method 1: Run with Poetry
|
|
115
|
+
poetry run siada-cli
|
|
116
|
+
|
|
117
|
+
# Method 2: Activate virtual environment then use (recommended)
|
|
118
|
+
source $(poetry env info --path)/bin/activate
|
|
119
|
+
siada-cli
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## User Guide
|
|
123
|
+
|
|
124
|
+
For detailed usage instructions and advanced features, please refer to our [User Manual](docs/USERMANUAL.md), which includes:
|
|
125
|
+
|
|
126
|
+
- Detailed configuration instructions
|
|
127
|
+
- Usage modes and command-line options
|
|
128
|
+
- Slash command usage guide
|
|
129
|
+
- Agent type explanations
|
|
130
|
+
- Practical usage examples
|
|
131
|
+
- Troubleshooting guide
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
## Contributing
|
|
136
|
+
|
|
137
|
+
We welcome contributions to Siada CLI! Whether you want to fix bugs, add new features, improve documentation, or suggest enhancements, your contributions are greatly appreciated.
|
|
138
|
+
|
|
139
|
+
To get started with contributing, please read our [Contributing Guide](./docs/CONTRIBUTING.md) which includes:
|
|
140
|
+
|
|
141
|
+
- Our project vision and development goals
|
|
142
|
+
- Project directory structure and development guidelines
|
|
143
|
+
- Pull request guidelines and best practices
|
|
144
|
+
- Code organization principles
|
|
145
|
+
|
|
146
|
+
Before submitting any changes, please make sure to check our issue tracker and follow the contribution workflow outlined in the guide.
|
|
147
|
+
|
|
148
|
+
## Acknowledgements
|
|
149
|
+
|
|
150
|
+
Siada CLI is built upon the foundation of numerous open source projects, and we extend our deepest respect and gratitude to their contributors.
|
|
151
|
+
|
|
152
|
+
Special thanks to the [OpenAI Agent SDK](https://github.com/openai/openai-agent-sdk) for providing the foundational framework that powers our intelligent agent capabilities.
|
|
153
|
+
|
|
154
|
+
For a complete list of open source projects and licenses used in Siada CLI, please see our [CREDITS.md](./docs/CREDITS.md) file.
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
Distributed under the Apache-2.0 License. See [`LICENSE`](LICENSE) for more information.
|
|
159
|
+
|
|
160
|
+
## DISCLAIMERS
|
|
161
|
+
See [disclaimers.md](./disclaimers.md)
|
|
162
|
+
|
|
163
|
+
----
|
|
164
|
+
<div align="center">
|
|
165
|
+
Built with ❤️ by Li Auto Code Intelligence Team and the open source community
|
|
166
|
+
</div>
|
|
167
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Siada CLI
|
|
2
|
+
|
|
3
|
+
**[简体中文](./docs/zh-CN/README_zh.md) | English**
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
This repository contains Siada CLI, a command-line AI workflow tool that provides specialized intelligent agents for code development, debugging, and automation tasks.
|
|
8
|
+
|
|
9
|
+
With Siada CLI you can:
|
|
10
|
+
|
|
11
|
+
- Fix bugs in large codebases through intelligent analysis and automated solutions.
|
|
12
|
+
- Generate new applications and components using specialized frontend and backend agents.
|
|
13
|
+
- Automate development workflows through intelligent code generation and testing.
|
|
14
|
+
- Execute system commands and interact with development environments.
|
|
15
|
+
- Seamlessly support multiple programming languages and frameworks.
|
|
16
|
+
|
|
17
|
+
## Installation/Update
|
|
18
|
+
|
|
19
|
+
1. System Requirements
|
|
20
|
+
- MAC, Linux
|
|
21
|
+
- GCC 11+
|
|
22
|
+
|
|
23
|
+
2. Installation Command
|
|
24
|
+
```bash
|
|
25
|
+
curl -s https://bj.bcebos.com/prod-cnhb01-siada/cli-install/prod/remote_install.sh | sh
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The following output indicates successful installation
|
|
29
|
+

|
|
30
|
+
|
|
31
|
+
After installation, you need to add ~/.local/bin to PATH according to the prompt (skip if already added) to ensure siada-cli can be used in shell
|
|
32
|
+
```bash
|
|
33
|
+
# Bash
|
|
34
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
|
35
|
+
source ~/.bashrc
|
|
36
|
+
|
|
37
|
+
# Zsh
|
|
38
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
|
|
39
|
+
source ~/.zshrc
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Verify successful installation
|
|
43
|
+
```bash
|
|
44
|
+
siada-cli --version
|
|
45
|
+
|
|
46
|
+
# Successfully outputting version number indicates successful installation
|
|
47
|
+
siada-cli 0.0.1
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## Installation (Developer Mode)
|
|
52
|
+
|
|
53
|
+
1. **Prerequisites:** Ensure you have [Python 3.12](https://www.python.org/downloads/) or higher and [Poetry](https://python-poetry.org/docs/#installation) installed.
|
|
54
|
+
|
|
55
|
+
2. **Clone and Install:**
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/your-org/siada-agenthub.git
|
|
58
|
+
cd siada-agenthub
|
|
59
|
+
poetry install
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
3. **Run CLI:**
|
|
63
|
+
```bash
|
|
64
|
+
# Method 1: Run with Poetry
|
|
65
|
+
poetry run siada-cli
|
|
66
|
+
|
|
67
|
+
# Method 2: Activate virtual environment then use (recommended)
|
|
68
|
+
source $(poetry env info --path)/bin/activate
|
|
69
|
+
siada-cli
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## User Guide
|
|
73
|
+
|
|
74
|
+
For detailed usage instructions and advanced features, please refer to our [User Manual](docs/USERMANUAL.md), which includes:
|
|
75
|
+
|
|
76
|
+
- Detailed configuration instructions
|
|
77
|
+
- Usage modes and command-line options
|
|
78
|
+
- Slash command usage guide
|
|
79
|
+
- Agent type explanations
|
|
80
|
+
- Practical usage examples
|
|
81
|
+
- Troubleshooting guide
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
## Contributing
|
|
86
|
+
|
|
87
|
+
We welcome contributions to Siada CLI! Whether you want to fix bugs, add new features, improve documentation, or suggest enhancements, your contributions are greatly appreciated.
|
|
88
|
+
|
|
89
|
+
To get started with contributing, please read our [Contributing Guide](./docs/CONTRIBUTING.md) which includes:
|
|
90
|
+
|
|
91
|
+
- Our project vision and development goals
|
|
92
|
+
- Project directory structure and development guidelines
|
|
93
|
+
- Pull request guidelines and best practices
|
|
94
|
+
- Code organization principles
|
|
95
|
+
|
|
96
|
+
Before submitting any changes, please make sure to check our issue tracker and follow the contribution workflow outlined in the guide.
|
|
97
|
+
|
|
98
|
+
## Acknowledgements
|
|
99
|
+
|
|
100
|
+
Siada CLI is built upon the foundation of numerous open source projects, and we extend our deepest respect and gratitude to their contributors.
|
|
101
|
+
|
|
102
|
+
Special thanks to the [OpenAI Agent SDK](https://github.com/openai/openai-agent-sdk) for providing the foundational framework that powers our intelligent agent capabilities.
|
|
103
|
+
|
|
104
|
+
For a complete list of open source projects and licenses used in Siada CLI, please see our [CREDITS.md](./docs/CREDITS.md) file.
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
Distributed under the Apache-2.0 License. See [`LICENSE`](LICENSE) for more information.
|
|
109
|
+
|
|
110
|
+
## DISCLAIMERS
|
|
111
|
+
See [disclaimers.md](./disclaimers.md)
|
|
112
|
+
|
|
113
|
+
----
|
|
114
|
+
<div align="center">
|
|
115
|
+
Built with ❤️ by Li Auto Code Intelligence Team and the open source community
|
|
116
|
+
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "siada-cli"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.3.0"
|
|
4
4
|
description = "Siada CLI is a Ai Pair Programming Tool in terminal"
|
|
5
5
|
packages = [{include = "siada"}, {include = "agent_config.yaml"}]
|
|
6
6
|
include = ["agent_config.yaml"]
|
|
@@ -24,8 +24,8 @@ fastapi = ">=0.110.0,<1.0.0"
|
|
|
24
24
|
uvicorn = ">=0.27.0,<1.0.0"
|
|
25
25
|
pydantic = ">=2.6.0,<3.0.0"
|
|
26
26
|
pydantic-settings = ">=2.2.0,<3.0.0"
|
|
27
|
-
openai-agents = "0.2
|
|
28
|
-
openai = ">=1.102.0"
|
|
27
|
+
openai-agents = "0.3.2"
|
|
28
|
+
openai = ">=1.102.0,<2.0.0"
|
|
29
29
|
litellm = ">=1.72.6,<2.0.0"
|
|
30
30
|
openhands-aci = "0.3.0"
|
|
31
31
|
termcolor = ">=3.1.0,<4.0.0"
|
|
@@ -49,6 +49,9 @@ playwright = ">=1.40.0,<2.0.0"
|
|
|
49
49
|
gitpython = ">=3.1.0,<4.0.0"
|
|
50
50
|
mcp = ">=1.0.0,<2.0.0"
|
|
51
51
|
aiohttp = ">=3.8.0,<4.0.0"
|
|
52
|
+
numpy = ">=1.24.0,<2.0.0"
|
|
53
|
+
pandas = ">=2.0.0,<3.0.0"
|
|
54
|
+
scikit-learn = ">=1.3.0,<2.0.0"
|
|
52
55
|
|
|
53
56
|
|
|
54
57
|
[tool.poetry.group.dev.dependencies]
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import ast
|
|
2
2
|
from datetime import datetime
|
|
3
|
+
from math import comb
|
|
3
4
|
import os
|
|
5
|
+
import re
|
|
6
|
+
import subprocess
|
|
4
7
|
|
|
5
8
|
from agents import RunContextWrapper, RunResult, RunResultStreaming, Runner
|
|
9
|
+
from numpy import fix
|
|
6
10
|
|
|
7
11
|
from siada.agent_hub.coder.code_gen_agent import CodeGenAgent
|
|
8
12
|
from siada.agent_hub.coder.select_agent import SelectAgent
|
|
9
13
|
from siada.agent_hub.coder.prompt.bug_prompt import bug_fix_prompt
|
|
10
14
|
from siada.agent_hub.coder.tracing.bug_fix_trace_collector import BugFixTraceCollector,create_custom_bug_fix_trace_collector
|
|
15
|
+
from siada.foundation import code_agent_context
|
|
11
16
|
from siada.foundation.code_agent_context import CodeAgentContext
|
|
12
17
|
from siada.foundation.setting import settings
|
|
13
18
|
from siada.foundation.tools.get_git_diff import GitDiffUtil
|
|
14
19
|
from siada.services.bug_desc_optimizer import BugDescOptimizer
|
|
15
20
|
from siada.services.fix_result_check import FixResultChecker
|
|
16
|
-
from siada.services.issue_type_checker import IssueTypeChecker
|
|
17
21
|
from siada.services.execution_trace_collector import ExecutionTrace, ModelCall, ToolCall
|
|
22
|
+
from siada.services.ps_fr_comparator import PsFrComparator
|
|
18
23
|
from siada.services.strict_fix_result_check import StrictFixResultChecker
|
|
19
24
|
from siada.tools.ast.ast_tool import list_code_definition_names
|
|
20
25
|
from siada.tools.coder.file_operator import edit
|
|
@@ -26,6 +31,7 @@ from typing import Optional, List, Dict, Any
|
|
|
26
31
|
from openai.types.responses import ResponseFunctionToolCall, ResponseOutputMessage
|
|
27
32
|
import json
|
|
28
33
|
from agents import add_trace_processor
|
|
34
|
+
from siada.services.anomaly_detection.anomaly_detector_text_only import AnomalyDetectorTextOnly
|
|
29
35
|
|
|
30
36
|
class BugFixAgent(CodeGenAgent):
|
|
31
37
|
fix_result_checker: FixResultChecker
|
|
@@ -41,10 +47,14 @@ class BugFixAgent(CodeGenAgent):
|
|
|
41
47
|
self.bug_desc_optimizer = BugDescOptimizer()
|
|
42
48
|
self.guidance=""
|
|
43
49
|
self.code_patch_list = []
|
|
50
|
+
self.result_list = []
|
|
44
51
|
self.select_agent = SelectAgent()
|
|
45
52
|
|
|
46
53
|
self.trace_collector = create_custom_bug_fix_trace_collector()
|
|
47
|
-
|
|
54
|
+
|
|
55
|
+
self.anomaly_detector = AnomalyDetectorTextOnly()
|
|
56
|
+
self.has_anomaly_detector = self.anomaly_detector.load_model()
|
|
57
|
+
|
|
48
58
|
super().__init__(
|
|
49
59
|
name="BugFixAgent",
|
|
50
60
|
tools=[edit, regex_search_files, run_cmd, fix_attempt_completion, list_code_definition_names],
|
|
@@ -61,7 +71,7 @@ class BugFixAgent(CodeGenAgent):
|
|
|
61
71
|
root_dir = run_context.context.root_dir
|
|
62
72
|
# Get user memory from context
|
|
63
73
|
user_memory = run_context.context.user_memory
|
|
64
|
-
system_prompt = bug_fix_prompt.
|
|
74
|
+
system_prompt = bug_fix_prompt.get_system_prompt_web(root_dir, is_minimal=self.is_minimal, new_rule=self.guidance, user_memory=user_memory)
|
|
65
75
|
return system_prompt
|
|
66
76
|
|
|
67
77
|
async def get_context(self) -> CodeAgentContext:
|
|
@@ -88,24 +98,82 @@ class BugFixAgent(CodeGenAgent):
|
|
|
88
98
|
run_config, _ = await self.prepare_run_config_and_session(context)
|
|
89
99
|
add_trace_processor(self.trace_collector)
|
|
90
100
|
|
|
101
|
+
hard_level = 0
|
|
102
|
+
if (self.has_anomaly_detector):
|
|
103
|
+
print("Anomaly detector model loaded successfully.")
|
|
104
|
+
hard_level = self.anomaly_detector.infer(user_input)
|
|
105
|
+
print(f"Anomaly detection result: {hard_level}")
|
|
106
|
+
# Record anomaly detection trace
|
|
107
|
+
self.trace_collector.record_anomaly_detection(user_input=user_input, is_easy=hard_level)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
result = None
|
|
111
|
+
# hard_level=2
|
|
112
|
+
if hard_level == 0:
|
|
113
|
+
result = await self.run_easy(user_input, context, run_config)
|
|
114
|
+
elif hard_level == 1:
|
|
115
|
+
result = await self.run_middle(user_input, context, run_config)
|
|
116
|
+
else:
|
|
117
|
+
result = await self.run_hard(user_input, context, run_config)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
self.trace_collector.collect_submission_diff(context)
|
|
121
|
+
trace_path_v2 = self.trace_collector.export_to_json("trace_test.json")
|
|
122
|
+
print(f"successfully export v2 format: {trace_path_v2}")
|
|
91
123
|
|
|
124
|
+
return result
|
|
125
|
+
|
|
126
|
+
async def run_easy(self, user_input: str, context: CodeAgentContext, run_config) -> RunResult:
|
|
127
|
+
print("Running this issue with easy mode")
|
|
92
128
|
print(f"\nStarting bug desc optimize")
|
|
93
129
|
opt_user_input = await self.bug_desc_optimizer.optimize(description=user_input, context=context, trace_collector=self.trace_collector)
|
|
94
130
|
print(f"Bug desc optimize result:{opt_user_input}\n")
|
|
95
131
|
|
|
96
132
|
input_with_env = self.struct_user_input(opt_user_input)
|
|
97
|
-
max_turns = 3
|
|
98
|
-
current_turn = 0
|
|
99
133
|
task_message = {"content": input_with_env, "role": "user"}
|
|
100
134
|
input_list = [task_message]
|
|
101
135
|
|
|
102
136
|
print(f"2. Issue fix stage: (1) Propose fix; (2) Verify fix; (3) Confirm fix")
|
|
103
137
|
|
|
104
138
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
139
|
+
result = None
|
|
140
|
+
fix_turn = 1
|
|
141
|
+
max_turn = 3
|
|
142
|
+
|
|
143
|
+
self.trace_collector.start_run_round([
|
|
144
|
+
{"role": msg.get("role", "user"), "content": msg.get("content", "")}
|
|
145
|
+
for msg in input_list
|
|
146
|
+
])
|
|
108
147
|
|
|
148
|
+
result = await Runner.run(
|
|
149
|
+
starting_agent=self,
|
|
150
|
+
input=opt_user_input,
|
|
151
|
+
max_turns=settings.MAX_TURNS,
|
|
152
|
+
run_config=run_config,
|
|
153
|
+
context=context,
|
|
154
|
+
)
|
|
155
|
+
self.trace_collector.end_run_round(str(result.final_output))
|
|
156
|
+
|
|
157
|
+
print(f"Fix process completed in {fix_turn} rounds.")
|
|
158
|
+
|
|
159
|
+
return result
|
|
160
|
+
|
|
161
|
+
async def run_middle(self, user_input: str, context: CodeAgentContext, run_config) -> RunResult:
|
|
162
|
+
result = None
|
|
163
|
+
fix_turn = 0
|
|
164
|
+
max_turn = 3
|
|
165
|
+
print("Running this issue with middle mode")
|
|
166
|
+
print(f"\nStarting bug desc optimize")
|
|
167
|
+
opt_user_input = await self.bug_desc_optimizer.optimize(description=user_input, context=context, trace_collector=self.trace_collector)
|
|
168
|
+
print(f"Bug desc optimize result:{opt_user_input}\n")
|
|
169
|
+
|
|
170
|
+
input_with_env = self.struct_user_input(opt_user_input)
|
|
171
|
+
task_message = {"content": input_with_env, "role": "user"}
|
|
172
|
+
input_list = [task_message]
|
|
173
|
+
|
|
174
|
+
print(f"2. Issue fix stage: (1) Propose fix; (2) Verify fix; (3) Confirm fix")
|
|
175
|
+
|
|
176
|
+
while True:
|
|
109
177
|
self.trace_collector.start_run_round([
|
|
110
178
|
{"role": msg.get("role", "user"), "content": msg.get("content", "")}
|
|
111
179
|
for msg in input_list
|
|
@@ -113,35 +181,100 @@ class BugFixAgent(CodeGenAgent):
|
|
|
113
181
|
|
|
114
182
|
result = await Runner.run(
|
|
115
183
|
starting_agent=self,
|
|
116
|
-
input=
|
|
184
|
+
input=opt_user_input,
|
|
117
185
|
max_turns=settings.MAX_TURNS,
|
|
118
186
|
run_config=run_config,
|
|
119
187
|
context=context,
|
|
120
188
|
)
|
|
121
|
-
|
|
122
189
|
self.trace_collector.end_run_round(str(result.final_output))
|
|
123
|
-
|
|
190
|
+
|
|
191
|
+
fix_turn += 1
|
|
192
|
+
self.is_minimal = True
|
|
193
|
+
if fix_turn >= max_turn:
|
|
194
|
+
break
|
|
195
|
+
|
|
124
196
|
try:
|
|
125
|
-
|
|
126
|
-
|
|
197
|
+
print("Executing check...")
|
|
198
|
+
check_result, feedback_input_list = await self.check(
|
|
199
|
+
opt_user_input, result, context, task_message, fix_turn
|
|
127
200
|
)
|
|
128
|
-
if
|
|
201
|
+
if check_result:
|
|
202
|
+
print("Check passed, proceeding to compare...")
|
|
129
203
|
break
|
|
130
204
|
else:
|
|
131
|
-
|
|
132
|
-
|
|
205
|
+
print("Check failed, will fix again and skip to compare")
|
|
206
|
+
input_list = feedback_input_list
|
|
133
207
|
except Exception as e:
|
|
134
|
-
print(f"
|
|
208
|
+
print(f"Check failed: {e}, stopping verification.")
|
|
135
209
|
break
|
|
136
210
|
|
|
137
|
-
|
|
211
|
+
print(f"Fix process completed in {fix_turn} rounds.")
|
|
212
|
+
return result
|
|
138
213
|
|
|
139
|
-
|
|
214
|
+
async def run_hard(self, user_input: str, context: CodeAgentContext, run_config) -> RunResult:
|
|
215
|
+
result = None
|
|
216
|
+
fix_turn = 0
|
|
217
|
+
max_turn = 3
|
|
218
|
+
print("Running this issue with hard mode")
|
|
219
|
+
|
|
220
|
+
# print(f"2. Issue fix stage: (1) Propose fix; (2) Verify fix; (3) Confirm fix")
|
|
221
|
+
|
|
222
|
+
while fix_turn < max_turn:
|
|
223
|
+
# if fix_turn%2==0:
|
|
224
|
+
print(f"\nStarting bug desc optimize")
|
|
225
|
+
opt_user_input = await self.bug_desc_optimizer.optimize(description=user_input, context=context, trace_collector=self.trace_collector)
|
|
226
|
+
print(f"Bug desc optimize result:{opt_user_input}\n")
|
|
227
|
+
# else :
|
|
228
|
+
# opt_user_input=user_input
|
|
229
|
+
input_with_env = self.struct_user_input(opt_user_input)
|
|
230
|
+
task_message = {"content": input_with_env, "role": "user"}
|
|
231
|
+
input_list = [task_message]
|
|
232
|
+
self.trace_collector.start_run_round([
|
|
233
|
+
{"role": msg.get("role", "user"), "content": msg.get("content", "")}
|
|
234
|
+
for msg in input_list
|
|
235
|
+
])
|
|
140
236
|
|
|
141
|
-
|
|
142
|
-
|
|
237
|
+
result = await Runner.run(
|
|
238
|
+
starting_agent=self,
|
|
239
|
+
input=input_list,
|
|
240
|
+
max_turns=settings.MAX_TURNS,
|
|
241
|
+
run_config=run_config,
|
|
242
|
+
context=context,
|
|
243
|
+
)
|
|
244
|
+
self.trace_collector.end_run_round(str(result.final_output))
|
|
245
|
+
self.result_list.append(result)
|
|
143
246
|
|
|
247
|
+
fix_turn += 1
|
|
248
|
+
|
|
249
|
+
try:
|
|
250
|
+
print("Executing check...")
|
|
251
|
+
check_result, feedback_input_list = await self.check_hard(
|
|
252
|
+
opt_user_input, result, context, task_message, fix_turn
|
|
253
|
+
)
|
|
254
|
+
print("Check failed, will fix again")
|
|
255
|
+
input_list = feedback_input_list
|
|
256
|
+
except Exception as e:
|
|
257
|
+
print(f"Check failed: {e}, stopping verification.")
|
|
258
|
+
break
|
|
259
|
+
|
|
260
|
+
success, selected_idx=await self.select_agent.select_and_apply_best_patch(user_input, context, self.code_patch_list, trace_collector=self.trace_collector)
|
|
261
|
+
result = self.result_list[selected_idx]
|
|
262
|
+
print(f"Fix process completed in {fix_turn} rounds.")
|
|
144
263
|
return result
|
|
264
|
+
|
|
265
|
+
def build_compare_result(self, task_message: dict, reason: str) -> list:
|
|
266
|
+
feedback_message = {
|
|
267
|
+
"content": f"The previous fix attempt did not fully address the issue. Reason: {reason}.\n"
|
|
268
|
+
f"**Please continue fixing.**",
|
|
269
|
+
"role": "user"
|
|
270
|
+
}
|
|
271
|
+
input_list = [task_message, feedback_message]
|
|
272
|
+
return input_list
|
|
273
|
+
|
|
274
|
+
async def run_compare(self, context, user_input, trace_collector: Optional["BugFixTraceCollector"] = None):
|
|
275
|
+
diff_patch = GitDiffUtil.get_git_diff_exclude_test_files(context.root_dir)
|
|
276
|
+
compare_result = await PsFrComparator.compare(user_input, diff_patch, context, trace_collector=trace_collector)
|
|
277
|
+
return compare_result
|
|
145
278
|
|
|
146
279
|
def test_best_patch_selection(self, context: CodeAgentContext) -> bool:
|
|
147
280
|
self.trace_collector.load_from_json(f"/siada-agenthub/trace_test.json")
|
|
@@ -214,6 +347,7 @@ class BugFixAgent(CodeGenAgent):
|
|
|
214
347
|
fix_code=diff_patch,
|
|
215
348
|
context=context,
|
|
216
349
|
execution_trace=execution_trace,
|
|
350
|
+
trace_collector=self.trace_collector
|
|
217
351
|
)
|
|
218
352
|
|
|
219
353
|
enhanced_result["code_diff"] = diff_patch
|
|
@@ -451,7 +585,6 @@ The previous fix attempt was not sufficient. Please analyze the above feedback a
|
|
|
451
585
|
"""
|
|
452
586
|
print(f"Starting fix result verification")
|
|
453
587
|
check_result = await self.run_checker(user_input, context, trace_collector=self.trace_collector)
|
|
454
|
-
enhanced_check_result = await self.run_enhanced_checker(user_input, context, run_result=result)
|
|
455
588
|
if check_result.get("is_fixed", False):
|
|
456
589
|
# Issue is fixed, break the loop
|
|
457
590
|
print(
|
|
@@ -459,6 +592,12 @@ The previous fix attempt was not sufficient. Please analyze the above feedback a
|
|
|
459
592
|
)
|
|
460
593
|
return True, []
|
|
461
594
|
else:
|
|
595
|
+
# feedback_message_last_checker = user_input + \
|
|
596
|
+
# f"content : Here is the previous fix logic:\n{result.final_output}" + \
|
|
597
|
+
# f"But previous fix attempt was not sufficient. Reason: {check_summary}.\n" + \
|
|
598
|
+
# f"**Please continue fixing.**\n" + \
|
|
599
|
+
# "role: user"
|
|
600
|
+
enhanced_check_result = await self.run_enhanced_checker(user_input, context, run_result=result)
|
|
462
601
|
# Issue not fixed, add the check_summary to input_list for next iteration
|
|
463
602
|
check_summary = check_result.get(
|
|
464
603
|
"check_summary", "Fix verification failed"
|
|
@@ -480,6 +619,7 @@ The previous fix attempt was not sufficient. Please analyze the above feedback a
|
|
|
480
619
|
# "role": "user"
|
|
481
620
|
# }
|
|
482
621
|
self.code_patch_list.append(check_result.get('code_diff', ''))
|
|
622
|
+
|
|
483
623
|
enhanced_feedback_content = self._build_enhanced_feedback(
|
|
484
624
|
current_turn, result, check_result, check_summary, enhanced_check_result
|
|
485
625
|
)
|
|
@@ -494,3 +634,65 @@ The previous fix attempt was not sufficient. Please analyze the above feedback a
|
|
|
494
634
|
|
|
495
635
|
input_list = [task_message, feedback_message]
|
|
496
636
|
return False, input_list
|
|
637
|
+
|
|
638
|
+
async def check_hard(
|
|
639
|
+
self,
|
|
640
|
+
user_input: str,
|
|
641
|
+
result: RunResult,
|
|
642
|
+
context: CodeAgentContext,
|
|
643
|
+
task_message: dict,
|
|
644
|
+
current_turn: int
|
|
645
|
+
) -> tuple[bool, list]:
|
|
646
|
+
"""
|
|
647
|
+
Handle web framework specific checking logic
|
|
648
|
+
|
|
649
|
+
Args:
|
|
650
|
+
user_int: user input
|
|
651
|
+
result: Current run result
|
|
652
|
+
context: Code agent context
|
|
653
|
+
task_message: Task message
|
|
654
|
+
current_turn: Current turn number
|
|
655
|
+
|
|
656
|
+
Returns:
|
|
657
|
+
Tuple of (should_break, input_list)
|
|
658
|
+
"""
|
|
659
|
+
print(f"Starting fix result verification")
|
|
660
|
+
# check_result = await self.run_checker(user_input, context, trace_collector=self.trace_collector)
|
|
661
|
+
code_diff = GitDiffUtil.get_git_diff(context.root_dir)
|
|
662
|
+
# feedback_message = {
|
|
663
|
+
# "content":
|
|
664
|
+
# f"Here is the current fix code diff:\n{code_diff}"
|
|
665
|
+
# f"But previous fix attempt was not sufficient. Reason: You need try a different method to solve it.\n"
|
|
666
|
+
# f"**Please use git to discard changes in the working, and continue fixing.**",
|
|
667
|
+
# "role": "user"
|
|
668
|
+
# }
|
|
669
|
+
self.code_patch_list.append(code_diff)
|
|
670
|
+
print(
|
|
671
|
+
f"Fix_check_result, Issue not fixed, continue fixing (round {current_turn + 1}): You need try a different method to solve it"
|
|
672
|
+
)
|
|
673
|
+
print("🧹 Clearing working directory changes...")
|
|
674
|
+
|
|
675
|
+
# delete all untracked files and directories
|
|
676
|
+
clean_result = subprocess.run(
|
|
677
|
+
['git', 'clean', '-fd'],
|
|
678
|
+
capture_output=True,
|
|
679
|
+
text=True
|
|
680
|
+
)
|
|
681
|
+
|
|
682
|
+
# reset all tracked files to the last commit state
|
|
683
|
+
reset_result = subprocess.run(
|
|
684
|
+
['git', 'reset', '--hard', 'HEAD'],
|
|
685
|
+
capture_output=True,
|
|
686
|
+
text=True
|
|
687
|
+
)
|
|
688
|
+
|
|
689
|
+
if clean_result.returncode == 0 and reset_result.returncode == 0:
|
|
690
|
+
print("Working directory cleared successfully")
|
|
691
|
+
else:
|
|
692
|
+
if clean_result.returncode != 0:
|
|
693
|
+
print(f"Failed to clean untracked files: {clean_result.stderr}")
|
|
694
|
+
if reset_result.returncode != 0:
|
|
695
|
+
print(f"Failed to reset tracked files: {reset_result.stderr}")
|
|
696
|
+
|
|
697
|
+
input_list = [task_message]
|
|
698
|
+
return False, input_list
|