mirror of
https://github.com/samvallad33/vestige.git
synced 2026-04-26 01:06:21 +02:00
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>
1 line
6 KiB
JavaScript
1 line
6 KiB
JavaScript
import{a as l,f as n}from"../chunks/wmwKEafM.js";import{o as ue}from"../chunks/DZf5toYK.js";import{p as fe,d as T,h as Q,t as u,a as ge,e as d,c as r,s as $,g as e,r as t,G as be}from"../chunks/DleE0ac1.js";import{d as ye,s as v,a as he}from"../chunks/8PSwG_AU.js";import{i as R}from"../chunks/BHs8FnOA.js";import{e as U,i as D}from"../chunks/BsRos8Kb.js";import{s as q}from"../chunks/BK028jHP.js";import{a as Z}from"../chunks/BcuCGYSa.js";var we=n("<button> </button>"),Re=n('<div class="h-16 bg-surface/50 rounded-lg animate-pulse"></div>'),Ne=n('<div class="space-y-2"></div>'),Se=n('<div class="text-center py-12 text-dim"><div class="text-4xl mb-3 opacity-20">◇</div> <p> </p> <p class="text-xs text-muted mt-1">Use "Remind me..." in conversation to create intentions.</p></div>'),ke=n('<span class="text-[10px] text-dream-glow"> </span>'),Oe=n('<span class="text-[10px] text-muted"> </span>'),$e=n('<div class="p-4 bg-surface/30 border border-subtle/20 rounded-lg"><div class="flex items-start gap-3"><div class="w-8 h-8 rounded-lg bg-deep flex items-center justify-center text-lg flex-shrink-0"> </div> <div class="flex-1 min-w-0"><p class="text-sm text-text"> </p> <div class="flex flex-wrap gap-2 mt-2"><span> </span> <span> </span> <span class="text-[10px] text-muted"> </span> <!> <!></div></div> <span class="text-[10px] text-muted flex-shrink-0"> </span></div></div>'),ze=n('<div class="space-y-2"></div>'),Ce=n('<div class="text-center py-8 text-dim"><div class="text-3xl mb-3 opacity-20">◬</div> <p class="text-sm">No predictions yet. Use Vestige more to train the predictive model.</p></div>'),Ie=n("<span> </span>"),Pe=n('<span class="text-dream-glow"> </span>'),Te=n('<div class="p-3 bg-surface/40 border border-subtle/20 rounded-lg flex items-start gap-3"><div class="w-6 h-6 rounded-full bg-dream/20 text-dream-glow text-xs flex items-center justify-center flex-shrink-0 mt-0.5"></div> <div class="flex-1 min-w-0"><p class="text-sm text-text line-clamp-2"> </p> <div class="flex gap-3 mt-1 text-xs text-muted"><span> </span> <!> <!></div></div></div>'),Ue=n('<div class="space-y-2"></div>'),De=n('<div class="p-6 max-w-5xl mx-auto space-y-8"><div class="flex items-center justify-between"><h1 class="text-xl text-bright font-semibold">Intentions & Predictions</h1> <span class="text-xs text-muted"> </span></div> <div class="space-y-4"><div class="flex items-center gap-2"><h2 class="text-sm text-bright font-semibold">Prospective Memory</h2> <span class="text-xs text-muted">"Remember to do X when Y happens"</span></div> <div class="flex gap-1.5"></div> <!></div> <div class="pt-6 border-t border-subtle/20 space-y-4"><div class="flex items-center gap-2"><h2 class="text-sm text-bright font-semibold">Predicted Needs</h2> <span class="text-xs text-muted">What you might need next</span></div> <!></div></div>');function Ve(ee,te){fe(te,!0);let z=T(Q([])),j=T(Q([])),A=T(!0),N=T("active");const ae={active:"text-synapse-glow bg-synapse/10 border-synapse/30",fulfilled:"text-recall bg-recall/10 border-recall/30",cancelled:"text-dim bg-surface border-subtle/30",snoozed:"text-dream-glow bg-dream/10 border-dream/30"},re={critical:"text-decay",high:"text-amber-400",normal:"text-dim",low:"text-muted"},se={time:"⏰",context:"◎",event:"⚡"};ue(async()=>{await B()});async function B(){$(A,!0);try{const[s,i]=await Promise.all([Z.intentions(e(N)),Z.predict()]);$(z,s.intentions||[],!0),$(j,i.predictions||[],!0)}catch{}finally{$(A,!1)}}async function ie(s){$(N,s,!0),await B()}function F(s){if(!s)return"";try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}var G=De(),L=r(G),H=d(r(L),2),de=r(H);t(H),t(L);var M=d(L,2),Y=d(r(M),2);U(Y,20,()=>["active","fulfilled","snoozed","cancelled","all"],D,(s,i)=>{var o=we(),a=r(o,!0);t(o),u(p=>{q(o,1,`px-3 py-1.5 rounded-lg text-xs transition ${e(N)===i?"bg-synapse/20 text-synapse-glow border border-synapse/40":"bg-surface/40 text-dim border border-subtle/20 hover:border-subtle/40"}`),v(a,p)},[()=>i.charAt(0).toUpperCase()+i.slice(1)]),he("click",o,()=>ie(i)),l(s,o)}),t(Y);var ve=d(Y,2);{var oe=s=>{var i=Ne();U(i,20,()=>Array(4),D,(o,a)=>{var p=Re();l(o,p)}),t(i),l(s,i)},le=s=>{var i=Se(),o=d(r(i),2),a=r(o);t(o),be(2),t(i),u(()=>v(a,`No ${e(N)==="all"?"":e(N)+" "}intentions.`)),l(s,i)},ne=s=>{var i=ze();U(i,21,()=>e(z),D,(o,a)=>{var p=$e(),g=r(p),b=r(g),C=r(b,!0);t(b);var f=d(b,2),S=r(f),I=r(S,!0);t(S);var y=d(S,2),h=r(y),P=r(h,!0);t(h);var w=d(h,2),E=r(w);t(w);var k=d(w,2),x=r(k);t(k);var c=d(k,2);{var O=m=>{var _=ke(),W=r(_);t(_),u(X=>v(W,`deadline: ${X??""}`),[()=>F(e(a).deadline)]),l(m,_)};R(c,m=>{e(a).deadline&&m(O)})}var V=d(c,2);{var me=m=>{var _=Oe(),W=r(_);t(_),u(X=>v(W,`snoozed until ${X??""}`),[()=>F(e(a).snoozed_until)]),l(m,_)};R(V,m=>{e(a).snoozed_until&&m(me)})}t(y),t(f);var K=d(f,2),_e=r(K,!0);t(K),t(g),t(p),u((m,_)=>{v(C,se[e(a).trigger_type]||"◇"),v(I,e(a).content),q(h,1,`px-2 py-0.5 text-[10px] rounded border ${(ae[e(a).status]||"text-dim bg-surface border-subtle/30")??""}`),v(P,e(a).status),q(w,1,`text-[10px] ${(re[e(a).priority]||"text-muted")??""}`),v(E,`${e(a).priority??""} priority`),v(x,`${e(a).trigger_type??""}: ${m??""}`),v(_e,_)},[()=>e(a).trigger_value.length>40?e(a).trigger_value.slice(0,37)+"...":e(a).trigger_value,()=>F(e(a).created_at)]),l(o,p)}),t(i),l(s,i)};R(ve,s=>{e(A)?s(oe):e(z).length===0?s(le,1):s(ne,!1)})}t(M);var J=d(M,2),ce=d(r(J),2);{var pe=s=>{var i=Ce();l(s,i)},xe=s=>{var i=Ue();U(i,21,()=>e(j),D,(o,a,p)=>{var g=Te(),b=r(g);b.textContent=p+1;var C=d(b,2),f=r(C),S=r(f,!0);t(f);var I=d(f,2),y=r(I),h=r(y,!0);t(y);var P=d(y,2);{var w=x=>{var c=Ie(),O=r(c);t(c),u(V=>v(O,`${V??""}% retention`),[()=>(Number(e(a).retention)*100).toFixed(0)]),l(x,c)};R(P,x=>{e(a).retention&&x(w)})}var E=d(P,2);{var k=x=>{var c=Pe(),O=r(c);t(c),u(()=>v(O,`${e(a).predictedNeed??""} need`)),l(x,c)};R(E,x=>{e(a).predictedNeed&&x(k)})}t(I),t(C),t(g),u(()=>{v(S,e(a).content),v(h,e(a).nodeType)}),l(o,g)}),t(i),l(s,i)};R(ce,s=>{e(j).length===0?s(pe):s(xe,!1)})}t(J),t(G),u(()=>v(de,`${e(z).length??""} intentions`)),l(ee,G),ge()}ye(["click"]);export{Ve as component};
|