11"""CLI for serving Modal apps locally."""
22
3+ import os
34import signal
45import subprocess
56import sys
@@ -35,9 +36,26 @@ def serve_all():
3536 For local development, we use dev_combined.py which includes
3637 Server, Search, and Processing in a single Modal app.
3738 This allows hot-reload on all services without cross-app lookup issues.
39+
40+ Usage: uv run dev <name>
41+
42+ The name parameter is required and will prefix the Modal app name
43+ to avoid conflicts when multiple developers run dev instances.
3844 """
39- print ("Starting combined dev app (all services in one)...\n " )
40- print (f" \033 [32m●{ RESET } dev-combined (server + search + processing)\n " )
45+ if len (sys .argv ) < 2 :
46+ print ("Error: Name parameter is required for dev mode." )
47+ print ("Usage: uv run dev <name>" )
48+ print ("\n Example: uv run dev john" )
49+ print ("This creates a Modal app named 'john-dev-server'" )
50+ sys .exit (1 )
51+
52+ dev_name = sys .argv [1 ]
53+
54+ # Set environment variable for the Modal app to read
55+ os .environ ["DEV_NAME" ] = dev_name
56+
57+ print (f"Starting combined dev app for '{ dev_name } '...\n " )
58+ print (f" \033 [32m●{ RESET } { dev_name } -dev-server (server + search + processing)\n " )
4159 print ("Note: For staging/prod, deploy individual apps separately.\n " )
4260 print ("-" * 60 + "\n " )
4361
@@ -49,6 +67,7 @@ def serve_all():
4967 stderr = subprocess .STDOUT ,
5068 text = True ,
5169 bufsize = 1 ,
70+ env = {** os .environ , "DEV_NAME" : dev_name },
5271 )
5372
5473 # Handle graceful shutdown
@@ -60,7 +79,7 @@ def signal_handler(sig, frame):
6079 signal .signal (signal .SIGTERM , signal_handler )
6180
6281 # Stream output with color prefix
63- _prefix_output (process , "dev" , color )
82+ _prefix_output (process , dev_name , color )
6483 process .wait ()
6584
6685
0 commit comments