tasq/node_modules/agentic-flow/docs/plans/QUIC/BUILD_INSTRUCTIONS.md

5.8 KiB

QUIC Build Instructions

Current Status: Research & Planning Phase ⚠️

The QUIC implementation is currently in the research and planning phase. While comprehensive research has been completed and the architecture has been designed, the actual Rust/WASM implementation is not yet built.

What's Complete

  1. Research Document (docs/plans/quic-research.md)

    • Comprehensive QUIC protocol analysis
    • Performance projections (2.8-4.4x improvement)
    • Library comparison (quinn recommended)
    • 6-month implementation roadmap
  2. Architecture Design

    • Rust crate structure defined
    • WASM bindings planned
    • TypeScript integration designed
    • Proxy integration architecture
  3. Documentation (Mock/Design Phase)

    • Configuration guide
    • API reference
    • Migration guide
    • Test specifications
    • Benchmark plans
  4. Release Planning

    • v2.1.0 changelog prepared
    • Release notes drafted
    • Post-release tasks documented

What's NOT Complete

  1. Rust QUIC Crate - Placeholder code only
  2. WASM Build - Not compiled (bindgen issues)
  3. TypeScript Integration - Mock implementations
  4. Tests - Specification only (not executable)
  5. Benchmarks - Design only (not runnable)

Build Issues Encountered

Issue 1: npm dependencies

Error: @fails-components/webtransport build failed
Node.js v22.17.0 import assertion syntax not supported

Resolution: Update package.json to remove problematic dependencies

Issue 2: Rust WASM build

Error: aws-lc-sys build failed
bindgen feature required for WASM target

Resolution: Either:

  • Enable bindgen feature in Cargo.toml
  • Use alternative TLS backend (rustls-ring instead of aws-lc-rs)
  • Build for native target first, then WASM

Next Steps to Build QUIC

Phase 1: Fix Dependencies (1-2 days)

# 1. Fix Rust dependencies
cd /workspaces/agentic-flow/crates/agentic-flow-quic
cargo update
cargo build --release  # Native build first

# 2. Install bindgen-cli
cargo install --force --locked bindgen-cli

# 3. Build for WASM (after native build succeeds)
rustup target add wasm32-unknown-unknown
cargo build --release --target wasm32-unknown-unknown

# 4. Package with wasm-pack
cargo install wasm-pack
wasm-pack build --target nodejs --out-dir ../../dist/wasm

Phase 2: Implement Core Features (2-4 weeks)

  1. Basic Client/Server (Week 1)

    • Implement QuicClient with connection establishment
    • Implement QuicServer with stream handling
    • Test with simple echo protocol
  2. Stream Multiplexing (Week 2)

    • Add concurrent stream support
    • Implement stream prioritization
    • Test with multiple concurrent agents
  3. TypeScript Integration (Week 3)

    • Load WASM module in Node.js
    • Create TypeScript wrapper
    • Integrate with proxy
  4. Testing & Validation (Week 4)

    • Write executable tests
    • Run benchmarks
    • Validate performance claims

Phase 3: Optimization (1-2 weeks)

  1. Performance Tuning

    • Profile with flamegraph
    • Optimize buffer sizes
    • Tune BBR congestion control
  2. Production Hardening

    • Error handling
    • Connection migration
    • Retry logic

Phase 4: Release (1 week)

  1. Final Validation

    • Full test suite passing
    • Benchmarks validated
    • Documentation complete
  2. Deployment

    • Merge PR
    • Publish to npm
    • Monitor adoption

Alternative: Use Existing QUIC Libraries

Instead of Rust/WASM, consider:

Option 1: Node.js Native QUIC

npm install @fails-components/webtransport  # Experimental
npm install quiche-native  # Native bindings to quiche

Pros: No WASM complexity, simpler integration Cons: Platform-dependent, requires native compilation

Option 2: HTTP/3 Libraries

npm install http3  # HTTP/3 over QUIC
npm install @cloudflare/quic  # Cloudflare's implementation

Pros: Production-ready, well-maintained Cons: May not expose low-level QUIC features

Option 3: Defer QUIC to v3.0.0

Focus on HTTP/2 optimizations for v2.1.0:

  • Connection pooling improvements
  • Stream multiplexing optimization
  • Header compression tuning

Save QUIC for v3.0.0 when ecosystem is more mature.

For v2.1.0 (Current Release):

  1. Ship with HTTP/2 optimizations only
  2. Mark QUIC as "experimental" or "future feature"
  3. Keep research and design docs
  4. Update changelog to reflect actual status

For v2.2.0 (Next Minor):

  1. Implement basic QUIC support
  2. Native Node.js bindings (not WASM initially)
  3. Feature flag for opt-in testing

For v3.0.0 (Major Release):

  1. Production-ready QUIC with WASM
  2. Full feature parity with HTTP/2
  3. Default to QUIC with fallback

Current Build Commands (For Native Target)

# Build Rust crate (native)
cd crates/agentic-flow-quic
cargo build --release

# Run Rust tests
cargo test

# Build TypeScript (without WASM)
cd /workspaces/agentic-flow
npm install --legacy-peer-deps  # Skip problematic dependencies
npm run build

# Note: Integration tests will fail without WASM module

Summary

Status: 📋 Research Complete, Implementation Not Started

The QUIC implementation is fully designed but not yet built. The research validates the 2.8-4.4x performance improvement potential, but actual implementation will require 6-8 weeks of focused development.

Recommendation:

  • Ship v2.1.0 without QUIC
  • Focus on HTTP/2 optimizations
  • Plan QUIC for v2.2.0 or v3.0.0
  • Use current work as design specification

Alternative for Immediate Use:

  • Use existing Node.js QUIC libraries
  • Wrap in same API surface
  • Benchmark against HTTP/2
  • Validate performance claims

For questions or to continue implementation:

  • See docs/plans/quic-research.md for full research
  • See docs/reviews/quic-implementation-review.md for code review
  • See docs/POST_RELEASE_TASKS.md for release checklist