@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.
- package/LICENSE +21 -0
- package/README.md +270 -0
- package/package.json +71 -0
- package/python/LICENSE +21 -0
- package/python/config/README.md +15 -0
- package/python/config/bash_only.yaml +222 -0
- package/python/config/benchmarks/250212_sweagent_heavy_sbl.yaml +188 -0
- package/python/config/benchmarks/250225_anthropic_filemap_simple_review.yaml +75 -0
- package/python/config/benchmarks/250522_anthropic_filemap_simple_review.yaml +92 -0
- package/python/config/benchmarks/250526_anthropic_filemap_simple_review_sbl.yaml +93 -0
- package/python/config/benchmarks/anthropic_filemap_multilingual.yaml +66 -0
- package/python/config/coding_challenge.yaml +104 -0
- package/python/config/default.yaml +69 -0
- package/python/config/default_backticks.yaml +69 -0
- package/python/config/default_mm_no_images.yaml +82 -0
- package/python/config/default_mm_with_images.yaml +83 -0
- package/python/config/demo/default.yaml +80 -0
- package/python/config/demo/no_instructions.yaml +69 -0
- package/python/config/demo/only_bash.yaml +60 -0
- package/python/config/exotic/default_shell.yaml +52 -0
- package/python/config/exotic/windowed_replace.yaml +125 -0
- package/python/config/exotic/windowed_replace_late_repro.yaml +127 -0
- package/python/config/human/human.yaml +24 -0
- package/python/config/human/human_demo.yaml +52 -0
- package/python/config/sweagent_0_7/07.yaml +101 -0
- package/python/config/sweagent_0_7/07_fcalling.yaml +100 -0
- package/python/config/sweagent_0_7/07_from_url.yaml +114 -0
- package/python/config/sweagent_0_7/07_thought_action.yaml +102 -0
- package/python/config/sweagent_0_7/07_thought_action_xml.yaml +96 -0
- package/python/mlc_config.json +44 -0
- package/python/pyproject.toml +262 -0
- package/python/sweagent/__init__.py +114 -0
- package/python/sweagent/__main__.py +4 -0
- package/python/sweagent/agent/__init__.py +0 -0
- package/python/sweagent/agent/action_sampler.py +317 -0
- package/python/sweagent/agent/agents.py +1294 -0
- package/python/sweagent/agent/extra/shell_agent.py +106 -0
- package/python/sweagent/agent/history_processors.py +399 -0
- package/python/sweagent/agent/hooks/__init__.py +0 -0
- package/python/sweagent/agent/hooks/abstract.py +139 -0
- package/python/sweagent/agent/hooks/status.py +34 -0
- package/python/sweagent/agent/models.py +896 -0
- package/python/sweagent/agent/problem_statement.py +312 -0
- package/python/sweagent/agent/reviewer.py +664 -0
- package/python/sweagent/environment/__init__.py +0 -0
- package/python/sweagent/environment/hooks/__init__.py +0 -0
- package/python/sweagent/environment/hooks/abstract.py +60 -0
- package/python/sweagent/environment/hooks/status.py +28 -0
- package/python/sweagent/environment/repo.py +219 -0
- package/python/sweagent/environment/swe_env.py +276 -0
- package/python/sweagent/exceptions.py +54 -0
- package/python/sweagent/inspector/README.md +6 -0
- package/python/sweagent/inspector/__init__.py +0 -0
- package/python/sweagent/inspector/favicon.ico +0 -0
- package/python/sweagent/inspector/fileViewer.js +354 -0
- package/python/sweagent/inspector/icons/computer.png +0 -0
- package/python/sweagent/inspector/icons/edit_icon.svg +11 -0
- package/python/sweagent/inspector/icons/swe-agent-logo-50.png +0 -0
- package/python/sweagent/inspector/icons/swellama_blue.png +0 -0
- package/python/sweagent/inspector/icons/swellama_brown.png +0 -0
- package/python/sweagent/inspector/icons/swellama_grey.png +0 -0
- package/python/sweagent/inspector/icons/swellama_tan.png +0 -0
- package/python/sweagent/inspector/index.html +25 -0
- package/python/sweagent/inspector/server.py +354 -0
- package/python/sweagent/inspector/static.py +169 -0
- package/python/sweagent/inspector/style.css +454 -0
- package/python/sweagent/run/__init__.py +0 -0
- package/python/sweagent/run/_progress.py +158 -0
- package/python/sweagent/run/batch_instances.py +419 -0
- package/python/sweagent/run/common.py +387 -0
- package/python/sweagent/run/compare_runs.py +123 -0
- package/python/sweagent/run/extract_pred.py +19 -0
- package/python/sweagent/run/hooks/__init__.py +0 -0
- package/python/sweagent/run/hooks/abstract.py +67 -0
- package/python/sweagent/run/hooks/apply_patch.py +106 -0
- package/python/sweagent/run/hooks/open_pr.py +244 -0
- package/python/sweagent/run/hooks/swe_bench_evaluate.py +113 -0
- package/python/sweagent/run/inspector_cli.py +493 -0
- package/python/sweagent/run/merge_predictions.py +64 -0
- package/python/sweagent/run/quick_stats.py +96 -0
- package/python/sweagent/run/remove_unfinished.py +63 -0
- package/python/sweagent/run/rich_test.py +91 -0
- package/python/sweagent/run/run.py +147 -0
- package/python/sweagent/run/run_batch.py +442 -0
- package/python/sweagent/run/run_replay.py +219 -0
- package/python/sweagent/run/run_shell.py +155 -0
- package/python/sweagent/run/run_single.py +225 -0
- package/python/sweagent/run/run_traj_to_demo.py +85 -0
- package/python/sweagent/tools/__init__.py +0 -0
- package/python/sweagent/tools/bundle.py +57 -0
- package/python/sweagent/tools/commands.py +220 -0
- package/python/sweagent/tools/parsing.py +619 -0
- package/python/sweagent/tools/tools.py +430 -0
- package/python/sweagent/tools/utils.py +108 -0
- package/python/sweagent/types.py +102 -0
- package/python/sweagent/utils/__init__.py +0 -0
- package/python/sweagent/utils/config.py +80 -0
- package/python/sweagent/utils/files.py +27 -0
- package/python/sweagent/utils/github.py +118 -0
- package/python/sweagent/utils/jinja_warnings.py +14 -0
- package/python/sweagent/utils/log.py +175 -0
- package/python/sweagent/utils/patch_formatter.py +152 -0
- package/python/sweagent/utils/serialization.py +45 -0
- package/python/tests/__init__.py +0 -0
- package/python/tests/conftest.py +191 -0
- package/python/tests/test_agent.py +258 -0
- package/python/tests/test_batch_instance.py +43 -0
- package/python/tests/test_commands/_interactive_dummy.py +35 -0
- package/python/tests/test_commands/interactive_dummy_wrapper.sh +29 -0
- package/python/tests/test_data/config_files/dummy_interactive.yaml +62 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/Dockerfile +20 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/README.md +13 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/challenge.json +12 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/customrandom.c +50 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/docker-compose.yml +14 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/release +0 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/server +0 -0
- package/python/tests/test_data/data_sources/ctf/crypto/Katy/solver.py +12 -0
- package/python/tests/test_data/data_sources/ctf/forensics/flash/README.md +16 -0
- package/python/tests/test_data/data_sources/ctf/forensics/flash/challenge.json +9 -0
- package/python/tests/test_data/data_sources/ctf/forensics/flash/flash_c8429a430278283c0e571baebca3d139.zip +0 -0
- package/python/tests/test_data/data_sources/ctf/misc/networking_1/README.md +15 -0
- package/python/tests/test_data/data_sources/ctf/misc/networking_1/challenge.json +10 -0
- package/python/tests/test_data/data_sources/ctf/misc/networking_1/networking.pcap +0 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/Dockerfile +28 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/README.md +14 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/challenge.json +14 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/docker-compose.yml +14 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/flag.txt +1 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup +0 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup.c +26 -0
- package/python/tests/test_data/data_sources/ctf/pwn/warmup/warmup.py +9 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/README.md +14 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/challenge.json +8 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/rock +0 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/rock.cpp +167 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/solution.cpp +24 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/test_solver/solution.py +6 -0
- package/python/tests/test_data/data_sources/ctf/rev/rock/test_solver/test.sh +10 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/000-default.conf +18 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/Dockerfile +20 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/file.pl +38 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/forms.pl +40 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/cgi/hello.pl +11 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/challenge.json +12 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/docker-compose.yml +14 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/flag +1 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/index.html +11 -0
- package/python/tests/test_data/data_sources/ctf/web/i_got_id_demo/solution.txt +1 -0
- package/python/tests/test_data/data_sources/debug_20240322.json +1 -0
- package/python/tests/test_data/data_sources/expert_instances.yaml +16 -0
- package/python/tests/test_data/data_sources/human_eval.json +1 -0
- package/python/tests/test_data/data_sources/simple_instances.yaml +3 -0
- package/python/tests/test_data/data_sources/simple_instances_long.yaml +30 -0
- package/python/tests/test_data/data_sources/swe-bench-dev-easy.json +1 -0
- package/python/tests/test_data/data_sources/swe-bench-dev-easy_first_only.json +1 -0
- package/python/tests/test_data/data_sources/swe-bench-lite-test.json +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/python/tests/test_env.py +66 -0
- package/python/tests/test_env_utils.py +129 -0
- package/python/tests/test_history_processors.py +40 -0
- package/python/tests/test_models.py +23 -0
- package/python/tests/test_openai_live.py +164 -0
- package/python/tests/test_packaging.py +7 -0
- package/python/tests/test_parsing.py +131 -0
- package/python/tests/test_problem_statement_multimodal.py +111 -0
- package/python/tests/test_quick_stats.py +42 -0
- package/python/tests/test_run.py +37 -0
- package/python/tests/test_run_batch.py +110 -0
- package/python/tests/test_run_hooks.py +114 -0
- package/python/tests/test_run_replay.py +33 -0
- package/python/tests/test_run_single.py +125 -0
- package/python/tests/test_tools_command_parsing.py +193 -0
- package/python/tests/test_utils.py +15 -0
- package/python/tests/tools/__init__.py +0 -0
- package/python/tests/tools/conftest.py +12 -0
- package/python/tests/tools/test_default_utils.py +153 -0
- package/python/tests/tools/test_edit_replace.py +0 -0
- package/python/tests/tools/test_split_string.py +82 -0
- package/python/tests/utils.py +29 -0
- package/python/tools/diff_state/bin/_state_diff_state +52 -0
- package/python/tools/diff_state/config.yaml +2 -0
- package/python/tools/edit_anthropic/bin/_state_anthropic +21 -0
- package/python/tools/edit_anthropic/bin/str_replace_editor +710 -0
- package/python/tools/edit_anthropic/config.yaml +56 -0
- package/python/tools/edit_anthropic/install.sh +3 -0
- package/python/tools/filemap/bin/filemap +45 -0
- package/python/tools/filemap/config.yaml +9 -0
- package/python/tools/filemap/install.sh +2 -0
- package/python/tools/forfeit/bin/exit_forfeit +5 -0
- package/python/tools/forfeit/config.yaml +5 -0
- package/python/tools/image_tools/bin/view_image +36 -0
- package/python/tools/image_tools/config.yaml +9 -0
- package/python/tools/multilingual_setup/bin/do_nothing +2 -0
- package/python/tools/multilingual_setup/config.yaml +1 -0
- package/python/tools/multilingual_setup/install.sh +45 -0
- package/python/tools/registry/bin/_read_env +10 -0
- package/python/tools/registry/bin/_write_env +10 -0
- package/python/tools/registry/config.yaml +1 -0
- package/python/tools/registry/install.sh +6 -0
- package/python/tools/registry/lib/__init__.py +0 -0
- package/python/tools/registry/lib/registry.py +56 -0
- package/python/tools/review_on_submit_m/README.md +6 -0
- package/python/tools/review_on_submit_m/bin/submit +54 -0
- package/python/tools/review_on_submit_m/config.yaml +6 -0
- package/python/tools/review_on_submit_m/install.sh +0 -0
- package/python/tools/search/bin/find_file +31 -0
- package/python/tools/search/bin/search_dir +39 -0
- package/python/tools/search/bin/search_file +55 -0
- package/python/tools/search/config.yaml +37 -0
- package/python/tools/search/install.sh +3 -0
- package/python/tools/submit/bin/submit +17 -0
- package/python/tools/submit/config.yaml +5 -0
- package/python/tools/web_browser/bin/click_mouse +41 -0
- package/python/tools/web_browser/bin/close_site +28 -0
- package/python/tools/web_browser/bin/double_click_mouse +37 -0
- package/python/tools/web_browser/bin/drag_mouse +46 -0
- package/python/tools/web_browser/bin/execute_script_on_page +39 -0
- package/python/tools/web_browser/bin/get_console_output +48 -0
- package/python/tools/web_browser/bin/move_mouse +35 -0
- package/python/tools/web_browser/bin/navigate_back +33 -0
- package/python/tools/web_browser/bin/navigate_forward +33 -0
- package/python/tools/web_browser/bin/open_site +36 -0
- package/python/tools/web_browser/bin/press_keys_on_page +51 -0
- package/python/tools/web_browser/bin/reload_page +33 -0
- package/python/tools/web_browser/bin/run_web_browser_server +394 -0
- package/python/tools/web_browser/bin/screenshot_site +38 -0
- package/python/tools/web_browser/bin/scroll_on_page +40 -0
- package/python/tools/web_browser/bin/set_browser_window_size +40 -0
- package/python/tools/web_browser/bin/type_text +34 -0
- package/python/tools/web_browser/bin/wait_time +39 -0
- package/python/tools/web_browser/config.yaml +155 -0
- package/python/tools/web_browser/install.sh +22 -0
- package/python/tools/web_browser/lib/browser_manager.py +404 -0
- package/python/tools/web_browser/lib/web_browser_config.py +33 -0
- package/python/tools/web_browser/lib/web_browser_utils.py +126 -0
- package/python/tools/web_browser/test_console.html +1 -0
- package/python/tools/windowed/bin/_state +25 -0
- package/python/tools/windowed/bin/create +29 -0
- package/python/tools/windowed/bin/goto +37 -0
- package/python/tools/windowed/bin/open +49 -0
- package/python/tools/windowed/bin/scroll_down +12 -0
- package/python/tools/windowed/bin/scroll_up +13 -0
- package/python/tools/windowed/config.yaml +38 -0
- package/python/tools/windowed/install.sh +15 -0
- package/python/tools/windowed/lib/__init__.py +0 -0
- package/python/tools/windowed/lib/flake8_utils.py +147 -0
- package/python/tools/windowed/lib/windowed_file.py +312 -0
- package/python/tools/windowed_edit_linting/bin/edit +128 -0
- package/python/tools/windowed_edit_linting/config.yaml +31 -0
- package/python/tools/windowed_edit_linting/install.sh +5 -0
- package/python/tools/windowed_edit_replace/bin/edit +172 -0
- package/python/tools/windowed_edit_replace/bin/insert +77 -0
- package/python/tools/windowed_edit_replace/config.yaml +60 -0
- package/python/tools/windowed_edit_replace/install.sh +5 -0
- package/python/tools/windowed_edit_rewrite/bin/edit +78 -0
- package/python/tools/windowed_edit_rewrite/config.yaml +11 -0
- package/python/tools/windowed_edit_rewrite/install.sh +5 -0
- package/python/trajectories/demonstrations/ctf/crypto/BabyEncryption.traj +318 -0
- package/python/trajectories/demonstrations/ctf/crypto/BabyTimeCapsule.traj +197 -0
- package/python/trajectories/demonstrations/ctf/crypto/eps.traj +289 -0
- package/python/trajectories/demonstrations/ctf/crypto/katy.traj +368 -0
- package/python/trajectories/demonstrations/ctf/forensics/flash.traj +102 -0
- package/python/trajectories/demonstrations/ctf/misc/networking_1.traj +102 -0
- package/python/trajectories/demonstrations/ctf/pwn/warmup.traj +159 -0
- package/python/trajectories/demonstrations/ctf/rev/rock.traj +251 -0
- package/python/trajectories/demonstrations/ctf/web/i_got_id_demo.traj +422 -0
- package/python/trajectories/demonstrations/function_calling_simple.traj +151 -0
- 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
- 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
- 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
- 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
- package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling__install-1/marshmallow-code__marshmallow-1867.traj +594 -0
- package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling_replace__install-1/marshmallow-code__marshmallow-1867.traj +592 -0
- package/python/trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling_replace_from_source/marshmallow-code__marshmallow-1867.traj +3316 -0
- 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
- 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
- package/python/trajectories/demonstrations/str_replace_anthropic_demo.yaml +432 -0
- package/rust/Cargo.toml +100 -0
- package/rust/README.md +49 -0
- package/rust/src/agent/action_sampler.rs +130 -0
- package/rust/src/agent/agents.rs +1029 -0
- package/rust/src/agent/history_processors.rs +277 -0
- package/rust/src/agent/hooks/mod.rs +208 -0
- package/rust/src/agent/mod.rs +24 -0
- package/rust/src/agent/models.rs +837 -0
- package/rust/src/agent/problem_statement.rs +355 -0
- package/rust/src/agent/reviewer.rs +505 -0
- package/rust/src/bin/sweagent.rs +784 -0
- package/rust/src/environment/deployment.rs +631 -0
- package/rust/src/environment/hooks/mod.rs +114 -0
- package/rust/src/environment/mod.rs +16 -0
- package/rust/src/environment/repo.rs +265 -0
- package/rust/src/environment/runtime.rs +237 -0
- package/rust/src/environment/swe_env.rs +248 -0
- package/rust/src/exceptions.rs +228 -0
- package/rust/src/lib.rs +68 -0
- package/rust/src/monitoring.rs +482 -0
- package/rust/src/run/hooks/mod.rs +134 -0
- package/rust/src/run/mod.rs +12 -0
- package/rust/src/run/run_batch.rs +563 -0
- package/rust/src/run/run_single.rs +196 -0
- package/rust/src/tools/bundle.rs +224 -0
- package/rust/src/tools/commands.rs +173 -0
- package/rust/src/tools/mod.rs +295 -0
- package/rust/src/tools/parsing.rs +354 -0
- package/rust/src/tools/registry.rs +143 -0
- package/rust/src/types.rs +554 -0
- package/rust/src/utils/config.rs +105 -0
- package/rust/src/utils/files.rs +137 -0
- package/rust/src/utils/github.rs +171 -0
- package/rust/src/utils/log.rs +65 -0
- package/rust/src/utils/mod.rs +17 -0
- package/rust/src/utils/serialization.rs +181 -0
- package/rust/src/utils/template.rs +173 -0
- package/typescript/README.md +335 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
tools:
|
|
2
|
+
str_replace_editor:
|
|
3
|
+
signature: |
|
|
4
|
+
str_replace_editor <command> <path> [<file_text>] [<view_range>] [<old_str>] [<new_str>] [<insert_line>]
|
|
5
|
+
# This docstrings was taken from openhands:
|
|
6
|
+
# https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/agenthub/codeact_agent/function_calling.py
|
|
7
|
+
docstring: >
|
|
8
|
+
Custom editing tool for viewing, creating and editing files
|
|
9
|
+
* State is persistent across command calls and discussions with the user
|
|
10
|
+
* If `path` is a file, `view` displays the result of applying `cat -n`. If `path` is a directory, `view` lists non-hidden files and directories up to 2 levels deep
|
|
11
|
+
* The `create` command cannot be used if the specified `path` already exists as a file
|
|
12
|
+
* If a `command` generates a long output, it will be truncated and marked with `<response clipped>`
|
|
13
|
+
* The `undo_edit` command will revert the last edit made to the file at `path`
|
|
14
|
+
|
|
15
|
+
Notes for using the `str_replace` command:
|
|
16
|
+
* The `old_str` parameter should match EXACTLY one or more consecutive lines from the original file. Be mindful of whitespaces!
|
|
17
|
+
* If the `old_str` parameter is not unique in the file, the replacement will not be performed. Make sure to include enough context in `old_str` to make it unique
|
|
18
|
+
* The `new_str` parameter should contain the edited lines that should replace the `old_str`
|
|
19
|
+
arguments:
|
|
20
|
+
- name: command
|
|
21
|
+
type: string
|
|
22
|
+
description: "The commands to run. Allowed options are: `view`, `create`, `str_replace`, `insert`, `undo_edit`."
|
|
23
|
+
required: true
|
|
24
|
+
enum: ["view", "create", "str_replace", "insert", "undo_edit"]
|
|
25
|
+
- name: path
|
|
26
|
+
type: string
|
|
27
|
+
description: "Absolute path to file or directory, e.g. `/testbed/file.py` or `/testbed`."
|
|
28
|
+
required: true
|
|
29
|
+
- name: file_text
|
|
30
|
+
type: string
|
|
31
|
+
description: "Required parameter of `create` command, with the content of the file to be created."
|
|
32
|
+
required: false
|
|
33
|
+
argument_format: "--file_text {{value}}"
|
|
34
|
+
- name: old_str
|
|
35
|
+
type: string
|
|
36
|
+
description: "Required parameter of `str_replace` command containing the string in `path` to replace."
|
|
37
|
+
required: false
|
|
38
|
+
argument_format: "--old_str {{value}}"
|
|
39
|
+
- name: new_str
|
|
40
|
+
type: string
|
|
41
|
+
description: "Optional parameter of `str_replace` command containing the new string (if not given, no string will be added). Required parameter of `insert` command containing the string to insert."
|
|
42
|
+
required: false
|
|
43
|
+
argument_format: "--new_str {{value}}"
|
|
44
|
+
- name: insert_line
|
|
45
|
+
type: integer
|
|
46
|
+
description: "Required parameter of `insert` command. The `new_str` will be inserted AFTER the line `insert_line` of `path`."
|
|
47
|
+
required: false
|
|
48
|
+
argument_format: "--insert_line {{value}}"
|
|
49
|
+
- name: view_range
|
|
50
|
+
type: array
|
|
51
|
+
items:
|
|
52
|
+
type: integer
|
|
53
|
+
description: "Optional parameter of `view` command when `path` points to a file. If none is given, the full file is shown. If provided, the file will be shown in the indicated line number range, e.g. [11, 12] will show lines 11 and 12. Indexing at 1 to start. Setting `[start_line, -1]` shows all lines from `start_line` to the end of the file."
|
|
54
|
+
required: false
|
|
55
|
+
argument_format: "--view_range {{value|join(' ')}}"
|
|
56
|
+
state_command: "_state_anthropic"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/root/miniconda3/bin/python
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
# tree_sitter is throwing a FutureWarning
|
|
7
|
+
warnings.simplefilter("ignore", category=FutureWarning)
|
|
8
|
+
from tree_sitter_languages import get_language, get_parser
|
|
9
|
+
|
|
10
|
+
parser = argparse.ArgumentParser(
|
|
11
|
+
description="Print the contents of a Python file, skipping lengthy function and method definitions."
|
|
12
|
+
)
|
|
13
|
+
parser.add_argument("file_path", type=str, help="The path to the file to be read")
|
|
14
|
+
args = parser.parse_args()
|
|
15
|
+
|
|
16
|
+
# We assume that all input files are Python.
|
|
17
|
+
parser = get_parser("python")
|
|
18
|
+
language = get_language("python")
|
|
19
|
+
file_contents = open(args.file_path).read()
|
|
20
|
+
|
|
21
|
+
# We assume that files are utf8 encoded.
|
|
22
|
+
tree = parser.parse(bytes(file_contents, "utf8"))
|
|
23
|
+
|
|
24
|
+
# See https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries.
|
|
25
|
+
query = language.query("""
|
|
26
|
+
(function_definition
|
|
27
|
+
body: (_) @body)
|
|
28
|
+
""")
|
|
29
|
+
|
|
30
|
+
# TODO: consider special casing docstrings such that they are not elided. This
|
|
31
|
+
# could be accomplished by checking whether `body.text.decode('utf8')` starts
|
|
32
|
+
# with `"""` or `'''`.
|
|
33
|
+
elide_line_ranges = [
|
|
34
|
+
(node.start_point[0], node.end_point[0])
|
|
35
|
+
for node, _ in query.captures(tree.root_node)
|
|
36
|
+
# Only elide if it's sufficiently long
|
|
37
|
+
if node.end_point[0] - node.start_point[0] >= 5
|
|
38
|
+
]
|
|
39
|
+
# Note that tree-sitter line numbers are 0-indexed, but we display 1-indexed.
|
|
40
|
+
elide_lines = {line for start, end in elide_line_ranges for line in range(start, end + 1)}
|
|
41
|
+
elide_messages = [(start, f"... eliding lines {start+1}-{end+1} ...") for start, end in elide_line_ranges]
|
|
42
|
+
for i, line in sorted(
|
|
43
|
+
elide_messages + [(i, line) for i, line in enumerate(file_contents.splitlines()) if i not in elide_lines]
|
|
44
|
+
):
|
|
45
|
+
print(f"{i+1:6d} {line}")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
tools:
|
|
2
|
+
filemap:
|
|
3
|
+
signature: "filemap <file_path>"
|
|
4
|
+
docstring: "Print the contents of a Python file, skipping lengthy function and method definitions."
|
|
5
|
+
arguments:
|
|
6
|
+
- name: file_path
|
|
7
|
+
type: string
|
|
8
|
+
description: The path to the file to be read
|
|
9
|
+
required: true
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# view_image – view an image file as a base64-encoded markdown image
|
|
3
|
+
import base64
|
|
4
|
+
import mimetypes
|
|
5
|
+
import pathlib
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
VALID_MIME_TYPES = {
|
|
9
|
+
"image/png",
|
|
10
|
+
"image/jpeg",
|
|
11
|
+
"image/webp",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if len(sys.argv) != 2:
|
|
15
|
+
sys.exit(f"usage: {pathlib.Path(sys.argv[0]).name} <image-file>")
|
|
16
|
+
|
|
17
|
+
img_path = pathlib.Path(sys.argv[1])
|
|
18
|
+
|
|
19
|
+
if not img_path.exists():
|
|
20
|
+
sys.exit(f"Error: File '{img_path}' does not exist")
|
|
21
|
+
|
|
22
|
+
if not img_path.is_file():
|
|
23
|
+
sys.exit(f"Error: '{img_path}' is not a file")
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
mime = mimetypes.guess_type(img_path.name)[0]
|
|
27
|
+
if mime not in VALID_MIME_TYPES:
|
|
28
|
+
sys.exit(f"Error: Unsupported image type: {mime}. Valid types are: {', '.join(VALID_MIME_TYPES)}")
|
|
29
|
+
|
|
30
|
+
# read the file, base64-encode, and convert bytes → str
|
|
31
|
+
b64 = base64.b64encode(img_path.read_bytes()).decode("ascii")
|
|
32
|
+
|
|
33
|
+
# write the exact markdown snippet to stdout
|
|
34
|
+
print(f"")
|
|
35
|
+
except Exception as e:
|
|
36
|
+
sys.exit(f"Error processing image: {e}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
tools: {}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Define variables to exclude
|
|
4
|
+
EXCLUDE_VARS="PWD|LANG|PYTHONPATH|ROOT|PS0|PS1|PS2|_|OLDPWD|LC_ALL|LANG|LSCOLORS|SHLVL"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
echo "Original Environment Variables:"
|
|
8
|
+
env | sort
|
|
9
|
+
|
|
10
|
+
# Only add Python 3.11 to PATH if no python exists
|
|
11
|
+
if ! command -v python &> /dev/null; then
|
|
12
|
+
echo -e "\nNo Python found in system, adding Python 3.11 to PATH"
|
|
13
|
+
export PATH="/root/python3.11/bin:$PATH"
|
|
14
|
+
|
|
15
|
+
# Create python/pip aliases
|
|
16
|
+
ln -s "/root/python3.11/bin/python3" "/root/python3.11/bin/python"
|
|
17
|
+
ln -s "/root/python3.11/bin/pip3" "/root/python3.11/bin/pip"
|
|
18
|
+
echo "Created symlinks: python -> python3, pip -> pip3"
|
|
19
|
+
else
|
|
20
|
+
echo -e "\nPython already exists in system, skipping Python 3.11 setup"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Attempt to read and set process 1 environment
|
|
24
|
+
echo -e "\nSetting environment variables from /proc/1/environ..."
|
|
25
|
+
if [ -r "/proc/1/environ" ]; then
|
|
26
|
+
while IFS= read -r -d '' var; do
|
|
27
|
+
# Skip excluded variables
|
|
28
|
+
if ! echo "$var" | grep -qE "^(${EXCLUDE_VARS})="; then
|
|
29
|
+
# If the variable is PATH, append and deduplicate
|
|
30
|
+
if [[ "$var" =~ ^PATH= ]]; then
|
|
31
|
+
# Combine paths and remove duplicates while preserving order
|
|
32
|
+
export PATH="$(echo "${PATH}:${var#PATH=}" | tr ':' '\n' | awk '!seen[$0]++' | tr '\n' ':' | sed 's/:$//')"
|
|
33
|
+
else
|
|
34
|
+
export "$var"
|
|
35
|
+
fi
|
|
36
|
+
fi
|
|
37
|
+
done < /proc/1/environ
|
|
38
|
+
echo "Successfully imported environment from /proc/1/environ"
|
|
39
|
+
else
|
|
40
|
+
echo "Cannot access /proc/1/environ - Permission denied"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# Print updated environment variables
|
|
44
|
+
echo -e "\nUpdated Environment Variables:"
|
|
45
|
+
env | sort
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
tools: {}
|
|
File without changes
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class EnvRegistry:
|
|
8
|
+
"""Read and write variables into a file. This is used to persist state between tool
|
|
9
|
+
calls without using environment variables (which are problematic because you cannot
|
|
10
|
+
set them in a subprocess).
|
|
11
|
+
|
|
12
|
+
The default file location is `/root/.swe-agent-env`, though this can be overridden
|
|
13
|
+
by the `env_file` argument or the `SWE_AGENT_ENV_FILE` environment variable.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, env_file: Path | None = None):
|
|
17
|
+
self._env_file = env_file
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def env_file(self) -> Path:
|
|
21
|
+
if self._env_file is None:
|
|
22
|
+
env_file = Path(os.environ.get("SWE_AGENT_ENV_FILE", "/root/.swe-agent-env"))
|
|
23
|
+
else:
|
|
24
|
+
env_file = self._env_file
|
|
25
|
+
if not env_file.exists():
|
|
26
|
+
env_file.write_text("{}")
|
|
27
|
+
return env_file
|
|
28
|
+
|
|
29
|
+
def __getitem__(self, key: str) -> str:
|
|
30
|
+
return json.loads(self.env_file.read_text())[key]
|
|
31
|
+
|
|
32
|
+
def get(self, key: str, default_value: Any = None, fallback_to_env: bool = True) -> Any:
|
|
33
|
+
"""Get a value from registry:
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
key: The key to get the value for.
|
|
37
|
+
default_value: The default value to return if the key is not found in the registry.
|
|
38
|
+
fallback_to_env: If True, fallback to environment variables if the key is not found in the registry.
|
|
39
|
+
If there's no environment variable, return the default value.
|
|
40
|
+
"""
|
|
41
|
+
if fallback_to_env and key in os.environ:
|
|
42
|
+
default_value = os.environ[key]
|
|
43
|
+
return json.loads(self.env_file.read_text()).get(key, default_value)
|
|
44
|
+
|
|
45
|
+
def get_if_none(self, value: Any, key: str, default_value: Any = None) -> Any:
|
|
46
|
+
if value is not None:
|
|
47
|
+
return value
|
|
48
|
+
return self.get(key, default_value)
|
|
49
|
+
|
|
50
|
+
def __setitem__(self, key: str, value: Any):
|
|
51
|
+
env = json.loads(self.env_file.read_text())
|
|
52
|
+
env[key] = value
|
|
53
|
+
self.env_file.write_text(json.dumps(env))
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
registry = EnvRegistry()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import subprocess
|
|
6
|
+
import sys
|
|
7
|
+
import os
|
|
8
|
+
import io
|
|
9
|
+
|
|
10
|
+
from registry import registry
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def main() -> None:
|
|
14
|
+
parser = argparse.ArgumentParser(description="Submit changes for review")
|
|
15
|
+
parser.add_argument("-f", "--force", action="store_true", help="Force submit without review")
|
|
16
|
+
args = parser.parse_args()
|
|
17
|
+
|
|
18
|
+
repo_root = registry.get("ROOT", os.getenv("ROOT"))
|
|
19
|
+
assert repo_root
|
|
20
|
+
|
|
21
|
+
patch_path = Path("/root/model.patch")
|
|
22
|
+
|
|
23
|
+
subprocess.run(
|
|
24
|
+
f"git add -A && git diff --cached > {patch_path}",
|
|
25
|
+
shell=True,
|
|
26
|
+
stdout=subprocess.DEVNULL,
|
|
27
|
+
stderr=subprocess.DEVNULL,
|
|
28
|
+
cwd=repo_root,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
patch = patch_path.read_text(errors="backslashreplace")
|
|
32
|
+
|
|
33
|
+
submit_review_messages = registry.get("SUBMIT_REVIEW_MESSAGES", [])
|
|
34
|
+
n_stages = len(submit_review_messages)
|
|
35
|
+
current_stage = registry.get("SUBMIT_STAGE", 0)
|
|
36
|
+
if not args.force and current_stage != n_stages:
|
|
37
|
+
message = submit_review_messages[current_stage]
|
|
38
|
+
message = message.replace("{{diff}}", patch)
|
|
39
|
+
message = message.replace("{{problem_statement}}", registry.get("PROBLEM_STATEMENT", ""))
|
|
40
|
+
registry["SUBMIT_STAGE"] = current_stage + 1
|
|
41
|
+
print(message)
|
|
42
|
+
sys.exit(0)
|
|
43
|
+
|
|
44
|
+
print("<<SWE_AGENT_SUBMISSION>>")
|
|
45
|
+
print(patch)
|
|
46
|
+
print("<<SWE_AGENT_SUBMISSION>>")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
# There are some super strange "ascii can't decode x" errors when printing to the terminal
|
|
51
|
+
# that can be solved with setting the default encoding for stdout
|
|
52
|
+
# (note that python3.6 doesn't have the reconfigure method)
|
|
53
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
|
54
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
main() {
|
|
2
|
+
if [ $# -eq 1 ]; then
|
|
3
|
+
local file_name="$1"
|
|
4
|
+
local dir="./"
|
|
5
|
+
elif [ $# -eq 2 ]; then
|
|
6
|
+
local file_name="$1"
|
|
7
|
+
if [ -d "$2" ]; then
|
|
8
|
+
local dir="$2"
|
|
9
|
+
else
|
|
10
|
+
echo "Directory $2 not found"
|
|
11
|
+
return
|
|
12
|
+
fi
|
|
13
|
+
else
|
|
14
|
+
echo "Usage: find_file <file_name> [<dir>]"
|
|
15
|
+
return
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
dir=$(realpath "$dir")
|
|
19
|
+
local matches=$(find "$dir" -type f -name "$file_name")
|
|
20
|
+
# if no matches, return
|
|
21
|
+
if [ -z "$matches" ]; then
|
|
22
|
+
echo "No matches found for \"$file_name\" in $dir"
|
|
23
|
+
return
|
|
24
|
+
fi
|
|
25
|
+
# Calculate total number of matches
|
|
26
|
+
local num_matches=$(echo "$matches" | wc -l | awk '{$1=$1; print $0}')
|
|
27
|
+
echo "Found $num_matches matches for \"$file_name\" in $dir:"
|
|
28
|
+
echo "$matches" | awk '{print $0}'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
main "$@"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
main() {
|
|
2
|
+
if [ $# -eq 1 ]; then
|
|
3
|
+
local search_term="$1"
|
|
4
|
+
local dir="./"
|
|
5
|
+
elif [ $# -eq 2 ]; then
|
|
6
|
+
local search_term="$1"
|
|
7
|
+
if [ -d "$2" ]; then
|
|
8
|
+
local dir="$2"
|
|
9
|
+
else
|
|
10
|
+
echo "Directory $2 not found"
|
|
11
|
+
return
|
|
12
|
+
fi
|
|
13
|
+
else
|
|
14
|
+
echo "Usage: search_dir <search_term> [<dir>]"
|
|
15
|
+
return
|
|
16
|
+
fi
|
|
17
|
+
dir=$(realpath "$dir")
|
|
18
|
+
local matches=$(find "$dir" -type f ! -path '*/.*' -exec grep -nIH -- "$search_term" {} + | cut -d: -f1 | sort | uniq -c)
|
|
19
|
+
# if no matches, return
|
|
20
|
+
if [ -z "$matches" ]; then
|
|
21
|
+
echo "No matches found for \"$search_term\" in $dir"
|
|
22
|
+
return
|
|
23
|
+
fi
|
|
24
|
+
# Calculate total number of matches
|
|
25
|
+
local num_matches=$(echo "$matches" | awk '{sum+=$1} END {print sum}')
|
|
26
|
+
# calculate total number of files matched
|
|
27
|
+
local num_files=$(echo "$matches" | wc -l | awk '{$1=$1; print $0}')
|
|
28
|
+
# if num_files is > 100, print an error
|
|
29
|
+
if [ $num_files -gt 100 ]; then
|
|
30
|
+
echo "More than $num_files files matched for \"$search_term\" in $dir. Please narrow your search."
|
|
31
|
+
return
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
echo "Found $num_matches matches for \"$search_term\" in $dir:"
|
|
35
|
+
echo "$matches" | awk '{$2=$2; gsub(/^\.+\/+/, "./", $2); print $2 " ("$1" matches)"}'
|
|
36
|
+
echo "End of matches for \"$search_term\" in $dir"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
main "$@"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
main() {
|
|
2
|
+
# Check if the first argument is provided
|
|
3
|
+
local search_term="${1:-}"
|
|
4
|
+
if [ -z "${search_term}" ]; then
|
|
5
|
+
echo "Usage: search_file <search_term> [<file>]"
|
|
6
|
+
return
|
|
7
|
+
fi
|
|
8
|
+
# Check if the second argument is provided
|
|
9
|
+
if [ $# -ge 2 ]; then
|
|
10
|
+
# Check if the provided argument is a valid file
|
|
11
|
+
if [ -f "$2" ]; then
|
|
12
|
+
local file="$2" # Set file if valid
|
|
13
|
+
else
|
|
14
|
+
echo "Usage: search_file <search_term> [<file>]"
|
|
15
|
+
echo "Error: File name $2 not found. Please provide a valid file name."
|
|
16
|
+
return # Exit if the file is not valid
|
|
17
|
+
fi
|
|
18
|
+
else
|
|
19
|
+
local CURRENT_FILE=$(_read_env CURRENT_FILE)
|
|
20
|
+
# Check if a file is open
|
|
21
|
+
if [ -z "${CURRENT_FILE:-}" ]; then
|
|
22
|
+
echo "No file open. Use the open command first."
|
|
23
|
+
return # Exit if no file is open
|
|
24
|
+
fi
|
|
25
|
+
local file="$CURRENT_FILE" # Set file to the current open file
|
|
26
|
+
fi
|
|
27
|
+
local search_term="$1"
|
|
28
|
+
file=$(realpath "$file")
|
|
29
|
+
# Use grep to directly get the desired formatted output
|
|
30
|
+
local matches=$(grep -nH -- "$search_term" "$file")
|
|
31
|
+
# Check if no matches were found
|
|
32
|
+
if [ -z "${matches:-}" ]; then
|
|
33
|
+
echo "No matches found for \"$search_term\" in $file"
|
|
34
|
+
return
|
|
35
|
+
fi
|
|
36
|
+
# Calculate total number of matches
|
|
37
|
+
local num_matches=$(echo "$matches" | wc -l | awk '{$1=$1; print $0}')
|
|
38
|
+
|
|
39
|
+
# calculate total number of lines matched
|
|
40
|
+
local num_lines=$(echo "$matches" | cut -d: -f1 | sort | uniq | wc -l | awk '{$1=$1; print $0}')
|
|
41
|
+
# if num_lines is > 100, print an error
|
|
42
|
+
if [ $num_lines -gt 100 ]; then
|
|
43
|
+
echo "More than $num_lines lines matched for \"$search_term\" in $file. Please narrow your search."
|
|
44
|
+
return
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Print the total number of matches and the matches themselves
|
|
48
|
+
echo "Found $num_matches matches for \"$search_term\" in $file:"
|
|
49
|
+
echo "$matches" | cut -d: -f1-2 | sort -u -t: -k2,2n | while IFS=: read -r filename line_number; do
|
|
50
|
+
echo "Line $line_number:$(sed -n "${line_number}p" "$file")"
|
|
51
|
+
done
|
|
52
|
+
echo "End of matches for \"$search_term\" in $file"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
main "$@"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
tools:
|
|
2
|
+
find_file:
|
|
3
|
+
signature: "find_file <file_name> [<dir>]"
|
|
4
|
+
docstring: "finds all files with the given name or pattern in dir. If dir is not provided, searches in the current directory"
|
|
5
|
+
arguments:
|
|
6
|
+
- name: file_name
|
|
7
|
+
type: string
|
|
8
|
+
description: "the name of the file or pattern to search for. supports shell-style wildcards (e.g. *.py)"
|
|
9
|
+
required: true
|
|
10
|
+
- name: dir
|
|
11
|
+
type: string
|
|
12
|
+
description: "the directory to search in (if not provided, searches in the current directory)"
|
|
13
|
+
required: false
|
|
14
|
+
search_dir:
|
|
15
|
+
signature: "search_dir <search_term> [<dir>]"
|
|
16
|
+
docstring: "searches for search_term in all files in dir. If dir is not provided, searches in the current directory"
|
|
17
|
+
arguments:
|
|
18
|
+
- name: search_term
|
|
19
|
+
type: string
|
|
20
|
+
description: "the term to search for"
|
|
21
|
+
required: true
|
|
22
|
+
- name: dir
|
|
23
|
+
type: string
|
|
24
|
+
description: "the directory to search in (if not provided, searches in the current directory)"
|
|
25
|
+
required: false
|
|
26
|
+
search_file:
|
|
27
|
+
signature: "search_file <search_term> [<file>]"
|
|
28
|
+
docstring: "searches for search_term in file. If file is not provided, searches in the current open file"
|
|
29
|
+
arguments:
|
|
30
|
+
- name: search_term
|
|
31
|
+
type: string
|
|
32
|
+
description: "the term to search for"
|
|
33
|
+
required: true
|
|
34
|
+
- name: file
|
|
35
|
+
type: string
|
|
36
|
+
description: "the file to search in (if not provided, searches in the current open file)"
|
|
37
|
+
required: false
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
main() {
|
|
2
|
+
cd $ROOT
|
|
3
|
+
|
|
4
|
+
# Check if the patch file exists and is non-empty
|
|
5
|
+
if [ -s "/root/test.patch" ]; then
|
|
6
|
+
# Apply the patch in reverse
|
|
7
|
+
git apply -R < "/root/test.patch"
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
git add -A
|
|
11
|
+
git diff --cached > /root/model.patch
|
|
12
|
+
echo "<<SWE_AGENT_SUBMISSION>>"
|
|
13
|
+
cat /root/model.patch
|
|
14
|
+
echo "<<SWE_AGENT_SUBMISSION>>"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
main "$@"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/root/python3.11/bin/python3
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
from argparse import ArgumentParser
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
lib_path = str(Path(__file__).resolve().parent.parent / "lib")
|
|
9
|
+
sys.path.insert(0, lib_path)
|
|
10
|
+
|
|
11
|
+
from web_browser_config import ClientConfig
|
|
12
|
+
from web_browser_utils import (
|
|
13
|
+
_autosave_screenshot_from_response,
|
|
14
|
+
_print_response_with_metadata,
|
|
15
|
+
send_request,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
config = ClientConfig()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def click(x, y, button):
|
|
22
|
+
"""Click at the specified coordinates (x, y)."""
|
|
23
|
+
response = send_request(
|
|
24
|
+
config.port,
|
|
25
|
+
"click",
|
|
26
|
+
"POST",
|
|
27
|
+
{"x": x, "y": y, "button": button, "return_screenshot": config.autoscreenshot},
|
|
28
|
+
)
|
|
29
|
+
if response is None:
|
|
30
|
+
return
|
|
31
|
+
_print_response_with_metadata(response)
|
|
32
|
+
_autosave_screenshot_from_response(response, config.screenshot_mode)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == "__main__":
|
|
36
|
+
parser = ArgumentParser()
|
|
37
|
+
parser.add_argument("x", type=int)
|
|
38
|
+
parser.add_argument("y", type=int)
|
|
39
|
+
parser.add_argument("button", nargs="?", default="left", choices=["left", "right"])
|
|
40
|
+
args = parser.parse_args()
|
|
41
|
+
click(args.x, args.y, args.button)
|