2121from ._common import build_client , emit , info
2222
2323
24+ _CLI_USER_ID_UNSET = object ()
25+
26+
2427def register (subparsers : argparse ._SubParsersAction ) -> None : # type: ignore[type-arg]
2528 group = subparsers .add_parser ("instance" , help = "ClawInstance management" )
2629 sub = group .add_subparsers (dest = "instance_action" )
2730 sub .required = True
2831
2932 p = sub .add_parser ("create" , help = "Create a ClawInstance" )
3033 p .add_argument ("--space-id" , required = True )
31- p .add_argument ("--user-id" , required = True )
34+ p .add_argument ("--user-id" , default = None )
3235 p .add_argument ("--instance-name" , required = True )
3336 p .add_argument ("--seat-type" , required = True , choices = ["Starter" , "Standard" , "Premium" , "Ultimate" ])
3437 p .add_argument ("--description" , default = None )
3538 p .add_argument ("--model-api-key" , default = None )
3639 p .add_argument ("--template-id" , default = None )
40+ p .add_argument ("--enable-headless" , choices = ["true" , "false" ], default = None )
41+ p .add_argument ("--client-token" , default = None )
42+ p .add_argument ("--dry-run" , choices = ["true" , "false" ], default = None )
3743 p .add_argument ("--wait" , action = "store_true" , default = False )
3844 p .add_argument ("--wait-timeout" , type = float , default = 600 )
3945 p .add_argument ("--interval" , type = float , default = 5 )
@@ -101,6 +107,11 @@ def register(subparsers: argparse._SubParsersAction) -> None: # type: ignore[ty
101107 p .add_argument ("--space-id" , required = True )
102108 p .add_argument ("--instance-id" , required = True )
103109 p .add_argument ("--instance-name" , default = None )
110+ p .add_argument (
111+ "--user-id" ,
112+ default = _CLI_USER_ID_UNSET ,
113+ help = "Reassign the instance to this user ID; pass an empty string to unbind. Omit to leave the binding unchanged." ,
114+ )
104115 p .add_argument ("--client-token" , default = None )
105116 p .add_argument ("--dry-run" , choices = ["true" , "false" ], default = None )
106117 p .set_defaults (func = _update )
@@ -129,6 +140,8 @@ def register(subparsers: argparse._SubParsersAction) -> None: # type: ignore[ty
129140
130141def _create (args : argparse .Namespace ) -> None :
131142 client = build_client (args )
143+ enable_headless = None if args .enable_headless is None else args .enable_headless == "true"
144+ dry_run = None if args .dry_run is None else args .dry_run == "true"
132145 if args .wait :
133146 info (f"Creating { args .instance_name } and waiting for Running..." )
134147 result = client .workflows .provision_instance (
@@ -151,6 +164,9 @@ def _create(args: argparse.Namespace) -> None:
151164 description = args .description ,
152165 model_api_key = args .model_api_key ,
153166 template_id = args .template_id ,
167+ enable_headless = enable_headless ,
168+ client_token = args .client_token ,
169+ dry_run = dry_run ,
154170 )
155171 emit (result )
156172
@@ -258,15 +274,16 @@ def _reset(args: argparse.Namespace) -> None:
258274def _update (args : argparse .Namespace ) -> None :
259275 client = build_client (args )
260276 dry_run = None if args .dry_run is None else args .dry_run == "true"
261- emit (
262- client .instances .update (
263- space_id = args .space_id ,
264- instance_id = args .instance_id ,
265- instance_name = None if args .instance_name in (None , "" ) else args .instance_name ,
266- client_token = args .client_token ,
267- dry_run = dry_run ,
268- )
277+ update_kwargs : dict [str , Any ] = dict (
278+ space_id = args .space_id ,
279+ instance_id = args .instance_id ,
280+ instance_name = None if args .instance_name in (None , "" ) else args .instance_name ,
281+ client_token = args .client_token ,
282+ dry_run = dry_run ,
269283 )
284+ if args .user_id is not _CLI_USER_ID_UNSET :
285+ update_kwargs ["user_id" ] = args .user_id
286+ emit (client .instances .update (** update_kwargs ))
270287
271288
272289def _delete (args : argparse .Namespace ) -> None :
0 commit comments