@elizaos/sweagent-root 2.0.0-alpha

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 (323) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +270 -0
  3. package/package.json +71 -0
  4. package/python/LICENSE +21 -0
  5. package/python/config/README.md +15 -0
  6. package/python/config/bash_only.yaml +222 -0
  7. package/python/config/benchmarks/250212_sweagent_heavy_sbl.yaml +188 -0
  8. package/python/config/benchmarks/250225_anthropic_filemap_simple_review.yaml +75 -0
  9. package/python/config/benchmarks/250522_anthropic_filemap_simple_review.yaml +92 -0
  10. package/python/config/benchmarks/250526_anthropic_filemap_simple_review_sbl.yaml +93 -0
  11. package/python/config/benchmarks/anthropic_filemap_multilingual.yaml +66 -0
  12. package/python/config/coding_challenge.yaml +104 -0
  13. package/python/config/default.yaml +69 -0
  14. package/python/config/default_backticks.yaml +69 -0
  15. package/python/config/default_mm_no_images.yaml +82 -0
  16. package/python/config/default_mm_with_images.yaml +83 -0
  17. package/python/config/demo/default.yaml +80 -0
  18. package/python/config/demo/no_instructions.yaml +69 -0
  19. package/python/config/demo/only_bash.yaml +60 -0
  20. package/python/config/exotic/default_shell.yaml +52 -0
  21. package/python/config/exotic/windowed_replace.yaml +125 -0
  22. package/python/config/exotic/windowed_replace_late_repro.yaml +127 -0
  23. package/python/config/human/human.yaml +24 -0
  24. package/python/config/human/human_demo.yaml +52 -0
  25. package/python/config/sweagent_0_7/07.yaml +101 -0
  26. package/python/config/sweagent_0_7/07_fcalling.yaml +100 -0
  27. package/python/config/sweagent_0_7/07_from_url.yaml +114 -0
  28. package/python/config/sweagent_0_7/07_thought_action.yaml +102 -0
  29. package/python/config/sweagent_0_7/07_thought_action_xml.yaml +96 -0
  30. package/python/mlc_config.json +44 -0
  31. package/python/pyproject.toml +262 -0
  32. package/python/sweagent/__init__.py +114 -0
  33. package/python/sweagent/__main__.py +4 -0
  34. package/python/sweagent/agent/__init__.py +0 -0
  35. package/python/sweagent/agent/action_sampler.py +317 -0
  36. package/python/sweagent/agent/agents.py +1294 -0
  37. package/python/sweagent/agent/extra/shell_agent.py +106 -0
  38. package/python/sweagent/agent/history_processors.py +399 -0
  39. package/python/sweagent/agent/hooks/__init__.py +0 -0
  40. package/python/sweagent/agent/hooks/abstract.py +139 -0
  41. package/python/sweagent/agent/hooks/status.py +34 -0
  42. package/python/sweagent/agent/models.py +896 -0
  43. package/python/sweagent/agent/problem_statement.py +312 -0
  44. package/python/sweagent/agent/reviewer.py +664 -0
  45. package/python/sweagent/environment/__init__.py +0 -0
  46. package/python/sweagent/environment/hooks/__init__.py +0 -0
  47. package/python/sweagent/environment/hooks/abstract.py +60 -0
  48. package/python/sweagent/environment/hooks/status.py +28 -0
  49. package/python/sweagent/environment/repo.py +219 -0
  50. package/python/sweagent/environment/swe_env.py +276 -0
  51. package/python/sweagent/exceptions.py +54 -0
  52. package/python/sweagent/inspector/README.md +6 -0
  53. package/python/sweagent/inspector/__init__.py +0 -0
  54. package/python/sweagent/inspector/favicon.ico +0 -0
  55. package/python/sweagent/inspector/fileViewer.js +354 -0
  56. package/python/sweagent/inspector/icons/computer.png +0 -0
  57. package/python/sweagent/inspector/icons/edit_icon.svg +11 -0
  58. package/python/sweagent/inspector/icons/swe-agent-logo-50.png +0 -0
  59. package/python/sweagent/inspector/icons/swellama_blue.png +0 -0
  60. package/python/sweagent/inspector/icons/swellama_brown.png +0 -0
  61. package/python/sweagent/inspector/icons/swellama_grey.png +0 -0
  62. package/python/sweagent/inspector/icons/swellama_tan.png +0 -0
  63. package/python/sweagent/inspector/index.html +25 -0
  64. package/python/sweagent/inspector/server.py +354 -0
  65. package/python/sweagent/inspector/static.py +169 -0
  66. package/python/sweagent/inspector/style.css +454 -0
  67. package/python/sweagent/run/__init__.py +0 -0
  68. package/python/sweagent/run/_progress.py +158 -0
  69. package/python/sweagent/run/batch_instances.py +419 -0
  70. package/python/sweagent/run/common.py +387 -0
  71. package/python/sweagent/run/compare_runs.py +123 -0
  72. package/python/sweagent/run/extract_pred.py +19 -0
  73. package/python/sweagent/run/hooks/__init__.py +0 -0
  74. package/python/sweagent/run/hooks/abstract.py +67 -0
  75. package/python/sweagent/run/hooks/apply_patch.py +106 -0
  76. package/python/sweagent/run/hooks/open_pr.py +244 -0
  77. package/python/sweagent/run/hooks/swe_bench_evaluate.py +113 -0
  78. package/python/sweagent/run/inspector_cli.py +493 -0
  79. package/python/sweagent/run/merge_predictions.py +64 -0
  80. package/python/sweagent/run/quick_stats.py +96 -0
  81. package/python/sweagent/run/remove_unfinished.py +63 -0
  82. package/python/sweagent/run/rich_test.py +91 -0
  83. package/python/sweagent/run/run.py +147 -0
  84. package/python/sweagent/run/run_batch.py +442 -0
  85. package/python/sweagent/run/run_replay.py +219 -0
  86. package/python/sweagent/run/run_shell.py +155 -0
  87. package/python/sweagent/run/run_single.py +225 -0
  88. package/python/sweagent/run/run_traj_to_demo.py +85 -0
  89. package/python/sweagent/tools/__init__.py +0 -0
  90. package/python/sweagent/tools/bundle.py +57 -0
  91. package/python/sweagent/tools/commands.py +220 -0
  92. package/python/sweagent/tools/parsing.py +619 -0
  93. package/python/sweagent/tools/tools.py +430 -0
  94. package/python/sweagent/tools/utils.py +108 -0
  95. package/python/sweagent/types.py +102 -0
  96. package/python/sweagent/utils/__init__.py +0 -0
  97. package/python/sweagent/utils/config.py +80 -0
  98. package/python/sweagent/utils/files.py +27 -0
  99. package/python/sweagent/utils/github.py +118 -0
  100. package/python/sweagent/utils/jinja_warnings.py +14 -0
  101. package/python/sweagent/utils/log.py +175 -0
  102. package/python/sweagent/utils/patch_formatter.py +152 -0
  103. package/python/sweagent/utils/serialization.py +45 -0
  104. package/python/tests/__init__.py +0 -0
  105. package/python/tests/conftest.py +191 -0
  106. package/python/tests/test_agent.py +258 -0
  107. package/python/tests/test_batch_instance.py +43 -0
  108. package/python/tests/test_commands/_interactive_dummy.py +35 -0
  109. package/python/tests/test_commands/interactive_dummy_wrapper.sh +29 -0
  110. package/python/tests/test_data/config_files/dummy_interactive.yaml +62 -0
  111. package/python/tests/test_data/data_sources/ctf/crypto/Katy/Dockerfile +20 -0
  112. package/python/tests/test_data/data_sources/ctf/crypto/Katy/README.md +13 -0
  113. package/python/tests/test_data/data_sources/ctf/crypto/Katy/challenge.json +12 -0
  114. package/python/tests/test_data/data_sources/ctf/crypto/Katy/customrandom.c +50 -0
  115. package/python/tests/test_data/data_sources/ctf/crypto/Katy/docker-compose.yml +14 -0
  116. package/python/tests/test_data/data_sources/ctf/crypto/Katy/release +0 -0
  117. package/python/tests/test_data/data_sources/ctf/crypto/Katy/server +0 -0
  118. package/python/tests/test_data/data_sources/ctf/crypto/Katy/solver.py +12 -0
  119. package/python/tests/test_data/data_sources/ctf/forensics/flash/README.md +16 -0
  120. package/python/tests/test_data/data_sources/ctf/forensics/flash/challenge.json +9 -0
  121. package/python/tests/test_data/data_sources/ctf/forensics/flash/flash_c8429a430278283c0e571baebca3d139.zip +0 -0
  122. package/python/tests/test_data/data_sources/ctf/misc/networking_1/README.md +15 -0
  123. package/python/tests/test_data/data_sources/ctf/misc/networking_1/challenge.json +10 -0
  124. package/python/tests/test_data/data_sources/ctf/misc/networking_1/networking.pcap +0 -0
  125. package/python/tests/test_data/data_sources/ctf/pwn/warmup/Dockerfile +28 -0
  126. package/python/tests/test_data/data_sources/ctf/pwn/warmup/README.md +14 -0
  127. package/python/tests/test_data/data_sources/ctf/pwn/warmup/challenge.json +14 -0
  128. package/python/tests/test_data/data_sources/ctf/pwn/warmup/docker-compose.yml +14 -0
  129. package/python/tests/test_data/data_sources/ctf/pwn/warmup/flag.txt +1 -0
  130. package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup +0 -0
  131. package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup.c +26 -0
  132. package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup.py +9 -0
  133. package/python/tests/test_data/data_sources/ctf/rev/rock/README.md +14 -0
  134. package/python/tests/test_data/data_sources/ctf/rev/rock/challenge.json +8 -0
  135. package/python/tests/test_data/data_sources/ctf/rev/rock/rock +0 -0
  136. package/python/tests/test_data/data_sources/ctf/rev/rock/rock.cpp +167 -0
  137. package/python/tests/test_data/data_sources/ctf/rev/rock/solution.cpp +24 -0
  138. package/python/tests/test_data/data_sources/ctf/rev/rock/test_solver/solution.py +6 -0
  139. package/python/tests/test_data/data_sources/ctf/rev/rock/test_solver/test.sh +10 -0
  140. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/000-default.conf +18 -0
  141. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/Dockerfile +20 -0
  142. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/file.pl +38 -0
  143. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/forms.pl +40 -0
  144. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/hello.pl +11 -0
  145. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/challenge.json +12 -0
  146. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/docker-compose.yml +14 -0
  147. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/flag +1 -0
  148. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/index.html +11 -0
  149. package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/solution.txt +1 -0
  150. package/python/tests/test_data/data_sources/debug_20240322.json +1 -0
  151. package/python/tests/test_data/data_sources/expert_instances.yaml +16 -0
  152. package/python/tests/test_data/data_sources/human_eval.json +1 -0
  153. package/python/tests/test_data/data_sources/simple_instances.yaml +3 -0
  154. package/python/tests/test_data/data_sources/simple_instances_long.yaml +30 -0
  155. package/python/tests/test_data/data_sources/swe-bench-dev-easy.json +1 -0
  156. package/python/tests/test_data/data_sources/swe-bench-dev-easy_first_only.json +1 -0
  157. package/python/tests/test_data/data_sources/swe-bench-lite-test.json +1 -0
  158. package/python/tests/test_data/trajectories/gpt4__swe-agent-test-repo__default_from_url__t-0.00__p-0.95__c-3.00__install-1/6e44b9__sweagenttestrepo-1c2844.traj +342 -0
  159. package/python/tests/test_data/trajectories/gpt4__swe-agent-test-repo__default_from_url__t-0.00__p-0.95__c-3.00__install-1/solution_missing_colon.py +15 -0
  160. package/python/tests/test_data/trajectories/gpt4__swe-agent__test-repo__default_from_url__t-0.00__p-0.95__c-3.00__install-1/args.yaml +518 -0
  161. package/python/tests/test_data/trajectories/gpt4__swe-agent__test-repo__default_from_url__t-0.00__p-0.95__c-3.00__install-1/swe-agent__test-repo-i1.traj +124 -0
  162. package/python/tests/test_data/trajectories/gpt4__swe-bench-dev-easy_first_only__default__t-0.00__p-0.95__c-3.00__install-1/all_preds.jsonl +1 -0
  163. package/python/tests/test_data/trajectories/gpt4__swe-bench-dev-easy_first_only__default__t-0.00__p-0.95__c-3.00__install-1/args.yaml +520 -0
  164. package/python/tests/test_data/trajectories/gpt4__swe-bench-dev-easy_first_only__default__t-0.00__p-0.95__c-3.00__install-1/patches/pydicom__pydicom-1458.patch +18 -0
  165. package/python/tests/test_data/trajectories/gpt4__swe-bench-dev-easy_first_only__default__t-0.00__p-0.95__c-3.00__install-1/pydicom__pydicom-1458.traj +257 -0
  166. package/python/tests/test_env.py +66 -0
  167. package/python/tests/test_env_utils.py +129 -0
  168. package/python/tests/test_history_processors.py +40 -0
  169. package/python/tests/test_models.py +23 -0
  170. package/python/tests/test_openai_live.py +164 -0
  171. package/python/tests/test_packaging.py +7 -0
  172. package/python/tests/test_parsing.py +131 -0
  173. package/python/tests/test_problem_statement_multimodal.py +111 -0
  174. package/python/tests/test_quick_stats.py +42 -0
  175. package/python/tests/test_run.py +37 -0
  176. package/python/tests/test_run_batch.py +110 -0
  177. package/python/tests/test_run_hooks.py +114 -0
  178. package/python/tests/test_run_replay.py +33 -0
  179. package/python/tests/test_run_single.py +125 -0
  180. package/python/tests/test_tools_command_parsing.py +193 -0
  181. package/python/tests/test_utils.py +15 -0
  182. package/python/tests/tools/__init__.py +0 -0
  183. package/python/tests/tools/conftest.py +12 -0
  184. package/python/tests/tools/test_default_utils.py +153 -0
  185. package/python/tests/tools/test_edit_replace.py +0 -0
  186. package/python/tests/tools/test_split_string.py +82 -0
  187. package/python/tests/utils.py +29 -0
  188. package/python/tools/diff_state/bin/_state_diff_state +52 -0
  189. package/python/tools/diff_state/config.yaml +2 -0
  190. package/python/tools/edit_anthropic/bin/_state_anthropic +21 -0
  191. package/python/tools/edit_anthropic/bin/str_replace_editor +710 -0
  192. package/python/tools/edit_anthropic/config.yaml +56 -0
  193. package/python/tools/edit_anthropic/install.sh +3 -0
  194. package/python/tools/filemap/bin/filemap +45 -0
  195. package/python/tools/filemap/config.yaml +9 -0
  196. package/python/tools/filemap/install.sh +2 -0
  197. package/python/tools/forfeit/bin/exit_forfeit +5 -0
  198. package/python/tools/forfeit/config.yaml +5 -0
  199. package/python/tools/image_tools/bin/view_image +36 -0
  200. package/python/tools/image_tools/config.yaml +9 -0
  201. package/python/tools/multilingual_setup/bin/do_nothing +2 -0
  202. package/python/tools/multilingual_setup/config.yaml +1 -0
  203. package/python/tools/multilingual_setup/install.sh +45 -0
  204. package/python/tools/registry/bin/_read_env +10 -0
  205. package/python/tools/registry/bin/_write_env +10 -0
  206. package/python/tools/registry/config.yaml +1 -0
  207. package/python/tools/registry/install.sh +6 -0
  208. package/python/tools/registry/lib/__init__.py +0 -0
  209. package/python/tools/registry/lib/registry.py +56 -0
  210. package/python/tools/review_on_submit_m/README.md +6 -0
  211. package/python/tools/review_on_submit_m/bin/submit +54 -0
  212. package/python/tools/review_on_submit_m/config.yaml +6 -0
  213. package/python/tools/review_on_submit_m/install.sh +0 -0
  214. package/python/tools/search/bin/find_file +31 -0
  215. package/python/tools/search/bin/search_dir +39 -0
  216. package/python/tools/search/bin/search_file +55 -0
  217. package/python/tools/search/config.yaml +37 -0
  218. package/python/tools/search/install.sh +3 -0
  219. package/python/tools/submit/bin/submit +17 -0
  220. package/python/tools/submit/config.yaml +5 -0
  221. package/python/tools/web_browser/bin/click_mouse +41 -0
  222. package/python/tools/web_browser/bin/close_site +28 -0
  223. package/python/tools/web_browser/bin/double_click_mouse +37 -0
  224. package/python/tools/web_browser/bin/drag_mouse +46 -0
  225. package/python/tools/web_browser/bin/execute_script_on_page +39 -0
  226. package/python/tools/web_browser/bin/get_console_output +48 -0
  227. package/python/tools/web_browser/bin/move_mouse +35 -0
  228. package/python/tools/web_browser/bin/navigate_back +33 -0
  229. package/python/tools/web_browser/bin/navigate_forward +33 -0
  230. package/python/tools/web_browser/bin/open_site +36 -0
  231. package/python/tools/web_browser/bin/press_keys_on_page +51 -0
  232. package/python/tools/web_browser/bin/reload_page +33 -0
  233. package/python/tools/web_browser/bin/run_web_browser_server +394 -0
  234. package/python/tools/web_browser/bin/screenshot_site +38 -0
  235. package/python/tools/web_browser/bin/scroll_on_page +40 -0
  236. package/python/tools/web_browser/bin/set_browser_window_size +40 -0
  237. package/python/tools/web_browser/bin/type_text +34 -0
  238. package/python/tools/web_browser/bin/wait_time +39 -0
  239. package/python/tools/web_browser/config.yaml +155 -0
  240. package/python/tools/web_browser/install.sh +22 -0
  241. package/python/tools/web_browser/lib/browser_manager.py +404 -0
  242. package/python/tools/web_browser/lib/web_browser_config.py +33 -0
  243. package/python/tools/web_browser/lib/web_browser_utils.py +126 -0
  244. package/python/tools/web_browser/test_console.html +1 -0
  245. package/python/tools/windowed/bin/_state +25 -0
  246. package/python/tools/windowed/bin/create +29 -0
  247. package/python/tools/windowed/bin/goto +37 -0
  248. package/python/tools/windowed/bin/open +49 -0
  249. package/python/tools/windowed/bin/scroll_down +12 -0
  250. package/python/tools/windowed/bin/scroll_up +13 -0
  251. package/python/tools/windowed/config.yaml +38 -0
  252. package/python/tools/windowed/install.sh +15 -0
  253. package/python/tools/windowed/lib/__init__.py +0 -0
  254. package/python/tools/windowed/lib/flake8_utils.py +147 -0
  255. package/python/tools/windowed/lib/windowed_file.py +312 -0
  256. package/python/tools/windowed_edit_linting/bin/edit +128 -0
  257. package/python/tools/windowed_edit_linting/config.yaml +31 -0
  258. package/python/tools/windowed_edit_linting/install.sh +5 -0
  259. package/python/tools/windowed_edit_replace/bin/edit +172 -0
  260. package/python/tools/windowed_edit_replace/bin/insert +77 -0
  261. package/python/tools/windowed_edit_replace/config.yaml +60 -0
  262. package/python/tools/windowed_edit_replace/install.sh +5 -0
  263. package/python/tools/windowed_edit_rewrite/bin/edit +78 -0
  264. package/python/tools/windowed_edit_rewrite/config.yaml +11 -0
  265. package/python/tools/windowed_edit_rewrite/install.sh +5 -0
  266. package/python/trajectories/demonstrations/ctf/crypto/BabyEncryption.traj +318 -0
  267. package/python/trajectories/demonstrations/ctf/crypto/BabyTimeCapsule.traj +197 -0
  268. package/python/trajectories/demonstrations/ctf/crypto/eps.traj +289 -0
  269. package/python/trajectories/demonstrations/ctf/crypto/katy.traj +368 -0
  270. package/python/trajectories/demonstrations/ctf/forensics/flash.traj +102 -0
  271. package/python/trajectories/demonstrations/ctf/misc/networking_1.traj +102 -0
  272. package/python/trajectories/demonstrations/ctf/pwn/warmup.traj +159 -0
  273. package/python/trajectories/demonstrations/ctf/rev/rock.traj +251 -0
  274. package/python/trajectories/demonstrations/ctf/web/i_got_id_demo.traj +422 -0
  275. package/python/trajectories/demonstrations/function_calling_simple.traj +151 -0
  276. package/python/trajectories/demonstrations/human_thought__swe-bench-HumanEvalFix-python__lcb__t-0.00__p-0.95__c-4.00__install-0/humanevalfix-python-0.traj +129 -0
  277. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__default__t-0.20__p-0.95__c-2.00__install-1___install_from_source/marshmallow-code__marshmallow-1867.traj +318 -0
  278. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__default_sys-env_cursors_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj +251 -0
  279. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__default_sys-env_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj +399 -0
  280. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling__install-1/marshmallow-code__marshmallow-1867.traj +594 -0
  281. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling_replace__install-1/marshmallow-code__marshmallow-1867.traj +592 -0
  282. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling_replace_from_source/marshmallow-code__marshmallow-1867.traj +3316 -0
  283. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__xml_sys-env_cursors_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj +251 -0
  284. package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__xml_sys-env_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj +399 -0
  285. package/python/trajectories/demonstrations/str_replace_anthropic_demo.yaml +432 -0
  286. package/rust/Cargo.toml +100 -0
  287. package/rust/README.md +49 -0
  288. package/rust/src/agent/action_sampler.rs +130 -0
  289. package/rust/src/agent/agents.rs +1029 -0
  290. package/rust/src/agent/history_processors.rs +277 -0
  291. package/rust/src/agent/hooks/mod.rs +208 -0
  292. package/rust/src/agent/mod.rs +24 -0
  293. package/rust/src/agent/models.rs +837 -0
  294. package/rust/src/agent/problem_statement.rs +355 -0
  295. package/rust/src/agent/reviewer.rs +505 -0
  296. package/rust/src/bin/sweagent.rs +784 -0
  297. package/rust/src/environment/deployment.rs +631 -0
  298. package/rust/src/environment/hooks/mod.rs +114 -0
  299. package/rust/src/environment/mod.rs +16 -0
  300. package/rust/src/environment/repo.rs +265 -0
  301. package/rust/src/environment/runtime.rs +237 -0
  302. package/rust/src/environment/swe_env.rs +248 -0
  303. package/rust/src/exceptions.rs +228 -0
  304. package/rust/src/lib.rs +68 -0
  305. package/rust/src/monitoring.rs +482 -0
  306. package/rust/src/run/hooks/mod.rs +134 -0
  307. package/rust/src/run/mod.rs +12 -0
  308. package/rust/src/run/run_batch.rs +563 -0
  309. package/rust/src/run/run_single.rs +196 -0
  310. package/rust/src/tools/bundle.rs +224 -0
  311. package/rust/src/tools/commands.rs +173 -0
  312. package/rust/src/tools/mod.rs +295 -0
  313. package/rust/src/tools/parsing.rs +354 -0
  314. package/rust/src/tools/registry.rs +143 -0
  315. package/rust/src/types.rs +554 -0
  316. package/rust/src/utils/config.rs +105 -0
  317. package/rust/src/utils/files.rs +137 -0
  318. package/rust/src/utils/github.rs +171 -0
  319. package/rust/src/utils/log.rs +65 -0
  320. package/rust/src/utils/mod.rs +17 -0
  321. package/rust/src/utils/serialization.rs +181 -0
  322. package/rust/src/utils/template.rs +173 -0
  323. package/typescript/README.md +335 -0
