edgecrab-cli 0.2.4__tar.gz → 0.3.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.
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/PKG-INFO +3 -3
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/README.md +2 -2
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli/_binary.py +45 -7
- edgecrab_cli-0.3.1/edgecrab_cli/_version.py +1 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/PKG-INFO +3 -3
- edgecrab_cli-0.2.4/edgecrab_cli/_version.py +0 -1
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli/__init__.py +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli/_entry.py +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/SOURCES.txt +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/dependency_links.txt +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/entry_points.txt +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/requires.txt +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/edgecrab_cli.egg-info/top_level.txt +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/pyproject.toml +0 -0
- {edgecrab_cli-0.2.4 → edgecrab_cli-0.3.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edgecrab-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: EdgeCrab CLI — Super Powerful Personal Assistant inspired by NousHermes and OpenClaw. Single static binary, blazing-fast TUI, multi-provider LLM.
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://www.edgecrab.com
|
|
@@ -27,7 +27,7 @@ Requires-Dist: pytest<9,>=8.0; extra == "dev"
|
|
|
27
27
|
# edgecrab-cli (PyPI)
|
|
28
28
|
|
|
29
29
|
> **EdgeCrab** — Super Powerful Personal Assistant inspired by **NousHermes** and **OpenClaw**.
|
|
30
|
-
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol ·
|
|
30
|
+
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol · Rust-native prebuilt binary.
|
|
31
31
|
|
|
32
32
|
[](https://pypi.org/project/edgecrab-cli/)
|
|
33
33
|
[](https://github.com/raphaelmansuy/edgecrab/blob/main/LICENSE)
|
|
@@ -79,7 +79,7 @@ the reasoning depth of **NousHermes** and the tool-use power of **OpenClaw**.
|
|
|
79
79
|
|
|
80
80
|
| Feature | Detail |
|
|
81
81
|
|---------|--------|
|
|
82
|
-
| **Single binary** |
|
|
82
|
+
| **Single binary** | Self-contained prebuilt binary, < 50 ms startup, measured macOS release artifact is about 49 MB |
|
|
83
83
|
| **Multi-provider LLM** | Copilot · OpenAI · Anthropic · Gemini · xAI · DeepSeek · Ollama |
|
|
84
84
|
| **ReAct tool loop** | File, terminal, web search, memory, process, skill tools |
|
|
85
85
|
| **ratatui TUI** | 60 fps capable terminal UI with streaming output |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# edgecrab-cli (PyPI)
|
|
2
2
|
|
|
3
3
|
> **EdgeCrab** — Super Powerful Personal Assistant inspired by **NousHermes** and **OpenClaw**.
|
|
4
|
-
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol ·
|
|
4
|
+
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol · Rust-native prebuilt binary.
|
|
5
5
|
|
|
6
6
|
[](https://pypi.org/project/edgecrab-cli/)
|
|
7
7
|
[](https://github.com/raphaelmansuy/edgecrab/blob/main/LICENSE)
|
|
@@ -53,7 +53,7 @@ the reasoning depth of **NousHermes** and the tool-use power of **OpenClaw**.
|
|
|
53
53
|
|
|
54
54
|
| Feature | Detail |
|
|
55
55
|
|---------|--------|
|
|
56
|
-
| **Single binary** |
|
|
56
|
+
| **Single binary** | Self-contained prebuilt binary, < 50 ms startup, measured macOS release artifact is about 49 MB |
|
|
57
57
|
| **Multi-provider LLM** | Copilot · OpenAI · Anthropic · Gemini · xAI · DeepSeek · Ollama |
|
|
58
58
|
| **ReAct tool loop** | File, terminal, web search, memory, process, skill tools |
|
|
59
59
|
| **ratatui TUI** | 60 fps capable terminal UI with streaming output |
|
|
@@ -8,9 +8,12 @@ provides a resolve() helper to get the absolute path.
|
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
+
import os
|
|
11
12
|
import platform
|
|
13
|
+
import re
|
|
12
14
|
import shutil
|
|
13
15
|
import stat
|
|
16
|
+
import subprocess
|
|
14
17
|
import sys
|
|
15
18
|
import tarfile
|
|
16
19
|
import tempfile
|
|
@@ -41,6 +44,7 @@ _BIN_NAME = "edgecrab.exe" if sys.platform == "win32" else "edgecrab"
|
|
|
41
44
|
|
|
42
45
|
# Cache binary alongside this package
|
|
43
46
|
_CACHE_DIR = Path(__file__).parent / "_bin"
|
|
47
|
+
_VERSION_RE = re.compile(r"\bedgecrab\s+([0-9]+\.[0-9]+\.[0-9]+)\b", re.IGNORECASE)
|
|
44
48
|
|
|
45
49
|
|
|
46
50
|
def _asset_name() -> str:
|
|
@@ -101,8 +105,14 @@ def ensure_binary() -> Path:
|
|
|
101
105
|
_CACHE_DIR.mkdir(parents=True, exist_ok=True)
|
|
102
106
|
dest = _CACHE_DIR / _BIN_NAME
|
|
103
107
|
|
|
104
|
-
if dest.exists():
|
|
108
|
+
if dest.exists() and _binary_version(dest) == BINARY_VERSION:
|
|
105
109
|
return dest
|
|
110
|
+
if dest.exists():
|
|
111
|
+
print(
|
|
112
|
+
f"[edgecrab-cli] Replacing cached binary {dest} with version {BINARY_VERSION}",
|
|
113
|
+
file=sys.stderr,
|
|
114
|
+
)
|
|
115
|
+
dest.unlink(missing_ok=True)
|
|
106
116
|
|
|
107
117
|
asset = _asset_name()
|
|
108
118
|
url = f"https://github.com/{REPO}/releases/download/v{BINARY_VERSION}/{asset}"
|
|
@@ -129,6 +139,29 @@ def ensure_binary() -> Path:
|
|
|
129
139
|
return dest
|
|
130
140
|
|
|
131
141
|
|
|
142
|
+
def _binary_version(path: Path) -> str | None:
|
|
143
|
+
"""Return the native binary's semantic version, or None if unreadable."""
|
|
144
|
+
try:
|
|
145
|
+
env = os.environ.copy()
|
|
146
|
+
env.setdefault("EDGECRAB_INSTALL_METHOD", "pypi")
|
|
147
|
+
env.setdefault("EDGECRAB_WRAPPER_VERSION", BINARY_VERSION)
|
|
148
|
+
env.setdefault("EDGECRAB_BINARY_VERSION", BINARY_VERSION)
|
|
149
|
+
result = subprocess.run(
|
|
150
|
+
[str(path), "--version"],
|
|
151
|
+
capture_output=True,
|
|
152
|
+
check=False,
|
|
153
|
+
env=env,
|
|
154
|
+
text=True,
|
|
155
|
+
timeout=5,
|
|
156
|
+
)
|
|
157
|
+
except (OSError, subprocess.SubprocessError):
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
output = f"{result.stdout}\n{result.stderr}"
|
|
161
|
+
match = _VERSION_RE.search(output)
|
|
162
|
+
return match.group(1) if match else None
|
|
163
|
+
|
|
164
|
+
|
|
132
165
|
def _is_native_binary(path: str) -> bool:
|
|
133
166
|
"""Return True only if *path* is a native executable, not a script wrapper."""
|
|
134
167
|
try:
|
|
@@ -150,11 +183,16 @@ def resolve() -> Path:
|
|
|
150
183
|
"""
|
|
151
184
|
Return the path to the edgecrab binary.
|
|
152
185
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
186
|
+
By default, the package-managed binary is authoritative so upgrades cannot
|
|
187
|
+
be shadowed by an older system install lingering on PATH.
|
|
188
|
+
|
|
189
|
+
Set `EDGECRAB_USE_SYSTEM_BINARY=1` to opt into a system-wide native
|
|
190
|
+
`edgecrab`, but only when its version matches the wrapper package version.
|
|
156
191
|
"""
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
192
|
+
if os.environ.get("EDGECRAB_USE_SYSTEM_BINARY") in {"1", "true", "TRUE", "yes", "YES"}:
|
|
193
|
+
system_binary = shutil.which("edgecrab")
|
|
194
|
+
if system_binary and _is_native_binary(system_binary):
|
|
195
|
+
system_path = Path(system_binary)
|
|
196
|
+
if _binary_version(system_path) == BINARY_VERSION:
|
|
197
|
+
return system_path
|
|
160
198
|
return ensure_binary()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edgecrab-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: EdgeCrab CLI — Super Powerful Personal Assistant inspired by NousHermes and OpenClaw. Single static binary, blazing-fast TUI, multi-provider LLM.
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://www.edgecrab.com
|
|
@@ -27,7 +27,7 @@ Requires-Dist: pytest<9,>=8.0; extra == "dev"
|
|
|
27
27
|
# edgecrab-cli (PyPI)
|
|
28
28
|
|
|
29
29
|
> **EdgeCrab** — Super Powerful Personal Assistant inspired by **NousHermes** and **OpenClaw**.
|
|
30
|
-
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol ·
|
|
30
|
+
> Blazing-fast TUI · ReAct tool loop · Multi-provider LLM · ACP protocol · Rust-native prebuilt binary.
|
|
31
31
|
|
|
32
32
|
[](https://pypi.org/project/edgecrab-cli/)
|
|
33
33
|
[](https://github.com/raphaelmansuy/edgecrab/blob/main/LICENSE)
|
|
@@ -79,7 +79,7 @@ the reasoning depth of **NousHermes** and the tool-use power of **OpenClaw**.
|
|
|
79
79
|
|
|
80
80
|
| Feature | Detail |
|
|
81
81
|
|---------|--------|
|
|
82
|
-
| **Single binary** |
|
|
82
|
+
| **Single binary** | Self-contained prebuilt binary, < 50 ms startup, measured macOS release artifact is about 49 MB |
|
|
83
83
|
| **Multi-provider LLM** | Copilot · OpenAI · Anthropic · Gemini · xAI · DeepSeek · Ollama |
|
|
84
84
|
| **ReAct tool loop** | File, terminal, web search, memory, process, skill tools |
|
|
85
85
|
| **ratatui TUI** | 60 fps capable terminal UI with streaming output |
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.4"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|