praisonai-browser 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- praisonai_browser-0.0.1/PKG-INFO +58 -0
- praisonai_browser-0.0.1/README.md +34 -0
- praisonai_browser-0.0.1/praisonai_browser/__init__.py +48 -0
- praisonai_browser-0.0.1/praisonai_browser/__main__.py +18 -0
- praisonai_browser-0.0.1/praisonai_browser/_protocol_bridge.py +75 -0
- praisonai_browser-0.0.1/praisonai_browser/_version.py +1 -0
- praisonai_browser-0.0.1/praisonai_browser/agent.py +838 -0
- praisonai_browser-0.0.1/praisonai_browser/benchmark.py +952 -0
- praisonai_browser-0.0.1/praisonai_browser/cdp_agent.py +1629 -0
- praisonai_browser-0.0.1/praisonai_browser/cdp_utils.py +367 -0
- praisonai_browser-0.0.1/praisonai_browser/cli/__init__.py +1 -0
- praisonai_browser-0.0.1/praisonai_browser/cli/app.py +11 -0
- praisonai_browser-0.0.1/praisonai_browser/cli/commands/__init__.py +1 -0
- praisonai_browser-0.0.1/praisonai_browser/cli/commands/browser.py +3162 -0
- praisonai_browser-0.0.1/praisonai_browser/diagnostics.py +609 -0
- praisonai_browser-0.0.1/praisonai_browser/launcher.py +363 -0
- praisonai_browser-0.0.1/praisonai_browser/playwright_agent.py +275 -0
- praisonai_browser-0.0.1/praisonai_browser/profiling.py +305 -0
- praisonai_browser-0.0.1/praisonai_browser/protocol.py +108 -0
- praisonai_browser-0.0.1/praisonai_browser/report.py +137 -0
- praisonai_browser-0.0.1/praisonai_browser/server.py +1113 -0
- praisonai_browser-0.0.1/praisonai_browser/sessions.py +386 -0
- praisonai_browser-0.0.1/praisonai_browser/video.py +333 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/PKG-INFO +58 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/SOURCES.txt +29 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/dependency_links.txt +1 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/entry_points.txt +2 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/requires.txt +16 -0
- praisonai_browser-0.0.1/praisonai_browser.egg-info/top_level.txt +1 -0
- praisonai_browser-0.0.1/pyproject.toml +48 -0
- praisonai_browser-0.0.1/setup.cfg +4 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: praisonai-browser
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Browser automation for PraisonAI — Chrome extension bridge, CDP, and Playwright agents extracted from the praisonai wrapper.
|
|
5
|
+
Author: Mervin Praison
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://docs.praison.ai
|
|
8
|
+
Project-URL: Repository, https://github.com/mervinpraison/PraisonAI
|
|
9
|
+
Requires-Python: <3.15,>=3.10
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: praisonaiagents>=1.6.126
|
|
12
|
+
Requires-Dist: rich>=13.7
|
|
13
|
+
Requires-Dist: typer>=0.12.0
|
|
14
|
+
Requires-Dist: click>=8.4.2
|
|
15
|
+
Provides-Extra: server
|
|
16
|
+
Requires-Dist: fastapi>=0.110.0; extra == "server"
|
|
17
|
+
Requires-Dist: uvicorn>=0.27.0; extra == "server"
|
|
18
|
+
Requires-Dist: websockets>=12.0; extra == "server"
|
|
19
|
+
Requires-Dist: aiohttp>=3.9.0; extra == "server"
|
|
20
|
+
Provides-Extra: playwright
|
|
21
|
+
Requires-Dist: playwright>=1.40.0; extra == "playwright"
|
|
22
|
+
Provides-Extra: all
|
|
23
|
+
Requires-Dist: praisonai-browser[playwright,server]; extra == "all"
|
|
24
|
+
|
|
25
|
+
# PraisonAI Browser
|
|
26
|
+
|
|
27
|
+
Browser automation for [PraisonAI](https://github.com/mervinpraison/PraisonAI) — Chrome extension bridge, CDP/hybrid agents, and Playwright automation as a standalone package or part of the full `praisonai` stack.
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pip install "praisonai-browser[all]"
|
|
33
|
+
|
|
34
|
+
# Or via the umbrella product
|
|
35
|
+
pip install "praisonai[browser]"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quickstart
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
praisonai-browser start --port 8765
|
|
42
|
+
praisonai-browser run "Search for AI news on Google"
|
|
43
|
+
praisonai-browser doctor
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
With the full stack: `praisonai browser start`, `praisonai browser run "..."`.
|
|
47
|
+
|
|
48
|
+
## Stack
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
praisonaiagents (browser protocols)
|
|
52
|
+
└── praisonai-browser (this package)
|
|
53
|
+
└── praisonai (wrapper shims: praisonai.browser.*)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Old import paths (`praisonai.browser`, `python -m praisonai.browser.server`) keep working via wrapper shims.
|
|
57
|
+
|
|
58
|
+
Boundary details: `src/praisonai/tests/PRAISONAI_BROWSER_MANIFEST.md`.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# PraisonAI Browser
|
|
2
|
+
|
|
3
|
+
Browser automation for [PraisonAI](https://github.com/mervinpraison/PraisonAI) — Chrome extension bridge, CDP/hybrid agents, and Playwright automation as a standalone package or part of the full `praisonai` stack.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install "praisonai-browser[all]"
|
|
9
|
+
|
|
10
|
+
# Or via the umbrella product
|
|
11
|
+
pip install "praisonai[browser]"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Quickstart
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
praisonai-browser start --port 8765
|
|
18
|
+
praisonai-browser run "Search for AI news on Google"
|
|
19
|
+
praisonai-browser doctor
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
With the full stack: `praisonai browser start`, `praisonai browser run "..."`.
|
|
23
|
+
|
|
24
|
+
## Stack
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
praisonaiagents (browser protocols)
|
|
28
|
+
└── praisonai-browser (this package)
|
|
29
|
+
└── praisonai (wrapper shims: praisonai.browser.*)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Old import paths (`praisonai.browser`, `python -m praisonai.browser.server`) keep working via wrapper shims.
|
|
33
|
+
|
|
34
|
+
Boundary details: `src/praisonai/tests/PRAISONAI_BROWSER_MANIFEST.md`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""Browser automation package for PraisonAI.
|
|
2
|
+
|
|
3
|
+
Provides a bridge server for Chrome Extension ↔ PraisonAI Agent communication.
|
|
4
|
+
|
|
5
|
+
Example:
|
|
6
|
+
praisonai-browser start --port 8765
|
|
7
|
+
|
|
8
|
+
from praisonai_browser import BrowserServer
|
|
9
|
+
server = BrowserServer(port=8765)
|
|
10
|
+
server.start()
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from praisonai_browser._version import __version__
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def __getattr__(name: str):
|
|
19
|
+
if name == "BrowserServer":
|
|
20
|
+
from .server import BrowserServer
|
|
21
|
+
return BrowserServer
|
|
22
|
+
if name == "BrowserAgent":
|
|
23
|
+
from .agent import BrowserAgent
|
|
24
|
+
return BrowserAgent
|
|
25
|
+
if name == "SessionManager":
|
|
26
|
+
from .sessions import SessionManager
|
|
27
|
+
return SessionManager
|
|
28
|
+
if name == "CDPBrowserAgent":
|
|
29
|
+
from .cdp_agent import CDPBrowserAgent
|
|
30
|
+
return CDPBrowserAgent
|
|
31
|
+
if name == "run_cdp_only":
|
|
32
|
+
from .cdp_agent import run_cdp_only
|
|
33
|
+
return run_cdp_only
|
|
34
|
+
if name == "run_hybrid":
|
|
35
|
+
from .cdp_agent import run_hybrid
|
|
36
|
+
return run_hybrid
|
|
37
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"__version__",
|
|
42
|
+
"BrowserServer",
|
|
43
|
+
"BrowserAgent",
|
|
44
|
+
"SessionManager",
|
|
45
|
+
"CDPBrowserAgent",
|
|
46
|
+
"run_cdp_only",
|
|
47
|
+
"run_hybrid",
|
|
48
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Console entry: ``praisonai-browser``."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main(argv: list[str] | None = None) -> None:
|
|
9
|
+
from praisonai_browser.cli.app import app
|
|
10
|
+
|
|
11
|
+
args = argv if argv is not None else sys.argv[1:]
|
|
12
|
+
if not args:
|
|
13
|
+
args = ["--help"]
|
|
14
|
+
app(args=args, prog_name="praisonai-browser")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
main()
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Map between agents-tier browser protocols and praisonai_browser runtime dicts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Dict, Union
|
|
6
|
+
|
|
7
|
+
from praisonaiagents.tools.protocols.browser import (
|
|
8
|
+
BrowserAction,
|
|
9
|
+
BrowserActionType,
|
|
10
|
+
BrowserObservation,
|
|
11
|
+
BrowserSession,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
# Agent/runtime actions that extend the base protocol enum (now in BrowserActionType).
|
|
15
|
+
_EXTRA_ACTIONS = frozenset()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def observation_from_dict(data: Dict[str, Any]) -> BrowserObservation:
|
|
19
|
+
"""Convert a runtime observation dict to agents-tier ``BrowserObservation``."""
|
|
20
|
+
return BrowserObservation.from_dict(data)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def observation_to_dict(observation: Union[BrowserObservation, Dict[str, Any]]) -> Dict[str, Any]:
|
|
24
|
+
if isinstance(observation, BrowserObservation):
|
|
25
|
+
return observation.to_dict()
|
|
26
|
+
return observation
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _action_type_from_name(name: str) -> Union[BrowserActionType, str]:
|
|
30
|
+
try:
|
|
31
|
+
return BrowserActionType(name)
|
|
32
|
+
except ValueError:
|
|
33
|
+
# Extra actions extend the base protocol enum; pass them through as
|
|
34
|
+
# strings (BrowserActionType is a str subclass, so this stays compatible).
|
|
35
|
+
if name in _EXTRA_ACTIONS:
|
|
36
|
+
return name
|
|
37
|
+
return BrowserActionType.WAIT
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def action_from_agent_dict(data: Dict[str, Any]) -> BrowserAction:
|
|
41
|
+
"""Convert agent/runtime action dict to agents-tier ``BrowserAction``."""
|
|
42
|
+
raw = data.get("action", "wait")
|
|
43
|
+
action_type = _action_type_from_name(str(raw))
|
|
44
|
+
text = data.get("text") or data.get("value")
|
|
45
|
+
return BrowserAction(
|
|
46
|
+
action=action_type,
|
|
47
|
+
selector=data.get("selector"),
|
|
48
|
+
text=text,
|
|
49
|
+
url=data.get("url"),
|
|
50
|
+
direction=data.get("direction"),
|
|
51
|
+
thought=data.get("thought", ""),
|
|
52
|
+
done=bool(data.get("done", False)),
|
|
53
|
+
error=data.get("error"),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def action_to_agent_dict(action: BrowserAction) -> Dict[str, Any]:
|
|
58
|
+
"""Convert agents-tier action to runtime dict (extension/CDP wire format)."""
|
|
59
|
+
payload = action.to_dict()
|
|
60
|
+
if action.text is not None:
|
|
61
|
+
payload["value"] = action.text
|
|
62
|
+
return payload
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def session_from_dict(data: Dict[str, Any]) -> BrowserSession:
|
|
66
|
+
return BrowserSession(
|
|
67
|
+
session_id=data.get("session_id", data.get("id", "")),
|
|
68
|
+
goal=data.get("goal", data.get("task", "")),
|
|
69
|
+
status=data.get("status", "pending"),
|
|
70
|
+
steps=data.get("steps", []),
|
|
71
|
+
current_url=data.get("current_url", data.get("url")),
|
|
72
|
+
started_at=data.get("started_at"),
|
|
73
|
+
ended_at=data.get("ended_at"),
|
|
74
|
+
error=data.get("error"),
|
|
75
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.1"
|