scrybe-cli 0.1.1__tar.gz → 0.2.0__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.
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/Cargo.lock +10 -10
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/Cargo.toml +8 -8
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/PKG-INFO +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/pyproject.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/pyproject.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/README.md +31 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/pyproject.toml +4 -1
- scrybe_cli-0.2.0/scrybe-mermaid/tests/test_python_quickstart.py +53 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-rpc/Cargo.toml +1 -1
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-rpc/src/lib.rs +32 -25
- scrybe_cli-0.1.1/scrybe-mcp-server/scrybe_mcp_server/__init__.py +0 -25
- scrybe_cli-0.1.1/scrybe-mcp-server/scrybe_mcp_server/__main__.py +0 -2
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/README.md +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/python/scrybe_cli/__init__.py +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/python/scrybe_cli/py.typed +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/README.md +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/src/lib.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/src/lint.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/src/main.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/src/rpc_client.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/src/wrap.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-cli/tests/rpc_socket.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/README.md +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/ast.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/change.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/content.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/document.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/error.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/lib.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/plugin.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-core/src/workspace.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/README.md +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/python/scrybe_mcp_server/__init__.py +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/python/scrybe_mcp_server/py.typed +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/src/lib.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/src/main.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/src/server.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/src/tools.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/python/scrybe_mermaid/__init__.py +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/python/scrybe_mermaid/py.typed +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/src/codec.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/src/error.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mermaid/src/lib.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/README.md +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/html.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/lib.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/math.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/mermaid.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/theme.rs +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/themes/dark.css +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/themes/default.css +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-render/src/themes/solarized.css +0 -0
- {scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-rpc/README.md +0 -0
|
@@ -3525,7 +3525,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|
|
3525
3525
|
|
|
3526
3526
|
[[package]]
|
|
3527
3527
|
name = "scrybe-app"
|
|
3528
|
-
version = "0.
|
|
3528
|
+
version = "0.2.0"
|
|
3529
3529
|
dependencies = [
|
|
3530
3530
|
"anyhow",
|
|
3531
3531
|
"dirs 5.0.1",
|
|
@@ -3551,7 +3551,7 @@ dependencies = [
|
|
|
3551
3551
|
|
|
3552
3552
|
[[package]]
|
|
3553
3553
|
name = "scrybe-cli"
|
|
3554
|
-
version = "0.
|
|
3554
|
+
version = "0.2.0"
|
|
3555
3555
|
dependencies = [
|
|
3556
3556
|
"anyhow",
|
|
3557
3557
|
"clap",
|
|
@@ -3570,7 +3570,7 @@ dependencies = [
|
|
|
3570
3570
|
|
|
3571
3571
|
[[package]]
|
|
3572
3572
|
name = "scrybe-core"
|
|
3573
|
-
version = "0.
|
|
3573
|
+
version = "0.2.0"
|
|
3574
3574
|
dependencies = [
|
|
3575
3575
|
"anyhow",
|
|
3576
3576
|
"blake3",
|
|
@@ -3587,7 +3587,7 @@ dependencies = [
|
|
|
3587
3587
|
|
|
3588
3588
|
[[package]]
|
|
3589
3589
|
name = "scrybe-mcp-client"
|
|
3590
|
-
version = "0.
|
|
3590
|
+
version = "0.2.0"
|
|
3591
3591
|
dependencies = [
|
|
3592
3592
|
"anyhow",
|
|
3593
3593
|
"dirs 5.0.1",
|
|
@@ -3602,7 +3602,7 @@ dependencies = [
|
|
|
3602
3602
|
|
|
3603
3603
|
[[package]]
|
|
3604
3604
|
name = "scrybe-mcp-server"
|
|
3605
|
-
version = "0.
|
|
3605
|
+
version = "0.2.0"
|
|
3606
3606
|
dependencies = [
|
|
3607
3607
|
"anyhow",
|
|
3608
3608
|
"clap",
|
|
@@ -3619,7 +3619,7 @@ dependencies = [
|
|
|
3619
3619
|
|
|
3620
3620
|
[[package]]
|
|
3621
3621
|
name = "scrybe-mermaid"
|
|
3622
|
-
version = "0.
|
|
3622
|
+
version = "0.2.0"
|
|
3623
3623
|
dependencies = [
|
|
3624
3624
|
"anyhow",
|
|
3625
3625
|
"base64 0.22.1",
|
|
@@ -3635,7 +3635,7 @@ dependencies = [
|
|
|
3635
3635
|
|
|
3636
3636
|
[[package]]
|
|
3637
3637
|
name = "scrybe-py"
|
|
3638
|
-
version = "0.
|
|
3638
|
+
version = "0.2.0"
|
|
3639
3639
|
dependencies = [
|
|
3640
3640
|
"anyhow",
|
|
3641
3641
|
"pyo3",
|
|
@@ -3649,7 +3649,7 @@ dependencies = [
|
|
|
3649
3649
|
|
|
3650
3650
|
[[package]]
|
|
3651
3651
|
name = "scrybe-render"
|
|
3652
|
-
version = "0.
|
|
3652
|
+
version = "0.2.0"
|
|
3653
3653
|
dependencies = [
|
|
3654
3654
|
"anyhow",
|
|
3655
3655
|
"pulldown-cmark",
|
|
@@ -3662,7 +3662,7 @@ dependencies = [
|
|
|
3662
3662
|
|
|
3663
3663
|
[[package]]
|
|
3664
3664
|
name = "scrybe-rpc"
|
|
3665
|
-
version = "0.
|
|
3665
|
+
version = "0.2.0"
|
|
3666
3666
|
dependencies = [
|
|
3667
3667
|
"serde",
|
|
3668
3668
|
"serde_json",
|
|
@@ -3671,7 +3671,7 @@ dependencies = [
|
|
|
3671
3671
|
|
|
3672
3672
|
[[package]]
|
|
3673
3673
|
name = "scrybe-vcs"
|
|
3674
|
-
version = "0.
|
|
3674
|
+
version = "0.2.0"
|
|
3675
3675
|
dependencies = [
|
|
3676
3676
|
"anyhow",
|
|
3677
3677
|
"chrono",
|
|
@@ -52,14 +52,14 @@ tauri-build = { version = "2", features = [] }
|
|
|
52
52
|
# Internal crates — version pinned (=) so cargo publish accepts the
|
|
53
53
|
# tarballs (path-deps without versions are rejected at publish time).
|
|
54
54
|
# Workspace lock-step: every release bumps all members together.
|
|
55
|
-
scrybe-core = { path = "scrybe-core", version = "=0.
|
|
56
|
-
scrybe-render = { path = "scrybe-render", version = "=0.
|
|
57
|
-
scrybe-mcp-client = { path = "scrybe-mcp-client", version = "=0.
|
|
58
|
-
scrybe-mcp-server = { path = "scrybe-mcp-server", version = "=0.
|
|
59
|
-
scrybe-mermaid = { path = "scrybe-mermaid", version = "=0.
|
|
60
|
-
scrybe-vcs = { path = "scrybe-vcs", version = "=0.
|
|
61
|
-
scrybe-py = { path = "scrybe-py", version = "=0.
|
|
62
|
-
scrybe-rpc = { path = "scrybe-rpc", version = "=0.
|
|
55
|
+
scrybe-core = { path = "scrybe-core", version = "=0.2.0" }
|
|
56
|
+
scrybe-render = { path = "scrybe-render", version = "=0.2.0" }
|
|
57
|
+
scrybe-mcp-client = { path = "scrybe-mcp-client", version = "=0.2.0" }
|
|
58
|
+
scrybe-mcp-server = { path = "scrybe-mcp-server", version = "=0.2.0" }
|
|
59
|
+
scrybe-mermaid = { path = "scrybe-mermaid", version = "=0.2.0" }
|
|
60
|
+
scrybe-vcs = { path = "scrybe-vcs", version = "=0.2.0" }
|
|
61
|
+
scrybe-py = { path = "scrybe-py", version = "=0.2.0" }
|
|
62
|
+
scrybe-rpc = { path = "scrybe-rpc", version = "=0.2.0" }
|
|
63
63
|
|
|
64
64
|
[workspace.lints.clippy]
|
|
65
65
|
explicit_iter_loop = "warn"
|
|
@@ -16,6 +16,37 @@ Mermaid diagram source alongside the rendered image. The PNG is fully valid
|
|
|
16
16
|
and renders normally in any image viewer. The source text travels with the
|
|
17
17
|
image and can be round-tripped without loss.
|
|
18
18
|
|
|
19
|
+
## Python quick start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install scrybe-mermaid
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
from scrybe_mermaid import embed, extract
|
|
28
|
+
|
|
29
|
+
source = """
|
|
30
|
+
graph TD
|
|
31
|
+
A[Christmas] -->|Get money| B(Go shopping)
|
|
32
|
+
B --> C{Let me think}
|
|
33
|
+
C -->|One| D[Laptop]
|
|
34
|
+
C -->|Two| E[iPhone]
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
# diagram.png: any PNG — render one with mmdc, Kroki, or the Mermaid live editor
|
|
38
|
+
png_in = Path("diagram.png").read_bytes()
|
|
39
|
+
png_out = embed(png_in, source)
|
|
40
|
+
Path("diagram-with-source.png").write_bytes(png_out)
|
|
41
|
+
|
|
42
|
+
payload = extract(png_out)
|
|
43
|
+
if payload.source != source: # optional
|
|
44
|
+
raise ValueError("Round-trip mismatch")
|
|
45
|
+
print(f"Round-tripped {len(payload.source)} chars; sha256={payload.sha256[:12]}…")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The resulting PNG renders normally in any image viewer *and* carries its own Mermaid source for round-tripping. See the [API reference](#key-public-types-and-entry-points) below.
|
|
49
|
+
|
|
19
50
|
## Codec format
|
|
20
51
|
|
|
21
52
|
- **Chunk key:** `scrybe-mermaid`
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "scrybe-mermaid"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "Scrybe Mermaid — standalone PNG iTXt codec (Rust-backed)"
|
|
9
9
|
license = {text = "Apache-2.0"}
|
|
10
10
|
readme = "README.md"
|
|
@@ -14,6 +14,9 @@ dependencies = []
|
|
|
14
14
|
[project.urls]
|
|
15
15
|
Homepage = "https://github.com/hartsock/scrybe"
|
|
16
16
|
|
|
17
|
+
[tool.pytest.ini_options]
|
|
18
|
+
testpaths = ["tests"]
|
|
19
|
+
|
|
17
20
|
[tool.maturin]
|
|
18
21
|
module-name = "scrybe_mermaid._rust"
|
|
19
22
|
python-source = "python"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""Integration test: README Python quick-start example round-trips correctly."""
|
|
3
|
+
import struct
|
|
4
|
+
import zlib
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
scrybe_mermaid = pytest.importorskip("scrybe_mermaid")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _minimal_png() -> bytes:
|
|
13
|
+
"""Build a 1×1 white RGB PNG from stdlib primitives — no external deps."""
|
|
14
|
+
sig = b"\x89PNG\r\n\x1a\n"
|
|
15
|
+
|
|
16
|
+
def chunk(name: bytes, data: bytes) -> bytes:
|
|
17
|
+
crc = zlib.crc32(name + data) & 0xFFFFFFFF
|
|
18
|
+
return struct.pack(">I", len(data)) + name + data + struct.pack(">I", crc)
|
|
19
|
+
|
|
20
|
+
ihdr = struct.pack(">IIBBBBB", 1, 1, 8, 2, 0, 0, 0) # 1×1, 8-bit RGB
|
|
21
|
+
idat = zlib.compress(b"\x00\xff\xff\xff") # filter=0, R G B = white
|
|
22
|
+
return sig + chunk(b"IHDR", ihdr) + chunk(b"IDAT", idat) + chunk(b"IEND", b"")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_readme_quickstart_roundtrip(tmp_path: Path) -> None:
|
|
26
|
+
"""README quick-start example embeds and extracts Mermaid source correctly."""
|
|
27
|
+
if not scrybe_mermaid._RUST_AVAILABLE:
|
|
28
|
+
pytest.skip("Rust extension not built — run: maturin develop --release")
|
|
29
|
+
|
|
30
|
+
(tmp_path / "diagram.png").write_bytes(_minimal_png())
|
|
31
|
+
|
|
32
|
+
# ── verbatim from README ──────────────────────────────────────────────────
|
|
33
|
+
source = """
|
|
34
|
+
graph TD
|
|
35
|
+
A[Christmas] -->|Get money| B(Go shopping)
|
|
36
|
+
B --> C{Let me think}
|
|
37
|
+
C -->|One| D[Laptop]
|
|
38
|
+
C -->|Two| E[iPhone]
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
png_in = (tmp_path / "diagram.png").read_bytes()
|
|
42
|
+
png_out = scrybe_mermaid.embed(png_in, source)
|
|
43
|
+
(tmp_path / "diagram-with-source.png").write_bytes(png_out)
|
|
44
|
+
|
|
45
|
+
payload = scrybe_mermaid.extract(png_out)
|
|
46
|
+
if payload.source != source:
|
|
47
|
+
raise ValueError("Round-trip mismatch")
|
|
48
|
+
print(f"Round-tripped {len(payload.source)} chars; sha256={payload.sha256[:12]}…")
|
|
49
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
assert (tmp_path / "diagram-with-source.png").exists()
|
|
52
|
+
assert payload.source == source
|
|
53
|
+
assert len(payload.sha256) == 64 # SHA-256 hex is always 64 chars
|
|
@@ -311,11 +311,21 @@ impl Response {
|
|
|
311
311
|
/// Resolve the socket path: `$SCRYBE_SOCK` if set, otherwise `~/.scrybe/sock`.
|
|
312
312
|
/// Falls back to `/tmp/.scrybe-sock` only if `$HOME` is also unset.
|
|
313
313
|
pub fn default_socket_path() -> PathBuf {
|
|
314
|
-
|
|
314
|
+
resolve_socket_path(
|
|
315
|
+
std::env::var("SCRYBE_SOCK").ok().as_deref(),
|
|
316
|
+
std::env::var("HOME").ok().as_deref(),
|
|
317
|
+
)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/// Pure resolution logic for [`default_socket_path`]. Split out so it can be
|
|
321
|
+
/// unit-tested without mutating process-global env vars (which races across
|
|
322
|
+
/// parallel tests).
|
|
323
|
+
fn resolve_socket_path(sock_override: Option<&str>, home: Option<&str>) -> PathBuf {
|
|
324
|
+
if let Some(s) = sock_override {
|
|
315
325
|
return PathBuf::from(s);
|
|
316
326
|
}
|
|
317
|
-
if let
|
|
318
|
-
return PathBuf::from(
|
|
327
|
+
if let Some(h) = home {
|
|
328
|
+
return PathBuf::from(h).join(".scrybe").join("sock");
|
|
319
329
|
}
|
|
320
330
|
PathBuf::from("/tmp/.scrybe-sock")
|
|
321
331
|
}
|
|
@@ -545,32 +555,29 @@ mod tests {
|
|
|
545
555
|
}
|
|
546
556
|
|
|
547
557
|
#[test]
|
|
548
|
-
fn
|
|
549
|
-
|
|
550
|
-
let prev_sock = std::env::var("SCRYBE_SOCK").ok();
|
|
551
|
-
std::env::set_var("SCRYBE_SOCK", "/tmp/custom-scrybe-sock");
|
|
552
|
-
let p = default_socket_path();
|
|
558
|
+
fn resolve_socket_path_uses_override() {
|
|
559
|
+
let p = resolve_socket_path(Some("/tmp/custom-scrybe-sock"), Some("/home/test"));
|
|
553
560
|
assert_eq!(p, PathBuf::from("/tmp/custom-scrybe-sock"));
|
|
554
|
-
match prev_sock {
|
|
555
|
-
Some(v) => std::env::set_var("SCRYBE_SOCK", v),
|
|
556
|
-
None => std::env::remove_var("SCRYBE_SOCK"),
|
|
557
|
-
}
|
|
558
561
|
}
|
|
559
562
|
|
|
560
563
|
#[test]
|
|
561
|
-
fn
|
|
562
|
-
let
|
|
563
|
-
std::env::remove_var("SCRYBE_SOCK");
|
|
564
|
-
let prev_home = std::env::var("HOME").ok();
|
|
565
|
-
std::env::set_var("HOME", "/home/test");
|
|
566
|
-
let p = default_socket_path();
|
|
564
|
+
fn resolve_socket_path_uses_home_when_no_override() {
|
|
565
|
+
let p = resolve_socket_path(None, Some("/home/test"));
|
|
567
566
|
assert_eq!(p, PathBuf::from("/home/test/.scrybe/sock"));
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
#[test]
|
|
570
|
+
fn resolve_socket_path_falls_back_when_home_unset() {
|
|
571
|
+
let p = resolve_socket_path(None, None);
|
|
572
|
+
assert_eq!(p, PathBuf::from("/tmp/.scrybe-sock"));
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
#[test]
|
|
576
|
+
fn default_socket_path_returns_some_path() {
|
|
577
|
+
// Smoke test: the env-reading wrapper produces *some* path. The
|
|
578
|
+
// resolution logic itself is covered by the pure-function tests above,
|
|
579
|
+
// which don't race on process-global env vars.
|
|
580
|
+
let p = default_socket_path();
|
|
581
|
+
assert!(!p.as_os_str().is_empty());
|
|
575
582
|
}
|
|
576
583
|
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
"""scrybe-mcp-server — standalone Scrybe MCP server.
|
|
3
|
-
|
|
4
|
-
Install: pip install scrybe-mcp-server
|
|
5
|
-
Use: python -m scrybe_mcp_server stdio
|
|
6
|
-
Or: claude mcp add scrybe -- python -m scrybe_mcp_server stdio
|
|
7
|
-
"""
|
|
8
|
-
__version__ = "0.5.20260506"
|
|
9
|
-
|
|
10
|
-
import subprocess
|
|
11
|
-
import sys
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def _run() -> None:
|
|
15
|
-
"""Entry point: delegates to the compiled scrybe-mcp-server binary."""
|
|
16
|
-
import shutil
|
|
17
|
-
binary = shutil.which("scrybe-mcp-server")
|
|
18
|
-
if binary is None:
|
|
19
|
-
print("scrybe-mcp-server binary not found. Reinstall: pip install scrybe-mcp-server", file=sys.stderr)
|
|
20
|
-
sys.exit(1)
|
|
21
|
-
sys.exit(subprocess.call([binary] + sys.argv[1:]))
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if __name__ == "__main__":
|
|
25
|
-
_run()
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
{scrybe_cli-0.1.1 → scrybe_cli-0.2.0}/scrybe-mcp-server/python/scrybe_mcp_server/__init__.py
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|