mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-09-14 14:01:28 +08:00
v3.38.21
3 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6e048a5117 |
docs(adr-033): consolidate mid-iteration changes + follow-up matrix
- Mark the homepage 500 issue as RESOLVED (.gcloudignore root cause) - New "Mid-Iteration Updates" section: provider switch to Claude Sonnet 4.6 / OpenRouter, mcp-bridge service deploy + 120s init timeout + pinned warm instance, Web Worker (opt-in), custom domains, help icon + RuFlo example prompts, search-empty-query guard, cloudbuild env preservation, DOCKER_BUILDKIT - New Follow-Up Work table (P1/P2/P3) tracked in issue #1689: worker mode as default, persistent MongoDB, Google OAuth, parallel tool-call visualization parity, real rvagent_wasm in worker, help-modal copy fix, LLM router (Omni mode) - References section updated with follow-up issue, .gcloudignore, worker files, help modal, live URLs Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
6e68c93ac6 |
feat(ruvocal): integrate WASM-MCP layer from RuVector upstream (ADR-033) (#1687)
* feat(ruvocal): add WASM-MCP layer from RuVector upstream (ADR-033)
Adds in-browser WASM MCP server (rvagent-wasm) to local ruvocal:
- src/lib/wasm/ — loader, IndexedDB persistence, capability tests
- src/lib/components/wasm/GalleryPanel.svelte — template gallery UI
- src/lib/components/FoundationBackground.svelte
- src/lib/stores/wasmMcp.ts — Svelte store for WASM MCP lifecycle
- src/lib/constants/rvagentPresets.ts
- src/lib/server/textGeneration/mcp/wasmTools.test.ts
- static/wasm/ — compiled rvagent_wasm.{js,wasm} (~588 KB)
- config/branding.env.example
Pure additions; no existing files modified in this commit. Source:
ruvnet/RuVector/ui/ruvocal main as of 2026-05-01.
See ruflo/docs/adr/ADR-033-RUVOCAL-WASM-MCP-INTEGRATION.md for the
overlay strategy and integration plan.
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruvocal): wire WASM-MCP types into stores and Settings/Tool
Overlays from RuVector upstream needed for GalleryPanel.svelte:
- src/lib/stores/mcpServers.ts — adds WASM_SERVER_ID, loadWasmTemplate,
getWasmGalleryTemplates exports
- src/lib/types/Settings.ts — adds wasm-related settings fields
- src/lib/types/Tool.ts — adds wasm tool types
svelte-check: 0 new errors introduced. 104 pre-existing errors in
untouched files (RuFloUniverse, migrations, server tests) are
unchanged and out of scope for this ADR.
ADR-033
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruvocal): add Cloud Run deploy stub + document infra prereqs (ADR-033)
- cloudbuild.yaml builds ruvocal Dockerfile and deploys to Cloud Run.
Wired to existing ruv-dev secrets (ANTHROPIC_API_KEY, GOOGLE_AI_API_KEY,
OPENROUTER_API_KEY) per ADR-029 pattern.
- ADR-033 updated with deployment plan and explicit MongoDB blocker:
Cloud Run can't run Mongo natively. Operator must provision either
Atlas free tier (M0) or a Cloud Run sidecar before first deploy.
- Notes that the thin src/chat-ui/Dockerfile wrapper is unsuitable for
this integration — it can only patch the upstream HF base image with
static files, not include compiled WASM source.
Deploy is staged but blocked on mongo. Local validation already passed:
WASM MCP server initializes with 18 tools, IDB persistence works.
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): use INCLUDE_DB=true for embedded mongo on Cloud Run
The local Dockerfile already supports INCLUDE_DB=true via the
multi-stage 'local_db_true' path that copies mongod from the
official mongo:7 image. Setting --build-arg INCLUDE_DB=true and
MONGODB_URL=mongodb://localhost:27017 makes Cloud Run deploys
self-contained — no external Atlas, no sidecar, no service-YAML
rewrite.
Tradeoff: Cloud Run filesystem is ephemeral, so chat history is
lost on cold starts. Acceptable for validating the WASM-MCP
integration; production deploys should follow up with Atlas
or persistent storage (tracked separately).
ADR-033
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): enable DOCKER_BUILDKIT for Cloud Build
Dockerfile uses COPY --link and RUN --mount=type=cache (BuildKit
syntax). Without DOCKER_BUILDKIT=1 in the build env, Cloud Build's
docker daemon parses the file in legacy mode and fails with
"Unknown flag: link" before any build step runs (build baf645f5
died at 17 seconds).
Co-Authored-By: RuFlo <ruv@ruv.net>
* docs(adr-033): document Cloud Run deployment outcome
Records what's confirmed working on the deployed instance at
https://ruvocal-875130704813.us-central1.run.app and surfaces the
known /api/v2/models 500 (HF chat-ui SSR edge case unrelated to
WASM integration). WASM bundle reachable at /wasm/* with 200 OK.
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): anchor .dockerignore models/** so route dirs survive
The unanchored `models/**` pattern was matching ANY path containing
'models/' — including src/routes/api/v2/models/, src/routes/models/,
and src/lib/server/models/__tests__/. SvelteKit's production build
inside Docker was therefore missing those routes entirely, while
local `npm run build` outside Docker built them correctly. Result:
Cloud Run revisions returned 404 for /api/v2/models which the layout
load function turned into a 500 on the homepage.
Anchoring with a leading slash limits the pattern to the top-level
models/ directory only. This unblocks the deployed homepage and
fully validates the WASM-MCP integration in production.
ADR-033
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): remove models/** from .dockerignore entirely
Earlier anchor fix `/models/**` still produced images missing the
/api/v2/models route. Confirmed by `docker run --entrypoint=ls` against
gcr.io/ruv-dev/ruvocal:v2 — /app/build/server/entries/endpoints/api/v2/
did not exist, manifest contained 0 references to /api/v2/models, while
/api/v2/conversations and /api/v2/user were present.
Removing the line entirely. The placeholder models/ dir at the repo root
contains only a single 'add-your-models-here.txt' file — letting it into
the build context costs nothing.
ADR-033
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): cloudbuild deploy preserves env vars across rebuilds
Each rebuild was nuking DOTENV_LOCAL, OPENAI_API_KEY (mapped from
OPENROUTER_API_KEY secret), and other manual config because
`gcloud run deploy --set-env-vars` REPLACES rather than merges.
Drop the env/secret args from the deploy step entirely so subsequent
deploys keep whatever was set via `gcloud run services update`.
Initial env config is set out-of-band per ADR-033.
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(ruvocal): add .gcloudignore so model routes survive Cloud Build upload
ROOT CAUSE of the production 500 errors: gcloud builds submit
falls back to .gitignore when no .gcloudignore is present.
.gitignore line 16 is `models/*` (unanchored), which matches
EVERY models/ directory in the tree:
- src/routes/api/v2/models/* (REAL ROUTES)
- src/routes/models/* (REAL ROUTES)
- src/lib/server/models/__tests__/ (tests)
Result: source tarballs uploaded to Cloud Build had EMPTY models/
directories. Production builds shipped without /api/v2/models,
/api/v2/models/refresh, /api/v2/models/[namespace], etc. The
homepage Layout.load called /api/v2/models which 404'd, the layout
chain converted that to a 500, and /favicon.ico (also unmatched at
root, since the assets/ exclusion is unrelated) returned 500 too.
Verified by `gsutil cp` of build c07ba163 source tarball:
$ tar tzf build-source.tgz | grep models
src/routes/models/ (empty dir)
src/routes/api/v2/models/ (empty dir)
After adding .gcloudignore, the v4 source tarball includes all
+server.ts files for those routes.
ADR-033
Co-Authored-By: RuFlo <ruv@ruv.net>
* docs(adr-033): record provider config + ruvocal.ruv.io custom domain
- Gemini 2.5 Flash via Google's OpenAI-compatible endpoint with
GOOGLE_AI_API_KEY (HF router 401 was due to user-token vs router
auth mismatch; OpenRouter base URL × HF token combo also failed)
- ruvocal.ruv.io mapped to Cloud Run, Cloudflare CNAME unproxied so
Google manages the cert; 15-30 min provisioning window
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(mcp-bridge): 120s initialize timeout for Cloud Run cold starts
Bridge was hitting a hardcoded 30s RPC timeout on `initialize` while
ruflo and ruvector backends took 45-60s to boot on Cloud Run cold
start (full claude-flow / ruvector kernel + npx fetch). Backends
were marked "failed to start" but actually came up after the
timeout fired and ran as zombies — bridge served 0 backend tools.
Init gets 120s; other RPC methods stay at 30s (post-init they're
snappy).
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruvocal): replace HF default examples with RuFlo capabilities
Welcome screen now shows 8 prompts that exercise actual ruflo / ruvector
MCP tools (swarm spawn, memory save/recall, task routing, diff analysis,
system status, WASM gallery, GOAP planning, neural training) instead of
HuggingChat defaults like "Generate an image" or "Latest world news".
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruvocal): add help icon + RuFlo capabilities modal
Question-mark icon next to the theme toggle in the sidebar opens a
modal with:
- Quick-start instructions (4 steps)
- All 6 tool groups (Memory, Agents, Intelligence, DevTools, Core,
WASM) as expandable sections with per-tool descriptions
- 5 tips (MCP pill, AUTO toggle, trajectories, memory, prefixes)
- Resource links to ruflo, ADR-033, ruvector
Closes the user-visible "system doesn't seem to know its tools" gap
by surfacing what's available without forcing the user to open
Settings → Application.
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruvocal): replace router-mode default examples with RuFlo themes
The welcome screen has TWO example sources: mcpExamples (when all
base MCP servers are enabled) and routerExamples (otherwise). Earlier
commit only rewrote mcpExamples, leaving HF defaults like "HTML game"
visible whenever users hadn't toggled all servers on.
Router examples now cover: coding swarms, memory/recall, migration
planning, diff review, HNSW, topology choice, horizon tracking, WASM
vs bridge tools — all answerable without tool calls if needed.
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix(mcp-bridge): return structured error on empty search query
When Gemini emits a `search` tool_call with no `query` field, the
bridge was sending an empty prompt to Gemini's generateContent
endpoint and returning the resulting 400 verbatim. The model then
treated it as opaque and gave up.
Validate query upfront and return a hint object the model can use
to retry with a real query.
Co-Authored-By: RuFlo <ruv@ruv.net>
* docs(readme): link banner to flo.ruv.io and add UI Beta button
The Ruflo banner image now links to the live UI at flo.ruv.io. A new
"Try the UI Beta" badge sits below it for explicit click-through.
The Cloud Run cert is still propagating but DNS resolves; CNAME is
unproxied through Cloudflare so Google can issue the managed cert.
Co-Authored-By: RuFlo <ruv@ruv.net>
---------
Co-authored-by: Reuven <cohen@ruv-mac-mini.local>
|
||
|
|
29d52dfc22 |
feat(ruflo): add RuFlo Chat UI with ruvocal fork, MCP bridge, and Docker setup
Adds the complete RuFlo Chat UI system based on a SvelteKit fork (ruvocal) of HuggingFace Chat UI with custom branding, RVF document store replacing MongoDB, MCP bridge with 200+ tools, animated RuFloUniverse welcome screen, and Docker Compose orchestration. Key changes: - RVF JSON document store with ObjectId cross-package compatibility fix - MCP bridge proxy (Express) supporting Gemini, OpenAI, and tool execution - RuFlo branding: Logo, favicons, welcome animation, centered dot cluster - URL safety patch for Docker-internal HTTP service names - CORS fix via relative PUBLIC_ORIGIN asset paths Co-Authored-By: claude-flow <ruv@ruv.net> |