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.
Files changed (285) hide show
  1. siada_cli-1.3.0/PKG-INFO +167 -0
  2. siada_cli-1.3.0/README.md +116 -0
  3. {siada_cli-1.2.0 → siada_cli-1.3.0}/pyproject.toml +6 -3
  4. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/bug_fix_agent.py +224 -22
  5. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/issue_review_agent.py +3 -3
  6. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/rules.py +0 -1
  7. siada_cli-1.3.0/siada/agent_hub/coder/prompt/compact_prompt.py +54 -0
  8. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/issue_review_prompt.py +4 -8
  9. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/select_agent.py +2 -2
  10. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/bug_fix_trace_collector.py +213 -32
  11. siada_cli-1.3.0/siada/agent_hub/context_filter/__init__.py +28 -0
  12. siada_cli-1.3.0/siada/agent_hub/context_filter/api_message_transfer_filter.py +592 -0
  13. siada_cli-1.3.0/siada/agent_hub/context_filter/base_filter.py +26 -0
  14. siada_cli-1.3.0/siada/agent_hub/context_filter/context_capture_filter.py +64 -0
  15. siada_cli-1.3.0/siada/agent_hub/context_filter/message_history_capture_filter.py +42 -0
  16. siada_cli-1.3.0/siada/agent_hub/context_filter/utils.py +19 -0
  17. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/agent_processors/context_track_processor.py +4 -2
  18. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/processors/checkpointing_processor.py +2 -1
  19. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/siada_agent.py +4 -4
  20. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/agent_config_loader.py +6 -6
  21. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/mcp_config_loader.py +1 -1
  22. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/args_parser/args.py +7 -0
  23. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/controller.py +11 -3
  24. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/running_config.py +1 -0
  25. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/conversation_turn.py +159 -56
  26. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/interface.py +7 -2
  27. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/siadahub.py +37 -5
  28. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/code_agent_context.py +20 -1
  29. siada_cli-1.3.0/siada/foundation/li_telemetry.py +3 -0
  30. siada_cli-1.3.0/siada/foundation/tools/json_util.py +22 -0
  31. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/model_base_config.py +9 -8
  32. siada_cli-1.3.0/siada/models/model_setting_converter.py +38 -0
  33. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/coverter.py +2 -0
  34. siada_cli-1.3.0/siada/services/anomaly_detection/anomaly_detector_text_only.py +437 -0
  35. siada_cli-1.3.0/siada/services/anomaly_detection/text_anomaly_model.pkl +0 -0
  36. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/enhanced_fix_result_check.py +107 -13
  37. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/fix_result_check.py +6 -22
  38. siada_cli-1.3.0/siada/services/internal/handles/internal_handler.py +69 -0
  39. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/model_wrapper.py +4 -0
  40. siada_cli-1.3.0/siada/services/ps_fr_comparator.py +159 -0
  41. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/session_models.py +14 -13
  42. siada_cli-1.3.0/siada/session/task_message_state.py +223 -0
  43. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/checkpoint_tracker.py +6 -5
  44. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/slash_commands.py +19 -5
  45. siada_cli-1.3.0/siada/tools/coder/patch_selection_completion.py +30 -0
  46. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/compression_tool.py +1 -2
  47. siada_cli-1.2.0/PKG-INFO +0 -572
  48. siada_cli-1.2.0/README.md +0 -526
  49. siada_cli-1.2.0/siada/session/task_message_state.py +0 -89
  50. {siada_cli-1.2.0 → siada_cli-1.3.0}/LICENSE +0 -0
  51. {siada_cli-1.2.0 → siada_cli-1.3.0}/agent_config.yaml +0 -0
  52. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/__init__.py +0 -0
  53. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/__init__.py +0 -0
  54. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/browser_agent.py +0 -0
  55. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/code_gen_agent.py +0 -0
  56. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/fe_gen_agent.py +0 -0
  57. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/__init__.py +0 -0
  58. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/__init__.py +0 -0
  59. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/capabilities.py +0 -0
  60. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/non_interactive.py +0 -0
  61. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/prompt_builder.py +0 -0
  62. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/base/tool_use.py +0 -0
  63. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/bug_prompt/bug_fix_prompt.py +0 -0
  64. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/bug_prompt/rules.py +0 -0
  65. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/code_gen_prompt.py +0 -0
  66. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/prompt/fe_gen_prompt.py +0 -0
  67. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/__init__.py +0 -0
  68. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/coder/tracing/logger_tracing_processor.py +0 -0
  69. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/__init__.py +0 -0
  70. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/agent_processors/__init__.py +0 -0
  71. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/context_capture_filter.py +0 -0
  72. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/io_hooks.py +0 -0
  73. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/processors/__init__.py +0 -0
  74. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/siada_agent_hooks.py +0 -0
  75. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/agent_hub/hooks/siada_run_hooks.py +0 -0
  76. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/__init__.py +0 -0
  77. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/config_loader.py +0 -0
  78. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/config/mcp_config.py +0 -0
  79. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/__init__.py +0 -0
  80. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/args_parser/__init__.py +0 -0
  81. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/__init__.py +0 -0
  82. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/base_turn.py +0 -0
  83. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/config.py +0 -0
  84. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/nointeractive_controller.py +0 -0
  85. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/__init__.py +0 -0
  86. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/command_turn.py +0 -0
  87. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/models.py +0 -0
  88. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/run_turn.py +0 -0
  89. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn/turn_factory.py +0 -0
  90. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn_factory.py +0 -0
  91. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/entrypoint/interaction/turn_models.py +0 -0
  92. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/__init__.py +0 -0
  93. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/config.py +0 -0
  94. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/constants.py +0 -0
  95. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/context.py +0 -0
  96. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/logging.py +0 -0
  97. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/setting.py +0 -0
  98. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/telemetry.py +0 -0
  99. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/__init__.py +0 -0
  100. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/fix_result_checker_validator.py +0 -0
  101. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/get_git_diff.py +0 -0
  102. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/issue_type_checker_validator.py +0 -0
  103. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/foundation/tools/swebench_extractor.py +0 -0
  104. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/__init__.py +0 -0
  105. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/banner.py +0 -0
  106. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/color_settings.py +0 -0
  107. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/color_utils.py +0 -0
  108. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/components/__init__.py +0 -0
  109. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/components/mdstream.py +0 -0
  110. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/console_printer.py +0 -0
  111. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/io.py +0 -0
  112. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/key_bindings.py +0 -0
  113. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/notification_command.py +0 -0
  114. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/io/test_banner.py +0 -0
  115. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/__init__.py +0 -0
  116. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/agent.py +0 -0
  117. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/coder/__init__.py +0 -0
  118. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/converter.py +0 -0
  119. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/models/model_run_config.py +0 -0
  120. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/__init__.py +0 -0
  121. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/client_factory.py +0 -0
  122. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/llm_client.py +0 -0
  123. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/__init__.py +0 -0
  124. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/openrouter/openroute_provider.py +0 -0
  125. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/provider/provider_factory.py +0 -0
  126. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/README.md +0 -0
  127. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  128. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  129. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  130. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  131. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  132. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  133. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  134. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  135. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  136. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  137. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  138. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  139. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  140. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  141. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  142. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  143. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  144. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  145. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  146. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  147. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  148. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  149. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  150. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  151. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  152. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  153. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  154. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  155. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/README.md +0 -0
  156. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/c-tags.scm +0 -0
  157. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  158. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  159. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/dart-tags.scm +0 -0
  160. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  161. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  162. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/elm-tags.scm +0 -0
  163. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/go-tags.scm +0 -0
  164. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  165. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/java-tags.scm +0 -0
  166. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  167. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  168. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  169. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  170. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/php-tags.scm +0 -0
  171. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/python-tags.scm +0 -0
  172. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ql-tags.scm +0 -0
  173. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  174. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/rust-tags.scm +0 -0
  175. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/scala-tags.scm +0 -0
  176. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  177. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/__init__.py +0 -0
  178. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/anomaly_checker.py +0 -0
  179. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/at_file_recommendation_design_document.md +0 -0
  180. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/bug_desc_optimizer.py +0 -0
  181. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/checkpointer_recommendation/__init__.py +0 -0
  182. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/checkpointer_recommendation/checkpoint_recommend.py +0 -0
  183. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/code_context_manager.py +0 -0
  184. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/execution_trace_collector.py +0 -0
  185. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/__init__.py +0 -0
  186. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/__init__.py +0 -0
  187. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/completion_engine.py +0 -0
  188. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/config.py +0 -0
  189. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/file_discovery.py +0 -0
  190. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/core/suggestion.py +0 -0
  191. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/__init__.py +0 -0
  192. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/path_utils.py +0 -0
  193. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_recommendation/utils/text_utils.py +0 -0
  194. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/file_session.py +0 -0
  195. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/git_service.py +0 -0
  196. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/README.md +0 -0
  197. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/__init__.py +0 -0
  198. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/exceptions.py +0 -0
  199. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/models.py +0 -0
  200. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/parser.py +0 -0
  201. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/processor.py +0 -0
  202. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/resolver.py +0 -0
  203. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/handle_at_command/utils.py +0 -0
  204. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/input_processor.py +0 -0
  205. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/issue_type_checker.py +0 -0
  206. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/mcp_service.py +0 -0
  207. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/model_info_service.py +0 -0
  208. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/siada_memory.py +0 -0
  209. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/siada_runner.py +10 -10
  210. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/strict_fix_result_check.py +0 -0
  211. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/__init__.py +0 -0
  212. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/base.py +0 -0
  213. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/handlers/external_handler.py +0 -0
  214. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/services/version_checker/version_checker.py +0 -0
  215. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/__init__.py +0 -0
  216. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/session/session_manager.py +0 -0
  217. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/__init__.py +0 -0
  218. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/completer.py +0 -0
  219. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/editor.py +0 -0
  220. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/envprocessor.py +0 -0
  221. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/message_classifier.py +0 -0
  222. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/repo.py +0 -0
  223. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/support/spinner.py +0 -0
  224. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/__init__.py +0 -0
  225. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/README.md +0 -0
  226. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/ast_tool.py +0 -0
  227. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/ast/models.py +0 -0
  228. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/__init__.py +0 -0
  229. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browser_action_tool.py +0 -0
  230. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_action_tool.py +0 -0
  231. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_env.py +0 -0
  232. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/browsergym_utils.py +0 -0
  233. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/chromium_installer.py +0 -0
  234. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/browser/models.py +0 -0
  235. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/__init__.py +0 -0
  236. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/compile_card.py +0 -0
  237. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/cca/get_cca_resource.py +0 -0
  238. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/__init__.py +0 -0
  239. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/ask_followup_question.py +0 -0
  240. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/cmd_runner.py +0 -0
  241. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_operator.py +0 -0
  242. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/README.md +0 -0
  243. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/__init__.py +0 -0
  244. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-linux-arm64 +0 -0
  245. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-linux-x64 +0 -0
  246. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-macos-arm64 +0 -0
  247. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg-macos-x64 +0 -0
  248. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/bin/rg.exe +0 -0
  249. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/search.py +0 -0
  250. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/setup_package.py +0 -0
  251. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/file_search/test_search.py +0 -0
  252. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/files.py +0 -0
  253. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/fix_attempt_completion.py +0 -0
  254. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/issue_review_completion.py +0 -0
  255. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/__init__.py +0 -0
  256. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/error.py +0 -0
  257. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/file_observation.py +0 -0
  258. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/observation/observation.py +0 -0
  259. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/__init__.py +0 -0
  260. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/dump.py +0 -0
  261. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/io.py +0 -0
  262. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/repo_map.py +0 -0
  263. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/special.py +0 -0
  264. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/token_counter.py +0 -0
  265. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/repo_map/waiting.py +0 -0
  266. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/reproduce_completion.py +0 -0
  267. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/run_cmd.py +0 -0
  268. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/test_completion.py +0 -0
  269. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/coder/tool_docs.py +0 -0
  270. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/README.md +0 -0
  271. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/__init__.py +0 -0
  272. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/file_processor.py +0 -0
  273. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/filters.py +0 -0
  274. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/formatters.py +0 -0
  275. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files/models.py +0 -0
  276. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/read_many_files_tool.py +0 -0
  277. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/test_failure_analyzer.py +0 -0
  278. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/__init__.py +0 -0
  279. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/file_to_language.py +0 -0
  280. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/formatter_factory.py +0 -0
  281. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/formatters.py +0 -0
  282. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/tool_call_format/tool_call_formatter.py +0 -0
  283. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/web/__init__.py +0 -0
  284. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/tools/web/web_crawl.py +0 -0
  285. {siada_cli-1.2.0 → siada_cli-1.3.0}/siada/utils.py +0 -0