@@ -0,0 +1,102 @@
1
+ # This config shows the use of the thought_action action parser together with the line-range based replace tools
2
+ # This config is close to SWE-agent 0.7
3
+ agent:
4
+ templates:
5
+ system_template: |-
6
+ SETTING: You are an autonomous programmer, and you're working directly in the command line with a special interface.
7
+
8
+ The special interface consists of a file editor that shows you {{WINDOW}} lines of a file at a time.
9
+ In addition to typical bash commands, you can also use the following commands to help you navigate and edit files.
10
+
11
+ COMMANDS:
12
+ {{command_docs}}
13
+
14
+ Please note that THE EDIT COMMAND REQUIRES PROPER INDENTATION.
15
+ If you'd like to add the line ' print(x)' you must fully write that out, with all those spaces before the code! Indentation is important and code that is not indented correctly will fail and require fixing before it can be run.
16
+
17
+ RESPONSE FORMAT:
18
+ Your shell prompt is formatted as follows:
19
+ (Open file: <path>) <cwd> $
20
+
21
+ You need to format your output using two fields; discussion and command.
22
+ Your output should always include _one_ discussion and _one_ command field EXACTLY as in the following example:
23
+ DISCUSSION
24
+ First I'll start by using ls to see what files are in the current directory. Then maybe we can look at some relevant files to see what they look like.
25
+ ```
26
+ ls -a
27
+ ```
28
+
29
+ You should only include a *SINGLE* command in the command section and then wait for a response from the shell before continuing with more discussion and commands. Everything you include in the DISCUSSION section will be saved for future reference.
30
+ If you'd like to issue two commands at once, PLEASE DO NOT DO THAT! Please instead first submit just the first command, and then after receiving a response you'll be able to issue the second command.
31
+ You're free to use any other bash commands you want (e.g. find, grep, cat, ls, cd) in addition to the special commands listed above.
32
+ However, the environment does NOT support interactive session commands (e.g. python, vim), so please do not invoke them.
33
+ instance_template: |-
34
+ We're currently solving the following issue within our repository. Here's the issue text:
35
+ ISSUE:
36
+ {{problem_statement}}
37
+
38
+ INSTRUCTIONS:
39
+ Now, you're going to solve this issue on your own. Your terminal session has started and you're in the repository's root directory. You can use any bash commands or the special interface to help you. Edit all the files you need to and run any checks or tests that you want.
40
+ Remember, YOU CAN ONLY ENTER ONE COMMAND AT A TIME. You should always wait for feedback after every command.
41
+ When you're satisfied with all of the changes you've made, you can submit your changes to the code base by simply running the submit command.
42
+ Note however that you cannot use any interactive session commands (e.g. python, vim) in this environment, but you can write scripts and run them. E.g. you can write a python script and then run it with `python <script_name>.py`.
43
+
44
+ NOTE ABOUT THE EDIT COMMAND: Indentation really matters! When editing a file, make sure to insert appropriate indentation before each line!
45
+
46
+ IMPORTANT TIPS:
47
+ 1. Always start by trying to replicate the bug that the issues discusses.
48
+ If the issue includes code for reproducing the bug, we recommend that you re-implement that in your environment, and run it to make sure you can reproduce the bug.
49
+ Then start trying to fix it.
50
+ When you think you've fixed the bug, re-run the bug reproduction script to make sure that the bug has indeed been fixed.
51
+
52
+ If the bug reproduction script does not print anything when it successfully runs, we recommend adding a print("Script completed successfully, no errors.") command at the end of the file,
53
+ so that you can be sure that the script indeed ran fine all the way through.
54
+
55
+ 2. If you run a command and it doesn't work, try running a different command. A command that did not work once will not work the second time unless you modify it!
56
+
57
+ 3. If you open a file and need to get to an area around a specific line that is not in the first 100 lines, say line 583, don't just use the scroll_down command multiple times. Instead, use the goto 583 command. It's much quicker.
58
+
59
+ 4. If the bug reproduction script requires inputting/reading a specific file, such as buggy-input.png, and you'd like to understand how to input that file, conduct a search in the existing repo code, to see whether someone else has already done that. Do this by running the command: find_file "buggy-input.png" If that doesn't work, use the linux 'find' command.
60
+
61
+ 5. Always make sure to look at the currently open file and the current working directory (which appears right after the currently open file). The currently open file might be in a different directory than the working directory! Note that some commands, such as 'create', open files, so they might change the current open file.
62
+
63
+ 6. When editing files, it is easy to accidentally specify a wrong line number or to write code with incorrect indentation. Always check the code after you issue an edit to make sure that it reflects what you wanted to accomplish. If it didn't, issue another command to fix it.
64
+
65
+
66
+ (Open file: {{open_file}})
67
+ (Current directory: {{working_dir}})
68
+ bash-$
69
+ next_step_template: |-
70
+ {{observation}}
71
+ (Open file: {{open_file}})
72
+ (Current directory: {{working_dir}})
73
+ bash-$
74
+ next_step_no_output_template: |-
75
+ Your command ran successfully and did not produce any output.
76
+ (Open file: {{open_file}})
77
+ (Current directory: {{working_dir}})
78
+ bash-$
79
+ demonstration_template: |
80
+ Here is a demonstration of how to correctly accomplish this task.
81
+ It is included to show you how to correctly use the interface.
82
+ You do not need to follow exactly what is done in the demonstration.
83
+ --- DEMONSTRATION ---
84
+ {{demonstration}}
85
+ --- END OF DEMONSTRATION ---
86
+ demonstrations:
87
+ - trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__default_sys-env_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj
88
+ tools:
89
+ env_variables:
90
+ WINDOW: 100
91
+ OVERLAP: 2
92
+ bundles:
93
+ - path: tools/registry
94
+ - path: tools/windowed
95
+ - path: tools/search
96
+ - path: tools/windowed_edit_linting
97
+ - path: tools/submit
98
+ parse_function:
99
+ type: thought_action
100
+ history_processors:
101
+ - type: last_n_observations
102
+ n: 5
@@ -0,0 +1,96 @@
1
+ # This config shows the use of the thought action xml parser together with the line-range based replace tools
2
+ # This config is close to SWE-agent 0.7
3
+ agent:
4
+ templates:
5
+ system_template: |-
6
+ SETTING: You are an autonomous programmer, and you're working directly in the command line with a special interface.
7
+
8
+ The special interface consists of a file editor that shows you {{WINDOW}} lines of a file at a time.
9
+ In addition to typical bash commands, you can also use the following commands to help you navigate and edit files.
10
+
11
+ COMMANDS:
12
+ {{command_docs}}
13
+
14
+ Please note that THE EDIT COMMAND REQUIRES PROPER INDENTATION.
15
+ If you'd like to add the line ' print(x)' you must fully write that out, with all those spaces before the code! Indentation is important and code that is not indented correctly will fail and require fixing before it can be run.
16
+
17
+ RESPONSE FORMAT:
18
+ Your shell prompt is formatted as follows:
19
+ (Open file: <path>) <cwd> $
20
+
21
+ You need to format your output using two fields; discussion and command.
22
+ Your output should always include _one_ discussion and _one_ command field EXACTLY as in the following example:
23
+ DISCUSSION
24
+ First I'll start by using ls to see what files are in the current directory. Then maybe we can look at some relevant files to see what they look like.
25
+ <command>
26
+ ls -a
27
+ </command>
28
+
29
+ You should only include a *SINGLE* command in the command section and then wait for a response from the shell before continuing with more discussion and commands. Everything you include in the DISCUSSION section will be saved for future reference.
30
+ If you'd like to issue two commands at once, PLEASE DO NOT DO THAT! Please instead first submit just the first command, and then after receiving a response you'll be able to issue the second command.
31
+ You're free to use any other bash commands you want (e.g. find, grep, cat, ls, cd) in addition to the special commands listed above.
32
+ However, the environment does NOT support interactive session commands (e.g. python, vim), so please do not invoke them.
33
+ instance_template: |-
34
+ We're currently solving the following issue within our repository. Here's the issue text:
35
+ ISSUE:
36
+ {{problem_statement}}
37
+
38
+ INSTRUCTIONS:
39
+ Now, you're going to solve this issue on your own. Your terminal session has started and you're in the repository's root directory. You can use any bash commands or the special interface to help you. Edit all the files you need to and run any checks or tests that you want.
40
+ Remember, YOU CAN ONLY ENTER ONE COMMAND AT A TIME. You should always wait for feedback after every command.
41
+ When you're satisfied with all of the changes you've made, you can submit your changes to the code base by simply running the submit command.
42
+ Note however that you cannot use any interactive session commands (e.g. python, vim) in this environment, but you can write scripts and run them. E.g. you can write a python script and then run it with `python <script_name>.py`.
43
+
44
+ NOTE ABOUT THE EDIT COMMAND: Indentation really matters! When editing a file, make sure to insert appropriate indentation before each line!
45
+
46
+ IMPORTANT TIPS:
47
+ 1. Always start by trying to replicate the bug that the issues discusses.
48
+ If the issue includes code for reproducing the bug, we recommend that you re-implement that in your environment, and run it to make sure you can reproduce the bug.
49
+ Then start trying to fix it.
50
+ When you think you've fixed the bug, re-run the bug reproduction script to make sure that the bug has indeed been fixed.
51
+
52
+ If the bug reproduction script does not print anything when it successfully runs, we recommend adding a print("Script completed successfully, no errors.") command at the end of the file,
53
+ so that you can be sure that the script indeed ran fine all the way through.
54
+
55
+ 2. If you run a command and it doesn't work, try running a different command. A command that did not work once will not work the second time unless you modify it!
56
+
57
+ 3. If you open a file and need to get to an area around a specific line that is not in the first 100 lines, say line 583, don't just use the scroll_down command multiple times. Instead, use the goto 583 command. It's much quicker.
58
+
59
+ 4. If the bug reproduction script requires inputting/reading a specific file, such as buggy-input.png, and you'd like to understand how to input that file, conduct a search in the existing repo code, to see whether someone else has already done that. Do this by running the command: find_file "buggy-input.png" If that doesn't work, use the linux 'find' command.
60
+
61
+ 5. Always make sure to look at the currently open file and the current working directory (which appears right after the currently open file). The currently open file might be in a different directory than the working directory! Note that some commands, such as 'create', open files, so they might change the current open file.
62
+
63
+ 6. When editing files, it is easy to accidentally specify a wrong line number or to write code with incorrect indentation. Always check the code after you issue an edit to make sure that it reflects what you wanted to accomplish. If it didn't, issue another command to fix it.
64
+
65
+
66
+ (Open file: {{open_file}})
67
+ (Current directory: {{working_dir}})
68
+ bash-$
69
+ next_step_template: |-
70
+ {{observation}}
71
+ (Open file: {{open_file}})
72
+ (Current directory: {{working_dir}})
73
+ bash-$
74
+ next_step_no_output_template: |-
75
+ Your command ran successfully and did not produce any output.
76
+ (Open file: {{open_file}})
77
+ (Current directory: {{working_dir}})
78
+ bash-$
79
+ demonstrations:
80
+ - trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__xml_sys-env_window100__t-0.20__p-0.95__c-2.00__install-1/marshmallow-code__marshmallow-1867.traj
81
+ put_demos_in_history: true
82
+ tools:
83
+ env_variables:
84
+ WINDOW: 100
85
+ OVERLAP: 2
86
+ bundles:
87
+ - path: tools/registry
88
+ - path: tools/windowed
89
+ - path: tools/search
90
+ - path: tools/windowed_edit_linting
91
+ - path: tools/submit
92
+ parse_function:
93
+ type: xml_thought_action
94
+ history_processors:
95
+ - type: last_n_observations
96
+ n: 5
@@ -0,0 +1,44 @@
1
+ {
2
+ "ignorePatterns": [
3
+ {
4
+ "pattern": "https://github.com/?.*"
5
+ },
6
+ {
7
+ "pattern": "https://platform.openai.com/docs/.*"
8
+ },
9
+ {
10
+ "pattern": "https://docs.anthropic.com/.*"
11
+ },
12
+ {
13
+ "pattern": ".*localhost.*"
14
+ },
15
+ {
16
+ "pattern": "https?://(.*\\.)?twitter\\.com/.*"
17
+ },
18
+ {
19
+ "pattern": "https?://(.*\\.)?x\\.com/.*"
20
+ },
21
+ {
22
+ "pattern": "https://linuxize.com/post/bash-heredoc/"
23
+ },
24
+ {
25
+ "pattern": "https://leetcode.com/problems/.*"
26
+ },
27
+ {
28
+ "pattern": "https://jsoneditoronline.org/.*"
29
+ },
30
+ {
31
+ "pattern": ".*\\.md/#sweagent\\..*"
32
+ },
33
+ {
34
+ "pattern": "^(?!https).*(?<!\\.md)$"
35
+ }
36
+
37
+ ],
38
+ "replacements": [
39
+ {
40
+ "pattern": "/#.*",
41
+ "replacement": ""
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,262 @@
1
+ # Guide (user-friendly):
2
+ # https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
3
+ # Specification (technical, formal):
4
+ # https://packaging.python.org/en/latest/specifications/pyproject-toml/
5
+
6
+
7
+ # Choosing a build backend:
8
+ [build-system]
9
+ requires = ["setuptools"] # REQUIRED if [build-system] table is used
10
+ build-backend = "setuptools.build_meta" # If not defined, then legacy behavior can happen.
11
+
12
+
13
+ [project]
14
+ name = "sweagent"
15
+ dynamic = ["version"]
16
+ description = "The official SWE-agent package - an open source Agent Computer Interface for running language models as software engineers."
17
+ readme = "README.md"
18
+ requires-python = ">=3.11"
19
+ license = {file = "LICENSE"}
20
+ keywords = ["nlp", "agents", "code"]
21
+ authors = [
22
+ {name = "elizaOS Contributors" },
23
+ ]
24
+
25
+ # Classifiers help users find your project by categorizing it.
26
+ classifiers = [
27
+ # How mature is this project? Common values are
28
+ # 3 - Alpha, 4 - Beta, 5 - Production/Stable
29
+ "Operating System :: OS Independent",
30
+ # Indicate who your project is intended for
31
+ "Intended Audience :: Developers",
32
+ # Pick your license as you wish
33
+ "License :: OSI Approved :: MIT License",
34
+ "Programming Language :: Python :: 3.11",
35
+ "Programming Language :: Python :: 3.12",
36
+ "Programming Language :: Python :: 3 :: Only",
37
+ ]
38
+
39
+ dependencies = [
40
+ "datasets",
41
+ "numpy",
42
+ "pandas",
43
+ "rich",
44
+ "ruamel.yaml",
45
+ "tenacity",
46
+ "unidiff",
47
+ "simple-parsing",
48
+ "rich-argparse",
49
+ "flask",
50
+ "flask-cors",
51
+ "flask-socketio",
52
+ "pydantic",
53
+ "python-dotenv",
54
+ "pydantic_settings",
55
+ "litellm",
56
+ "GitPython",
57
+ "ghapi",
58
+ "swe-rex>=1.4.0",
59
+ "tabulate",
60
+ "textual>=1.0.0",
61
+ "requests",
62
+ ]
63
+
64
+ [project.scripts]
65
+ sweagent = "sweagent.run.run:main"
66
+
67
+ [project.optional-dependencies]
68
+ dev = [
69
+ "mike",
70
+ "mkdocs-material",
71
+ "mkdocs-glightbox",
72
+ "mkdocs-include-markdown-plugin",
73
+ "mkdocstrings[python]>=0.18",
74
+ "pytest",
75
+ "pytest-cov",
76
+ "pipx",
77
+ "pre-commit",
78
+ "pytest-xdist",
79
+ "griffe-pydantic!=1.1.3",
80
+ ]
81
+
82
+ [tool.setuptools]
83
+ include-package-data = true
84
+
85
+ [tool.setuptools.dynamic]
86
+ version = {attr = "sweagent.__version__"}
87
+
88
+ [tool.setuptools.packages.find]
89
+ where = ["."]
90
+ namespaces = false
91
+
92
+ [project.urls]
93
+ "Homepage" = "https://swe-agent.com"
94
+ "Bug Reports" = "http://github.com/SWE-agent/SWE-agent/issues"
95
+ "Documentation" = "https://swe-agent.com/latest/"
96
+ "Source" = "http://github.com/SWE-agent/SWE-agent"
97
+
98
+
99
+ [tool.pytest.ini_options]
100
+ markers = [
101
+ "slow: marks tests as slow (deselect with '-m \"not slow\"')",
102
+ "ctf: marks EnIGMA tests for using SWE-agent on capture the flag (CTF) challenges",
103
+ ]
104
+ testpaths = [
105
+ "tests"
106
+ ]
107
+ xfail_strict = true
108
+ asyncio_default_fixture_loop_scope = "function"
109
+
110
+ [tool.ruff]
111
+ # Exclude a variety of commonly ignored directories.
112
+ exclude = [
113
+ ".bzr",
114
+ ".direnv",
115
+ ".eggs",
116
+ ".git",
117
+ ".git-rewrite",
118
+ ".hg",
119
+ ".ipynb_checkpoints",
120
+ ".mypy_cache",
121
+ ".nox",
122
+ ".pants.d",
123
+ ".pyenv",
124
+ ".pytest_cache",
125
+ ".pytype",
126
+ ".ruff_cache",
127
+ ".svn",
128
+ ".tox",
129
+ ".venv",
130
+ ".vscode",
131
+ "__pypackages__",
132
+ "_build",
133
+ "buck-out",
134
+ "build",
135
+ "dist",
136
+ "node_modules",
137
+ "site-packages",
138
+ "venv",
139
+ # ---- project specific ----
140
+ "tests/test_data",
141
+ # Exclude commands so they don't get the __future__ imports
142
+ "config/commands",
143
+ ]
144
+
145
+ line-length = 120
146
+ indent-width = 4
147
+
148
+ target-version = "py310"
149
+
150
+ [tool.ruff.lint]
151
+ # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
152
+ # Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
153
+ # McCabe complexity (`C901`) by default.
154
+ # I001: Isort, I002: required import
155
+ select = [
156
+ # Error (E)
157
+ "E",
158
+ # Error (PLE)
159
+ "PLE",
160
+ # pycodestyle
161
+ "E713", # not in
162
+ "E714", # is not
163
+ "E711", # comparison with None
164
+ # pyflakes
165
+ "F821",
166
+ "F822",
167
+ "F401", # unused-import
168
+ "F841", # unused var
169
+ "F541", # f-string without args
170
+ "F901", # raise NotImplemented should be raise NotImplementedError
171
+ # isort
172
+ "I001", # isort
173
+ "I002", # required import
174
+ # pyupgrade and related
175
+ "UP", # pyupgrade
176
+ "C401", # flake8-comprehensions: unnecessary-generator-set
177
+ "C402", # flake8-comprehensions: unnecessary-generator-dict
178
+ "C403", # flake8-comprehensions: unnecessary-list-comprehension-set
179
+ "C404", # flake8-comprehensions: unnecessary-list-comprehension-dict
180
+ "C405", # flake8-comprehensions: unnecessary-literal-set
181
+ "F632", # pyflakes: is-literal
182
+ "W605", # pycodestyle: invalid-escape-sequence
183
+ # bugbear
184
+ "B006", # mutable default
185
+ "B007", # unused loop var
186
+ "B009", # getattr with constant
187
+ # flake8-errmsg
188
+ "EM",
189
+ # flake8-future-annotations
190
+ "FA102",
191
+ # flake8-return
192
+ "RET",
193
+ # RUF
194
+ "RUF019", # unneded key in dict check
195
+ # pytest
196
+ "PT",
197
+ # flake8-simplify (SIM)
198
+ "SIM201",
199
+ # flake8-use-pathlib
200
+ "PTH100",
201
+ "PTH110",
202
+ "PTH111",
203
+ "PTH112",
204
+ "PTH113",
205
+ "PTH114",
206
+ "PTH117",
207
+ "PTH118",
208
+ "PTH119",
209
+ "PTH120",
210
+ "PTH121",
211
+ "PTH122",
212
+ "PTH202",
213
+ "PTH203",
214
+ "PTH204",
215
+ "PTH205",
216
+ ]
217
+ ignore = [
218
+ # flake8-return
219
+ "RET505", # can't autofix
220
+ "RET506", # can't autofix
221
+ "RET507", # can't autofix
222
+ # error (E)
223
+ "E501", # line too long
224
+ "E402", # import not on top of file
225
+ "E722", # bare except
226
+ "E741", # ambiguous symbol
227
+ # pytest
228
+ "PT011",
229
+ "PT018",
230
+ ]
231
+
232
+ # Allow fix for all enabled rules (when `--fix`) is provided.
233
+ fixable = ["ALL"]
234
+ unfixable = []
235
+
236
+ # Allow unused variables when underscore-prefixed.
237
+ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
238
+
239
+ [tool.ruff.format]
240
+ # Like Black, use double quotes for strings.
241
+ quote-style = "double"
242
+
243
+ # Like Black, indent with spaces, rather than tabs.
244
+ indent-style = "space"
245
+
246
+ # Like Black, respect magic trailing commas.
247
+ skip-magic-trailing-comma = false
248
+
249
+ # Like Black, automatically detect the appropriate line ending.
250
+ line-ending = "auto"
251
+
252
+ [tool.typos.default.extend-identifiers]
253
+ # *sigh* this just isn't worth the cost of fixing
254
+ ACI = "ACI"
255
+
256
+ [tool.typos.default.extend-words]
257
+ # Don't correct the surname "Teh"
258
+ aci = "aci"
259
+ ba = "ba"
260
+
261
+ [tool.ruff.lint.isort]
262
+ # required-imports = ["from __future__ import annotations"]
@@ -0,0 +1,114 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import sys
5
+ from functools import partial
6
+ from logging import WARNING, getLogger
7
+ from pathlib import Path
8
+
9
+ import swerex.utils.log as log_swerex
10
+ from git import Repo
11
+ from packaging import version
12
+
13
+ from sweagent.utils.log import get_logger
14
+
15
+ __version__ = "1.1.0"
16
+ PYTHON_MINIMUM_VERSION = (3, 11)
17
+ SWEREX_MINIMUM_VERSION = "1.2.0"
18
+ SWEREX_RECOMMENDED_VERSION = "1.2.1"
19
+
20
+ # Monkey patch the logger to use our implementation
21
+ log_swerex.get_logger = partial(get_logger, emoji="🦖")
22
+
23
+ # See https://github.com/SWE-agent/SWE-agent/issues/585
24
+ getLogger("datasets").setLevel(WARNING)
25
+ getLogger("numexpr.utils").setLevel(WARNING)
26
+ getLogger("LiteLLM").setLevel(WARNING)
27
+
28
+ PACKAGE_DIR = Path(__file__).resolve().parent
29
+
30
+ if sys.version_info < PYTHON_MINIMUM_VERSION:
31
+ msg = (
32
+ f"Python {sys.version_info.major}.{sys.version_info.minor} is not supported. "
33
+ "SWE-agent requires Python 3.11 or higher."
34
+ )
35
+ raise RuntimeError(msg)
36
+
37
+ assert PACKAGE_DIR.is_dir(), PACKAGE_DIR
38
+ REPO_ROOT = PACKAGE_DIR.parent
39
+ assert REPO_ROOT.is_dir(), REPO_ROOT
40
+ CONFIG_DIR = Path(os.getenv("SWE_AGENT_CONFIG_DIR", PACKAGE_DIR.parent / "config"))
41
+ assert CONFIG_DIR.is_dir(), CONFIG_DIR
42
+
43
+ TOOLS_DIR = Path(os.getenv("SWE_AGENT_TOOLS_DIR", PACKAGE_DIR.parent / "tools"))
44
+ assert TOOLS_DIR.is_dir(), TOOLS_DIR
45
+
46
+ TRAJECTORY_DIR = Path(os.getenv("SWE_AGENT_TRAJECTORY_DIR", PACKAGE_DIR.parent / "trajectories"))
47
+ assert TRAJECTORY_DIR.is_dir(), TRAJECTORY_DIR
48
+
49
+
50
+ def get_agent_commit_hash() -> str:
51
+ """Get the commit hash of the current SWE-agent commit.
52
+
53
+ If we cannot get the hash, we return an empty string.
54
+ """
55
+ try:
56
+ repo = Repo(REPO_ROOT, search_parent_directories=False)
57
+ except Exception:
58
+ return "unavailable"
59
+ return repo.head.object.hexsha
60
+
61
+
62
+ def get_rex_commit_hash() -> str:
63
+ import swerex
64
+
65
+ try:
66
+ repo = Repo(Path(swerex.__file__).resolve().parent.parent.parent, search_parent_directories=False)
67
+ except Exception:
68
+ return "unavailable"
69
+ return repo.head.object.hexsha
70
+
71
+
72
+ def get_rex_version() -> str:
73
+ from swerex import __version__ as rex_version
74
+
75
+ return rex_version
76
+
77
+
78
+ def get_agent_version_info() -> str:
79
+ hash = get_agent_commit_hash()
80
+ rex_hash = get_rex_commit_hash()
81
+ rex_version = get_rex_version()
82
+ return f"This is SWE-agent version {__version__} ({hash=}) with SWE-ReX version {rex_version} ({rex_hash=})."
83
+
84
+
85
+ def impose_rex_lower_bound() -> None:
86
+ rex_version = get_rex_version()
87
+ minimal_rex_version = "1.2.0"
88
+ if version.parse(rex_version) < version.parse(minimal_rex_version):
89
+ msg = (
90
+ f"SWE-ReX version {rex_version} is too old. Please update to at least {minimal_rex_version} by "
91
+ "running `pip install --upgrade swe-rex`."
92
+ "You can also rerun `pip install -e .` in this repository to install the latest version."
93
+ )
94
+ raise RuntimeError(msg)
95
+ if version.parse(rex_version) < version.parse(SWEREX_RECOMMENDED_VERSION):
96
+ msg = (
97
+ f"SWE-ReX version {rex_version} is not recommended. Please update to at least {SWEREX_RECOMMENDED_VERSION} by "
98
+ "running `pip install --upgrade swe-rex`."
99
+ "You can also rerun `pip install -e .` in this repository to install the latest version."
100
+ )
101
+ get_logger("swe-agent", emoji="👋").warning(msg)
102
+
103
+
104
+ impose_rex_lower_bound()
105
+ get_logger("swe-agent", emoji="👋").info(get_agent_version_info())
106
+
107
+
108
+ __all__ = [
109
+ "PACKAGE_DIR",
110
+ "CONFIG_DIR",
111
+ "get_agent_commit_hash",
112
+ "get_agent_version_info",
113
+ "__version__",
114
+ ]
@@ -0,0 +1,4 @@
1
+ from sweagent.run.run import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
File without changes