mirror of
https://github.com/usestrix/strix.git
synced 2026-08-16 17:27:26 +02:00
- 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)
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from typing import Any, Literal
|
|
|
|
from strix.tools.registry import register_tool
|
|
|
|
|
|
PythonAction = Literal["new_session", "execute", "close", "list_sessions"]
|
|
|
|
|
|
@register_tool
|
|
def python_action(
|
|
action: PythonAction,
|
|
code: str | None = None,
|
|
timeout: int = 30,
|
|
session_id: str | None = None,
|
|
) -> dict[str, Any]:
|
|
from .python_manager import get_python_session_manager
|
|
|
|
def _validate_code(action_name: str, code: str | None) -> None:
|
|
if not code:
|
|
raise ValueError(f"code parameter is required for {action_name} action")
|
|
|
|
def _validate_action(action_name: str) -> None:
|
|
raise ValueError(f"Unknown action: {action_name}")
|
|
|
|
manager = get_python_session_manager()
|
|
|
|
try:
|
|
match action:
|
|
case "new_session":
|
|
return manager.create_session(session_id, code, timeout)
|
|
|
|
case "execute":
|
|
_validate_code(action, code)
|
|
assert code is not None
|
|
return manager.execute_code(session_id, code, timeout)
|
|
|
|
case "close":
|
|
return manager.close_session(session_id)
|
|
|
|
case "list_sessions":
|
|
return manager.list_sessions()
|
|
|
|
case _:
|
|
_validate_action(action) # type: ignore[unreachable]
|
|
|
|
except (ValueError, RuntimeError) as e:
|
|
return {"stderr": str(e), "session_id": session_id, "stdout": "", "is_running": False}
|