Files
ruvnet--ruflo/v3/implementation/adrs/ADR-059-rvagent-wasm-integration.md
wehub-resource-sync 23f7624596
ADR-166 MCP Bridge Security Lock / Static-source security lock (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / Compose default binds loopback + Mongo has auth (push) Failing after 2s
CodeQL Advanced / Analyze (rust) (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / plugin-agent-federation bindHost default (push) Failing after 1s
ADR-166 MCP Bridge Security Lock / Runtime behavior — 401 + terminal gate + fail-closed (push) Failing after 4s
business-pods-smoke / smoke (push) Failing after 1s
all-plugins-smoke / smoke-all (push) Failing after 2s
CI/CD Pipeline / Security & Code Quality (push) Failing after 1s
CI/CD Pipeline / Test Suite (ubuntu-latest) (push) Failing after 1s
CI/CD Pipeline / Build & Package (macos-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (ubuntu-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (windows-latest) (push) Has been skipped
CI/CD Pipeline / Documentation & Examples (push) Failing after 1s
Clone Tracker (14-day rolling) / Snapshot clones for ruflo ecosystem (push) Failing after 1s
CodeQL Advanced / Analyze (actions) (push) Failing after 1s
CodeQL Advanced / Analyze (javascript-typescript) (push) Failing after 1s
federation-peer-rust / stable-noop (push) Failing after 1s
metaharness-ci / score (push) Failing after 1s
metaharness-ci / router-compat (push) Failing after 0s
metaharness-ci / similarity-tests (push) Failing after 0s
no-agentbbs-smoke / smoke-without-agentbbs (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (windows-latest) (push) Has been skipped
codex-integration-audit / Codex integration audit (push) Failing after 1s
helpers-manifest-guard / guard (push) Failing after 1s
🔗 Cross-Agent Integration Tests / 🤝 Agent Coordination Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🧠 Memory Sharing Integration (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🛡️ Fault Tolerance Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / ⚡ Performance Integration Tests (push) Has been skipped
metaharness-ci / mcp-scan (push) Failing after 1s
metaharness-ci / eject-dryrun (push) Failing after 1s
metaharness-ci / metaharness-real-data (push) Failing after 0s
no-cli-optdep-bloat-2561 / guard (push) Failing after 1s
no-metaharness-smoke / smoke-without-metaharness (push) Failing after 1s
no-phantom-agentic-flow-subpath / guard (push) Failing after 1s
🔄 Automated Rollback Manager / 🚨 Failure Detection (push) Failing after 1s
V3 CI/CD Pipeline / Plugin hooks smoke / ubuntu-latest / Node 22 (push) Failing after 1s
V3 CI/CD Pipeline / ruflo-graph-intelligence build + test smoke (#2044, ADR-123) (push) Failing after 1s
CVE Audit Gate / Audit root (critical-blocking) (push) Failing after 2s
cost-tracker-smoke / smoke (push) Failing after 3s
oia-audit-weekly / audit (push) Failing after 2s
ruflo-agent-smoke / ruflo-agent structural smoke (push) Failing after 1s
📊 Status Badges Update / 📊 Update Status Badges (push) Failing after 1s
V3 CI/CD Pipeline / Static regression guards (#2267 YAML + (push) Failing after 1s
V3 CI/CD Pipeline / Test V3 Packages (push) Failing after 0s
V3 CI/CD Pipeline / agent_execute provider routing smoke (#2042) (push) Failing after 0s
CVE Audit Gate / Audit v3 (critical-blocking) (push) Failing after 1s
federation-peer-rust / stable-native (push) Failing after 2s
🔗 Cross-Agent Integration Tests / 🚀 Integration Test Setup (push) Failing after 2s
neural-trader-smoke / runtime-smoke (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (macos-latest) (push) Has been skipped
V3 CI/CD Pipeline / Build V3 (ubuntu-latest) (push) Has been skipped
V3 CI/CD Pipeline / Type Check V3 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 24 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 22 (push) Failing after 2s
V3 CI/CD Pipeline / browser rvf create flag smoke (#2015) (push) Failing after 0s
V3 CI/CD Pipeline / Dependency review (#2046) (push) Has been skipped
V3 CI/CD Pipeline / Supply-chain audit (#2046) (push) Failing after 0s
V3 CI/CD Pipeline / witness marker drift smoke (#2021) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader portfolio CG smoke (#2068, ADR-126 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader backtest signing smoke (#2068, ADR-126 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / kg-extract type-import classification smoke (#2049) (push) Failing after 0s
V3 CI/CD Pipeline / witness verify precondition smoke (#1880) (push) Failing after 2s
V3 CI/CD Pipeline / neural-trader pipeline risk-gate smoke (#2068, ADR-126 Phase 5) (push) Failing after 0s
V3 CI/CD Pipeline / neural-trader feature attribution smoke (#2068, ADR-126 Phase 6) (push) Failing after 0s
V3 CI/CD Pipeline / plugin-registry signature verification smoke (#1922, CWE-347) (push) Failing after 4s
V3 CI/CD Pipeline / memory stats legacy-DB smoke (#2120) (push) Failing after 4s
V3 CI/CD Pipeline / github deprecated actions smoke (#2089, ADR-127 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / graph query + pathfinder smoke (ADR-130 P2+P5) (push) Has been skipped
V3 CI/CD Pipeline / graph trajectory hooks smoke (ADR-130 P3) (push) Has been skipped
V3 CI/CD Pipeline / graph plugin adapter smoke (ADR-130 P4) (push) Has been skipped
V3 CI/CD Pipeline / graph benchmark (ADR-130 P6) (push) Has been skipped
V3 CI/CD Pipeline / statusline generator delegation smoke (#2195) (push) Failing after 1s
V3 CI/CD Pipeline / wizard init regression guard (#2206 (push) Failing after 1s
V3 CI/CD Pipeline / memory no-stray-db smoke (ADR-125 P7) (push) Failing after 1s
V3 CI/CD Pipeline / github-safe injection smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github actions pin smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github attribution opt-in smoke (#2089, ADR-127 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / pre-bash hook safety smoke (#2017) (push) Failing after 1s
V3 CI/CD Pipeline / Memory import smoke / ubuntu-latest (push) Failing after 0s
V3 CI/CD Pipeline / MCP protocol smoke / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / ruvllm WASM auto-init smoke (#2086) (push) Failing after 4s
V3 CI/CD Pipeline / MCP paired-tool round-trip smoke (#1889) (push) Failing after 1s
V3 CI/CD Pipeline / Plugin package install-safety (#1902/#1903/#1904) (push) Failing after 1s
V3 CI/CD Pipeline / Tool description discoverability (ADR-112) (push) Failing after 3s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (22) (push) Failing after 1s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (24) (push) Failing after 1s
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Vector-index dimension audit (#1947) (push) Failing after 0s
V3 CI/CD Pipeline / Hook-command install safety (#1921) (push) Failing after 1s
V3 CI/CD Pipeline / ToolOutputGuardrail smoke (ADR-131, (push) Failing after 1s
V3 CI/CD Pipeline / init-bundle invariants smoke (#2095, ADR-128 Phase 5) (push) Failing after 1s
V3 CI/CD Pipeline / wasm provider bridge smoke (ADR-129 P1) (push) Failing after 2s
V3 CI/CD Pipeline / wasm gallery CRUD smoke (ADR-129 P3) (push) Failing after 1s
V3 CI/CD Pipeline / wasm plugin bridge smoke (ADR-129 P4) (push) Failing after 0s
V3 CI/CD Pipeline / wasm compose smoke (ADR-129 P2) (push) Failing after 4s
V3 CI/CD Pipeline / graph schema smoke (ADR-130 P1) (push) Failing after 0s
Validate Marketplace / validate (push) Failing after 1s
🔍 Verification Pipeline / 🚀 Setup Verification (push) Failing after 1s
🔍 Verification Pipeline / 🛡️ Security Verification (push) Has been skipped
🔍 Verification Pipeline / 📝 Code Quality (push) Has been skipped
🔍 Verification Pipeline / 🧪 Test Verification (${{ matrix.os }}, Node ${{ matrix.node }}) (push) Has been skipped
🔍 Verification Pipeline / 🏗️ Build Verification (push) Has been skipped
🔍 Verification Pipeline / 📚 Documentation Verification (push) Has been skipped
CVE Audit Gate / High-severity report (warn only) (push) Has been cancelled
🔄 Automated Rollback Manager / 🔄 Execute Rollback (push) Has been cancelled
🔄 Automated Rollback Manager / ✅ Post-Rollback Verification (push) Has been cancelled
🔄 Automated Rollback Manager / 📊 Rollback Monitoring (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / windows-latest (push) Has been cancelled
🔄 Automated Rollback Manager / ⏳ Manual Rollback Approval (push) Has been cancelled
V3 CI/CD Pipeline / MCP protocol smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Memory import smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / ubuntu-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Publish to npm (alpha) (push) Has been cancelled
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / macos-latest / Node 22 (push) Has been cancelled
V3 CI/CD Pipeline / Plugin hooks smoke / macos-latest / Node 22 (push) Has been cancelled
CI/CD Pipeline / Deploy & Release (push) Has been cancelled
CI/CD Pipeline / CI Status (push) Has been cancelled
🔗 Cross-Agent Integration Tests / 📊 Integration Test Report (push) Has been cancelled
🔄 Automated Rollback Manager / 🔍 Pre-Rollback Validation (push) Has been cancelled
🔍 Verification Pipeline / ⚡ Performance Verification (push) Has been cancelled
🔍 Verification Pipeline / 📊 Verification Report (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:02:19 +08:00

176 lines
8.6 KiB
Markdown

# ADR-059: @ruvector/rvagent-wasm Integration
**Status**: Implemented (see ADR-070 for completion details)
**Date**: 2026-03-17
**Author**: RuvNet
## Context
Ruflo v3 already integrates four `@ruvector/*` WASM packages for intelligence
(learning-wasm, attention, router, sona). A new package —
`@ruvector/rvagent-wasm@0.1.0` — provides a complete sandboxed AI agent runtime
compiled to WebAssembly. It includes:
- **WasmAgent** — LLM agent with virtual filesystem (no OS access)
- **WasmMcpServer** — JSON-RPC 2.0 MCP server running entirely in WASM
- **WasmGallery** — 6 pre-built agent templates (Coder, Researcher, Tester, Reviewer, Security, Swarm)
- **WasmRvfBuilder** — RVF binary container format for multi-agent packaging
- **WasmStateBackend** — In-memory sandboxed filesystem (1 MB/file, 10 K files max)
- **WasmToolExecutor** — Sandboxed tool execution (ReadFile, WriteFile, EditFile, WriteTodos, ListFiles)
Package size: 196.8 kB packed / 620 kB unpacked, zero runtime dependencies.
A companion package — `@ruvector/ruvllm-wasm` — provides browser-native LLM
inference with HNSW routing, MicroLoRA, SONA Instant, WebGPU acceleration, and
pi-quantization. This ADR covers both integrations.
## Decision
Integrate `@ruvector/rvagent-wasm` as an optional dependency in `@claude-flow/cli`,
following the established pattern used by `@ruvector/learning-wasm` et al.
### Integration Surface
| Layer | What | How |
|-------|------|-----|
| **package.json** | Optional deps | `"@ruvector/rvagent-wasm": "^0.1.0"`, `"@ruvector/ruvllm-wasm": "^2.0.1"` |
| **Ambient types** | TypeScript compat | `src/types/optional-modules.d.ts` |
| **Integration module** | `src/ruvector/agent-wasm.ts` | Agent lifecycle, VFS, gallery, RVF, MCP bridge |
| **MCP tools** | `src/mcp-tools/wasm-agent-tools.ts` | 10 tools exposed via MCP protocol |
| **Re-exports** | `src/ruvector/index.ts` | Public API surface |
### MCP Tools Added
| Tool | Description |
|------|-------------|
| `wasm_agent_create` | Create sandboxed WASM agent |
| `wasm_agent_prompt` | Send prompt to WASM agent |
| `wasm_agent_tool` | Execute tool on WASM agent |
| `wasm_agent_list` | List active WASM agents |
| `wasm_agent_terminate` | Terminate and free agent |
| `wasm_agent_files` | List files in agent's VFS |
| `wasm_agent_export` | Export agent state as JSON |
| `wasm_gallery_list` | List gallery templates |
| `wasm_gallery_search` | Search templates by query |
| `wasm_gallery_create` | Create agent from template |
### @ruvector/ruvllm-wasm v2.0.1 Integration
Package published to npm and live-tested on 2026-03-17. Ambient types declared in
`src/types/optional-modules.d.ts`. Integration module and MCP tools pending.
#### Verified Working APIs (npm v2.0.0)
| Component | API | Status |
|-----------|-----|--------|
| `RuvLLMWasm` | `initialize()`, `reset()`, `version()`, `getPoolStats()` | Working |
| `ChatTemplateWasm` | `.llama3()`, `.mistral()`, `.chatml()`, `.phi()`, `.gemma()`, `.custom()`, `.detectFromModelId()` | Working |
| `ChatMessageWasm` | `.system()`, `.user()`, `.assistant()` | Working |
| `GenerateConfig` | `maxTokens`, `temperature`, `topP`, `topK`, `repetitionPenalty`, `toJson()`, `fromJson()` | Working |
| `SonaInstantWasm` | `instantAdapt()`, `recordPattern()`, `suggestAction()`, `stats()`, `toJson()`, `fromJson()` | Working |
| `MicroLoraWasm` | `adapt()`, `applyUpdates()`, `stats()`, `reset()` (via `MicroLoraConfigWasm` + `AdaptFeedbackWasm`) | Working |
| `KvCacheWasm` | `append()`, `stats()`, `clear()`, `tokenCount` | Working |
| `BufferPoolWasm` | `withCapacity()`, `prewarmAll()`, `statsJson()`, `hitRate`, `clear()` | Working |
| `InferenceArenaWasm` | `forModel()`, `reset()`, `used`, `capacity`, `remaining` | Working |
| `HnswRouterWasm` | Constructor, `setEfSearch()`, `clear()` | Working |
| `HnswRouterWasm` | `addPattern()` | Fixed in v2.0.1 |
#### Node.js Init Pattern
```typescript
import { readFileSync } from 'node:fs';
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const wasmPath = require.resolve('@ruvector/ruvllm-wasm/ruvllm_wasm_bg.wasm');
const bytes = readFileSync(wasmPath);
// MUST use object form — initSync(bytes) is deprecated
initSync({ module: bytes });
```
#### HNSW Fix Details
The `select_layer()` function in WASM called `f64::ln()` which hits `unreachable`
in WASM targets. Fix: replaced `wasm_random()` with integer-based geometric
distribution that avoids floating-point logarithms entirely. Published as v2.0.1.
#### Planned Integration Module
`src/ruvector/ruvllm-wasm.ts` will expose:
- `isRuvllmWasmAvailable()` — Runtime detection
- `initRuvllmWasm()` — Node.js WASM initialization
- `createHnswRouter()` — WASM HNSW for semantic routing
- `createSonaInstant()` — <1ms adaptation loops
- `createMicroLora()` — Ultra-lightweight LoRA (ranks 1-4)
- `formatChat()` — Chat template formatting
- `createKvCache()` — KV cache management
- Chat template helpers, generation config wrappers
### Architecture
```
┌──────────────────────────────────────────────────────────┐
│ @claude-flow/cli │
│ │
│ src/ruvector/agent-wasm.ts ◄── Integration module │
│ ├─ createWasmAgent() (lifecycle) │
│ ├─ promptWasmAgent() (LLM interaction) │
│ ├─ createWasmMcpServer() (MCP bridge) │
│ ├─ listGalleryTemplates() (gallery) │
│ └─ buildRvfContainer() (packaging) │
│ │
│ src/mcp-tools/wasm-agent-tools.ts ◄── MCP exposure │
│ │
├──────────────────────────────────────────────────────────┤
│ @ruvector/rvagent-wasm (WASM, optional) │
│ ├─ WasmAgent (sandboxed agent runtime) │
│ ├─ WasmStateBackend (in-memory VFS) │
│ ├─ WasmMcpServer (JSON-RPC 2.0) │
│ ├─ WasmGallery (6 templates) │
│ └─ WasmRvfBuilder (binary containers) │
└──────────────────────────────────────────────────────────┘
```
## Consequences
### Positive
- Enables sandboxed agent execution without OS access (browser-safe)
- 6 pre-built templates accelerate agent creation
- RVF container support enables agent packaging and distribution
- WASM MCP server provides lightweight alternative endpoint
- Zero additional runtime dependencies (WASM is self-contained)
- Graceful degradation when package not installed
### Negative
- 620 kB unpacked size added to optional deps
- WASM agents lack OS-level tools (no Bash, no Grep, no Glob)
- Model provider must be injected from JavaScript side
### Known Issues (v0.1.0 — filed upstream)
| Issue | Severity | Workaround |
|-------|----------|------------|
| `execute_tool(unknown)` → WASM panic | Medium | Validate tool name before calling (implemented) |
| `gallery.get(unknown)` → WASM panic | Medium | Wrap in try/catch (implemented) |
| `WasmMcpServer` → memory access out of bounds | High | Avoid MCP server in v0.1.0 |
| `reset()` does not clear `file_count` | Low | Recreate agent if clean state needed |
| `write_todos` format undocumented | Low | Tool works, format TBD |
| Template ID is `swarm-orchestrator` not `swarm` | Info | Updated in code and docs |
### Known Issues (ruvllm-wasm v2.0.1)
| Issue | Severity | Workaround |
|-------|----------|------------|
| HNSW `addPattern` panics at ~12 patterns | High | Limit to <12 or await fix |
| `SonaInstantWasm` requires `SonaConfigWasm` | Info | API change from earlier versions |
| `MicroLoraWasm.adapt()` takes `AdaptFeedbackWasm` | Info | API change; `.apply()` for transforms |
| `RuvLLMWasm` has no `.version()` | Info | Use standalone `getVersion()` |
| `GenerateConfig` float precision loss | Low | f32 roundtrip (0.7 → 0.699999...) |
| Stats objects return WASM pointers | Low | Use `.toJson()` or named accessors |
### Neutral
- Follows existing @ruvector/* optional dependency pattern
- No breaking changes to existing APIs
- Tests mock the WASM module for CI environments where it's not installed