5fe8f228c1
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>
2.7 KiB
2.7 KiB
Plan: Behavioral Memory — How I Do Stuff
Goal: Maven builds a rich behavioral model of the user over time: habits, routines, preferences, recurring tasks, deadlines, and commitments. She uses this model to proactively propose plans, surface reminders, and adjust her behavior — all grounded in the existing fact/event/note stores.
Done when:
internal/memory/behavior.go— behavioral model builder reads facts, events, notes, nudges, reminders, tools, calendar events- Model is exposed as a structured profile:
{"routines": [...], "preferences": {...}, "recurring_tasks": [...], "typical_schedule": {...}} - LLM generates this profile periodically (daily) and stores it as a note/fact
- Proactive loop uses the profile to propose daily plans: "сегодня ты обычно делаешь X, Y, Z. напомнить?"
- Profile is queryable via voice: "что я обычно делаю по вторникам?"
- Profile updates on fact write — not just periodic — so a new "walk" fact immediately adjusts the walking schedule
Scope:
internal/memory/behavior.go— behavior builderinternal/memory/profile.go— profile data structures (routines, preferences, schedule, commitments)- Reuses
internal/llm.Clientfor profile generation - Reuses
internal/pattern/detector.gofor interval detection on behavioral data - Extends
internal/router/intent.go—IntentQueryextended with behavioral sub-queries - Reuses
internal/delivery.Dispatcherfor surfacing proposals as nudges
Steps:
- Design profile schema:
BehaviorProfilestruct withRoutines []Routine,Preferences map[string]string,RecurringTasks []Task,WeeklySchedule map[string][]Activity - Create
internal/memory/behavior.go—Builderthat readsstore.RecentFacts(1000),store.EventsFor(all action+object combos),store.RecentNotes(500),store.ListReminders - Implement profile generation — prompt for
llm.Clientthat takes raw facts and outputs a structured JSON profile; stores result as a fact (kind=config, key=behavior_profile) - Create
internal/memory/planner.go— reads the profile each morning (via routine cron"0 8 * * *") and proposes a daily plan throughdispatcher.DispatchNudge - Add real-time updates — when a fact is written via
WriteFact, the behavior builder incrementally updates the relevant profile section (append-only, no full rebuild) - Wire voice query —
"что я обычно делаю?"routes toIntentQuery→ behavior profile lookup → LLM-phrased answer - Add IPC read method
MethodGetBehaviorProfileso mavweb can display it on/dash - Test with synthetic fact history — verify weekly schedule is correctly inferred