From 49a82e79e5ebc8ee35f168b6ef997c03e9646be8 Mon Sep 17 00:00:00 2001 From: Matej Urbas Date: Sun, 18 May 2025 07:54:23 +0100 Subject: [PATCH] feat: Add server address and port options for browser mode --- aider/args.py | 18 ++++++++++++++++++ aider/main.py | 10 ++++++++-- aider/website/docs/config/aider_conf.md | 6 ++++++ tests/browser/test_browser.py | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/aider/args.py b/aider/args.py index 1543bb07e..4d61bb7e6 100644 --- a/aider/args.py +++ b/aider/args.py @@ -627,6 +627,24 @@ def get_parser(default_config_files, git_root): help="Run aider in your browser (default: False)", default=False, ) + group.add_argument( + "--server-address", + type=str, + default=None, + help=( + "The address on which aider should listen when running in browser mode. By default" + " it listens on localhost." + ), + ) + group.add_argument( + "--server-port", + type=int, + default=None, + help=( + "The port on which aider should listen when running in browser mode. By default" + " a random port is chosen." + ), + ) group.add_argument( "--copy-paste", action=argparse.BooleanOptionalAction, diff --git a/aider/main.py b/aider/main.py index ea344f0ba..91a7cd0c4 100644 --- a/aider/main.py +++ b/aider/main.py @@ -230,7 +230,7 @@ def write_streamlit_credentials(): print("Streamlit credentials already exist.") -def launch_gui(args): +def launch_gui(args, server_port=None, server_address=None): from streamlit.web import cli from aider import gui @@ -251,6 +251,12 @@ def launch_gui(args): "--server.runOnSave=false", ] + if server_port is not None: + st_args.append(f"--server.port={server_port}") + + if server_address is not None: + st_args.append(f"--server.address={server_address}") + # https://github.com/Aider-AI/aider/issues/2193 is_dev = "-dev" in str(__version__) @@ -663,7 +669,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F analytics.event("exit", reason="Streamlit not installed") return analytics.event("gui session") - launch_gui(argv) + launch_gui(argv, server_port=args.server_port, server_address=args.server_address) analytics.event("exit", reason="GUI session ended") return diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 99bccf401..7099e0773 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -382,6 +382,12 @@ cog.outl("```") ## Run aider in your browser (default: False) #gui: false +## The address on which aider should listen when running in browser mode (default: localhost) +#server-address: "0.0.0.0" + +## The port on which aider should listen when running in browser mode (default: None) +#server-port: 12345 + ## Enable automatic copy/paste of chat between aider and web UI (default: False) #copy-paste: false diff --git a/tests/browser/test_browser.py b/tests/browser/test_browser.py index c21dfa8cb..7ad13f7ab 100644 --- a/tests/browser/test_browser.py +++ b/tests/browser/test_browser.py @@ -6,7 +6,7 @@ from aider.main import main class TestBrowser(unittest.TestCase): - @patch("aider.main.launch_gui") + @patch("aider.main.launch_gui", autospec=True) def test_browser_flag_imports_streamlit(self, mock_launch_gui): os.environ["AIDER_ANALYTICS"] = "false"