diff --git a/packages/narada-core/pyproject.toml b/packages/narada-core/pyproject.toml index 94f03b6..160be52 100644 --- a/packages/narada-core/pyproject.toml +++ b/packages/narada-core/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "narada-core" -version = "0.0.25" +version = "0.0.26" description = "Code shared by the `narada` and `narada-pyodide` packages." license = "Apache-2.0" readme = "README.md" diff --git a/packages/narada-core/src/narada_core/actions/models.py b/packages/narada-core/src/narada_core/actions/models.py index 89b72c6..cd4ac82 100644 --- a/packages/narada-core/src/narada_core/actions/models.py +++ b/packages/narada-core/src/narada_core/actions/models.py @@ -200,6 +200,17 @@ class AgenticSelectorResponse(BaseModel): value: str | None +class AgenticMatchingSelectorsFinderRequest(BaseModel): + name: Literal["agentic_matching_selectors_finder"] = ( + "agentic_matching_selectors_finder" + ) + prompt: str + + +class AgenticMatchingSelectorsFinderResponse(BaseModel): + selectors: list[AgenticSelectors] + + class WaitForElementRequest(BaseModel): name: Literal["wait_for_element"] = "wait_for_element" selectors: AgenticSelectors @@ -422,6 +433,7 @@ class UserApprovalResponse(BaseModel): type ExtensionActionRequest = ( AgenticSelectorRequest + | AgenticMatchingSelectorsFinderRequest | AgenticMouseActionRequest | CloseWindowRequest | GoToUrlRequest diff --git a/packages/narada-pyodide/pyproject.toml b/packages/narada-pyodide/pyproject.toml index bd16fca..0a90196 100644 --- a/packages/narada-pyodide/pyproject.toml +++ b/packages/narada-pyodide/pyproject.toml @@ -1,14 +1,14 @@ [project] name = "narada-pyodide" -version = "0.0.56" +version = "0.0.57" description = "Pyodide-compatible Python client SDK for Narada" license = "Apache-2.0" readme = "README.md" authors = [{ name = "Narada", email = "support@narada.ai" }] requires-python = ">=3.12" dependencies = [ - "narada-core==0.0.25", + "narada-core==0.0.26", # Must be a supported version in https://pyodide.org/en/stable/usage/packages-in-pyodide.html "packaging==24.2", ] diff --git a/packages/narada-pyodide/src/narada/window.py b/packages/narada-pyodide/src/narada/window.py index 4822167..9df31f6 100644 --- a/packages/narada-pyodide/src/narada/window.py +++ b/packages/narada-pyodide/src/narada/window.py @@ -24,6 +24,8 @@ from narada_core.actions.models import ( AgenticMouseAction, AgenticMouseActionRequest, + AgenticMatchingSelectorsFinderRequest, + AgenticMatchingSelectorsFinderResponse, AgenticSelectorAction, AgenticSelectorRequest, AgenticSelectorResponse, @@ -746,6 +748,20 @@ async def agentic_selector( return result + async def agentic_matching_selectors_finder( + self, + *, + prompt: str, + timeout: int | None = 300, + ) -> list[AgenticSelectors]: + """Finds all visible targets matching a prompt and returns selectors.""" + result = await self._run_extension_action( + AgenticMatchingSelectorsFinderRequest(prompt=prompt), + AgenticMatchingSelectorsFinderResponse, + timeout=timeout, + ) + return result.selectors + async def agentic_mouse_action( self, *, diff --git a/packages/narada/pyproject.toml b/packages/narada/pyproject.toml index c07f1b2..9154cd0 100644 --- a/packages/narada/pyproject.toml +++ b/packages/narada/pyproject.toml @@ -1,13 +1,13 @@ [project] name = "narada" -version = "0.1.53a5" +version = "0.1.53a6" description = "Python client SDK for Narada" license = "Apache-2.0" readme = "README.md" authors = [{ name = "Narada", email = "support@narada.ai" }] requires-python = ">=3.12" dependencies = [ - "narada-core==0.0.25", + "narada-core==0.0.26", "aiohttp>=3.12.13", "playwright>=1.53.0", "rich>=14.0.0", diff --git a/packages/narada/src/narada/window.py b/packages/narada/src/narada/window.py index 49d9465..14b7d99 100644 --- a/packages/narada/src/narada/window.py +++ b/packages/narada/src/narada/window.py @@ -25,6 +25,8 @@ from narada_core.actions.models import ( AgenticMouseAction, AgenticMouseActionRequest, + AgenticMatchingSelectorsFinderRequest, + AgenticMatchingSelectorsFinderResponse, AgenticSelectorAction, AgenticSelectorRequest, AgenticSelectorResponse, @@ -696,6 +698,20 @@ async def agentic_selector( return result + async def agentic_matching_selectors_finder( + self, + *, + prompt: str, + timeout: int | None = 300, + ) -> list[AgenticSelectors]: + """Finds all visible targets matching a prompt and returns selectors.""" + result = await self._run_extension_action( + AgenticMatchingSelectorsFinderRequest(prompt=prompt), + AgenticMatchingSelectorsFinderResponse, + timeout=timeout, + ) + return result.selectors + async def agentic_mouse_action( self, *, diff --git a/uv.lock b/uv.lock index 00f0daf..2194bba 100644 --- a/uv.lock +++ b/uv.lock @@ -312,7 +312,7 @@ wheels = [ [[package]] name = "narada" -version = "0.1.53a5" +version = "0.1.53a6" source = { editable = "packages/narada" } dependencies = [ { name = "aiohttp" }, @@ -345,7 +345,7 @@ dev = [ [[package]] name = "narada-core" -version = "0.0.25" +version = "0.0.26" source = { editable = "packages/narada-core" } dependencies = [ { name = "pydantic" }, @@ -356,7 +356,7 @@ requires-dist = [{ name = "pydantic", specifier = "==2.12.5" }] [[package]] name = "narada-pyodide" -version = "0.0.56" +version = "0.0.57" source = { editable = "packages/narada-pyodide" } dependencies = [ { name = "narada-core" },