ruvector/examples/OSpipe/.github-ci-stub.yml
rUv f172643f06 feat(ospipe): RuVector-enhanced personal AI memory for Screenpipe (#163)
* feat(ospipe): implement OSpipe screenpipe integration with WASM + TypeScript SDK

Adds the OSpipe crate providing a quantum-enhanced screenpipe integration layer:
- Rust core library (7 modules): capture, storage, search, pipeline, safety, config, wasm
- WASM bindings via wasm-bindgen for browser deployment
- TypeScript SDK (@ruvector/ospipe) with SSE streaming and hybrid search
- Frame deduplication, PII safety gate, query routing, cosine similarity search
- 56 tests passing (24 unit + 32 integration), builds for native + wasm32
- Comprehensive ADR with Windows/macOS/Linux/WASM integration plans
- CI stub for cross-platform matrix builds (Linux, Windows, macOS, WASM)

Co-Authored-By: claude-flow <ruv@ruv.net>

* chore(ospipe): add README, fix clippy warnings, optimize dedup and pipeline

- Add comprehensive README.md with features, comparison tables, quick
  start guides, collapsed configuration reference, and API docs
- Fix all default clippy warnings (auto-fix + manual)
- Replace Vec with VecDeque in FrameDeduplicator for O(1) eviction
- Remove redundant frame.clone() in ingestion pipeline (move instead)
- Add is_empty() to WASM OsPipeWasm type
- Fix broken intra-doc link for cfg-gated bindings module
- Remove unused imports in integration tests (FrameContent, SearchConfig)

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(ospipe): integrate graph, attention, GNN, and quantum crates (Phase 2-4)

Add four new OSpipe modules integrating RuVector crates:

- graph: KnowledgeGraph wrapping ruvector-graph with heuristic entity
  extraction (URLs, emails, @mentions, capitalized phrases), entity/
  relationship CRUD, and frame entity ingestion
- search/reranker: AttentionReranker using ruvector-attention scaled
  dot-product attention for result re-ranking (0.6*attention + 0.4*cosine)
- learning: SearchLearner with EWC (ruvector-gnn) for continual learning
  without catastrophic forgetting, ReplayBuffer for feedback, and
  EmbeddingQuantizer for age-based vector compression
- quantum: QuantumSearch using ruqu-algorithms QAOA for diversity selection,
  Grover-inspired amplitude boosting, and optimal iteration estimation

All modules use cfg-gated dual implementations (native + WASM stub).
60 tests passing (59 integration + 1 doc-test), native + WASM builds clean.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(ospipe): complete all 15 gap items — HNSW, persistence, REST API, MMR, safety fixes

Implements all remaining OSpipe features from the gap analysis:

High — Core functionality:
- HNSW indexing via ruvector-core with O(log n) ANN search (HnswVectorStore)
- EmbeddingModel trait + RuvectorEmbeddingModel for pluggable embedding backends
- JSON-file persistence layer (PersistenceLayer) for frames and config
- Axum REST API server matching TypeScript SDK endpoints (/search, /graph, /health, /stats, /route)
- Enhanced search pipeline wired into ingestion (router -> rerank -> quantum diversity)

Medium — Correctness:
- WASM/native routing consistency (aligned keyword sets and priority order)
- WASM/native safety consistency (email detection, deny keywords, CC/SSN patterns)
- MMR (Maximal Marginal Relevance) reranker for diversity vs relevance tradeoff
- Delete and update_metadata APIs on VectorStore and HnswVectorStore
- Email redaction preserves surrounding whitespace (tabs, newlines, multi-space)

Lower — Polish:
- TypeScript SDK: fetchWithRetry with exponential backoff, timeout, AbortSignal
- console_error_panic_hook init in WASM module
- WASM test scaffold (tests/wasm.rs)
- Quantization tiers in config (None -> Scalar -> Product -> Binary by age)
- All clippy warnings resolved (0 warnings)

82 tests passing, 1 doc-test passing, 0 clippy warnings.

Co-Authored-By: claude-flow <ruv@ruv.net>

* chore: update Cargo.lock after OSpipe dependency changes

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(ospipe): add server binary, WASM build, version-pin deps for publishing

- Add ospipe-server binary with CLI args (--port, --data-dir, --help, --version)
- Add tracing-subscriber for structured logging
- Version-pin all 9 path dependencies for crates.io readiness
- Fix ref -> ref mut for KnowledgeGraph mutable borrow in pipeline
- Fix redundant rustdoc link in embedding.rs
- Update ospipe-wasm package.json to match wasm-pack output filenames
- WASM build produces 145KB binary with full browser API

Build artifacts (not committed, in dist/):
- ospipe-server-linux-x86_64 (1.8MB)
- ospipe-server-linux-arm64 (1.6MB)
- ospipe-server-windows-x86_64.exe (3.9MB)
- ospipe_bg.wasm (145KB)
- @ruvector/ospipe npm tarball (13.9KB)

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add OSpipe to root README, publish ospipe + deps to crates.io

Add OSpipe personal AI memory section to root README with features,
comparison table, install commands, and Rust quickstart.

Published to registries:
- ospipe v0.1.0 (crates.io)
- ruvector-delta-core v0.1.0 (crates.io)
- ruvector-cluster v2.0.2 (crates.io)
- ruvector-router-core v2.0.2 (crates.io)
- @ruvector/ospipe v0.1.0 (npm)
- @ruvector/ospipe-wasm v0.1.0 (npm)

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: add uuid dev-dep for tests, bump rvlite to 0.2.1

- Add uuid to OSpipe dev-dependencies to fix version mismatch in
  integration tests
- Bump rvlite npm package to 0.2.1 (0.2.0 blocked by npm)

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-02-12 22:45:25 -05:00

58 lines
1.8 KiB
YAML

# OSpipe Cross-Platform Build Matrix
# Copy to .github/workflows/ospipe.yml to activate
name: OSpipe Build
on:
push:
paths: ['examples/OSpipe/**']
pull_request:
paths: ['examples/OSpipe/**']
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: aarch64-apple-darwin
name: macOS ARM64
- os: macos-13
target: x86_64-apple-darwin
name: macOS x64
- os: windows-latest
target: x86_64-pc-windows-msvc
name: Windows x64
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
name: Linux x64
- os: ubuntu-latest
target: wasm32-unknown-unknown
name: WASM
runs-on: ${{ matrix.os }}
name: ${{ matrix.name }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build
run: cargo build -p ospipe --target ${{ matrix.target }} --release
- name: Test
run: cargo test -p ospipe
if: matrix.target != 'wasm32-unknown-unknown'
- name: Upload artifact
uses: actions/upload-artifact@v4
if: matrix.target != 'wasm32-unknown-unknown'
with:
name: ospipe-${{ matrix.target }}
path: |
target/${{ matrix.target }}/release/libospipe*
target/${{ matrix.target }}/release/ospipe*
if-no-files-found: ignore
- name: Upload WASM artifact
uses: actions/upload-artifact@v4
if: matrix.target == 'wasm32-unknown-unknown'
with:
name: ospipe-wasm
path: target/wasm32-unknown-unknown/release/ospipe.wasm
if-no-files-found: ignore