()
| 72 | api.mount("/screenshots", StaticFiles(directory=".screenshots"), name="screenshots") |
| 73 | |
| 74 | def initialize_system(): |
| 75 | stealth_mode = config.getboolean('BROWSER', 'stealth_mode') |
| 76 | personality_folder = "jarvis" if config.getboolean('MAIN', 'jarvis_personality') else "base" |
| 77 | languages = config["MAIN"]["languages"].split(' ') |
| 78 | |
| 79 | # Force headless mode in Docker containers |
| 80 | headless = config.getboolean('BROWSER', 'headless_browser') |
| 81 | if is_running_in_docker() and not headless: |
| 82 | # Print prominent warning to console (visible in docker-compose output) |
| 83 | print("\n" + "*" * 70) |
| 84 | print("*** WARNING: Detected Docker environment - forcing headless_browser=True ***") |
| 85 | print("*** INFO: To see the browser, run 'python cli.py' on your host machine ***") |
| 86 | print("*" * 70 + "\n") |
| 87 | |
| 88 | # Flush to ensure it's displayed immediately |
| 89 | sys.stdout.flush() |
| 90 | |
| 91 | # Also log to file |
| 92 | logger.warning("Detected Docker environment - forcing headless_browser=True") |
| 93 | logger.info("To see the browser, run 'python cli.py' on your host machine instead") |
| 94 | |
| 95 | headless = True |
| 96 | |
| 97 | provider = Provider( |
| 98 | provider_name=config["MAIN"]["provider_name"], |
| 99 | model=config["MAIN"]["provider_model"], |
| 100 | server_address=config["MAIN"]["provider_server_address"], |
| 101 | is_local=config.getboolean('MAIN', 'is_local') |
| 102 | ) |
| 103 | logger.info(f"Provider initialized: {provider.provider_name} ({provider.model})") |
| 104 | |
| 105 | browser = Browser( |
| 106 | create_driver(headless=headless, stealth_mode=stealth_mode, lang=languages[0]), |
| 107 | anticaptcha_manual_install=stealth_mode |
| 108 | ) |
| 109 | logger.info("Browser initialized") |
| 110 | |
| 111 | agents = [ |
| 112 | CasualAgent( |
| 113 | name=config["MAIN"]["agent_name"], |
| 114 | prompt_path=f"prompts/{personality_folder}/casual_agent.txt", |
| 115 | provider=provider, verbose=False |
| 116 | ), |
| 117 | CoderAgent( |
| 118 | name="coder", |
| 119 | prompt_path=f"prompts/{personality_folder}/coder_agent.txt", |
| 120 | provider=provider, verbose=False |
| 121 | ), |
| 122 | FileAgent( |
| 123 | name="File Agent", |
| 124 | prompt_path=f"prompts/{personality_folder}/file_agent.txt", |
| 125 | provider=provider, verbose=False |
| 126 | ), |
| 127 | BrowserAgent( |
| 128 | name="Browser", |
| 129 | prompt_path=f"prompts/{personality_folder}/browser_agent.txt", |
| 130 | provider=provider, verbose=False, browser=browser |
| 131 | ), |
no test coverage detected