vestige/apps/dashboard/build/_app/immutable/nodes/10.MRR5NpnA.js
Sam Valladares c2d28f3433 feat: Vestige v2.0.0 "Cognitive Leap" — 3D dashboard, HyDE search, WebSocket events
The biggest release in Vestige history. Complete visual and cognitive overhaul.

Dashboard:
- SvelteKit 2 + Three.js 3D neural visualization at localhost:3927/dashboard
- 7 interactive pages: Graph, Memories, Timeline, Feed, Explore, Intentions, Stats
- WebSocket event bus with 16 event types, real-time 3D animations
- Bloom post-processing, GPU instanced rendering, force-directed layout
- Dream visualization mode, FSRS retention curves, command palette (Cmd+K)
- Keyboard shortcuts, responsive mobile layout, PWA installable
- Single binary deployment via include_dir! (22MB)

Engine:
- HyDE query expansion (intent classification + 3-5 semantic variants + centroid)
- fastembed 5.11 with optional Nomic v2 MoE + Qwen3 reranker + Metal GPU
- Emotional memory module (#29)
- Criterion benchmark suite

Backend:
- Axum WebSocket at /ws with heartbeat + event broadcast
- 7 new REST endpoints for cognitive operations
- Event emission from MCP tools via shared broadcast channel
- CORS for SvelteKit dev mode

Distribution:
- GitHub issue templates (bug report, feature request)
- CHANGELOG with comprehensive v2.0 release notes
- README updated with dashboard docs, architecture diagram, comparison table

734 tests passing, zero warnings, 22MB release binary.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 03:07:25 -06:00

1 line
5.9 KiB
JavaScript

import{a as g,f as b}from"../chunks/wmwKEafM.js";import{o as $t}from"../chunks/DZf5toYK.js";import{p as Rt,a as Ct,j as X,s as y,e as r,c as a,g as t,r as e,d as G,f as ot,G as O,t as T,u as U}from"../chunks/DleE0ac1.js";import{d as Mt,s as i,a as kt}from"../chunks/8PSwG_AU.js";import{i as Y}from"../chunks/BHs8FnOA.js";import{e as q,i as z}from"../chunks/BsRos8Kb.js";import{s as k}from"../chunks/D6n3ggvw.js";import{a as w}from"../chunks/BcuCGYSa.js";var Dt=b('<div class="h-24 bg-surface/50 rounded-lg animate-pulse"></div>'),Ft=b('<div class="grid grid-cols-2 lg:grid-cols-4 gap-4"></div>'),St=b('<div class="flex-1 flex flex-col items-center gap-1"><span class="text-xs text-dim"> </span> <div class="w-full rounded-t transition-all duration-500"></div> <span class="text-xs text-muted"> </span></div>'),Tt=b('<div class="flex items-center gap-2 text-sm"><div class="w-3 h-3 rounded-full"></div> <span class="text-dim"> </span> <span class="text-muted ml-auto"> </span></div>'),jt=b('<div class="flex items-center gap-3 text-sm"><span class="text-xs text-decay"> </span> <span class="text-dim truncate"> </span></div>'),At=b('<div class="p-6 bg-decay/5 border border-decay/20 rounded-lg"><h2 class="text-sm text-decay font-semibold mb-3"> </h2> <div class="space-y-2 max-h-48 overflow-y-auto"></div></div>'),Et=b('<div class="p-6 bg-surface/30 border border-subtle/20 rounded-lg"><h2 class="text-sm text-bright font-semibold mb-4">Retention Distribution</h2> <div class="flex items-end gap-1 h-40"></div></div> <div class="p-6 bg-surface/30 border border-subtle/20 rounded-lg"><h2 class="text-sm text-bright font-semibold mb-4">Memory Types</h2> <div class="grid grid-cols-2 lg:grid-cols-4 gap-3"></div></div> <!>',1),Pt=b('<div class="flex items-center gap-3 p-4 rounded-lg border"><div class="w-3 h-3 rounded-full animate-pulse-glow"></div> <span class="text-sm font-medium"> </span> <span class="text-xs text-dim"> </span></div> <div class="grid grid-cols-2 lg:grid-cols-4 gap-4"><div class="p-4 bg-surface/50 border border-subtle/20 rounded-lg"><div class="text-2xl text-bright font-bold"> </div> <div class="text-xs text-dim mt-1">Total Memories</div></div> <div class="p-4 bg-surface/50 border border-subtle/20 rounded-lg"><div class="text-2xl font-bold"> </div> <div class="text-xs text-dim mt-1">Avg Retention</div></div> <div class="p-4 bg-surface/50 border border-subtle/20 rounded-lg"><div class="text-2xl text-bright font-bold"> </div> <div class="text-xs text-dim mt-1">Due for Review</div></div> <div class="p-4 bg-surface/50 border border-subtle/20 rounded-lg"><div class="text-2xl text-bright font-bold"> </div> <div class="text-xs text-dim mt-1">Embedding Coverage</div></div></div> <!> <div class="flex gap-3"><button class="px-4 py-2 bg-warning/20 border border-warning/40 text-warning text-sm rounded-lg hover:bg-warning/30 transition">Run Consolidation</button></div>',1),Gt=b('<div class="p-6 max-w-5xl mx-auto space-y-6"><h1 class="text-xl text-bright font-semibold">System Stats</h1> <!></div>');function Kt(vt,nt){Rt(nt,!0);let n=G(null),l=G(null),c=G(null),Z=G(!0);$t(async()=>{try{await(async d=>{var s=X(d,3);y(n,s[0],!0),y(l,s[1],!0),y(c,s[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}catch{}finally{y(Z,!1)}});function j(d){return{healthy:"#10b981",degraded:"#f59e0b",critical:"#ef4444",empty:"#6b7280"}[d]||"#6b7280"}async function lt(){try{await w.consolidate()}catch{}await(async d=>{var s=X(d,3);y(n,s[0],!0),y(l,s[1],!0),y(c,s[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}var B=Gt(),ct=r(a(B),2);{var ut=d=>{var s=Ft();q(s,20,()=>Array(8),z,($,H)=>{var R=Dt();g($,R)}),e(s),g(d,s)},xt=d=>{var s=Pt(),$=ot(s),H=a($),R=r(H,2),gt=a(R,!0);e(R);var tt=r(R,2),bt=a(tt);e(tt),e($);var I=r($,2),J=a(I),et=a(J),pt=a(et,!0);e(et),O(2),e(J);var K=r(J,2),L=a(K),mt=a(L);e(L),O(2),e(K);var N=r(K,2),at=a(N),ft=a(at,!0);e(at),O(2),e(N);var rt=r(N,2),st=a(rt),_t=a(st);e(st),O(2),e(rt),e(I);var it=r(I,2);{var ht=D=>{var A=Et(),F=ot(A),E=r(a(F),2);q(E,21,()=>t(c).distribution,z,(p,u,v)=>{const C=U(()=>Math.max(...t(c).distribution.map(W=>W.count),1)),M=U(()=>t(u).count/t(C)*100),m=U(()=>v<3?"#ef4444":v<5?"#f59e0b":v<7?"#10b981":"#6366f1");var x=St(),o=a(x),f=a(o,!0);e(o);var _=r(o,2),h=r(_,2),V=a(h,!0);e(h),e(x),T(()=>{i(f,t(u).count),k(_,`height: ${t(M)??""}%; background: ${t(m)??""}; opacity: 0.7; min-height: 2px`),i(V,t(u).range)}),g(p,x)}),e(E),e(F);var S=r(F,2),P=r(a(S),2);q(P,21,()=>Object.entries(t(c).byType),z,(p,u)=>{var v=U(()=>X(t(u),2));let C=()=>t(v)[0],M=()=>t(v)[1];var m=Tt(),x=a(m),o=r(x,2),f=a(o,!0);e(o);var _=r(o,2),h=a(_,!0);e(_),e(m),T(()=>{k(x,`background: ${({fact:"#3b82f6",concept:"#8b5cf6",event:"#f59e0b",person:"#10b981",note:"#6b7280",pattern:"#ec4899",decision:"#ef4444"}[C()]||"#6b7280")??""}`),i(f,C()),i(h,M())}),g(p,m)}),e(P),e(S);var Q=r(S,2);{var wt=p=>{var u=At(),v=a(u),C=a(v);e(v);var M=r(v,2);q(M,21,()=>t(c).endangered.slice(0,20),z,(m,x)=>{var o=jt(),f=a(o),_=a(f);e(f);var h=r(f,2),V=a(h,!0);e(h),e(o),T(W=>{i(_,`${W??""}%`),i(V,t(x).content)},[()=>(t(x).retentionStrength*100).toFixed(0)]),g(m,o)}),e(M),e(u),T(()=>i(C,`Endangered Memories (${t(c).endangered.length??""})`)),g(p,u)};Y(Q,p=>{t(c).endangered.length>0&&p(wt)})}g(D,A)};Y(it,D=>{t(c)&&D(ht)})}var dt=r(it,2),yt=a(dt);e(dt),T((D,A,F,E,S,P,Q)=>{k($,`border-color: ${D??""}40; background: ${A??""}10`),k(H,`background: ${F??""}`),k(R,`color: ${E??""}`),i(gt,S),i(bt,`v${t(l).version??""}`),i(pt,t(n).totalMemories),k(L,`color: ${t(n).averageRetention>.7?"#10b981":t(n).averageRetention>.4?"#f59e0b":"#ef4444"}`),i(mt,`${P??""}%`),i(ft,t(n).dueForReview),i(_t,`${Q??""}%`)},[()=>j(t(l).status),()=>j(t(l).status),()=>j(t(l).status),()=>j(t(l).status),()=>t(l).status.toUpperCase(),()=>(t(n).averageRetention*100).toFixed(1),()=>t(n).embeddingCoverage.toFixed(0)]),kt("click",yt,lt),g(d,s)};Y(ct,d=>{t(Z)?d(ut):t(n)&&t(l)&&d(xt,1)})}e(B),g(vt,B),Ct()}Mt(["click"]);export{Kt as component};