feat: add PyInstaller build for standalone binary distribution

- Add PyInstaller spec file and build script for creating standalone executables
- Add install.sh for curl | sh installation from GitHub releases
- Add GitHub Actions workflow for multi-platform builds (macOS, Linux, Windows)
- Move sandbox-only deps (playwright, ipython, libtmux, etc.) to optional extras
- Make google-cloud-aiplatform optional ([vertex] extra) to reduce binary size
- Use lazy imports in tool actions to avoid loading sandbox deps at startup
- Add -v/--version flag to CLI
- Add website and Discord links to completion message
- Binary size: ~97MB (down from ~120MB with all deps)
This commit is contained in:
0xallam
2025-12-07 14:35:08 +02:00
committed by Ahmed Allam
parent 2899021a21
commit eb0c52b720
13 changed files with 1138 additions and 149 deletions
+10 -6
View File
@@ -1,8 +1,10 @@
from typing import Any, Literal, NoReturn
from typing import TYPE_CHECKING, Any, Literal, NoReturn
from strix.tools.registry import register_tool
from .tab_manager import BrowserTabManager, get_browser_tab_manager
if TYPE_CHECKING:
from .tab_manager import BrowserTabManager
BrowserAction = Literal[
@@ -71,7 +73,7 @@ def _validate_file_path(action_name: str, file_path: str | None) -> None:
def _handle_navigation_actions(
manager: BrowserTabManager,
manager: "BrowserTabManager",
action: str,
url: str | None = None,
tab_id: str | None = None,
@@ -90,7 +92,7 @@ def _handle_navigation_actions(
def _handle_interaction_actions(
manager: BrowserTabManager,
manager: "BrowserTabManager",
action: str,
coordinate: str | None = None,
text: str | None = None,
@@ -128,7 +130,7 @@ def _raise_unknown_action(action: str) -> NoReturn:
def _handle_tab_actions(
manager: BrowserTabManager,
manager: "BrowserTabManager",
action: str,
url: str | None = None,
tab_id: str | None = None,
@@ -149,7 +151,7 @@ def _handle_tab_actions(
def _handle_utility_actions(
manager: BrowserTabManager,
manager: "BrowserTabManager",
action: str,
duration: float | None = None,
js_code: str | None = None,
@@ -191,6 +193,8 @@ def browser_action(
file_path: str | None = None,
clear: bool = False,
) -> dict[str, Any]:
from .tab_manager import get_browser_tab_manager
manager = get_browser_tab_manager()
try: