From f4fcd6e3ba0bb31003453a494ca039aee097a8e0 Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 14 Jun 2026 11:20:55 +0800 Subject: [PATCH 1/2] release v0.0.0 Signed-off-by: kerthcet --- Cargo.lock | 4 ++-- Makefile | 39 +++++++++++++++++++++++++++++++++++++++ pyproject.toml | 28 ++++++++++++++++++++++------ sandd/Cargo.toml | 9 ++++++++- server/Cargo.toml | 5 ++++- 5 files changed, 75 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c193e6d..d0178f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1452,7 +1452,7 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "sandbox-server" -version = "0.1.0" +version = "0.0.0" dependencies = [ "anyhow", "axum", @@ -1475,7 +1475,7 @@ dependencies = [ [[package]] name = "sandd" -version = "0.1.0" +version = "0.0.0" dependencies = [ "anyhow", "base64", diff --git a/Makefile b/Makefile index 4244102..bccc1b0 100644 --- a/Makefile +++ b/Makefile @@ -91,3 +91,42 @@ $(MATURIN): @python3 -m venv .venv || true @.venv/bin/pip install --quiet maturin @echo "Maturin installed successfully" + +.PHONY: build-wheels build-wheels-local build-wheels-linux publish-python-lib + +# Build wheel for current platform only +build-wheels-local: $(MATURIN) + @echo "Building wheel for current platform..." + $(MATURIN) build --release -m server/Cargo.toml + +# Build Linux wheels using Docker +build-wheels-linux: + @echo "Building Linux wheels using Docker..." + @command -v docker >/dev/null 2>&1 || { echo "Error: Docker not found"; exit 1; } + @echo "Building for Linux x86_64..." + docker run --rm --platform linux/amd64 -v $$(pwd):/io ghcr.io/pyo3/maturin build --release -m /io/server/Cargo.toml + @echo "Building for Linux aarch64..." + docker run --rm --platform linux/arm64 -v $$(pwd):/io ghcr.io/pyo3/maturin build --release -m /io/server/Cargo.toml + +# Build all wheels (local + Linux if Docker available) +build-wheels: build-wheels-local build-wheels-linux + +# Upload wheels to PyPI +publish-pypi: $(MATURIN) build-wheels + @if [ -z "$(INFTYAI_PYPI_TOKEN)" ]; then \ + echo "Error: INFTYAI_PYPI_TOKEN environment variable not set"; \ + exit 1; \ + fi + @if [ ! -d "target/wheels" ] || [ -z "$$(ls -A target/wheels/*.whl 2>/dev/null)" ]; then \ + echo "Error: No wheels found. Run 'make build-wheels' first"; \ + exit 1; \ + fi + @echo "Uploading wheels to PyPI..." + @ls target/wheels/*.whl + $(MATURIN) upload target/wheels/*.whl --skip-existing --username __token__ --password $(INFTYAI_PYPI_TOKEN) + +.PHONY: publish-crate +# Publish daemon binary to crates.io +publish-crate: + @echo "Publishing sandd daemon to crates.io..." + cargo publish --package sandd diff --git a/pyproject.toml b/pyproject.toml index a633325..5d95c6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,17 +4,21 @@ build-backend = "maturin" [project] name = "sandd" -version = "0.1.0" -description = "SandD - A lightweight sandbox daemon that provides secure, isolated execution environments for agents." +version = "0.0.0" +description = "A lightweight sandbox daemon for secure agent execution in isolated environments." +readme = {file = "README.md", content-type = "text/markdown"} requires-python = ">=3.8" license = {text = "MIT"} -classifiers = [ - "Programming Language :: Rust", - "Programming Language :: Python :: Implementation :: CPython", - "License :: OSI Approved :: MIT License", +authors = [ + {name = "InftyAI", email = "contact@inftyai.com"} ] +keywords = ["agent", "daemon", "sandbox"] dependencies = [] +[project.urls] +Homepage = "https://github.com/InftyAI/SandD" +Repository = "https://github.com/InftyAI/SandD" + [project.optional-dependencies] dev = [ "pytest>=7.0", @@ -27,6 +31,18 @@ dev = [ module-name = "sandd._core" python-source = "python" features = ["pyo3/extension-module"] +include = [ + "server/**/*", + "python/**/*", + "README.md", + "LICENSE", +] +exclude = [ + "Cargo.toml", + "sandd/**/*", + "target/**/*", + ".git/**/*", +] [tool.pytest.ini_options] asyncio_mode = "auto" diff --git a/sandd/Cargo.toml b/sandd/Cargo.toml index 6d3dac7..f134613 100644 --- a/sandd/Cargo.toml +++ b/sandd/Cargo.toml @@ -1,8 +1,15 @@ [package] name = "sandd" -version = "0.1.0" +version = "0.0.0" edition = "2021" license = "MIT" +description = "A lightweight sandbox daemon for secure agent execution in isolated environments." +repository = "https://github.com/InftyAI/SandD" +homepage = "https://github.com/InftyAI/SandD" +documentation = "https://github.com/InftyAI/SandD/tree/main/docs" +readme = "../README.md" +keywords = ["agent", "daemon", "sandbox"] +categories = ["command-line-utilities"] [[bin]] name = "sandd" diff --git a/server/Cargo.toml b/server/Cargo.toml index b93ac10..190cc9c 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,8 +1,11 @@ [package] name = "sandbox-server" -version = "0.1.0" +version = "0.0.0" edition = "2021" license = "MIT" +description = "A lightweight sandbox daemon for secure agent execution in isolated environments." +repository = "https://github.com/InftyAI/SandD" +homepage = "https://github.com/InftyAI/SandD" [lib] name = "sandbox_server" From b3e5aff003c24cf45672048f500b9c0d927ab0e4 Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 14 Jun 2026 12:11:50 +0800 Subject: [PATCH 2/2] update readme.md Signed-off-by: kerthcet --- Makefile | 2 +- README.md | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index bccc1b0..4c6360f 100644 --- a/Makefile +++ b/Makefile @@ -92,7 +92,7 @@ $(MATURIN): @.venv/bin/pip install --quiet maturin @echo "Maturin installed successfully" -.PHONY: build-wheels build-wheels-local build-wheels-linux publish-python-lib +.PHONY: build-wheels build-wheels-local build-wheels-linux publish-pypi # Build wheel for current platform only build-wheels-local: $(MATURIN) diff --git a/README.md b/README.md index 6ccf96c..a3f8d75 100644 --- a/README.md +++ b/README.md @@ -59,14 +59,39 @@ Rust-powered WebSocket server with Python API for remote command execution and i **Key Design**: Daemons connect **TO** the agent (not the other way around), so no ports need to be exposed on the execution plane. -## Quick Start +## Installation + +### Python Package (Controller) + +Install from PyPI: +```bash +pip install sandd +``` + +Or build from source: +```bash +git clone https://github.com/InftyAI/SandD +cd SandD +make install +``` + +### Daemon Binary (Worker) +Install from crates.io: ```bash -# Build -make install # Python package -make daemon-release # Worker binary +cargo install sandd ``` +Or build from source: +```bash +git clone https://github.com/InftyAI/SandD +cd SandD +make daemon-release +# Binary at: ./target/release/sandd +``` + +## Quick Start + **Start controller:** ```python @@ -82,9 +107,7 @@ print(result.stdout) **Start worker:** ```bash -./target/release/sandd \ - --server-url ws://controller:8765/ws \ - --daemon-id worker-1 +sandd --server-url ws://controller-ip:8765/ws --daemon-id worker-1 ``` ## Documentation