- Add src/tools/browser.rs with BrowserTool implementation - Wraps agent-browser CLI for AI-optimized web browsing - Supports: open, snapshot, click, fill, type, screenshot, wait, etc. - Uses refs (@e1, @e2) from accessibility snapshots for precise element selection - JSON output mode for LLM integration - Security: allowlist-only domains, blocks private/local hosts - Add session_name to BrowserConfig for persistent sessions - Register BrowserTool in tools/mod.rs alongside BrowserOpenTool All tests pass.
41 lines
1.4 KiB
Docker
41 lines
1.4 KiB
Docker
# ── Stage 1: Build ────────────────────────────────────────────
|
|
FROM rust:1.83-slim AS builder
|
|
|
|
WORKDIR /app
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY src/ src/
|
|
|
|
RUN cargo build --release --locked && \
|
|
strip target/release/zeroclaw
|
|
|
|
# ── Stage 2: Runtime (distroless nonroot — no shell, no OS, tiny, UID 65534) ──
|
|
FROM gcr.io/distroless/cc-debian12:nonroot
|
|
|
|
COPY --from=builder /app/target/release/zeroclaw /usr/local/bin/zeroclaw
|
|
|
|
# Default workspace and data directory (owned by nonroot user)
|
|
VOLUME ["/data"]
|
|
ENV ZEROCLAW_WORKSPACE=/data/workspace
|
|
|
|
# ── Environment variable configuration (Docker-native setup) ──
|
|
# These can be overridden at runtime via docker run -e or docker-compose
|
|
#
|
|
# Required:
|
|
# API_KEY or ZEROCLAW_API_KEY - Your LLM provider API key
|
|
#
|
|
# Optional:
|
|
# PROVIDER or ZEROCLAW_PROVIDER - LLM provider (default: openrouter)
|
|
# Options: openrouter, openai, anthropic, ollama
|
|
# ZEROCLAW_MODEL - Model to use (default: anthropic/claude-sonnet-4-20250514)
|
|
# PORT or ZEROCLAW_GATEWAY_PORT - Gateway port (default: 3000)
|
|
#
|
|
# Example:
|
|
# docker run -e API_KEY=sk-... -e PROVIDER=openrouter zeroclaw/zeroclaw
|
|
|
|
# Explicitly set non-root user (distroless:nonroot defaults to 65534, but be explicit)
|
|
USER 65534:65534
|
|
|
|
EXPOSE 3000
|
|
|
|
ENTRYPOINT ["zeroclaw"]
|
|
CMD ["gateway"]
|