@@ -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
+ ![Siada CLI Screenshot](./docs/assets/siada-cli-screenshot.png)
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
+ ![siada-cli installed successfully](./docs/assets/siada-cli-installed-successfully.png)
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
+ ![Siada CLI Screenshot](./docs/assets/siada-cli-screenshot.png)
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
+ ![siada-cli installed successfully](./docs/assets/siada-cli-installed-successfully.png)
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.2.0"
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.9"
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.get_system_prompt(root_dir, is_minimal=self.is_minimal, new_rule=self.guidance, user_memory=user_memory)
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
- while current_turn < max_turns:
106
- self.is_minimal = current_turn >= 3
107
- print(f"\n Fix round {current_turn+1}")
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=input_list,
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
- should_break, conbine_task_message_with_check_summary = await self.check(
126
- opt_user_input, result, context, task_message, current_turn
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 should_break:
201
+ if check_result:
202
+ print("Check passed, proceeding to compare...")
129
203
  break
130
204
  else:
131
- input_list = conbine_task_message_with_check_summary
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"Fix result checker failed: {e}, stopping verification.")
208
+ print(f"Check failed: {e}, stopping verification.")
135
209
  break
136
210
 
137
- current_turn += 1
211
+ print(f"Fix process completed in {fix_turn} rounds.")
212
+ return result
138
213
 
139
- self.trace_collector.collect_submission_diff(context)
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
- trace_path_v2 = self.trace_collector.export_to_json("trace_test.json")
142
- print(f"successfully export v2 format: {trace_path_v2}")
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