mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-26 07:44:05 +00:00
SSE Proxy Decoupling (ADR-130): - Fix ruvbrain-sse proxy: proper MCP handshake, session creation, drain polling - Fix internal queue endpoints: session_create keeps receiver, drain returns buffered messages - Add response_queues to AppState for SSE proxy communication - Skip sparsifier for >5M edge graphs (was crashing on 16M edges) - Add SSE_DISABLED/MAX_SSE env vars for configurable connection limits - Route SSE to dedicated mcp.pi.ruv.io subdomain (Cloudflare CNAME) - Serve SSE at root / path on proxy (no /sse needed) - Update all references from pi.ruv.io/sse to mcp.pi.ruv.io - Fix Dockerfile consciousness crate build (feature/version mismatches) Claude Code CLI Source Research (ADR-133): - 19 research documents analyzing Claude Code internals (3000+ lines) - Decompiler script + RVF corpus builder for all major versions - Binary RVF containers for v0.2, v1.0, v2.0, v2.1 (300-2068 vectors each) - Call graphs, class hierarchies, state machines from minified source Integration Strategy (ADR-134): - 6-tier integration plan: WASM MCP, agents, hooks, cache, SDK, plugin - Integration guide with architecture diagrams and performance targets Co-Authored-By: claude-flow <ruv@ruv.net>
108 lines
6 KiB
Docker
108 lines
6 KiB
Docker
# Multi-stage build for mcp-brain-server
|
|
# Stage 1: Build the Rust binary
|
|
FROM rustlang/rust:nightly-bookworm AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Pin to a known-good nightly (2026-03-20) to avoid nalgebra ICE on newer nightlies
|
|
RUN rustup default nightly-2026-03-20
|
|
|
|
# Install build dependencies (native-tls requires OpenSSL)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
pkg-config \
|
|
libssl-dev \
|
|
openssl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy minimal workspace file (only includes required crates)
|
|
COPY crates/mcp-brain-server/Cargo.workspace.toml ./Cargo.toml
|
|
COPY Cargo.lock ./
|
|
|
|
# Copy the crates needed for mcp-brain-server
|
|
COPY crates/mcp-brain-server ./crates/mcp-brain-server
|
|
COPY crates/mcp-brain ./crates/mcp-brain
|
|
COPY crates/sona ./crates/sona
|
|
COPY crates/ruvector-mincut ./crates/ruvector-mincut
|
|
COPY crates/ruvector-nervous-system ./crates/ruvector-nervous-system
|
|
COPY crates/ruvector-domain-expansion ./crates/ruvector-domain-expansion
|
|
COPY crates/ruvector-delta-core ./crates/ruvector-delta-core
|
|
COPY crates/ruvector-solver ./crates/ruvector-solver
|
|
COPY crates/ruvector-sparsifier ./crates/ruvector-sparsifier
|
|
COPY crates/ruvector-consciousness ./crates/ruvector-consciousness
|
|
COPY crates/ruvllm ./crates/ruvllm
|
|
COPY crates/ruvector-core ./crates/ruvector-core
|
|
COPY crates/rvf ./crates/rvf
|
|
|
|
# Copy patches for hnsw_rs
|
|
COPY patches ./patches
|
|
|
|
# Remove optional ruvector-* path dependencies and examples that we don't have
|
|
RUN sed -i '/ruvector-graph\s*=/d' crates/ruvector-mincut/Cargo.toml && \
|
|
sed -i '/integration\s*=\s*\[/d' crates/ruvector-mincut/Cargo.toml && \
|
|
sed -i 's/"integration",\s*//g' crates/ruvector-mincut/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-mincut/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-mincut/Cargo.toml && \
|
|
sed -i '/ruvector-graph\s*=/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/ruvector-attention\s*=/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/ruvector-gnn\s*=/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/ruvector-full\s*=/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/graph\s*=\s*\[/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/attention\s*=\s*\[/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/gnn\s*=\s*\[/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvllm/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-core/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-core/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-solver/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-solver/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-nervous-system/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-nervous-system/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-domain-expansion/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-domain-expansion/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-delta-core/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-delta-core/Cargo.toml && \
|
|
sed -i '/\[\[example\]\]/,/^$/d' crates/ruvector-sparsifier/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-sparsifier/Cargo.toml && \
|
|
sed -i '/\[\[bench\]\]/,/^$/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i 's/ruvector-mincut = { version = "2.1.0"/ruvector-mincut = { version = "2.0.6"/' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i 's/ruvector-solver = { version = "2.1.0"/ruvector-solver = { version = "2.0.6"/' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i 's/ruvector-sparsifier = { version = "2.1.0"/ruvector-sparsifier = { version = "2.0.6"/' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/ruvector-coherence\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/ruvector-cognitive-container\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/ruvector-math\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/^coherence-accel\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/^witness\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/^math-accel\s*=/d' crates/ruvector-consciousness/Cargo.toml && \
|
|
sed -i '/^full\s*=/,/]/c\full = ["parallel", "phi", "emergence", "collapse", "simd", "solver-accel", "sparsifier-accel", "mincut-accel"]' crates/ruvector-consciousness/Cargo.toml && \
|
|
find crates/rvf -name "Cargo.toml" -exec sed -i '/\[\[example\]\]/,/^$/d' {} \; && \
|
|
find crates/rvf -name "Cargo.toml" -exec sed -i '/\[\[bench\]\]/,/^$/d' {} \; && \
|
|
find crates/sona -name "Cargo.toml" -exec sed -i '/\[\[example\]\]/,/^$/d' {} \; && \
|
|
find crates/sona -name "Cargo.toml" -exec sed -i '/\[\[bench\]\]/,/^$/d' {} \; && \
|
|
find crates/rvf -name "Cargo.toml" -exec sed -i 's/rust-version = "1.87"/rust-version = "1.85"/g' {} \; && \
|
|
sed -i 's/.is_multiple_of(\([^)]*\))/ % \1 == 0/g' crates/rvf/rvf-wire/src/delta.rs && \
|
|
find crates/rvf -name "*.rs" -exec sed -i 's/.is_multiple_of(\([^)]*\))/ % \1 == 0/g' {} \; && \
|
|
sed -i 's/features = \["storage", "hnsw", "parallel", "simd"\]/features = ["storage", "hnsw", "parallel"]/g' crates/ruvllm/Cargo.toml && \
|
|
sed -i 's/pub mod simd_intrinsics;/\/\/ pub mod simd_intrinsics;/g' crates/ruvector-core/src/lib.rs && \
|
|
sed -i 's/crate::simd_intrinsics::manhattan_distance_simd(a, b)/a.iter().zip(b.iter()).map(|(x, y)| (x - y).abs()).sum()/g' crates/ruvector-core/src/distance.rs
|
|
|
|
# Build only mcp-brain-server in release mode
|
|
RUN cargo build --release -p mcp-brain-server
|
|
|
|
# Stage 2: Minimal runtime image
|
|
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
libssl3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy binary from builder
|
|
COPY --from=builder /app/target/release/mcp-brain-server /usr/local/bin/mcp-brain-server
|
|
|
|
# Copy static files
|
|
COPY crates/mcp-brain-server/static /usr/local/share/mcp-brain-server/static
|
|
|
|
ENV PORT=8080
|
|
EXPOSE 8080
|
|
|
|
CMD ["mcp-brain-server"]
|