Metadata-Version: 2.4
Name: agent-ros-bridge
Version: 0.3.2
Summary: Agent ROS Bridge - Universal ROS1/ROS2 bridge for AI agents to control robots and embodied intelligence systems
Project-URL: Homepage, https://github.com/webthree549-bot/agent-ros-bridge
Project-URL: Documentation, https://agent-ros-bridge.readthedocs.io
Project-URL: Repository, https://github.com/webthree549-bot/agent-ros-bridge
Project-URL: Issues, https://github.com/webthree549-bot/agent-ros-bridge/issues
Project-URL: Changelog, https://github.com/webthree549-bot/agent-ros-bridge/blob/main/CHANGELOG.md
Author-email: Agent ROS Bridge Team <dev@agent-ros-bridge.org>
License: MIT
License-File: LICENSE
Keywords: agent,ai,automation,bridge,embodied-intelligence,gateway,iot,robotics,ros,ros2
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Hardware
Classifier: Typing :: Typed
Requires-Python: >=3.8
Requires-Dist: paho-mqtt>=1.6.0
Requires-Dist: prometheus-client>=0.17.0
Requires-Dist: psutil>=5.9.5
Requires-Dist: pyjwt>=2.8.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: typing-extensions>=4.7.0; python_version < '3.10'
Provides-Extra: all
Requires-Dist: aioresponses>=0.7.4; extra == 'all'
Requires-Dist: bandit[toml]>=1.7.5; extra == 'all'
Requires-Dist: black>=23.7.0; extra == 'all'
Requires-Dist: commitizen>=3.6.0; extra == 'all'
Requires-Dist: factory-boy>=3.3.0; extra == 'all'
Requires-Dist: faker>=19.0.0; extra == 'all'
Requires-Dist: grpcio-tools>=1.56.0; extra == 'all'
Requires-Dist: grpcio>=1.56.0; extra == 'all'
Requires-Dist: isort>=5.12.0; extra == 'all'
Requires-Dist: mkdocs-gen-files>=0.5.0; extra == 'all'
Requires-Dist: mkdocs-literate-nav>=0.6.0; extra == 'all'
Requires-Dist: mkdocs-material>=9.1.0; extra == 'all'
Requires-Dist: mkdocs-section-index>=0.3.0; extra == 'all'
Requires-Dist: mkdocs>=1.5.0; extra == 'all'
Requires-Dist: mkdocstrings[python]>=0.22.0; extra == 'all'
Requires-Dist: mypy>=1.5.0; extra == 'all'
Requires-Dist: paho-mqtt>=1.6.0; extra == 'all'
Requires-Dist: pre-commit>=3.3.0; extra == 'all'
Requires-Dist: pymavlink>=2.4.30; extra == 'all'
Requires-Dist: pymodbus>=3.5.0; extra == 'all'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'all'
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'all'
Requires-Dist: pytest-cov>=4.1.0; extra == 'all'
Requires-Dist: pytest-xdist>=3.3.0; extra == 'all'
Requires-Dist: pytest>=7.4.0; extra == 'all'
Requires-Dist: rclpy>=3.3.0; extra == 'all'
Requires-Dist: responses>=0.23.0; extra == 'all'
Requires-Dist: ruff>=0.0.280; extra == 'all'
Requires-Dist: safety>=2.3.0; extra == 'all'
Requires-Dist: websockets>=11.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: black>=23.7.0; extra == 'dev'
Requires-Dist: commitizen>=3.6.0; extra == 'dev'
Requires-Dist: isort>=5.12.0; extra == 'dev'
Requires-Dist: mypy>=1.5.0; extra == 'dev'
Requires-Dist: pre-commit>=3.3.0; extra == 'dev'
Requires-Dist: ruff>=0.0.280; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-gen-files>=0.5.0; extra == 'docs'
Requires-Dist: mkdocs-literate-nav>=0.6.0; extra == 'docs'
Requires-Dist: mkdocs-material>=9.1.0; extra == 'docs'
Requires-Dist: mkdocs-section-index>=0.3.0; extra == 'docs'
Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.22.0; extra == 'docs'
Provides-Extra: drones
Requires-Dist: pymavlink>=2.4.30; extra == 'drones'
Provides-Extra: industrial
Requires-Dist: pymodbus>=3.5.0; extra == 'industrial'
Provides-Extra: ros2
Requires-Dist: rclpy>=3.3.0; extra == 'ros2'
Provides-Extra: security
Requires-Dist: bandit[toml]>=1.7.5; extra == 'security'
Requires-Dist: safety>=2.3.0; extra == 'security'
Provides-Extra: test
Requires-Dist: aioresponses>=0.7.4; extra == 'test'
Requires-Dist: factory-boy>=3.3.0; extra == 'test'
Requires-Dist: faker>=19.0.0; extra == 'test'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'test'
Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
Requires-Dist: pytest-xdist>=3.3.0; extra == 'test'
Requires-Dist: pytest>=7.4.0; extra == 'test'
Requires-Dist: responses>=0.23.0; extra == 'test'
Provides-Extra: transports
Requires-Dist: grpcio-tools>=1.56.0; extra == 'transports'
Requires-Dist: grpcio>=1.56.0; extra == 'transports'
Requires-Dist: paho-mqtt>=1.6.0; extra == 'transports'
Requires-Dist: websockets>=11.0; extra == 'transports'
Description-Content-Type: text/markdown

