zebflow 0.6.1__py3-none-any.whl
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.
- zebflow/__init__.py +3 -0
- zebflow/__main__.py +89 -0
- zebflow-0.6.1.dist-info/METADATA +56 -0
- zebflow-0.6.1.dist-info/RECORD +6 -0
- zebflow-0.6.1.dist-info/WHEEL +4 -0
- zebflow-0.6.1.dist-info/entry_points.txt +2 -0
zebflow/__init__.py
ADDED
zebflow/__main__.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""CLI entry point for zebflow. Downloads the binary on first run, then executes it."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
import subprocess
|
|
6
|
+
import sys
|
|
7
|
+
import tarfile
|
|
8
|
+
import tempfile
|
|
9
|
+
import urllib.request
|
|
10
|
+
import zipfile
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
REPO = "zebflow/zebflow"
|
|
14
|
+
VERSION = os.environ.get("ZEBFLOW_VERSION", f"v{__import__('zebflow').__version__}")
|
|
15
|
+
BIN_DIR = Path(__file__).parent / "bin"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_platform():
|
|
19
|
+
system = platform.system().lower()
|
|
20
|
+
machine = platform.machine().lower()
|
|
21
|
+
|
|
22
|
+
if machine in ("x86_64", "amd64"):
|
|
23
|
+
arch = "amd64"
|
|
24
|
+
elif machine in ("aarch64", "arm64"):
|
|
25
|
+
arch = "arm64"
|
|
26
|
+
else:
|
|
27
|
+
print(f"[zebflow] Unsupported architecture: {machine}", file=sys.stderr)
|
|
28
|
+
sys.exit(1)
|
|
29
|
+
|
|
30
|
+
platform_map = {
|
|
31
|
+
("linux", "amd64"): ("zebflow-linux-amd64.tar.gz", "zebflow"),
|
|
32
|
+
("linux", "arm64"): ("zebflow-linux-arm64.tar.gz", "zebflow"),
|
|
33
|
+
("darwin", "arm64"): ("zebflow-darwin-arm64.tar.gz", "zebflow"),
|
|
34
|
+
("windows", "amd64"): ("zebflow-windows-amd64.zip", "zebflow.exe"),
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
key = (system, arch)
|
|
38
|
+
entry = platform_map.get(key)
|
|
39
|
+
if not entry:
|
|
40
|
+
print(f"[zebflow] Unsupported platform: {system}-{arch}", file=sys.stderr)
|
|
41
|
+
print(f"[zebflow] Supported: {', '.join(f'{s}-{a}' for s, a in platform_map)}", file=sys.stderr)
|
|
42
|
+
sys.exit(1)
|
|
43
|
+
|
|
44
|
+
return entry
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def download_binary():
|
|
48
|
+
asset, binary_name = get_platform()
|
|
49
|
+
binary_path = BIN_DIR / binary_name
|
|
50
|
+
|
|
51
|
+
if binary_path.exists():
|
|
52
|
+
return binary_path
|
|
53
|
+
|
|
54
|
+
url = f"https://github.com/{REPO}/releases/download/{VERSION}/{asset}"
|
|
55
|
+
print(f"[zebflow] Downloading {asset} ({VERSION})...")
|
|
56
|
+
|
|
57
|
+
BIN_DIR.mkdir(parents=True, exist_ok=True)
|
|
58
|
+
|
|
59
|
+
with tempfile.NamedTemporaryFile(delete=False, suffix=asset) as tmp:
|
|
60
|
+
tmp_path = Path(tmp.name)
|
|
61
|
+
urllib.request.urlretrieve(url, tmp_path)
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
if asset.endswith(".tar.gz"):
|
|
65
|
+
with tarfile.open(tmp_path, "r:gz") as tar:
|
|
66
|
+
tar.extractall(path=BIN_DIR)
|
|
67
|
+
elif asset.endswith(".zip"):
|
|
68
|
+
with zipfile.ZipFile(tmp_path, "r") as z:
|
|
69
|
+
z.extractall(path=BIN_DIR)
|
|
70
|
+
finally:
|
|
71
|
+
tmp_path.unlink(missing_ok=True)
|
|
72
|
+
|
|
73
|
+
if not binary_path.exists():
|
|
74
|
+
print(f"[zebflow] Binary not found after extraction: {binary_path}", file=sys.stderr)
|
|
75
|
+
sys.exit(1)
|
|
76
|
+
|
|
77
|
+
binary_path.chmod(0o755)
|
|
78
|
+
print(f"[zebflow] Installed to {binary_path}")
|
|
79
|
+
return binary_path
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def main():
|
|
83
|
+
binary_path = download_binary()
|
|
84
|
+
result = subprocess.run([str(binary_path)] + sys.argv[1:])
|
|
85
|
+
sys.exit(result.returncode)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
main()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: zebflow
|
|
3
|
+
Version: 0.6.1
|
|
4
|
+
Summary: Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
|
|
5
|
+
Project-URL: Homepage, https://github.com/zebflow/zebflow
|
|
6
|
+
Project-URL: Repository, https://github.com/zebflow/zebflow
|
|
7
|
+
Project-URL: Issues, https://github.com/zebflow/zebflow/issues
|
|
8
|
+
Author-email: Zebflow <hello@zebflow.com>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
Keywords: automation,mcp,pipeline,reactive,server,wasm,web,zebflow
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Rust
|
|
19
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
20
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
21
|
+
Requires-Python: >=3.8
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# zebflow
|
|
25
|
+
|
|
26
|
+
Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install zebflow
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
zebflow # start server on port 10610
|
|
38
|
+
zebflow --help # show options
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## What is Zebflow?
|
|
42
|
+
|
|
43
|
+
Zebflow is a full-stack reactive web platform that combines:
|
|
44
|
+
|
|
45
|
+
- **Pipeline engine** — graph-based workflow orchestration with 40+ built-in nodes
|
|
46
|
+
- **Reactive Web Engine** — TSX templates with server-side rendering and client hydration
|
|
47
|
+
- **Real-time** — WebSocket rooms with state sync
|
|
48
|
+
- **MCP** — Model Context Protocol for AI agent integration
|
|
49
|
+
- **Single binary** — everything embedded, zero runtime dependencies
|
|
50
|
+
|
|
51
|
+
## Links
|
|
52
|
+
|
|
53
|
+
- [Official Site](https://zebflow.com)
|
|
54
|
+
- [GitHub](https://github.com/zebflow/zebflow)
|
|
55
|
+
- [Documentation](https://github.com/zebflow/zebflow/tree/main/docs)
|
|
56
|
+
- [Docker Hub](https://hub.docker.com/r/zebflow/zebflow)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
zebflow/__init__.py,sha256=NlzcUq0DlTVmP_uENFK97FIIZq4FBWItPHPCwMRYPW0,75
|
|
2
|
+
zebflow/__main__.py,sha256=UCn08zRTyNluFjm8djq786Eb-Opth8HgboaraaX9vvE,2629
|
|
3
|
+
zebflow-0.6.1.dist-info/METADATA,sha256=S-cM09JstYKKplsAuipgLDvjyZ6T6QxwrPfQKTPeSf8,1953
|
|
4
|
+
zebflow-0.6.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
5
|
+
zebflow-0.6.1.dist-info/entry_points.txt,sha256=L489NpkEpDNj-7xYYeqE-itL1alzIK1yLz_pCcaGfiA,41
|
|
6
|
+
zebflow-0.6.1.dist-info/RECORD,,
|