mirror of
https://github.com/agent0ai/agent-zero.git
synced 2026-05-17 12:31:20 +00:00
Add Browser settings for the default starting page and tool-result autofocus, and wire them through config, APIs, runtime opens, and the settings UI. Resolve Chrome extension __MSG_* manifest labels from locale metadata so installed extensions show readable names. Stabilize Browser viewport negotiation across canvas and modal surfaces by clearing stale frames, waiting for stable surface dimensions, and forcing sync after dock transitions. Move Browser loading/error state into a thin bottom status bar so it no longer overlays the page viewport.
91 lines
3.4 KiB
Python
91 lines
3.4 KiB
Python
from types import SimpleNamespace
|
|
|
|
from helpers import plugins
|
|
from helpers.api import ApiHandler, Request
|
|
from plugins._browser.helpers.config import (
|
|
AUTOFOCUS_ACTIVE_PAGE_KEY,
|
|
DEFAULT_HOMEPAGE_KEY,
|
|
MODEL_PRESET_KEY,
|
|
PLUGIN_NAME,
|
|
get_browser_config,
|
|
get_browser_main_model_summary,
|
|
get_browser_model_preset_options,
|
|
)
|
|
from plugins._browser.helpers.extension_manager import (
|
|
get_extensions_root,
|
|
install_chrome_web_store_extension,
|
|
list_browser_extensions,
|
|
set_browser_extension_enabled,
|
|
)
|
|
|
|
|
|
class Extensions(ApiHandler):
|
|
async def process(self, input: dict, request: Request) -> dict:
|
|
action = input.get("action", "list")
|
|
agent = self._agent_from_input(input)
|
|
|
|
if action == "list":
|
|
return self._browser_extension_payload(agent=agent)
|
|
|
|
if action == "install_web_store":
|
|
try:
|
|
result = install_chrome_web_store_extension(str(input.get("url", "")))
|
|
except ValueError as exc:
|
|
return {"ok": False, "error": str(exc)}
|
|
return {
|
|
**self._browser_extension_payload(agent=agent),
|
|
**result,
|
|
}
|
|
|
|
if action == "set_extension_enabled":
|
|
try:
|
|
set_browser_extension_enabled(
|
|
str(input.get("path", "")),
|
|
bool(input.get("enabled", False)),
|
|
)
|
|
except ValueError as exc:
|
|
return {"ok": False, "error": str(exc)}
|
|
return self._browser_extension_payload(agent=agent)
|
|
|
|
if action == "set_model_preset":
|
|
preset_name = str(input.get(MODEL_PRESET_KEY, "") or "").strip()
|
|
available_presets = {
|
|
option["name"]
|
|
for option in get_browser_model_preset_options(agent=agent)
|
|
if option.get("name") and not option.get("missing")
|
|
}
|
|
if preset_name and preset_name not in available_presets:
|
|
return {"ok": False, "error": "Choose an available browser model preset."}
|
|
|
|
config = get_browser_config()
|
|
config[MODEL_PRESET_KEY] = preset_name
|
|
plugins.save_plugin_config(PLUGIN_NAME, "", "", config)
|
|
return self._browser_extension_payload(agent=agent)
|
|
|
|
return {"ok": False, "error": f"Unknown action: {action}"}
|
|
|
|
def _agent_from_input(self, input: dict):
|
|
context_id = str(input.get("context_id", "") or "").strip()
|
|
if not context_id:
|
|
return None
|
|
try:
|
|
context = self.use_context(context_id, create_if_not_exists=False)
|
|
except Exception:
|
|
return None
|
|
config = getattr(context, "config", None)
|
|
if config is None:
|
|
return None
|
|
return SimpleNamespace(context=context, config=config)
|
|
|
|
def _browser_extension_payload(self, agent=None) -> dict:
|
|
config = get_browser_config()
|
|
return {
|
|
"ok": True,
|
|
"root": str(get_extensions_root()),
|
|
"extensions": list_browser_extensions(),
|
|
DEFAULT_HOMEPAGE_KEY: config[DEFAULT_HOMEPAGE_KEY],
|
|
AUTOFOCUS_ACTIVE_PAGE_KEY: config[AUTOFOCUS_ACTIVE_PAGE_KEY],
|
|
MODEL_PRESET_KEY: config[MODEL_PRESET_KEY],
|
|
"main_model_summary": get_browser_main_model_summary(agent=agent),
|
|
"model_preset_options": get_browser_model_preset_options(agent=agent, settings=config),
|
|
}
|