# Agent ROS Bridge

**Universal ROS1/ROS2 bridge for AI agents to control robots and embodied intelligence systems.**

[![CI](https://github.com/webthree549-bot/agent-ros-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/webthree549-bot/agent-ros-bridge/actions/workflows/ci.yml)
[![PyPI](https://img.shields.io/pypi/v/agent-ros-bridge.svg)](https://pypi.org/project/agent-ros-bridge/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)

---

## 🔐 Security-First Design

**JWT authentication is always required and cannot be disabled.**

```bash
# Generate a secure secret (REQUIRED - no exceptions)
export JWT_SECRET=$(openssl rand -base64 32)
```

The bridge will **fail to start** without JWT_SECRET. This is by design — security is not optional.

See [SECURITY.md](SECURITY.md) for complete security guidelines.

---

## Quick Start

### Production (Native ROS)

**Requirements:** Ubuntu 20.04/22.04 with ROS1 Noetic or ROS2 Humble/Jazzy

```bash
# Install
pip install agent-ros-bridge

# Set required secret
export JWT_SECRET=$(openssl rand -base64 32)

# Start bridge
agent-ros-bridge --config config/bridge.yaml
```

### Docker Examples (Recommended for Testing)

All examples run in isolated Docker containers with simulated robots (no ROS installation needed).

```bash
# Clone repository
git clone https://github.com/webthree549-bot/agent-ros-bridge.git
cd agent-ros-bridge

# Generate JWT secret
export JWT_SECRET=$(openssl rand -base64 32)

# Run example in Docker
cd examples/quickstart
docker-compose up

# Test connection
curl http://localhost:8765/health
```

### Available Docker Examples

| Example | Description | Run |
|---------|-------------|-----|
| `examples/quickstart/` | Basic bridge | `docker-compose up` |
| `examples/fleet/` | Multi-robot fleet | `docker-compose up` |
| `examples/arm/` | Robot arm control | `docker-compose up` |

All examples include:
- Isolated Docker container
- Pre-configured JWT auth
- Simulated robot environment
- Localhost-only binding (127.0.0.1)

---

## Installation

### Via PyPI (Production)

```bash
pip install agent-ros-bridge
```

### Via ClawHub

```bash
openclaw skills add agent-ros-bridge
```

### From Source

```bash
git clone https://github.com/webthree549-bot/agent-ros-bridge.git
cd agent-ros-bridge
pip install -e ".[dev]"
```

---

## Usage

### Python API

```python
from agent_ros_bridge import Bridge
from agent_ros_bridge.gateway_v2.transports.websocket import WebSocketTransport

# Bridge requires JWT_SECRET env var
bridge = Bridge()
bridge.transport_manager.register(WebSocketTransport({"port": 8765}))
await bridge.start()
```

### CLI

```bash
# Set required secret
export JWT_SECRET=$(openssl rand -base64 32)

# Start bridge
agent-ros-bridge --config config/bridge.yaml

# Generate token for client
python scripts/generate_token.py --secret $JWT_SECRET --role operator
```

---

## Features

- **Security-First**: JWT auth always required, no bypass
- **Multi-Protocol**: WebSocket, gRPC, MQTT
- **Multi-ROS**: ROS1 Noetic + ROS2 Humble/Jazzy
- **Fleet Orchestration**: Multi-robot coordination
- **Arm Control**: UR, xArm, Franka manipulation
- **Docker Examples**: Isolated testing environments
- **Production Ready**: Native Ubuntu deployment

---

## Documentation

| Document | Description |
|----------|-------------|
| [User Manual](docs/USER_MANUAL.md) | Complete guide (23,000+ words) |
| [API Reference](docs/API_REFERENCE.md) | Full API documentation |
| [Native ROS](docs/NATIVE_ROS.md) | Ubuntu/ROS installation |
| [Multi-ROS](docs/MULTI_ROS.md) | Fleet management |
| [Docker vs Native](docs/DOCKER_VS_NATIVE.md) | Deployment comparison |
| [SECURITY.md](SECURITY.md) | Security policy |

---

## Development

```bash
# Install dev dependencies
pip install -e ".[dev]"

# Run tests
make test

# Build package
make build
```

---

## License

[MIT License](LICENSE)

---

**Security is not optional. JWT auth always required.**
