feat(mavweb): /ecosystem page consuming Nexus/Praxis/Hexis + shell fixes
Add a read-only /ecosystem page that consumes the sibling services' JSON APIs (Nexus entities, Praxis attention, Hexis capabilities), fetched concurrently with honest per-panel error states. Siblings stay headless — mavweb is their human surface (arch §16). Wired via mavweb -nexus/-praxis/-hexis flags; mavweb joins the ecosystem compose network. Fix mobile horizontal overflow across all pages: .content is a flex child with default min-width:auto, so it refused to shrink below the tables' intrinsic width. min-width:0 lets wide tables pan inside .scroll instead of dragging the page sideways. Verified via CDP geometry check (scrollWidth === clientWidth at 430px). Also includes in-progress Ethos UI redesign, ecosystem deploy compose, and planning docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Maven — Re-architecture (router-centric, 2026-07-10)
|
||||
# Maven — Re-architecture (Qwen3 resident model, revised 2026-07-18)
|
||||
|
||||
> Supersedes the classifier-first routing model. Agreed in a design session
|
||||
> after diagnosing that homesrv deploys with a **stub phraser** (no LLM
|
||||
@@ -12,8 +12,9 @@
|
||||
## Principle
|
||||
|
||||
The LLM is **not** the center of everything. Deterministic tools handle the
|
||||
bulk. The LLM is used for exactly two things: **routing/reasoning** and
|
||||
**talking back**. A sub-1B agentic model (LFM 2.5) is enough for both.
|
||||
bulk. One locally trained **Qwen3-1.7B** resident model is used for routing and
|
||||
talking back. Its system prompt selects one of two independently evaluated
|
||||
contracts: route actions or persona responses.
|
||||
|
||||
**If the router is good, Maven feels good.** Routing is the linchpin.
|
||||
|
||||
@@ -22,18 +23,19 @@ bulk. The LLM is used for exactly two things: **routing/reasoning** and
|
||||
```
|
||||
utterance
|
||||
→ [world-state context] cheap: time, presence, calendar_busy, weather (no LLM)
|
||||
→ ROUTER = LFM (always-on, agentic)
|
||||
→ ROUTER = Qwen3-1.7B (always-on, grammar-constrained)
|
||||
reads utterance + context + tool schema, emits a STRUCTURED action:
|
||||
• call a tool (deterministic) • answer directly
|
||||
• escalate → 4B reasoner (on-demand)
|
||||
→ tools (deterministic, fast) / 4B reasoner (on-demand summon)
|
||||
→ PHRASER = LFM (always-on, same process as router) → TTS / text
|
||||
→ tools (deterministic, fast)
|
||||
→ PHRASER = Qwen3-1.7B (same resident process) → TTS / text
|
||||
```
|
||||
|
||||
- **Router = Phraser = one resident sub-1B LFM llama-server**, two call-sites
|
||||
(route-prompt, phrase-prompt). Always warm, no cold start. Cheap on 14 GB.
|
||||
- **4B reasoner (Qwen3-4B, already on disk)** — summoned on-demand for
|
||||
genuinely complex turns, torn down / idle-unloaded after. Never resident.
|
||||
- **Router = Phraser = one resident Qwen3-1.7B llama-server**, with separate
|
||||
route and persona prompts/contracts. Always warm; classifier/stub remain the
|
||||
failure floors.
|
||||
- The resident checkpoint is trained end-to-end as: Qwen3-1.7B-Base → RU CPT →
|
||||
joint persona/router SFT → merge → GGUF. Larger on-demand reasoning models
|
||||
are deferred until the main feature set is complete.
|
||||
- **Embedder demoted from router to tool** — it now backs `memory.search`
|
||||
(RAG) and gives the router a cheap "similar past notes/intents" hint. The
|
||||
router no longer depends on it clearing a threshold. Upgrade MiniLM → bge-m3
|
||||
@@ -58,7 +60,7 @@ DIGESTION WORKER (periodic + event-driven, off the request path)
|
||||
• reflects: detect patterns ("mentioned X three times")
|
||||
• proposes: "want me to add X / remind you about Y?" → nudge dispatcher
|
||||
• surfaces due reminders
|
||||
runs LFM (cheap) or summons 4B (real synthesis) — never blocks a turn
|
||||
uses the resident Qwen3 model for bounded synthesis — never blocks a turn
|
||||
```
|
||||
|
||||
Notes capture is a deterministic Tier-0 tool; making notes *mean something
|
||||
@@ -69,24 +71,23 @@ later* is the worker + RAG.
|
||||
| Layer | What | Runs |
|
||||
|---|---|---|
|
||||
| Context | world-state (time/presence/calendar/weather) | always, no LLM |
|
||||
| **Router** | LFM agentic orchestrator — linchpin | **always-on** |
|
||||
| **Router** | Qwen3 structured-action orchestrator — linchpin | **always-on** |
|
||||
| Tools | note/reminder/memory/calendar/weather/act (deterministic) | always |
|
||||
| Reasoner | Qwen3-4B for complex turns | **on-demand summon** |
|
||||
| Phraser | LFM — final voice | **always-on (same proc as router)** |
|
||||
| Reasoner | larger specialist model | **deferred** |
|
||||
| Phraser | Qwen3 persona response | **always-on (same proc as router)** |
|
||||
| Digestion worker | reflection → suggestions/nudges/memory | **background** |
|
||||
| Reach | telegram (+ existing ntfy/voice) | quick win |
|
||||
| Voice quality | custom/better TTS | **deferred** (workstation GPU busy) |
|
||||
|
||||
## Build order
|
||||
|
||||
1. **Foundation + router** — router-as-LFM, turn the engine ON (resident
|
||||
sub-1B), verify notes+reminders actually round-trip, date/number TTS
|
||||
normalizer, wire telegram reach. After this she's a trustworthy plain
|
||||
assistant.
|
||||
2. **On-demand 4B reasoner** — summon/idle lifecycle + router escalation path.
|
||||
3. **Digestion worker** — reflection, proactive suggestions, memory
|
||||
1. **Foundation + router** — completed shared llama-server client, router,
|
||||
fallback, replier, TTS normalization and telegram reach.
|
||||
2. **Qwen3 resident checkpoint** — finish RU CPT, pass the raw-vs-CPT gate,
|
||||
jointly SFT persona/router contracts, merge, quantize and deploy.
|
||||
3. **Main features** — reflection, proactive suggestions, memory
|
||||
consolidation, RAG read-back.
|
||||
4. **Embodiment** — voice quality (deferred).
|
||||
4. **Deferred work** — larger reasoner, custom Piper voice and other expansions.
|
||||
|
||||
## Non-goals (unchanged)
|
||||
Never phones home. Not a nag. Not autonomous. Feminine-gendered RU self-ref.
|
||||
|
||||
Reference in New Issue
Block a user