@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,354 @@
1
+ let currentFileName = null;
2
+ let trajectoryDirectory = "";
3
+ let timeoutIds = [];
4
+
5
+ function getBaseUrl() {
6
+ const protocol = window.location.protocol;
7
+ const host = window.location.hostname;
8
+ const port = window.location.port;
9
+ const defaultPort =
10
+ protocol === "http:" && !port
11
+ ? "80"
12
+ : protocol === "https:" && !port
13
+ ? "443"
14
+ : port;
15
+ return `${protocol}//${host}:${defaultPort}`;
16
+ }
17
+
18
+ function fetchFiles() {
19
+ const baseUrl = getBaseUrl();
20
+ fetch(`${baseUrl}/files`)
21
+ .then((response) => response.json())
22
+ .then((files) => {
23
+ const fileList = document.getElementById("fileList");
24
+ fileList.innerHTML = "";
25
+ files.forEach((file) => {
26
+ const fileElement = document.createElement("li");
27
+ fileElement.textContent = file;
28
+ fileElement.onclick = () => viewFile(file.split(" ")[0]);
29
+ fileList.appendChild(fileElement);
30
+ });
31
+ });
32
+ }
33
+
34
+ function createTrajectoryItem(item, index) {
35
+ const elementId = `trajectoryItem${index}`;
36
+
37
+ // Check for old format and log a warning
38
+ const isOldFormat = item.messages && !item.query;
39
+ if (isOldFormat) {
40
+ console.log(
41
+ `Found old format using 'messages' instead of 'query' in item ${index}`,
42
+ );
43
+ // Migrate old format to new format
44
+ item.query = item.messages;
45
+ }
46
+
47
+ const hasMessages = item.query && item.query.length > 0;
48
+
49
+ const escapeHtml = (text) => {
50
+ if (!text) {
51
+ return "";
52
+ }
53
+ return text
54
+ .replace(/&/g, "&")
55
+ .replace(/</g, "&lt;")
56
+ .replace(/>/g, "&gt;")
57
+ .replace(/"/g, "&quot;")
58
+ .replace(/'/g, "&#039;");
59
+ };
60
+
61
+ const processImagesInObservation = (observation) => {
62
+ if (!observation) {
63
+ return { processedText: "", images: [] };
64
+ }
65
+
66
+ // regex to match markdown-style base64 images: ![alt text](data:image/<format>;base64,<base64-data>)
67
+ const imageRegex = /!\[([^\]]*)\]\(data:image\/([^;]+);base64,([^)]+)\)/g;
68
+ const images = [];
69
+ let processedText = observation;
70
+ let match;
71
+
72
+ while ((match = imageRegex.exec(observation)) !== null) {
73
+ const [fullMatch, altText, format, base64Data] = match;
74
+
75
+ // create image object
76
+ const imageObj = {
77
+ altText: altText || "Image",
78
+ format: format,
79
+ dataUrl: `data:image/${format};base64,${base64Data}`,
80
+ id: `img_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
81
+ };
82
+
83
+ images.push(imageObj);
84
+
85
+ // replace the full base64 string with a placeholder
86
+ processedText = processedText.replace(
87
+ fullMatch,
88
+ `[IMAGE: ${imageObj.altText}]`,
89
+ );
90
+ }
91
+
92
+ return { processedText, images };
93
+ };
94
+
95
+ const getMessageContent = (msg) => {
96
+ if (!msg.content) {
97
+ return "";
98
+ }
99
+
100
+ // Handle content as a string
101
+ if (typeof msg.content === "string") {
102
+ return msg.content;
103
+ }
104
+
105
+ // Handle content as an array with a dictionary containing 'text' key
106
+ if (
107
+ Array.isArray(msg.content) &&
108
+ msg.content.length > 0 &&
109
+ msg.content[0].text
110
+ ) {
111
+ return msg.content[0].text;
112
+ }
113
+
114
+ // Fallback to stringifying the content
115
+ return JSON.stringify(msg.content);
116
+ };
117
+
118
+ const messagesContent = hasMessages
119
+ ? item.query
120
+ .map((msg, msgIndex) => {
121
+ let content = `----Item ${msgIndex}-----\n`;
122
+ content += `role: ${msg.role}\n`;
123
+ content += `content: |\n${escapeHtml(getMessageContent(msg))}\n`;
124
+
125
+ if (msg.tool_calls && msg.tool_calls.length > 0) {
126
+ msg.tool_calls.forEach((tool, idx) => {
127
+ content += `- tool call ${idx + 1}:\n`;
128
+ if (tool.function) {
129
+ content += ` - name: ${tool.function.name}\n`;
130
+ // Handle arguments based on type
131
+ let args = tool.function.arguments;
132
+ try {
133
+ if (typeof args === "string") {
134
+ args = JSON.parse(args);
135
+ }
136
+ content += ` - arguments: ${JSON.stringify(args, null, 2).replace(/\n/g, "\n ")}\n`;
137
+ } catch (e) {
138
+ content += ` - arguments: ${escapeHtml(String(args))}\n`;
139
+ }
140
+ }
141
+ content += ` - id: ${tool.id}\n`;
142
+ });
143
+ }
144
+
145
+ if (msg.is_demo) {
146
+ return `<span class="demo-message">${content}</span>`;
147
+ }
148
+ return content;
149
+ })
150
+ .join("\n")
151
+ : "";
152
+
153
+ // Process images in observation
154
+ const { processedText: processedObservation, images: observationImages } =
155
+ processImagesInObservation(item.observation);
156
+
157
+ // Create separate image pane HTML if there are images
158
+ const observationImagesPane =
159
+ observationImages.length > 0
160
+ ? `<div class="observation-images-section" data-title="Observation Images">
161
+ <div class="content-wrapper">
162
+ <div class="observation-images">
163
+ ${observationImages
164
+ .map(
165
+ (img) =>
166
+ `<div class="observation-image-container">
167
+ <img src="${img.dataUrl}" alt="${escapeHtml(img.altText)}" class="observation-image" id="${img.id}">
168
+ <div class="image-caption">${escapeHtml(img.altText)}</div>
169
+ </div>`,
170
+ )
171
+ .join("")}
172
+ </div>
173
+ </div>
174
+ </div>`
175
+ : "";
176
+
177
+ return `
178
+ <div class="trajectory-item fade-in" id="${elementId}">
179
+ <div class="trajectory-main">
180
+ <div class="response-section" data-title="Response">
181
+ <div class="content-wrapper">
182
+ <pre><code class="language-python">Response:
183
+ ${escapeHtml(item.response)}
184
+
185
+ Action:
186
+ ${escapeHtml(item.action)}</code></pre>
187
+ </div>
188
+ </div>
189
+ <div class="observation-section" data-title="Environment Observation">
190
+ <div class="content-wrapper">
191
+ <pre><code class="language-python">${escapeHtml(processedObservation)}</code></pre>
192
+ </div>
193
+ </div>
194
+ ${observationImagesPane}
195
+ ${
196
+ item.execution_time
197
+ ? `<div class="execution-time">Execution time: ${item.execution_time}s</div>`
198
+ : ""
199
+ }
200
+ </div>
201
+ ${
202
+ hasMessages
203
+ ? `
204
+ <div class="messages-section" data-title="Messages">
205
+ <div class="content-wrapper">
206
+ <pre>${messagesContent}</pre>
207
+ </div>
208
+ </div>
209
+ `
210
+ : ""
211
+ }
212
+ </div>
213
+ `;
214
+ }
215
+
216
+ function viewFile(fileName) {
217
+ currentFileName = fileName;
218
+ timeoutIds.forEach((timeoutId) => clearTimeout(timeoutId));
219
+ timeoutIds = [];
220
+
221
+ const baseUrl = getBaseUrl();
222
+ const showDemos = document.getElementById("showDemos").checked;
223
+
224
+ fetch(`${baseUrl}/trajectory/${fileName}`)
225
+ .then((response) => {
226
+ if (!response.ok) {
227
+ throw new Error("Network response was not ok");
228
+ }
229
+ return response.json();
230
+ })
231
+ .then((content) => {
232
+ const container = document.getElementById("fileContent");
233
+ container.innerHTML = "";
234
+
235
+ if (content.trajectory && Array.isArray(content.trajectory)) {
236
+ content.trajectory.forEach((item, index) => {
237
+ container.innerHTML += createTrajectoryItem(item, index);
238
+
239
+ // Highlight code blocks after adding them
240
+ const newItem = document.getElementById(`trajectoryItem${index}`);
241
+ newItem.querySelectorAll("pre code").forEach((block) => {
242
+ hljs.highlightElement(block);
243
+ });
244
+ });
245
+
246
+ // Initialize image click handlers after all items are added
247
+ initializeImageHandlers();
248
+ } else {
249
+ container.textContent = "No trajectory content found.";
250
+ }
251
+ })
252
+ .catch((error) => {
253
+ console.error("Error fetching file:", error);
254
+ document.getElementById("fileContent").textContent =
255
+ "Error loading content. " + error;
256
+ });
257
+
258
+ // Highlight selected file
259
+ document.querySelectorAll("#fileList li").forEach((li) => {
260
+ li.classList.remove("selected");
261
+ if (li.textContent.split(" ")[0] === fileName) {
262
+ li.classList.add("selected");
263
+ }
264
+ });
265
+ }
266
+
267
+ function initializeImageHandlers() {
268
+ // Remove existing overlay if present
269
+ const existingOverlay = document.querySelector(".image-overlay");
270
+ if (existingOverlay) {
271
+ existingOverlay.remove();
272
+ }
273
+
274
+ // Create overlay element
275
+ const overlay = document.createElement("div");
276
+ overlay.className = "image-overlay";
277
+ document.body.appendChild(overlay);
278
+
279
+ // Add click handlers to all observation images
280
+ document.querySelectorAll(".observation-image").forEach((img) => {
281
+ img.addEventListener("click", function (e) {
282
+ e.preventDefault();
283
+ e.stopPropagation();
284
+
285
+ // Toggle expanded state
286
+ if (this.classList.contains("expanded")) {
287
+ this.classList.remove("expanded");
288
+ overlay.classList.remove("active");
289
+ } else {
290
+ // Remove expanded class from all other images
291
+ document
292
+ .querySelectorAll(".observation-image.expanded")
293
+ .forEach((otherImg) => {
294
+ otherImg.classList.remove("expanded");
295
+ });
296
+
297
+ // Add expanded class to clicked image
298
+ this.classList.add("expanded");
299
+ overlay.classList.add("active");
300
+ }
301
+ });
302
+ });
303
+
304
+ // Close expanded image when clicking overlay
305
+ overlay.addEventListener("click", function () {
306
+ document.querySelectorAll(".observation-image.expanded").forEach((img) => {
307
+ img.classList.remove("expanded");
308
+ });
309
+ overlay.classList.remove("active");
310
+ });
311
+
312
+ // Close expanded image when pressing Escape key
313
+ document.addEventListener("keydown", function (e) {
314
+ if (e.key === "Escape") {
315
+ document
316
+ .querySelectorAll(".observation-image.expanded")
317
+ .forEach((img) => {
318
+ img.classList.remove("expanded");
319
+ });
320
+ overlay.classList.remove("active");
321
+ }
322
+ });
323
+ }
324
+
325
+ function refreshCurrentFile() {
326
+ if (currentFileName) {
327
+ const currentScrollPosition =
328
+ document.documentElement.scrollTop || document.body.scrollTop;
329
+ viewFile(currentFileName.split(" ")[0]);
330
+ setTimeout(() => {
331
+ window.scrollTo(0, currentScrollPosition);
332
+ }, 100);
333
+ }
334
+ }
335
+
336
+ function fetchDirectoryInfo() {
337
+ const baseUrl = getBaseUrl();
338
+ fetch(`${baseUrl}/directory_info`)
339
+ .then((response) => response.json())
340
+ .then((data) => {
341
+ if (data.directory) {
342
+ trajectoryDirectory = data.directory;
343
+ document.title = `Trajectory Viewer: ${data.directory}`;
344
+ document.getElementById("directoryInfo").textContent =
345
+ `Directory: ${data.directory}`;
346
+ }
347
+ })
348
+ .catch((error) => console.error("Error fetching directory info:", error));
349
+ }
350
+
351
+ window.onload = function () {
352
+ fetchFiles();
353
+ fetchDirectoryInfo();
354
+ };
@@ -0,0 +1,11 @@
1
+ <svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M3.64645 11.7772L3.29289 12.1308L3.64645 12.4843L8.59619 17.4341L8.94975 17.7876L9.3033 17.4341L18.8512 7.88615C20.4133 6.32405 20.4133 3.79139 18.8512 2.22929C17.2891 0.667195 14.7565 0.667193 13.1944 2.22929L3.64645 11.7772Z" fill="black" stroke="white"/>
3
+ <path d="M3.09429 14.2581C3.27091 13.4928 4.22041 13.2204 4.77579 13.7758L7.2242 16.2242C7.77958 16.7796 7.50727 17.7291 6.74194 17.9057L3.559 18.6402C2.83893 18.8064 2.19359 18.1611 2.35976 17.441L3.09429 14.2581Z" fill="black"/>
4
+ <path d="M3.09429 14.258C3.27091 13.4927 4.22041 13.2204 4.77579 13.7758L7.2242 16.2242C7.77958 16.7796 7.50727 17.7291 6.74194 17.9057L3.559 18.6402C2.83893 18.8064 2.19359 18.161 2.35976 17.441L3.09429 14.258Z" fill="black"/>
5
+ <mask id="mask0_8_32" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="12" width="7" height="7">
6
+ <path d="M3.5 12.5L8.5 17.5L1.99998 19L3.5 12.5Z" fill="black"/>
7
+ </mask>
8
+ <g mask="url(#mask0_8_32)">
9
+ <rect x="1.89587" y="14.1084" width="2.27835" height="7.05693" transform="rotate(-45 1.89587 14.1084)" fill="black"/>
10
+ </g>
11
+ </svg>
@@ -0,0 +1,25 @@
1
+ <html>
2
+ <head>
3
+ <title>Trajectory Viewer</title>
4
+ <link rel="stylesheet" type="text/css" href="style.css">
5
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css">
6
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
7
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js"></script>
8
+ <script src="fileViewer.js"></script>
9
+ </head>
10
+ <body>
11
+ <div class="container">
12
+ <h1>Trajectory File Viewer</h1>
13
+ <h3 id="directoryInfo"></h3>
14
+ <ul id="fileList"></ul>
15
+ <label style="margin-right: 20px;">
16
+ <input type="checkbox" id="showDemos" onchange="refreshCurrentFile()"> Show demonstrations
17
+ </label>
18
+ <h2>Conversation History</h2>
19
+ <div id="fileContent" class="trajectory-container">No file selected.</div>
20
+ <div class="button-container">
21
+ <button id="refreshButton" onclick="refreshCurrentFile()">Refresh Current File</button>
22
+ </div>
23
+ </div>
24
+ </body>
25
+ </html>