1- #!/usr/bin/env python3
1+ #!/usr/bin/env python3
22# SPDX-License-Identifier: Apache-2.0
33# Copyright 2026 Ague Samuel Amen
44#
3232 python -m pycompiler_ark bcasl # Launch BCASL standalone
3333 python -m pycompiler_ark bcasl /path/to/ws # Launch BCASL with workspace
3434 python -m pycompiler_ark --completion bash # Generate bash completion
35+ python -m pycompiler_ark unload # Unload all engines
3536"""
3637
3738import multiprocessing
5051
5152from main import main
5253from Core import __version__ as APP_VERSION
54+ from Core .engines_loader import unload_all
5355
5456# Configure logging
5557logging .basicConfig (
@@ -330,8 +332,14 @@ def print_workspace_info():
330332 type = click .Choice (["bash" , "zsh" , "fish" ]),
331333 help = "Generate shell completion" ,
332334 )
335+ @click .option (
336+ "--unload" ,
337+ "unload_engines_flag" ,
338+ is_flag = True ,
339+ help = "Unload all registered engines before launching the application" ,
340+ )
333341 @click .pass_context
334- def cli (ctx , version , help_all , info , completion ):
342+ def cli (ctx , version , help_all , info , completion , unload_engines_flag ):
335343 """PyCompiler ARK++ — Cross-platform Python compiler with BCASL integration.
336344
337345 Launch the main application by default, or use subcommands for specific modes.
@@ -356,6 +364,17 @@ def cli(ctx, version, help_all, info, completion):
356364 click .echo ("# Add this to your shell configuration file" )
357365 ctx .exit (0 )
358366
367+ if unload_engines_flag :
368+ result = unload_all ()
369+ if result ["status" ] == "success" :
370+ click .echo (f"✅ { result ['message' ]} " )
371+ if result ["unloaded" ]:
372+ click .echo (" Unloaded engines:" )
373+ for eid in result ["unloaded" ]:
374+ click .echo (f" • { eid } " )
375+ else :
376+ click .echo (f"❌ Error: { result ['message' ]} " , err = True )
377+
359378 if help_all :
360379 click .echo (ctx .get_help ())
361380 click .echo ("\n 📚 Available Commands:" )
@@ -457,6 +476,20 @@ def discover():
457476 else :
458477 click .echo ("No workspaces discovered" )
459478
479+ @cli .command (context_settings = dict (help_option_names = ["-h" , "--help" ]), name = "unload" )
480+ def unload_engines_cmd ():
481+ """Unload all registered engines."""
482+ result = unload_all ()
483+ if result ["status" ] == "success" :
484+ click .echo (f"✅ { result ['message' ]} " )
485+ if result ["unloaded" ]:
486+ click .echo (" Unloaded engines:" )
487+ for eid in result ["unloaded" ]:
488+ click .echo (f" • { eid } " )
489+ else :
490+ click .echo (f"❌ Error: { result ['message' ]} " , err = True )
491+ sys .exit (0 if result ["status" ] == "success" else 1 )
492+
460493
461494if __name__ == "__main__" :
462495 if click :
@@ -484,6 +517,17 @@ def discover():
484517 print_system_info ()
485518 print_workspace_info ()
486519 sys .exit (0 )
520+ elif sys .argv [1 ] == "--unload" :
521+ from Core .engines_loader import unload_all
522+ result = unload_all ()
523+ if result ["status" ] == "success" :
524+ print (f"✅ { result ['message' ]} " )
525+ if result ["unloaded" ]:
526+ print (" Unloaded engines:" )
527+ for eid in result ["unloaded" ]:
528+ print (f" • { eid } " )
529+ else :
530+ print (f"❌ Error: { result ['message' ]} " )
487531 elif sys .argv [1 ] == "bcasl" :
488532 workspace_dir = sys .argv [2 ] if len (sys .argv ) > 2 else None
489533 sys .exit (launch_bcasl_standalone (workspace_dir ))
@@ -496,6 +540,18 @@ def discover():
496540 else :
497541 print ("No workspaces discovered" )
498542 sys .exit (0 )
543+ elif sys .argv [1 ] == "unload" :
544+ from Core .engines_loader import unload_all
545+ result = unload_all ()
546+ if result ["status" ] == "success" :
547+ print (f"✅ { result ['message' ]} " )
548+ if result ["unloaded" ]:
549+ print (" Unloaded engines:" )
550+ for eid in result ["unloaded" ]:
551+ print (f" • { eid } " )
552+ else :
553+ print (f"❌ Error: { result ['message' ]} " )
554+ sys .exit (0 if result ["status" ] == "success" else 1 )
499555 else :
500556 print (f"Unknown command: { sys .argv [1 ]} " )
501557 print (__doc__ )
0 commit comments