vestige/apps/dashboard/build/_app/immutable/nodes/20.DebghJca.js
Sam Valladares 14b061f124
Release v2.1.23 Receipt Lock hardening
Hardens Sanhedrin Receipt Lock for model-agnostic use, adds fail-open telemetry and receipt docs, fixes smart_ingest batch safety, wires opt-in CUDA Qwen3 device selection, and refreshes dashboard/release assets.\n\nFixes #54\nFixes #58\nFixes #60\nRefs #59
2026-05-27 19:03:16 -05:00

6 lines
16 KiB
JavaScript

import"../chunks/Bzak7iHL.js";import{o as it}from"../chunks/GG5zm9kr.js";import{p as ct,s as p,c as mt,t as f,g as a,a as dt,W as pt,e as s,d as l,h as c,aG as vt,n as $e,r as o,i as ut}from"../chunks/CpWkWWOo.js";import{d as ht,e as Qe,s as v,a as bt}from"../chunks/BlVfL1ME.js";import{i as We}from"../chunks/B4yTwGkE.js";import{e as P,i as k}from"../chunks/CGEBXrjl.js";import{a as u,f as h}from"../chunks/CHOnp4oo.js";import{h as yt}from"../chunks/C4h_mRt2.js";import{s as Ge,r as W}from"../chunks/A7po6GxK.js";import{s as He}from"../chunks/aVbAZ-t7.js";import{s as gt}from"../chunks/Cx-f-Pzo.js";import{b as V}from"../chunks/sZcqyNBA.js";import{b as Re}from"../chunks/BnXDGOmJ.js";import{b as ft}from"../chunks/CJsMJEun.js";import{b as Ue}from"../chunks/D8UfWY0j.js";var qt=h('<meta name="description" content="Join the Vestige Pro waitlist for local-first AI agent memory sync, backups, team memory, PostgreSQL-backed storage, and bot-assisted support."/>'),_t=h('<div class="proof-item svelte-1375qm6"><strong class="svelte-1375qm6"> </strong> <span class="svelte-1375qm6"> </span></div>'),wt=h("<p> </p>"),Pt=h('<div class="svelte-1375qm6"> </div>'),kt=h('<article class="track svelte-1375qm6"><div class="track-line svelte-1375qm6"></div> <h3 class="svelte-1375qm6"> </h3> <p class="svelte-1375qm6"> </p></article>'),xt=h('<p class="svelte-1375qm6"> </p>'),St=h("<div></div>"),Tt=h('<div class="bot-bubble svelte-1375qm6"><p class="svelte-1375qm6">Checking the onboarding notes...</p></div>'),Ct=h('<button type="button" class="svelte-1375qm6"> </button>'),Mt=h(`<div class="waitlist-shell svelte-1375qm6"><canvas class="memory-field svelte-1375qm6" aria-hidden="true"></canvas> <div class="field-vignette svelte-1375qm6" aria-hidden="true"></div> <header class="topbar svelte-1375qm6"><a class="brand svelte-1375qm6" aria-label="Vestige Pro waitlist home"><span class="brand-mark svelte-1375qm6">V</span> <span>Vestige Pro</span></a> <nav aria-label="Waitlist navigation" class="svelte-1375qm6"><a href="https://github.com/samvallad33/vestige" target="_blank" rel="noreferrer" class="svelte-1375qm6">GitHub</a> <a class="svelte-1375qm6">Dashboard</a> <a class="nav-cta svelte-1375qm6" href="#join">Join</a></nav></header> <main class="svelte-1375qm6"><section class="hero svelte-1375qm6" aria-labelledby="hero-title"><div class="hero-copy svelte-1375qm6"><p class="eyebrow svelte-1375qm6">June early access</p> <h1 id="hero-title" class="svelte-1375qm6">Vestige Pro</h1> <p class="hero-subtitle svelte-1375qm6">The paid layer for developers and teams who already trust Vestige as local memory for AI agents.
Sync, backups, team memory, and bot-assisted support come next.</p> <div class="hero-actions svelte-1375qm6" aria-label="Primary actions"><a class="primary-link svelte-1375qm6" href="#join">Join the waitlist <span aria-hidden="true">-&gt;</span></a> <a class="secondary-link svelte-1375qm6" href="https://github.com/samvallad33/vestige" target="_blank" rel="noreferrer">View open source</a></div> <div class="proof-row svelte-1375qm6" aria-label="Vestige proof points"></div></div> <form id="join" class="waitlist-form svelte-1375qm6"><div class="form-heading svelte-1375qm6"><p class="svelte-1375qm6">Early access</p> <h2 class="svelte-1375qm6">Reserve a Pro seat</h2></div> <label class="svelte-1375qm6"><span class="svelte-1375qm6">Name</span> <input autocomplete="name" name="name" placeholder="Alex" class="svelte-1375qm6"/></label> <label class="svelte-1375qm6"><span class="svelte-1375qm6">Email</span> <input autocomplete="email" name="email" placeholder="you@example.com" type="email" required="" class="svelte-1375qm6"/></label> <label class="svelte-1375qm6"><span class="svelte-1375qm6">Who are you buying for?</span> <select name="role" class="svelte-1375qm6"><option>Solo Pro</option><option>Team Pro</option></select></label> <label class="svelte-1375qm6"><span class="svelte-1375qm6">What matters most?</span> <select name="priority" class="svelte-1375qm6"><option>Multi-device sync</option><option>Shared team memory</option><option>PostgreSQL / central backend</option><option>Bot-assisted support</option></select></label> <label class="svelte-1375qm6"><span class="svelte-1375qm6">Use case</span> <textarea name="notes" placeholder="Tell us where your agent keeps forgetting context." rows="4" class="svelte-1375qm6"></textarea></label> <label class="hidden-field svelte-1375qm6" aria-hidden="true"><span class="svelte-1375qm6">Company site</span> <input name="company_site" tabindex="-1" autocomplete="off" class="svelte-1375qm6"/></label> <button class="submit-button svelte-1375qm6" type="submit"> </button> <!></form></section> <section class="signal-band svelte-1375qm6" aria-label="Launch focus"></section> <section class="pro-grid svelte-1375qm6" aria-labelledby="pro-title"><div class="section-heading svelte-1375qm6"><p class="svelte-1375qm6">Why Pro exists</p> <h2 id="pro-title" class="svelte-1375qm6">Two plans. One promise: agent memory you can depend on.</h2></div> <div class="track-grid svelte-1375qm6"></div></section> <section class="support-bot svelte-1375qm6" aria-labelledby="bot-title"><div class="svelte-1375qm6"><p class="eyebrow svelte-1375qm6">Always-on answers</p> <h2 id="bot-title" class="svelte-1375qm6">The support bot handles the first wave.</h2> <p class="bot-intro svelte-1375qm6">This is the first support layer: instant onboarding answers before anyone has to write an email.
It can run locally from the FAQ now and call a hosted support endpoint later.</p></div> <div class="bot-panel svelte-1375qm6"><div class="bot-status svelte-1375qm6"><span class="bot-light svelte-1375qm6" aria-hidden="true"></span> <span>Onboarding bot</span> <small class="svelte-1375qm6"> </small></div> <div class="bot-messages svelte-1375qm6" aria-live="polite"><!> <!></div> <div class="prompt-row svelte-1375qm6" aria-label="Common onboarding questions"></div> <form class="bot-input svelte-1375qm6"><input name="support_question" placeholder="Ask about install, sync, pricing, or Team Pro" aria-label="Ask the Vestige support bot" class="svelte-1375qm6"/> <button type="submit" class="svelte-1375qm6">Ask</button></form></div></section> <section class="roadmap svelte-1375qm6" aria-labelledby="roadmap-title"><div class="svelte-1375qm6"><p class="eyebrow svelte-1375qm6">May to June</p> <h2 id="roadmap-title" class="svelte-1375qm6">The plan is simple.</h2></div> <ol class="svelte-1375qm6"><li class="svelte-1375qm6"><strong class="svelte-1375qm6">May</strong> <span class="svelte-1375qm6">Get Vestige into every MCP, Claude Code, Cursor, local AI, Rust, and self-hosted channel that cares about agent memory.</span></li> <li class="svelte-1375qm6"><strong class="svelte-1375qm6">June</strong> <span class="svelte-1375qm6">Invite the first Solo Pro and Team Pro users into sync, backups, shared memory, PostgreSQL-backed deployments, and bot-assisted support.</span></li> <li class="svelte-1375qm6"><strong class="svelte-1375qm6">After</strong> <span class="svelte-1375qm6">Use paid feedback to turn Vestige from a beloved local tool into durable agent-memory infrastructure.</span></li></ol></section></main></div>`);function Ft(Be,Ee){ct(Ee,!0);let q,G=p(""),j=p(""),I=p("solo"),J=p("sync"),x=p(""),H=p(""),y=p("idle"),_=p(""),S=p(""),T=p(!1),C=p(mt([{role:"bot",content:"Ask me about installing Vestige, whether heavy models are required, Solo vs Team Pro, sync, pricing, or what happens after you join the June list."}]));const Fe=[{value:"Local",label:"SQLite memory, no hosted memory service"},{value:"MCP",label:"Claude Code, Cursor, Cline, Codex, Goose"},{value:"June",label:"Pro sync, backup, team memory early access"}],De=[{name:"Solo Pro",accent:"#22c55e",copy:"Multi-device sync, encrypted backups, managed updates, and a cleaner memory dashboard for developers living inside AI coding agents."},{name:"Team Pro",accent:"#06b6d4",copy:"Shared project memory, admin review, audit trails, PostgreSQL-backed deployments, and async support for engineering teams."}],Oe=["Private by default","Sync without lock-in","Team memory controls","Bot-assisted support"],ze=[{label:"Install",prompt:"How do I install Vestige and connect it to Claude Code?"},{label:"No 20GB?",prompt:"Do I need the Sanhedrin model or 20GB of RAM?"},{label:"Solo vs Team",prompt:"Should I choose Solo Pro or Team Pro?"},{label:"Sync",prompt:"How will Pro sync and backups work?"},{label:"Pricing",prompt:"How much will Vestige Pro cost?"},{label:"Human help",prompt:"When does a human get involved?"}];it(()=>{const t=q.getContext("2d");if(!t)return;const e=t;let r=0,i=0,m=0;const d=Array.from({length:62},(b,w)=>({x:Math.random(),y:Math.random(),vx:(Math.random()-.5)*16e-5,vy:(Math.random()-.5)*16e-5,phase:Math.random()*Math.PI*2,kind:w%5}));function M(){const b=Math.min(window.devicePixelRatio||1,2);i=window.innerWidth,m=window.innerHeight,q.width=Math.floor(i*b),q.height=Math.floor(m*b),q.style.width=`${i}px`,q.style.height=`${m}px`,e.setTransform(b,0,0,b,0,0)}function Me(b){e.clearRect(0,0,i,m);const w=e.createLinearGradient(0,0,i,m);w.addColorStop(0,"#07100f"),w.addColorStop(.45,"#0b1221"),w.addColorStop(1,"#15100a"),e.fillStyle=w,e.fillRect(0,0,i,m),e.strokeStyle="rgba(148, 163, 184, 0.08)",e.lineWidth=1;for(let n=0;n<i;n+=72)e.beginPath(),e.moveTo(n,0),e.lineTo(n+Math.sin(b/3e3+n)*12,m),e.stroke();for(let n=0;n<m;n+=72)e.beginPath(),e.moveTo(0,n),e.lineTo(i,n+Math.cos(b/3300+n)*12),e.stroke();for(const n of d)n.x+=n.vx,n.y+=n.vy,(n.x<.04||n.x>.96)&&(n.vx*=-1),(n.y<.06||n.y>.94)&&(n.vy*=-1);for(let n=0;n<d.length;n++){const A=d[n],$=A.x*i,Q=A.y*m;for(let de=n+1;de<d.length;de++){const Ae=d[de],Ve=Ae.x*i,je=Ae.y*m,Ie=$-Ve,Je=Q-je,Le=Math.sqrt(Ie*Ie+Je*Je);if(Le<168){const nt=(1-Le/168)*.18;e.strokeStyle=`rgba(34, 197, 94, ${nt})`,e.beginPath(),e.moveTo($,Q),e.lineTo(Ve,je),e.stroke()}}}const lt=["#22c55e","#06b6d4","#f59e0b","#ef4444","#a3e635"];for(const n of d){const A=.5+Math.sin(b/900+n.phase)*.5,$=n.x*i,Q=n.y*m;e.fillStyle=lt[n.kind],e.globalAlpha=.45+A*.35,e.beginPath(),e.arc($,Q,1.6+A*1.8,0,Math.PI*2),e.fill(),e.globalAlpha=1}r=requestAnimationFrame(Me)}return M(),window.addEventListener("resize",M),r=requestAnimationFrame(Me),()=>{cancelAnimationFrame(r),window.removeEventListener("resize",M)}});function Ne(){const t=["## Vestige Pro waitlist","",`Plan: ${a(I)}`,`Priority: ${a(J)}`,a(x).trim()?`Use case: ${a(x).trim()}`:"Use case:","","Please do not include private email addresses in this public issue."].join(`
`);return`https://github.com/samvallad33/vestige/issues/new?title=${encodeURIComponent("Vestige Pro waitlist")}&body=${encodeURIComponent(t)}`}async function Ye(t){if(t.preventDefault(),c(y,"submitting"),c(_,""),a(H).trim()){c(y,"success"),c(_,"You are on the list.");return}if(!a(j).includes("@")){c(y,"error"),c(_,"Enter an email so the early-access invite can reach you.");return}a(G).trim(),a(j).trim(),a(I),a(J),a(x).trim(),new Date().toISOString();{c(y,"success"),c(_,"Email capture is ready for an endpoint. Opening the GitHub waitlist fallback with your email omitted."),window.open(Ne(),"_blank","noopener,noreferrer");return}}function Ke(t){const e=t.toLowerCase();return/(install|setup|onboard|claude|cursor|cline|codex|connect)/.test(e)?["Start with the open-source install:","1. `npm install -g vestige-mcp-server@latest`","2. Claude Code: `claude mcp add vestige vestige-mcp -s user`","3. Codex: `codex mcp add vestige -- vestige-mcp`","Then test it by asking your agent to remember a preference, opening a fresh session, and asking for that preference back."].join(`
`):/(sanhedrin|20gb|20 gb|ram|heavy|model|mlx|preflight|hook)/.test(e)?"No. The default Vestige path is the local MCP memory server. Sanhedrin, preflight hooks, and large local verifier models are optional. Pro should keep that promise: nobody should need a 20GB machine just to use memory.":/(solo|team|plan|seat|buying)/.test(e)?"Choose Solo Pro if you want your own multi-device memory, backups, smoother updates, and personal support. Choose Team Pro if multiple people need shared project memory, admin controls, PostgreSQL-backed storage, audit trails, or team onboarding.":/(sync|backup|device|dropbox|icloud|syncthing|postgres|postgresql|pg|central)/.test(e)?"Open-source Vestige should stay local-first. Pro is where guided sync, encrypted backups, conflict handling, and Team Pro PostgreSQL-backed storage belong. The important design rule: users own memory and can export it.":/(price|pricing|cost|pay|billing|stripe|lemon|subscription|monthly|yearly)/.test(e)?"Pricing is not final yet. The current plan is simple: Solo Pro for individual developers, Team Pro for engineering teams. Join the waitlist so early users can shape pricing before the June launch.":/(update|upgrade|curl|reinstall|version)/.test(e)?"Use `vestige update` for existing installs. The goal is that users should not need to keep copying curl commands just to stay current.":/(privacy|local|cloud|telemetry|data|where.*stored|sqlite)/.test(e)?"Vestige core stores memory locally in SQLite and does not need a hosted memory service. Pro should add convenience around sync, backup, and teams without turning private local memory into a black box.":/(support|bot|human|email|question|help|available|awake|discord)/.test(e)?"The support bot should answer common install, sync, plan, and onboarding questions instantly. Hard cases should escalate with context so a human teammate only handles the issues that actually need human judgment.":/(waitlist|june|early|launch|invite|after)/.test(e)?"After you join the waitlist, the June early-access flow should invite you into the right lane: Solo Pro for personal memory, Team Pro for shared memory and admin controls. The bot will keep onboarding answers available while the launch scales.":"I can help with install, updates, optional heavy models, Solo vs Team Pro, sync, backups, privacy, pricing, and support escalation. For now, the fastest next step is to join the waitlist and include your use case so the June onboarding can prioritize the right workflows."}async function pe(t,e){t==null||t.preventDefault();const r=(e??a(S)).trim();if(!(!r||a(T))){c(S,""),c(T,!0),c(C,[...a(C),{role:"user",content:r}],!0);{c(C,[...a(C),{role:"bot",content:Ke(r)}],!0),c(T,!1);return}}}var R=Mt();yt("1375qm6",t=>{var e=qt();pt(()=>{vt.title="Vestige Pro Waitlist"}),u(t,e)});var ve=l(R);ft(ve,t=>q=t,()=>q);var U=s(ve,4),ue=l(U),he=s(ue,2),Xe=s(l(he),2);$e(2),o(he),o(U);var be=s(U,2),B=l(be),E=l(B),ye=s(l(E),8);P(ye,21,()=>Fe,k,(t,e)=>{var r=_t(),i=l(r),m=l(i,!0);o(i);var g=s(i,2),d=l(g,!0);o(g),o(r),f(()=>{v(m,a(e).value),v(d,a(e).label)}),u(t,r)}),o(ye),o(E);var F=s(E,2),D=s(l(F),2),ge=s(l(D),2);W(ge),o(D);var O=s(D,2),fe=s(l(O),2);W(fe),o(O);var z=s(O,2),N=s(l(z),2),Y=l(N);Y.value=Y.__value="solo";var qe=s(Y);qe.value=qe.__value="team",o(N),o(z);var K=s(z,2),X=s(l(K),2),Z=l(X);Z.value=Z.__value="sync";var ee=s(Z);ee.value=ee.__value="team-memory";var te=s(ee);te.value=te.__value="postgres";var _e=s(te);_e.value=_e.__value="support-bot",o(X),o(K);var ae=s(K,2),we=s(l(ae),2);ut(we),o(ae);var se=s(ae,2),Pe=s(l(se),2);W(Pe),o(se);var L=s(se,2),Ze=l(L,!0);o(L);var et=s(L,2);{var tt=t=>{var e=wt();let r;var i=l(e,!0);o(e),f(()=>{r=He(e,1,"submit-message svelte-1375qm6",null,r,{success:a(y)==="success",error:a(y)==="error"}),v(i,a(_))}),u(t,e)};We(et,t=>{a(_)&&t(tt)})}o(F),o(B);var oe=s(B,2);P(oe,21,()=>Oe,k,(t,e)=>{var r=Pt(),i=l(r,!0);o(r),f(()=>v(i,a(e))),u(t,r)}),o(oe);var re=s(oe,2),ke=s(l(re),2);P(ke,21,()=>De,k,(t,e)=>{var r=kt(),i=s(l(r),2),m=l(i,!0);o(i);var g=s(i,2),d=l(g,!0);o(g),o(r),f(()=>{gt(r,`--track-color: ${a(e).accent}`),v(m,a(e).name),v(d,a(e).copy)}),u(t,r)}),o(ke),o(re);var xe=s(re,2),Se=s(l(xe),2),le=l(Se),Te=s(l(le),4),at=l(Te,!0);o(Te),o(le);var ne=s(le,2),Ce=l(ne);P(Ce,17,()=>a(C),k,(t,e)=>{var r=St();let i;P(r,21,()=>a(e).content.split(`
`),k,(m,g)=>{var d=xt(),M=l(d,!0);o(d),f(()=>v(M,a(g))),u(m,d)}),o(r),f(()=>i=He(r,1,"svelte-1375qm6",null,i,{"bot-bubble":a(e).role==="bot","user-bubble":a(e).role==="user"})),u(t,r)});var st=s(Ce,2);{var ot=t=>{var e=Tt();u(t,e)};We(st,t=>{a(T)&&t(ot)})}o(ne);var ie=s(ne,2);P(ie,21,()=>ze,k,(t,e)=>{var r=Ct(),i=l(r,!0);o(r),f(()=>v(i,a(e).label)),bt("click",r,()=>pe(void 0,a(e).prompt)),u(t,r)}),o(ie);var ce=s(ie,2),me=l(ce);W(me);var rt=s(me,2);o(ce),o(Se),o(xe),$e(2),o(be),o(R),f(t=>{Ge(ue,"href",`${Ue}/waitlist`),Ge(Xe,"href",`${Ue}/graph`),L.disabled=a(y)==="submitting",v(Ze,a(y)==="submitting"?"Saving...":"Join June early access"),v(at,"FAQ mode"),rt.disabled=t},[()=>a(T)||!a(S).trim()]),Qe("submit",F,Ye),V(ge,()=>a(G),t=>c(G,t)),V(fe,()=>a(j),t=>c(j,t)),Re(N,()=>a(I),t=>c(I,t)),Re(X,()=>a(J),t=>c(J,t)),V(we,()=>a(x),t=>c(x,t)),V(Pe,()=>a(H),t=>c(H,t)),Qe("submit",ce,pe),V(me,()=>a(S),t=>c(S,t)),u(Be,R),dt()}ht(["click"]);export{Ft as component};