sessiongraph-app-darwin-arm64 1.0.9 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/package.json +2 -2
  2. package/payload/SessionGraph.app/Contents/Info.plist +2 -2
  3. package/payload/SessionGraph.app/Contents/MacOS/sessiongraph +0 -0
  4. package/payload/SessionGraph.app/Contents/Resources/icon.icns +0 -0
  5. package/payload/SessionGraph.app/Contents/Resources/resources/node +2 -2
  6. package/payload/SessionGraph.app/Contents/Resources/resources/web/apple-touch-icon.png +0 -0
  7. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-B5TXKeav.js → index-BNX-8Jnn.js} +1 -1
  8. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-CWphmptD.js → index-BcoCDV6F.js} +1 -1
  9. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-fjc8n25E.css → index-BnhC5gO7.css} +1 -1
  10. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-D-Ue5tsr.js → index-BtLEIWKh.js} +5 -5
  11. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-BPR2p22J.js → index-RfmyzBnX.js} +1 -1
  12. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-DoHRK4Ea.js +26 -0
  13. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-VJhUmdPH.css +1 -0
  14. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{scene-C2kTsRX_.js → scene-B_CpQ0qP.js} +1 -1
  15. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/share-DPdu1Hbo.js +8 -0
  16. package/payload/SessionGraph.app/Contents/Resources/resources/web/brand/icon.svg +1 -0
  17. package/payload/SessionGraph.app/Contents/Resources/resources/web/brand/lockup-light.svg +1 -0
  18. package/payload/SessionGraph.app/Contents/Resources/resources/web/brand/lockup.svg +1 -0
  19. package/payload/SessionGraph.app/Contents/Resources/resources/web/brand/mark-mono.svg +1 -0
  20. package/payload/SessionGraph.app/Contents/Resources/resources/web/brand/mark.svg +1 -0
  21. package/payload/SessionGraph.app/Contents/Resources/resources/web/favicon.ico +0 -0
  22. package/payload/SessionGraph.app/Contents/Resources/resources/web/favicon.svg +1 -1
  23. package/payload/SessionGraph.app/Contents/Resources/resources/web/index.html +4 -2
  24. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/gemini.svg +1 -1
  25. package/payload/SessionGraph.app/Contents/_CodeSignature/CodeResources +123 -46
  26. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-D6ALMt6w.js +0 -12
  27. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-DG0jrGoB.css +0 -1
  28. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/share-BhzLwRnE.js +0 -8
@@ -1 +1 @@
1
- import{y as i}from"./index-D-Ue5tsr.js";function r(e){if(e!==void 0){if(typeof e=="string")return e;if("ok"in e&&"cancel"in e)return{OkCancelCustom:[e.ok,e.cancel]};if("yes"in e&&"no"in e&&"cancel"in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if("ok"in e)return{OkCustom:e.ok}}}async function f(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|open",{options:e})}async function k(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|save",{options:e})}async function l(e,a){return await i("plugin:dialog|message",{message:e,title:a?.title,kind:a?.kind,buttons:r(a?.buttons)})}async function s(e,a){const n=typeof a=="string"?{title:a}:a;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),l(e,n)}async function u(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Yes";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"No"}:"YesNo"})===t}async function d(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Ok";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"Cancel"}:"OkCancel"})===t}export{u as ask,d as confirm,s as message,f as open,k as save};
1
+ import{y as i}from"./index-BtLEIWKh.js";function r(e){if(e!==void 0){if(typeof e=="string")return e;if("ok"in e&&"cancel"in e)return{OkCancelCustom:[e.ok,e.cancel]};if("yes"in e&&"no"in e&&"cancel"in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if("ok"in e)return{OkCustom:e.ok}}}async function f(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|open",{options:e})}async function k(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|save",{options:e})}async function l(e,a){return await i("plugin:dialog|message",{message:e,title:a?.title,kind:a?.kind,buttons:r(a?.buttons)})}async function s(e,a){const n=typeof a=="string"?{title:a}:a;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),l(e,n)}async function u(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Yes";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"No"}:"YesNo"})===t}async function d(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Ok";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"Cancel"}:"OkCancel"})===t}export{u as ask,d as confirm,s as message,f as open,k as save};
@@ -0,0 +1,26 @@
1
+ import{h as ue,m as pe,D as me,a as ne,j as F,k as ae,t as ge,P as be,g as he}from"./index-BtLEIWKh.js";import{TimelineScene as fe}from"./scene-B_CpQ0qP.js";import"./three-D_1Qt16u.js";const ye={tokens:"Token counts",timestamps:"Session timestamps",messageCounts:"Message counts",messageTimestamps:"Message timestamps",model:"Model used",harness:"Harness used"},z={tokens:!0,timestamps:!0,messageCounts:!0,messageTimestamps:!0,model:!0,harness:!0};function ie(e){const r={...z};if(le(e))for(const i of Object.keys(r))typeof e[i]=="boolean"&&(r[i]=e[i]);return(!r.timestamps||!r.messageCounts)&&(r.messageTimestamps=!1),r}const oe=1e4,ve=2e6,we=1e5,ke="Always excluded: project and session names, messages, code, paths, source IDs, and costs. Anonymous groups and recorded branch links are included. Your GitHub username identifies this profile. Your published graph will appear in Explore graphs. Selected timestamps and usage will be public.",Se=/^(?:gpt-[3-6](?:\.[0-9])?(?:-(?:turbo|mini|nano|pro|codex|astra|instant|thinking|chat|latest|preview|[0-9]{4,8}))*|o[1-4](?:-(?:mini|pro|preview|[0-9]{4,8}))*|claude-(?:(?:sonnet|opus|haiku)-[3-5](?:[.-][0-9])?|[3-5](?:-[0-9])?-(?:sonnet|opus|haiku))(?:-(?:latest|thinking|[0-9]{8}))*|gemini-[1-4](?:\.[0-9])?-(?:pro|flash)(?:-(?:lite|preview|exp|latest|[0-9]{2,4}))*|deepseek-(?:chat|reasoner|v[3-4](?:\.[0-9])?|r1)|grok-[2-5](?:\.[0-9])?(?:-(?:fast|code|reasoning|non-reasoning|[0-9]))*|kimi-k[1-3](?:\.[0-9])?(?:-thinking)?|minimax-m[1-3](?:\.[0-9])?)$/i,Ce=e=>{const r=e.split("/").at(-1)||"";return r.length<=100&&Se.test(r)?r.toLowerCase():null},le=e=>!!e&&typeof e=="object"&&!Array.isArray(e),G=(e,r)=>le(e)&&Object.keys(e).length===r.length&&r.every(i=>Object.hasOwn(e,i)),B=(e,r=Number.MAX_SAFE_INTEGER)=>Number.isSafeInteger(e)&&e>=0&&e<=r,J=e=>B(e,Date.UTC(2100,0,1)),X=e=>e===null||B(e);function ce(e){const r=()=>{throw new Error("Invalid anonymous graph. Reopen the publishing preview and try again.")};if(!G(e,["version","settings","sessions"])||e.version!==1||!Array.isArray(e.sessions)||!G(e.settings,Object.keys(z))||Object.values(e.settings).some(g=>typeof g!="boolean"))return r();const i=e.settings;if(i.messageTimestamps&&(!i.timestamps||!i.messageCounts))return r();if(e.sessions.length<1||e.sessions.length>oe)throw new Error(`Choose between 1 and ${oe.toLocaleString("en")} sessions to publish.`);const t=["id","group","parent","fork",...i.timestamps?["timestamps"]:[],...i.tokens?["tokens"]:[],...i.messageCounts?["messages"]:[],...i.messageTimestamps?["messageTimes"]:[],...i.model?["model"]:[],...i.harness?["harness"]:[]];let u=0;for(let g=0;g<e.sessions.length;g++){const a=e.sessions[g];if(!G(a,t)||a.id!==g||!B(a.group,e.sessions.length-1))return r();for(const b of["parent","fork"])if(a[b]!==null&&(!B(a[b],e.sessions.length-1)||a[b]===g))return r();if(i.timestamps&&(!G(a.timestamps,["created","lastMessageAt"])||!J(a.timestamps.created)||a.timestamps.lastMessageAt!==null&&!J(a.timestamps.lastMessageAt))||i.tokens&&!X(a.tokens)||i.messageCounts&&(!G(a.messages,["count","untimed","partial"])||!X(a.messages.count)||!X(a.messages.untimed)||typeof a.messages.partial!="boolean")||i.messageTimestamps&&(!G(a.messageTimes,["values","limited"])||!Array.isArray(a.messageTimes.values)||a.messageTimes.values.length>2e3||typeof a.messageTimes.limited!="boolean"||a.messageTimes.values.some(b=>!J(b))||(u+=a.messageTimes.values.length,u>we))||i.model&&a.model!==null&&(typeof a.model!="string"||Ce(a.model)!==a.model)||i.harness&&a.harness!==null&&(typeof a.harness!="string"||!ue(a.harness)))return r()}const n=e.sessions,l=new Uint8Array(n.length);for(let g=0;g<n.length;g++){if(l[g])continue;const a=[[g,!1]];for(;a.length;){const[b,E]=a.pop();if(E){l[b]=2;continue}if(l[b]===1)return r();if(l[b]!==2){l[b]=1,a.push([b,!0]);for(const v of[n[b].parent,n[b].fork])v!==null&&a.push([v,!1])}}}if(new TextEncoder().encode(JSON.stringify(e)).length>ve)throw new Error("This graph is too large. Choose a smaller date range.");return e}function re(e,r){const i=ce(e),t=i.sessions.filter(l=>!r||r.has(l.id)).map(l=>({id:String(l.id),projectID:String(l.group),title:`Session ${l.id+1}`,directory:"",created:l.timestamps?.created??l.id*36e5,updated:l.timestamps?.created??l.id*36e5,tokens:l.tokens??null,cost:null,archived:!1,model:l.model??"",provider:"",agent:"",source:l.harness??void 0,activity:{firstMessageAt:null,lastMessageAt:l.timestamps?.lastMessageAt??null,userMessages:0,untimedUserMessages:0},...l.parent===null?{}:{parentID:String(l.parent)},...l.fork===null?{}:{forkID:String(l.fork)}})),u=[...new Set(i.sessions.map(l=>l.group))].map(l=>({id:String(l),name:`Group ${l+1}`,directory:"",worktrees:[]})),n=pe(t.map(l=>({...l,source:void 0})),u);for(const l of n.nodes)l.session.source=i.sessions[Number(l.session.id)].harness??void 0;return n}function xe(e){const r=e.settings.tokens?e.sessions.filter(t=>typeof t.tokens=="number"):[],i=r.reduce((t,u)=>t+u.tokens,0);return{sessionCount:e.sessions.length,tokenCount:r.length&&Number.isSafeInteger(i)?i:null,tokensPartial:r.length>0&&r.length<e.sessions.length}}function de(e){const r=xe(e),i=[`${r.sessionCount.toLocaleString()} sessions`];if(e.settings.tokens&&i.push(r.tokenCount===null?"Tokens unavailable":`${r.tokenCount.toLocaleString()} recorded tokens${r.tokensPartial?" (partial coverage)":""}`),e.settings.messageCounts){const t=e.sessions.filter(u=>u.messages?.count!=null);i.push(t.length?`${t.reduce((u,n)=>u+n.messages.count,0).toLocaleString()} recorded messages${t.length<e.sessions.length||e.sessions.some(u=>u.messages?.partial)?" (partial history)":""}`:"Message counts unavailable")}return i.join(" · ")}const V=e=>e==null?"Unknown":e.toLocaleString(),H=e=>e===null?"Unknown":new Date(e).toLocaleString();function Ae(e,r,i={}){const t=ce(r);let u=re(t);e.classList.add("public-viewer"),e.classList.toggle("public-viewer-full",!!i.fullscreen),e.innerHTML=`
2
+ <div class="public-canvas" aria-label="Interactive public session graph"></div>
3
+ <div class="public-toolbar"><button type="button" data-sessions aria-expanded="true">☷ Sessions</button><span class="public-badge">Public snapshot</span></div>
4
+ <nav class="public-view-controls" aria-label="Graph controls"><div class="public-view-switch"><button type="button" data-view="3d" aria-pressed="true">3D</button><button type="button" data-view="2d" aria-pressed="false">2D</button></div><button type="button" data-fit title="Fit view (F)">Fit view</button><button type="button" data-motion aria-pressed="true">Motion</button><button type="button" data-timeline aria-expanded="true">Timeline</button></nav>
5
+ <aside class="public-browser public-panel" aria-label="Public sessions">
6
+ <div class="public-panel-heading"><h2>Sessions <span data-count></span></h2><button type="button" data-close-list aria-label="Close sessions">×</button></div>
7
+ <label class="public-search"><span>Search public data</span><input type="search" placeholder="Session, group, model…" aria-label="Search public sessions"></label>
8
+ <div class="public-filters"><select data-group aria-label="Anonymous group"><option value="">All groups</option></select><select data-harness aria-label="Coding agent"><option value="">All agents</option></select><select data-days aria-label="Date range"><option value="0">All dates</option><option value="7">Last 7 days</option><option value="30">Last 30 days</option><option value="90">Last 90 days</option></select></div>
9
+ <div class="public-list" role="list" aria-label="Sessions"></div><button type="button" data-more hidden>Show more sessions</button>
10
+ </aside>
11
+ <aside class="public-session public-panel" aria-label="Public session details" hidden><div class="public-panel-heading"><h2 data-session-heading></h2><button type="button" data-close-detail aria-label="Close session details">×</button></div><div class="public-session-data"></div></aside>
12
+ <div class="public-tooltip" hidden></div>
13
+ <section class="public-playback public-panel" aria-label="Timeline controls"><div class="public-timeline-heading"><span data-period></span><select data-speed aria-label="Playback speed"><option value="0.5">0.5×</option><option value="1" selected>1×</option><option value="2">2×</option></select></div><div class="public-timeline-track"><button type="button" data-play aria-label="Play timeline">▶</button><div class="public-histogram-wrap"><div class="public-histogram" aria-hidden="true"></div><input type="range" min="0" max="1000" value="1000" aria-label="Graph playback position"></div><output></output></div><p data-summary></p></section>
14
+ <p class="public-hints">Drag to orbit · Scroll to zoom · <kbd>F</kbd> fit · <kbd>Esc</kbd> clear</p>
15
+ <p class="public-announcement" role="status"></p>`;const n=s=>e.querySelector(s),l=n(".public-canvas"),g=n(".public-session"),a=n(".public-session-data"),b=n(".public-list"),E=n("[data-group]"),v=n("[data-harness]"),C=n("[data-days]"),L=n("input[type=search]"),h=n("input[type=range]"),k=n("[data-play]"),S=matchMedia("(prefers-reduced-motion: reduce)"),I=new AbortController,P={...me,muted:!0,clickSounds:!1,focusDimming:!1,messageDots:t.settings.messageTimestamps};let f,o=null,m=t.sessions,x=80,$=0,w=1,q=0,Q=!1,O=[],W=ne(u.nodes.map(s=>s.session));const M=()=>{cancelAnimationFrame($),$=0,f?.setPlaying(!1),k.textContent="▶",k.setAttribute("aria-label","Play timeline")},Z=s=>{n(".public-announcement").textContent=s},T=(s,p)=>{const c=document.createElement("p"),y=document.createElement("strong");y.textContent=`${s}: `,c.append(y,p),a.append(c)};function D(s,p=!1){const c=s===null?void 0:t.sessions[Number(s)];o=c&&m.some(d=>d.id===c.id)?c.id:null,f?.select(o===null?null:String(o)),f?.setEvents([]),O=[],a.replaceChildren(),g.hidden=o===null;for(const d of b.querySelectorAll("button"))d.setAttribute("aria-pressed",String(d.dataset.session===String(o)));if(o===null||!c)return;M(),w=1,U(),n("[data-session-heading]").textContent=`Session ${c.id+1}`,T("Group",`Group ${c.group+1}`),c.timestamps&&(T("Created",H(c.timestamps.created)),T("Last message",H(c.timestamps.lastMessageAt))),"tokens"in c&&T("Tokens",V(c.tokens)),c.messages&&(T("Messages",`${V(c.messages.count)}${c.messages.partial?" · partial history":""}`),T("Untimed messages",V(c.messages.untimed))),"model"in c&&T("Model",c.model??"Unknown or private alias"),"harness"in c&&T("Harness",c.harness?F(c.harness):"Unknown");for(const[d,A]of[["Fork of",c.fork],["Child of",c.parent]])if(A!==null){const j=document.createElement("p"),N=document.createElement("button");j.append(`${d} `),N.textContent=`Session ${A+1}`,N.type="button",N.disabled=!m.some(_=>_.id===A),N.onclick=()=>D(String(A),!0),j.append(N),a.append(j)}if(c.messageTimes){T("Message timestamps",`${c.messageTimes.values.length.toLocaleString()}${c.messageTimes.limited?" · limited coverage":""}`);const d=document.createElement("details"),A=document.createElement("summary");A.textContent="View published timestamps";const j=document.createElement("pre");j.textContent=c.messageTimes.values.map(H).join(`
16
+ `)||"No recorded timestamps.",d.append(A,j),a.append(d),O=c.messageTimes.values.map((N,_)=>({id:`public-${_}`,ordinal:_,kind:"message",name:"Message",role:"user",time:N,timeSource:"recorded",preview:""})),f?.setEvents(O)}const y=document.createElement("p");y.className="public-detail-note",y.textContent="Only published metadata. Names, messages, code, paths, and costs stay private.",a.append(y),p&&f?.focus(String(c.id)),Z(`Selected Session ${c.id+1}.`)}function ee(){b.replaceChildren(),n("[data-count]").textContent=String(m.length);const s=new Map(u.nodes.map(p=>[Number(p.session.id),p.color]));for(const p of m.slice(0,x)){const c=document.createElement("div"),y=document.createElement("button"),d=document.createElement("span"),A=document.createElement("small");c.setAttribute("role","listitem"),y.type="button",y.dataset.session=String(p.id),y.setAttribute("aria-pressed",String(o===p.id)),y.style.setProperty("--session-color",s.get(p.id)||"#b0e9d6"),d.textContent=`Session ${p.id+1}`,A.textContent=[`Group ${p.group+1}`,p.harness?F(p.harness):"",p.model||""].filter(Boolean).join(" · "),y.append(d,A),y.onclick=()=>D(String(p.id),!0),c.append(y),b.append(c)}m.length||(b.textContent="No sessions match these filters."),n("[data-more]").hidden=x>=m.length}function U(){f?.setCutoff(w),h.value=String(Math.round(w*1e3));const s=u.start+(u.end-u.start)*w;n("output").textContent=t.settings.timestamps&&u.nodes.length?he(s,u.end-u.start):`${W(s,w===1)} sessions`,n(".public-histogram-wrap").style.setProperty("--progress",`${w*100}%`)}function R(){M(),x=80,w=1;const s=L.value.toLowerCase().trim(),p=t.settings.timestamps&&Number(C.value)?Math.max(...t.sessions.map(d=>d.timestamps.lastMessageAt??d.timestamps.created))-Number(C.value)*864e5:0;m=t.sessions.filter(d=>(!E.value||String(d.group)===E.value)&&(!v.value||d.harness===v.value)&&(!p||Math.max(d.timestamps.created,d.timestamps.lastMessageAt??0)>=p)&&(!s||`session ${d.id+1} group ${d.group+1} ${d.model??""} ${d.harness?F(d.harness):""}`.toLowerCase().includes(s))),u=re(t,new Set(m.map(d=>d.id))),W=ne(u.nodes.map(d=>d.session)),f?.setGraph(u,!0),D(null);const c=ge(u.nodes.map(d=>d.session.created),u.start,u.end,50),y=Math.max(1,...c);n(".public-histogram").replaceChildren(...c.map(d=>{const A=document.createElement("span");return A.style.height=`${Math.max(4,d/y*100)}%`,A})),n("[data-period]").textContent=t.settings.timestamps?m.length?`${new Date(u.start).toLocaleDateString()} — ${new Date(u.end).toLocaleDateString()}`:"No sessions":"Session order · timestamps not shared",n("[data-summary]").textContent=de({...t,sessions:m}),k.disabled=!m.length,h.disabled=!m.length,ee(),U()}try{f=new fe(l,{onSelect:s=>D(s),onPlaybackInterrupt:M,onHover:(s,p,c)=>{const y=n(".public-tooltip");if(y.hidden=!s,s){const d=e.getBoundingClientRect();y.textContent=s.session.title,y.style.left=`${Math.max(8,Math.min(e.clientWidth-135,p-d.left+14))}px`,y.style.top=`${Math.max(8,c-d.top-35)}px`}},onEvent:s=>{const p=O.find(c=>c.id===s);p&&(f?.focusEvent(p),Z(`Published message timestamp: ${H(p.time)}.`))},onEventHover(){}}),f.applyPreferences(P)}catch{l.textContent="3D rendering is unavailable. Explore the published data in the sessions panel.",n(".public-view-controls").hidden=!0}[...new Set(t.sessions.map(s=>s.group))].sort((s,p)=>s-p).forEach(s=>E.add(new Option(`Group ${s+1}`,String(s)))),[...new Set(t.sessions.flatMap(s=>s.harness?[s.harness]:[]))].sort().forEach(s=>v.add(new Option(F(s),s))),v.hidden=!t.settings.harness,C.hidden=!t.settings.timestamps;for(const s of[E,v,C])s.onchange=R;L.oninput=R,n("[data-more]").onclick=()=>{x+=80,ee()};const Y=s=>{n(".public-browser").hidden=!s,n("[data-sessions]").setAttribute("aria-expanded",String(s))};n("[data-sessions]").onclick=()=>Y(n(".public-browser").hidden),n("[data-close-list]").onclick=()=>Y(!1),n("[data-close-detail]").onclick=()=>D(null),n("[data-fit]").onclick=()=>f?.reset(),n("[data-timeline]").onclick=()=>{const s=n(".public-playback");s.hidden=!s.hidden,n("[data-timeline]").setAttribute("aria-expanded",String(!s.hidden))};for(const s of e.querySelectorAll("[data-view]"))s.onclick=()=>{P.view=s.dataset.view==="2d"?"2d":"3d",f?.setFlat(s.dataset.view==="2d");for(const p of e.querySelectorAll("[data-view]"))p.setAttribute("aria-pressed",String(p===s))};const K=()=>{f?.applyPreferences(P),n("button[data-motion]").setAttribute("aria-pressed",String(ae(P,S.matches)))};n("button[data-motion]").onclick=()=>{P.motion=ae(P,S.matches)?"off":"on",K()},S.addEventListener("change",K,{signal:I.signal});const te=s=>{Q||(w=Math.min(1,w+Math.min(s-q,100)/be*Number(n("[data-speed]").value)),q=s,U(),w===1?M():$=requestAnimationFrame(te))};k.onclick=()=>{if($)return M();w>=1&&(w=0),q=performance.now(),f?.setPlaying(!0),k.textContent="Ⅱ",k.setAttribute("aria-label","Pause timeline"),$=requestAnimationFrame(te)},h.oninput=()=>{M(),w=Number(h.value)/1e3,U()},e.tabIndex=-1,e.addEventListener("keydown",s=>{s.target.matches("input, select, textarea")||s.metaKey||s.ctrlKey||s.altKey||(s.key.toLowerCase()==="f"&&(s.preventDefault(),f?.reset()),s.key==="Escape"&&D(null),s.key==="/"&&(s.preventDefault(),Y(!0),L.focus()))},{signal:I.signal}),document.addEventListener("visibilitychange",()=>{document.hidden&&M(),f?.setSuspended(document.hidden)},{signal:I.signal});const se=new IntersectionObserver(([s])=>{s.isIntersecting||M(),f?.setSuspended(!s.isIntersecting||document.hidden)});return se.observe(e),R(),K(),{dispose(){Q=!0,M(),I.abort(),se.disconnect(),f?.dispose(),e.replaceChildren(),e.classList.remove("public-viewer","public-viewer-full")}}}function Te(e,r){const i=document.createElement("dialog");i.className="publishing-dialog",i.setAttribute("aria-labelledby","publishing-title"),i.innerHTML=`<header><h2 id="publishing-title">Publish SessionGraph</h2><button class="text-button" data-close aria-label="Close publishing">Close</button></header>
17
+ <p class="publishing-disclosure"></p><p class="publishing-scope"></p>
18
+ <fieldset class="publishing-fields"><legend>Publishing settings</legend>${Object.entries(ye).map(([o,m])=>`<label><input type="checkbox" data-field="${o}"><span>${m}</span></label>`).join("")}</fieldset>
19
+ <p class="publishing-note">Message timestamps require session timestamps and message counts. Models show the last recorded public model ID; private aliases stay hidden. Changes apply when you publish again.</p>
20
+ <div class="publishing-preview"></div><p class="publishing-summary"></p>
21
+ <div class="publishing-account"><span data-account>Not signed in</span><button class="secondary-button" data-login>Sign in with GitHub</button><button class="text-button" data-logout hidden>Sign out</button><a class="secondary-button" href="https://sessiongraph.ai/account" target="_blank" rel="noopener noreferrer" data-manage hidden>Account &amp; organizations ↗</a></div>
22
+ <div class="publishing-connect" hidden><p>Confirm this code in your browser: <strong data-code></strong></p><a class="secondary-button" data-connect target="_blank" rel="noopener noreferrer">Continue in browser ↗</a><button class="text-button" data-check>Check login</button></div>
23
+ <p role="status" class="publishing-status"></p>
24
+ <label class="publishing-confirm"><input type="checkbox" data-confirm><span>I reviewed this preview and want to make the selected data public under my GitHub username.</span></label>
25
+ <footer><button class="text-button" data-animation>Export animation instead</button><button class="text-button" data-json disabled>View exact JSON</button><button class="secondary-button" data-remove hidden>Unpublish</button><button class="primary-button" data-publish disabled>Publish graph</button></footer>
26
+ <a class="publishing-link" target="_blank" rel="noopener noreferrer" hidden></a><pre class="publishing-json" hidden></pre>`,document.body.append(i);const t=o=>i.querySelector(o);t(".publishing-disclosure").textContent=ke;let u=[],n={...z},l,g,a=null,b=!1,E=0,v=!1,C=0,L=!1;const h=o=>{t(".publishing-status").textContent=o},k=async(o,m="GET",x)=>{const $=await fetch(`/api/sessiongraph/publishing/${o}`,{method:m,headers:{"Content-Type":"application/json","x-sessiongraph-action":"1"},...x===void 0?{}:{body:JSON.stringify(x)}}),w=await $.json();if(!$.ok)throw new Error(w.error||"Please try again.");return w};function S(){t("[data-publish]").disabled=v||!g||!a||!t("[data-confirm]").checked,t("[data-publish]").textContent=b?"Update public graph":"Publish graph",t("[data-remove]").hidden=!b,t("[data-remove]").disabled=v,t("[data-login]").hidden=!!a,t("[data-logout]").hidden=!a,t("[data-logout]").disabled=v,t("[data-manage]").hidden=!a,t("[data-account]").textContent=a?`Signed in as @${a}`:"Not signed in",t("[data-json]").disabled=!g;for(const m of i.querySelectorAll("[data-field]")){const x=m.dataset.field;m.checked=n[x],m.disabled=v||x==="messageTimestamps"&&(!n.timestamps||!n.messageCounts)}const o=t(".publishing-link");o.hidden=!a||!b,a&&(o.href=`https://sessiongraph.ai/@${a}`,o.textContent=o.href)}async function I(){const o=++E;if(g=void 0,t("[data-confirm]").checked=!1,l?.dispose(),l=void 0,t(".publishing-json").hidden=!0,t(".publishing-json").textContent="",S(),!u.length){t(".publishing-preview").textContent="Select sessions on the map to preview a public graph.";return}t(".publishing-preview").textContent="Preparing local preview…";try{const m=await k("preview","POST",{ids:u,settings:n});if(!i.open||o!==E)return;g=m,n=m.graph.settings,l=Ae(t(".publishing-preview"),m.graph),t(".publishing-summary").textContent=de(m.graph),h("Preview prepared locally. Nothing has been uploaded.")}catch(m){o===E&&(t(".publishing-preview").textContent="",h(m.message))}S()}async function P(){const o=await k("status");i.open&&(a=o.username??null,b=!!o.publication,S())}async function f(){if(!(L||!i.open)){L=!0;try{(await k("poll","POST",{})).username&&(window.clearInterval(C),C=0,t(".publishing-connect").hidden=!0,await P(),h("Signed in. Review the preview before publishing."))}catch(o){window.clearInterval(C),C=0,h(o.message)}finally{L=!1}}}t("[data-login]").onclick=async()=>{try{const o=await k("login","POST",{});t("[data-code]").textContent=o.code,t("[data-connect]").href=o.url,t(".publishing-connect").hidden=!1,window.clearInterval(C),C=window.setInterval(()=>{f()},4e3),t("[data-connect]").focus(),h("Continue in your browser to connect this app.")}catch(o){h(o.message)}},t("[data-check]").onclick=()=>{f()},t("[data-logout]").onclick=async()=>{v=!0,S();try{await k("logout","POST",{}),a=null,b=!1,g=void 0,h("Signed out. Your published graph stays online until you unpublish it.")}catch(o){h(o.message)}finally{v=!1,S()}};for(const o of i.querySelectorAll("[data-field]"))o.onchange=()=>{n=ie({...n,[o.dataset.field]:o.checked}),I()};return t("[data-confirm]").onchange=S,t("[data-publish]").onclick=async()=>{if(!(!g||!t("[data-confirm]").checked)){v=!0,S(),h("Publishing…");try{await k("publish","POST",{id:g.id,confirmed:!0}),b=!0,g=void 0,t("[data-confirm]").checked=!1,h("Published. Future imports stay local. Publish again to update this snapshot.")}catch(o){h(o.message)}finally{v=!1,S()}}},t("[data-remove]").onclick=async()=>{v=!0,S();try{await k("unpublish","POST",{}),b=!1,h("Unpublished. Your public graph has been removed.")}catch(o){h(o.message)}finally{v=!1,S()}},t("[data-json]").onclick=()=>{const o=t(".publishing-json");o.hidden=!o.hidden,o.textContent=g?JSON.stringify(g.graph,null,2):""},t("[data-animation]").onclick=()=>{i.close(),r()},t("[data-close]").onclick=()=>i.close(),i.addEventListener("close",()=>{E++,window.clearInterval(C),C=0,l?.dispose(),l=void 0,g=void 0,e()}),{async open(o){if(i.open)return;u=[...o],a=null,b=!1,g=void 0,h(""),t(".publishing-connect").hidden=!0,t(".publishing-scope").textContent=`${u.length.toLocaleString()} sessions in the current filtered view. Change filters on the map to choose what you publish.`,i.showModal(),e(),S();const m=P().catch(x=>h(x.message));try{n=ie(await k("settings")),await I()}catch(x){h(x.message)}await m},dispose(){window.clearInterval(C),l?.dispose(),i.remove()}}}export{Te as createPublishing};
@@ -0,0 +1 @@
1
+ .public-viewer{position:relative;height:min(80vh,760px);min-height:520px;min-width:0;border:1px solid #c9e3db1a;border-radius:12px;background:#080e13;overflow:hidden;color:#dbe7e3;font:13px/1.5 Geist,sans-serif;isolation:isolate}.public-viewer-full{height:100%;min-height:0;border:0;border-radius:0}.public-viewer [hidden]{display:none!important}.public-canvas{position:absolute;inset:0;display:grid;place-items:center}.public-canvas canvas{display:block}.public-toolbar,.public-view-controls{position:absolute;top:16px;display:flex;gap:5px;align-items:center;padding:5px;border:1px solid #c9e3db24;background:#0c171de8;border-radius:10px;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.public-toolbar{left:16px}.public-view-controls{right:16px}.public-view-switch{display:flex}.public-badge{padding:0 8px;color:#91afa2;font-size:11px}.public-viewer button,.public-viewer select,.public-viewer input[type=search]{box-sizing:border-box;font:inherit;color:inherit;border:1px solid #c9e3db24;border-radius:6px;background:#0e1b22;padding:7px 10px;min-width:0}.public-viewer button{cursor:pointer}.public-viewer button:hover{background:#b0e9d615}.public-viewer button:disabled{opacity:.5;cursor:default}.public-viewer :is(button,input,select):focus-visible{outline:2px solid #b0e9d6;outline-offset:2px}.public-viewer button[aria-pressed=true]{color:#b0e9d6;background:#b0e9d614;border-color:#b0e9d64d}.public-panel{position:absolute;background:#0b141aeb;border:1px solid #c9e3db24;border-radius:12px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:0 12px 40px #0002}.public-browser{top:76px;left:16px;width:265px;max-height:calc(100% - 212px);display:flex;flex-direction:column}.public-panel-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px}.public-panel-heading h2{margin:0;font-size:13px;font-weight:500}.public-panel-heading [data-count]{margin-left:7px;font-size:11px;color:#8da89d}.public-panel-heading button{border:0;background:none;font-size:20px;line-height:1;padding:3px 6px}.public-search{margin:0 12px 10px}.public-search span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.public-search input{width:100%}.public-filters{display:grid;grid-template-columns:1fr;gap:6px;padding:0 12px 12px;border-bottom:1px solid #c9e3db1a}.public-list{overflow:auto;min-height:60px;padding:6px}.public-list button{display:block;width:100%;text-align:left;border:0;background:none;padding:10px 12px}.public-list button>span{display:flex;align-items:center;gap:8px}.public-list button>span:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--session-color);flex-shrink:0}.public-list small{display:block;color:#94a69f;font-size:10px;margin:5px 0 0 13px;overflow-wrap:anywhere}.public-browser>[data-more]{margin:6px 12px 12px;flex-shrink:0}.public-session{right:16px;top:76px;width:280px;max-height:calc(100% - 212px);overflow:auto}.public-session-data{padding:0 14px 14px}.public-session p{margin:7px 0;line-height:1.7;color:#a1b6ad;overflow-wrap:anywhere;font-size:12px}.public-session strong{font-weight:500;color:#dbe7e3}.public-session pre{white-space:pre-wrap;font-size:10px;max-height:160px;overflow:auto}.public-session details{margin-top:12px}.public-session .public-detail-note{margin-top:16px;padding-top:12px;border-top:1px solid #c9e3db1a;font-size:11px}.public-playback{bottom:30px;left:50%;transform:translate(-50%);width:min(600px,calc(100% - 32px));padding:12px 16px}.public-timeline-heading,.public-timeline-track{display:flex;align-items:center;gap:12px}.public-timeline-heading{justify-content:space-between;font-size:11px;color:#94a69f;margin-bottom:10px}.public-timeline-heading select{padding:2px 6px}.public-histogram-wrap{position:relative;height:30px;flex:1;min-width:40px}.public-histogram{position:absolute;inset:0;display:flex;align-items:end;gap:3px;pointer-events:none}.public-histogram span{flex:1;background:#b0e9d652;border-radius:2px 2px 0 0}.public-histogram-wrap:after{content:"";position:absolute;left:var(--progress);top:0;bottom:0;width:1px;background:#b0e9d6;pointer-events:none}.public-playback input{position:absolute;inset:0;width:100%;margin:0;height:100%;opacity:.01;cursor:pointer}.public-playback input:focus-visible{opacity:1}.public-playback output{font-size:11px;text-align:right;min-width:80px;max-width:135px}.public-playback p{color:#91afa2;font-size:10px;margin:10px 0 0}.public-hints{position:absolute;bottom:6px;left:16px;margin:0;color:#6e8980;font-size:9px;pointer-events:none}.public-tooltip{position:absolute;padding:6px 10px;background:#0b141aee;border:1px solid #c9e3db24;border-radius:6px;pointer-events:none;font-size:11px}.public-announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.public-viewer .scene-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.public-viewer .scene-label{position:absolute;left:0;top:0;max-width:155px;padding:5px 8px;font:10px monospace;color:var(--label-color);opacity:0;background:#080f1266;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.public-viewer .scene-label.visible{opacity:.55}@media(max-width:760px){.public-toolbar{left:10px;top:10px}.public-view-controls{right:10px;top:10px}.public-badge,.public-view-controls [data-timeline]{display:none}.public-viewer button,.public-viewer select{font-size:11px;padding:7px}.public-browser{top:64px;left:10px;width:220px;max-height:calc(100% - 225px)}.public-session{top:64px;right:10px;width:min(280px,calc(100% - 20px));max-height:calc(100% - 225px)}.public-playback{padding:10px;bottom:26px;width:calc(100% - 20px)}.public-playback output{min-width:64px;max-width:100px;font-size:10px}}
@@ -1,4 +1,4 @@
1
- import{M as oe,C as L,S as ce,a as M,G,P as ae,I as ne,b as k,D as F,c as I,A as T,d as Y,e as N,B as D,F as S,f as re,g as H,W as ke,h as Pe,O as Se,i as Ae,H as Ce,E as Re,R as Fe,U as Ee,V as O,j as Ie,k as Te,l as ze,m as Be,n as Ue,o as V,p as Ge,q as g,r as De,s as ee,t as Oe,u as Le,v as j,w as te,x as ie,y as He,L as Ne,z as de,J as ue,K as Xe,N as _e}from"./three-D_1Qt16u.js";import{k as ge,l as R,c as Ve,D as $e,n as je,o as C,q as $,r as We,u as qe,v as Ye,w as se,x as fe}from"./index-D-Ue5tsr.js";const Ke=["svg",ge,[["path",{d:"M12 8V4H8"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}],["path",{d:"M2 14h2"}],["path",{d:"M20 14h2"}],["path",{d:"M15 13v2"}],["path",{d:"M9 13v2"}]]];const Qe=["svg",ge,[["circle",{cx:"12",cy:"8",r:"5"}],["path",{d:"M20 21a8 8 0 0 0-16 0"}]]],ye=`
1
+ import{M as oe,C as L,S as ce,a as M,G,P as ae,I as ne,b as k,D as F,c as I,A as T,d as Y,e as N,B as D,F as S,f as re,g as H,W as ke,h as Pe,O as Se,i as Ae,H as Ce,E as Re,R as Fe,U as Ee,V as O,j as Ie,k as Te,l as ze,m as Be,n as Ue,o as V,p as Ge,q as g,r as De,s as ee,t as Oe,u as Le,v as j,w as te,x as ie,y as He,L as Ne,z as de,J as ue,K as Xe,N as _e}from"./three-D_1Qt16u.js";import{l as ge,n as R,c as Ve,D as $e,k as je,o as C,q as $,r as We,u as qe,v as Ye,w as se,x as fe}from"./index-BtLEIWKh.js";const Ke=["svg",ge,[["path",{d:"M12 8V4H8"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}],["path",{d:"M2 14h2"}],["path",{d:"M20 14h2"}],["path",{d:"M15 13v2"}],["path",{d:"M9 13v2"}]]];const Qe=["svg",ge,[["circle",{cx:"12",cy:"8",r:"5"}],["path",{d:"M20 21a8 8 0 0 0-16 0"}]]],ye=`
2
2
  attribute float nodeIndex;
3
3
  uniform float uSelected;
4
4
  uniform float uHovered;
@@ -0,0 +1,8 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-RfmyzBnX.js","assets/index-BtLEIWKh.js","assets/index-BnhC5gO7.css","assets/index-BNX-8Jnn.js"])))=>i.map(i=>d[i]);
2
+ import{TimelineScene as Y}from"./scene-B_CpQ0qP.js";import{i as Z,_ as j,c as K,S as Q,p as ee,a as te,t as ae,s as se,b as U,d as re,e as oe,f as ne,g as ie}from"./index-BtLEIWKh.js";import"./three-D_1Qt16u.js";const le="#b0e9d6",ce="#dbe7e3",z=128,de=10,ue="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22",he=[[102,24],[36,40],[22,96]],pe=10;let W;function ye(e,t,s,r,l=le){W??=new Path2D(ue),e.save(),e.translate(t,s),e.scale(r/z,r/z),e.strokeStyle=e.fillStyle=l,e.lineWidth=de,e.lineCap=e.lineJoin="round",e.stroke(W);for(const[d,n]of he)e.beginPath(),e.arc(d,n,pe,0,Math.PI*2),e.fill();e.restore()}const fe="Cosmic Wobbly Disco Sneaky Bouncy Galactic Crispy Dizzy Fuzzy Noodle Groovy Sleepy Spicy Jolly Loopy Squishy Turbo Giggly Velvet Soggy Zippy Fluffy Moonwalking Wiggly Fizzy Snazzy Goofy Jazzy Tiny Chunky Dapper Wacky".split(" "),me="Wombat Pickle Pancake Badger Potato Narwhal Noodle Goblin Otter Turnip Hamster Comet Dumpling Goose Biscuit Llama Muffin Squid Raccoon Toaster Waffle Penguin Yeti Pudding Walrus Taco Jellybean Platypus Sloth Cactus Donut Mongoose".split(" ");function be(e,t=()=>crypto.getRandomValues(new Uint32Array(1))[0]/2**32){const s=fe.flatMap(r=>me.map(l=>`${r} ${l}`));for(let r=s.length-1;r>0;r--){const l=Math.floor(t()*(r+1));[s[r],s[l]]=[s[l],s[r]]}return Array.from({length:e},(r,l)=>{const d=Math.floor(l/s.length);return`Project ${"Mega".repeat(d)}${s[l%s.length]}`})}function ve(e){const t=be(e.lanes.length),s=new Map(e.nodes.map((n,a)=>[n.session.id,`session-${a}`])),r=new Map(e.lanes.flatMap((n,a)=>n.nodes.map(o=>[o.session.id,`project-${a}`]))),l=e.nodes.map(n=>{const a=n.session,o={id:s.get(a.id),title:"Session",projectID:r.get(a.id),directory:"",created:a.created,updated:a.created,activity:a.activity&&{firstMessageAt:a.activity.firstMessageAt,lastMessageAt:a.activity.lastMessageAt,userMessages:a.activity.userMessages,untimedUserMessages:a.activity.untimedUserMessages},archived:!1,model:"",provider:"",agent:"",cost:null,source:a.source==="continue"?"continue":a.source==="opencode"||!a.source?"opencode":"unknown",tokens:a.tokens};return a.parentID&&s.has(a.parentID)&&(o.parentID=s.get(a.parentID)),a.forkID&&s.has(a.forkID)&&(o.forkID=s.get(a.forkID)),{session:o,position:[...n.position],startPosition:[...n.startPosition],color:n.color,radius:n.radius}}),d=new Map(l.map(n=>[n.session.id,n]));return{start:e.start,end:e.end,timeFrame:e.timeFrame&&{...e.timeFrame},nodes:l,edges:e.edges.map(n=>({from:s.get(n.from),to:s.get(n.to),kind:n.kind})),lanes:e.lanes.map((n,a)=>({key:`project-${a}`,label:t[a],color:n.color,kind:"directory",y:n.y,z:n.z,nodes:n.nodes.map(o=>d.get(s.get(o.session.id)))}))}}const $={gif:{label:"GIF",description:"GIF animation",mime:"image/gif",filename:"sessiongraph-playback.gif"},mp4:{label:"MP4",description:"MP4 video",mime:"video/mp4",filename:"sessiongraph-playback.mp4"}},x=`My coding sessions, visualized with SessionGraph.
3
+ https://github.com/arvindell/sessiongraph`,ge=`https://x.com/intent/tweet?text=${encodeURIComponent(x)}`,V=e=>e instanceof Error&&e.name==="AbortError";async function we(e,t,s){const{label:r,description:l,mime:d,filename:n}=$[s];try{if(Z()){const[{save:a},{writeFile:o}]=await Promise.all([j(()=>import("./index-RfmyzBnX.js"),__vite__mapDeps([0,1,2])),j(()=>import("./index-BNX-8Jnn.js"),__vite__mapDeps([3,1,2]))]),h=await a({title:`Save SessionGraph ${r}`,defaultPath:n,filters:[{name:l,extensions:[s]}]});if(!h)return"cancelled";await o(h,new Uint8Array(await e.arrayBuffer()))}else{const a=window.showSaveFilePicker;if(a){const h=await(await a.call(window,{suggestedName:n,types:[{description:l,accept:{[d]:[`.${s}`]}}]})).createWritable();try{await h.write(e),await h.close()}catch(c){throw await h.abort().catch(()=>{}),c}}else{const o=document.createElement("a");return o.href=t,o.download=n,document.body.append(o),o.click(),o.remove(),"downloaded"}}return"saved"}catch(a){if(V(a))return"cancelled";throw a}}const A=960,T=600,Se=e=>Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e);function ke(e,t,s,r,l,d){const o=T-122,h=Math.max(1,...r);e.save(),ye(e,24,14,28),e.fillStyle=ce,e.font='600 14px "Geist Variable", sans-serif',e.textAlign="left",e.textBaseline="middle",e.fillText("SessionGraph",58,28),e.restore();for(let p=0;p<r.length;p++){const f=Math.max(2,r[p]/h*22);e.fillStyle=p/r.length<=s?"#91bfae":"#253d39",e.fillRect(260+p/r.length*440,o-f,440/r.length-2,f)}e.fillStyle="#d6f4e8",e.fillRect(260+440*s,o-27,1,31);const c=t.start+(t.end-t.start)*s,E=l.at(c,s===1).tokens;e.textAlign="center",e.fillStyle="#a0baae",e.font='12px "IBM Plex Mono", monospace',e.fillText(ie(c,t.end-t.start),A/2,o+23),e.fillStyle="#e7f5ee",e.font='36px "Geist Variable", sans-serif',e.fillText(d(c,s===1).toLocaleString("en"),A/2-105,o+66),e.fillText(l.recorded?Se(E):"—",A/2+105,o+66),e.font='12px "Geist Variable", sans-serif',e.fillStyle="#92b0a3",e.fillText("Sessions",A/2-105,o+87),e.fillText("Burnt tokens",A/2+105,o+87),e.textAlign="left"}async function Ae(e,t,s,r,l){r.throwIfAborted();const{label:d,mime:n}=$[s],a=ee(e.nodes.map(b=>b.session)),o=te(e.nodes.map(b=>b.session)),h=ae(e.nodes.map(b=>se(b.session)),e.start,e.end),c=document.createElement("div");c.className="share-render-host",c.setAttribute("aria-hidden","true"),c.style.cssText=`position:fixed;left:-12000px;top:0;width:${A}px;height:${T}px;pointer-events:none;visibility:hidden`,document.body.append(c);const E=document.createElement("canvas");E.width=A,E.height=T;const p=E.getContext("2d",{willReadFrequently:!0});let f,m;try{if(!p)throw new Error("Canvas export is unavailable.");f=new Y(c,{onSelect(){},onHover(){},onPlaybackInterrupt(){},onEvent(){},onEventHover(){}},{manual:!0}),f.applyPreferences({...t,quality:"balanced",motion:"on",labels:!0,focusDimming:!1,trails:t.trails==="selected"?"all":t.trails}),f.setGraph(e,!0),f.prepareCapture(),await document.fonts.ready,r.throwIfAborted(),m=s==="mp4"?new Worker(new URL("/assets/mp4-worker-HFPra5JP.js",import.meta.url),{type:"module"}):new Worker(new URL("/assets/gif-worker-CghHEBpp.js",import.meta.url),{type:"module"});const b=(w,I=[])=>new Promise((C,v)=>{r.throwIfAborted();const S=()=>{clearTimeout(P),r.removeEventListener("abort",g),m.onmessage=null,m.onerror=null},g=()=>{S(),v(r.reason)},P=setTimeout(()=>{S(),v(new Error(`${d} encoding timed out. Please try again.`))},6e4);r.addEventListener("abort",g,{once:!0}),m.onmessage=D=>{S(),D.data.error?v(new Error(D.data.error)):C(D.data)},m.onerror=()=>{S(),v(new Error(`Could not start the ${d} encoder.`))},m.postMessage(w,I)});s==="mp4"&&await b({init:!0,width:A,height:T});for(let w=0;w<U;w++){r.throwIfAborted();const I=re(w);f.captureFrame(I,1/oe,p,ne(w)),ke(p,e,I,h,a,o);const C=p.getImageData(0,0,A,T).data.buffer;await b({rgba:C,width:A,height:T},[C]),l((w+1)/U)}const R=await b({finish:!0});return new Blob([R.bytes],{type:n})}finally{m?.terminate(),f?.dispose(),c.remove()}}function Ie(e){const t=document.createElement("dialog");t.className="share-dialog",t.setAttribute("aria-labelledby","share-title"),t.innerHTML=`<h2 id="share-title">SessionGraph</h2><p>Project and sessions names are hidden</p>
4
+ <div class="share-formats" role="group" aria-label="Animation format"><button data-format="gif" aria-pressed="true">GIF</button><button data-format="mp4" aria-pressed="false">MP4 video</button></div>
5
+ <div class="share-preview"><img alt="SessionGraph playback with hidden project and session names" hidden/><video aria-label="SessionGraph playback with hidden project and session names" muted loop playsinline controls hidden></video><div class="share-progress"><progress max="100" value="0" aria-label="Creating GIF"></progress><span role="status">Creating GIF… 0%</span></div></div>
6
+ <p class="share-notice" role="status" hidden></p>
7
+ <div class="share-actions"><button class="text-button share-close">Cancel</button><button class="secondary-button share-retry" hidden>Try again</button><a class="secondary-button share-x" target="_blank" rel="noopener noreferrer" hidden>Share in X</a><button class="secondary-button share-system" aria-label="Open share tray" aria-controls="playback-share-tray" aria-expanded="false" hidden>Share…</button><button class="primary-button share-save" hidden>Save GIF</button></div>
8
+ <section id="playback-share-tray" class="share-tray" aria-label="Share options" hidden><p>Save the animation to attach it in any app.</p><textarea class="share-caption" aria-label="Share caption" readonly rows="3"></textarea><div><button class="secondary-button share-copy">Copy caption</button><a class="secondary-button share-x" target="_blank" rel="noopener noreferrer">Share in X</a><button class="secondary-button share-tray-save">Save GIF</button></div></section>`,document.body.append(t);const s=t.querySelector("img"),r=t.querySelector("video"),l=t.querySelector("progress"),d=t.querySelector('[role="status"]'),n=t.querySelector(".share-progress"),a=t.querySelector(".share-close"),o=t.querySelector(".share-save"),h=t.querySelector(".share-retry"),c=t.querySelector(".share-system"),E=t.querySelector(".share-actions .share-x"),p=t.querySelector(".share-tray"),f=t.querySelector(".share-notice"),m=t.querySelector(".share-tray-save"),b=t.querySelector(".share-copy"),R=t.querySelector(".share-caption");R.value=x;const w=t.querySelectorAll("[data-format]"),I=K(Q);I.setAttribute("aria-hidden","true"),I.setAttribute("stroke-width","1.5"),c.prepend(I);let C,v,S,g,P,D,_="gif",H=Promise.resolve();const F=new Map,M=i=>{f.textContent=i,f.hidden=!i},G=i=>{p.hidden=!i,c.setAttribute("aria-expanded",String(i)),i&&b.focus()},B=()=>{C?.abort(),C=void 0,s.removeAttribute("src"),r.pause(),r.removeAttribute("src"),r.load(),g&&URL.revokeObjectURL(g),g=void 0,v=void 0,S=void 0,G(!1),M(""),t.setAttribute("aria-busy","false")};for(const i of t.querySelectorAll(".share-x"))i.href=ge,i.title="Open an X draft, then attach your saved animation",i.onclick=()=>M(`Attach your saved ${$[_].label} in X to include the animation.`);a.onclick=()=>t.close(),t.addEventListener("cancel",i=>{p.hidden||(i.preventDefault(),G(!1),c.focus())}),t.addEventListener("close",()=>{B(),F.clear(),P=void 0,D=void 0,e()});function N(){B();const i=new AbortController;C=i;const u=_,{label:y,mime:q,filename:X}=$[u];for(const k of w)k.setAttribute("aria-pressed",String(k.dataset.format===u));o.textContent=m.textContent=`Save ${y}`,s.hidden=!0,r.hidden=!0,n.hidden=!1,o.hidden=!0,c.hidden=!0,E.hidden=!0,h.hidden=!0,a.textContent="Cancel",l.hidden=!1,l.value=0,l.setAttribute("aria-label",`Creating ${y}`),d.textContent=`Creating ${y}… 0%`,t.setAttribute("aria-busy","true"),H=H.then(async()=>{if(!i.signal.aborted)try{const k=F.get(u)??await Ae(P,D,u,i.signal,J=>{if(i.signal.aborted)return;const O=Math.round(J*100);l.value=O,d.textContent=`Creating ${y}… ${O}%`});if(i.signal.aborted)return;F.set(u,k),v=k,S=new File([k],X,{type:q}),g=URL.createObjectURL(k),u==="mp4"?(r.src=g,r.hidden=!1,r.play().catch(()=>{})):(s.src=g,s.hidden=!1),n.hidden=!0,o.hidden=!1,c.hidden=!1,E.hidden=!1,a.textContent="Done"}catch(k){if(i.signal.aborted)return;l.hidden=!0,d.textContent=k instanceof Error?k.message:`Could not create the ${y}.`,h.hidden=!1,a.textContent="Close"}finally{C===i&&t.setAttribute("aria-busy","false")}})}h.onclick=N;for(const i of w)i.onclick=()=>{const u=i.dataset.format;u!==_&&(_=u,N())};const L=async()=>{if(!v||!g||o.disabled)return;const i=v,u=_,{label:y}=$[u];o.disabled=!0,m.disabled=!0,M(`Choose where to save your ${y}…`);try{const q=await we(i,g,u);v===i&&M(q==="saved"?`${y} saved.`:q==="downloaded"?`${y} download started. Check your downloads.`:`Save cancelled. Your ${y} is still ready.`)}catch{v===i&&M(`Could not save the ${y}. Try choosing another location.`)}finally{o.disabled=!1,m.disabled=!1}};return o.onclick=L,m.onclick=L,c.onclick=async()=>{if(!S||c.disabled)return;const i=S,u={files:[i],title:"SessionGraph",text:x};if(!navigator.share||!navigator.canShare?.({files:[i]})){G(p.hidden);return}c.disabled=!0,M("");try{await navigator.share(u)}catch(y){S===i&&!V(y)&&(G(!0),M("Could not open system sharing. Save the animation or choose an option below."))}finally{c.disabled=!1}},b.onclick=async()=>{try{await navigator.clipboard.writeText(x),M("Caption copied. Attach your saved animation with it.")}catch{R.focus(),R.select(),M("Copy the selected caption, then attach your saved animation.")}},{open(i,u){t.open||(P=ve(i),D={...u},t.showModal(),e(),N())},dispose(){B(),F.clear(),P=void 0,D=void 0,t.remove()}}}export{Ie as createPlaybackShare};
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><title>SessionGraph</title><rect width="128" height="128" rx="28" fill="#080e13"/><g transform="translate(8 8) scale(.875)"><g fill="#b0e9d6"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="#b0e9d6" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="580" height="128" viewBox="0 0 580 128"><title>SessionGraph</title><g fill="#b0e9d6"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="#b0e9d6" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g><g transform="translate(140 35.151)" fill="#080e13"><g><path d="M19.457 48.872Q13.634 48.872 9.406 46.831Q5.177 44.789 2.773 41.133Q0.369 37.478 0 32.577L8.694 32.103Q9.103 35.12 10.446 37.227Q11.79 39.335 14.062 40.415Q16.335 41.495 19.589 41.495Q22.355 41.495 24.291 40.81Q26.228 40.125 27.249 38.769Q28.27 37.412 28.27 35.436Q28.27 33.631 27.407 32.241Q26.544 30.852 24.1 29.699Q21.657 28.546 16.875 27.427Q11.079 26.07 7.581 24.384Q4.084 22.697 2.509 20.168Q0.935 17.639 0.935 13.832Q0.935 9.722 2.957 6.606Q4.979 3.491 8.76 1.745Q12.541 0 17.797 0Q23.382 0 27.282 2.009Q31.181 4.018 33.42 7.509Q35.66 11 36.16 15.518L27.519 15.966Q27.229 13.397 26.01 11.467Q24.792 9.537 22.711 8.457Q20.629 7.377 17.665 7.377Q13.95 7.377 11.803 9.07Q9.656 10.763 9.656 13.516Q9.656 15.399 10.572 16.644Q11.487 17.889 13.766 18.805Q16.045 19.72 20.221 20.682Q26.504 22.025 30.186 24.048Q33.868 26.07 35.429 28.783Q36.99 31.497 36.99 34.988Q36.99 39.256 34.817 42.385Q32.643 45.513 28.704 47.193Q24.766 48.872 19.457 48.872ZM58.66 48.609Q53.404 48.609 49.538 46.343Q45.671 44.077 43.557 39.934Q41.443 35.791 41.443 30.232Q41.443 24.673 43.557 20.563Q45.671 16.453 49.498 14.155Q53.325 11.856 58.502 11.856Q63.521 11.856 67.289 14.102Q71.056 16.348 73.118 20.563Q75.179 24.779 75.179 30.693V32.577H50.19Q50.44 37.227 52.713 39.546Q54.985 41.864 58.766 41.864Q61.585 41.864 63.449 40.606Q65.313 39.348 66.063 37.03L74.679 37.57Q73.269 42.668 69.008 45.638Q64.746 48.609 58.66 48.609ZM50.19 26.913H66.432Q66.169 22.632 64.015 20.563Q61.861 18.495 58.502 18.495Q55.117 18.495 52.91 20.662Q50.704 22.829 50.19 26.913ZM95.071 48.609Q89.683 48.609 86.159 47.081Q82.635 45.553 80.811 42.872Q78.986 40.191 78.723 36.74L87.338 36.371Q87.812 39.111 89.571 40.646Q91.33 42.18 95.097 42.18Q98.048 42.18 99.622 41.212Q101.196 40.244 101.196 38.202Q101.196 37.003 100.636 36.213Q100.076 35.423 98.456 34.823Q96.836 34.224 93.701 33.671Q88.379 32.722 85.362 31.365Q82.345 30.008 81.12 27.967Q79.895 25.925 79.895 22.948Q79.895 18.008 83.682 14.932Q87.47 11.856 94.794 11.856Q99.879 11.856 103.126 13.456Q106.373 15.057 108.046 17.744Q109.719 20.432 109.996 23.685L101.46 24.081Q101.381 22.434 100.643 21.117Q99.905 19.799 98.456 19.042Q97.007 18.284 94.662 18.284Q91.672 18.284 90.144 19.483Q88.616 20.682 88.616 22.631Q88.616 24.054 89.229 24.97Q89.841 25.885 91.363 26.458Q92.884 27.031 95.492 27.453Q100.92 28.256 104.081 29.626Q107.243 30.996 108.58 33.071Q109.917 35.146 109.917 38.097Q109.917 43.142 105.879 45.876Q101.842 48.609 95.071 48.609ZM129.848 48.609Q124.46 48.609 120.936 47.081Q117.412 45.553 115.588 42.872Q113.763 40.191 113.5 36.74L122.115 36.371Q122.59 39.111 124.348 40.646Q126.107 42.18 129.874 42.18Q132.825 42.18 134.399 41.212Q135.973 40.244 135.973 38.202Q135.973 37.003 135.413 36.213Q134.854 35.423 133.233 34.823Q131.613 34.224 128.478 33.671Q123.156 32.722 120.139 31.365Q117.123 30.008 115.897 27.967Q114.672 25.925 114.672 22.948Q114.672 18.008 118.46 14.932Q122.247 11.856 129.571 11.856Q134.656 11.856 137.903 13.456Q141.151 15.057 142.824 17.744Q144.497 20.432 144.773 23.685L136.237 24.081Q136.158 22.434 135.42 21.117Q134.682 19.799 133.233 19.042Q131.784 18.284 129.44 18.284Q126.449 18.284 124.921 19.483Q123.393 20.682 123.393 22.631Q123.393 24.054 124.006 24.97Q124.618 25.885 126.14 26.458Q127.661 27.031 130.269 27.453Q135.697 28.256 138.858 29.626Q142.02 30.996 143.357 33.071Q144.694 35.146 144.694 38.097Q144.694 43.142 140.657 45.876Q136.619 48.609 129.848 48.609ZM150.332 47.819V12.646H158.763V47.819ZM150.174 7.943V0.487H158.921V7.943ZM181.645 48.609Q176.441 48.609 172.542 46.343Q168.643 44.077 166.496 39.934Q164.348 35.791 164.348 30.232Q164.348 24.634 166.496 20.524Q168.643 16.414 172.542 14.135Q176.441 11.856 181.645 11.856Q186.848 11.856 190.728 14.135Q194.607 16.414 196.754 20.524Q198.902 24.634 198.902 30.232Q198.902 35.791 196.754 39.934Q194.607 44.077 190.728 46.343Q186.848 48.609 181.645 48.609ZM181.645 41.785Q185.715 41.785 187.948 38.736Q190.181 35.686 190.181 30.232Q190.181 24.805 187.948 21.742Q185.715 18.68 181.645 18.68Q177.574 18.68 175.322 21.742Q173.069 24.805 173.069 30.232Q173.069 35.686 175.322 38.736Q177.574 41.785 181.645 41.785ZM204.474 47.819V12.646H212.101L212.431 22.513L211.403 22.105Q211.956 18.429 213.59 16.183Q215.223 13.937 217.614 12.897Q220.005 11.856 222.837 11.856Q226.723 11.856 229.378 13.555Q232.032 15.254 233.409 18.251Q234.785 21.248 234.785 25.2V47.819H226.354V27.914Q226.354 24.95 225.781 22.902Q225.208 20.853 223.865 19.78Q222.521 18.706 220.255 18.706Q216.87 18.706 214.887 21.071Q212.905 23.435 212.905 27.914V47.819ZM261.961 48.872Q255.27 48.872 250.488 45.75Q245.706 42.628 243.157 37.142Q240.608 31.655 240.608 24.502Q240.608 17.454 243.203 11.922Q245.798 6.389 250.679 3.194Q255.559 0 262.409 0Q268.324 0 272.388 2.029Q276.452 4.057 278.882 7.68Q281.313 11.303 282.275 16.071L273.369 16.519Q272.618 12.396 270.076 9.926Q267.534 7.456 262.462 7.456Q257.996 7.456 255.118 9.748Q252.24 12.04 250.85 15.893Q249.46 19.747 249.46 24.502Q249.46 29.389 250.843 33.203Q252.227 37.017 255.138 39.216Q258.049 41.416 262.567 41.416Q266.032 41.416 268.548 39.961Q271.064 38.505 272.487 35.989Q273.909 33.473 274.081 30.391H262.515V23.725H282.406V47.819H276.874L276.373 37.544L277.427 38.202Q276.715 41.337 274.489 43.741Q272.263 46.146 269.029 47.509Q265.795 48.872 261.961 48.872ZM288.584 47.819V12.646H296.462L296.778 22.421L296.093 22.25Q296.884 17.191 299.077 14.919Q301.27 12.646 305.064 12.646H308.331V19.865H305.051Q302.337 19.865 300.566 20.662Q298.794 21.459 297.905 23.139Q297.015 24.818 297.015 27.558V47.819ZM324.033 48.609Q318.553 48.609 315.188 46.08Q311.822 43.55 311.822 39.019Q311.822 34.435 314.654 31.879Q317.486 29.323 323.243 28.191L334.941 25.912Q334.941 22.157 333.222 20.274Q331.503 18.39 328.17 18.39Q325.101 18.39 323.349 19.793Q321.597 21.196 320.991 23.857L312.415 23.422Q313.429 17.876 317.519 14.866Q321.61 11.856 328.17 11.856Q335.679 11.856 339.525 15.63Q343.372 19.404 343.372 26.452V39.269Q343.372 40.665 343.853 41.173Q344.333 41.68 345.321 41.68H346.441V47.819Q346.046 47.937 345.163 48.023Q344.281 48.108 343.385 48.108Q341.198 48.108 339.492 47.39Q337.786 46.673 336.838 44.953Q335.889 43.234 335.889 40.204L336.653 40.705Q336.087 43.024 334.361 44.822Q332.636 46.62 329.988 47.614Q327.34 48.609 324.033 48.609ZM325.772 42.47Q328.578 42.47 330.627 41.37Q332.675 40.27 333.808 38.275Q334.941 36.279 334.941 33.618V31.642L325.825 33.486Q323.032 34.039 321.788 35.205Q320.543 36.371 320.543 38.228Q320.543 40.244 321.906 41.357Q323.269 42.47 325.772 42.47ZM350.432 57.698V12.646H358.495L358.679 20.129L357.862 19.76Q359.18 15.9 362.176 13.878Q365.173 11.856 369.165 11.856Q374.184 11.856 377.497 14.346Q380.81 16.835 382.463 20.998Q384.116 25.161 384.116 30.232Q384.116 35.278 382.45 39.454Q380.783 43.63 377.457 46.119Q374.131 48.609 369.112 48.609Q366.491 48.609 364.218 47.674Q361.946 46.738 360.332 45.039Q358.718 43.34 358.047 41.021L358.863 40.363V57.698ZM367.136 41.785Q370.969 41.785 373.182 38.716Q375.396 35.647 375.396 30.232Q375.396 24.818 373.182 21.749Q370.969 18.68 367.136 18.68Q364.58 18.68 362.73 19.971Q360.879 21.262 359.871 23.843Q358.863 26.425 358.863 30.232Q358.863 34.039 359.851 36.621Q360.839 39.203 362.71 40.494Q364.58 41.785 367.136 41.785ZM389.688 47.819V1.054H398.119V20.695L397.039 20.669Q397.592 17.639 399.16 15.702Q400.728 13.766 403.046 12.811Q405.365 11.856 408.131 11.856Q412.017 11.856 414.658 13.549Q417.3 15.241 418.65 18.265Q420 21.288 420 25.2V47.819H411.569V27.282Q411.569 22.974 410.14 20.84Q408.71 18.706 405.575 18.706Q402.15 18.706 400.135 20.932Q398.119 23.158 398.119 27.479V47.819Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="580" height="128" viewBox="0 0 580 128"><title>SessionGraph</title><g fill="#b0e9d6"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="#b0e9d6" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g><g transform="translate(140 35.151)" fill="#dbe7e3"><g><path d="M19.457 48.872Q13.634 48.872 9.406 46.831Q5.177 44.789 2.773 41.133Q0.369 37.478 0 32.577L8.694 32.103Q9.103 35.12 10.446 37.227Q11.79 39.335 14.062 40.415Q16.335 41.495 19.589 41.495Q22.355 41.495 24.291 40.81Q26.228 40.125 27.249 38.769Q28.27 37.412 28.27 35.436Q28.27 33.631 27.407 32.241Q26.544 30.852 24.1 29.699Q21.657 28.546 16.875 27.427Q11.079 26.07 7.581 24.384Q4.084 22.697 2.509 20.168Q0.935 17.639 0.935 13.832Q0.935 9.722 2.957 6.606Q4.979 3.491 8.76 1.745Q12.541 0 17.797 0Q23.382 0 27.282 2.009Q31.181 4.018 33.42 7.509Q35.66 11 36.16 15.518L27.519 15.966Q27.229 13.397 26.01 11.467Q24.792 9.537 22.711 8.457Q20.629 7.377 17.665 7.377Q13.95 7.377 11.803 9.07Q9.656 10.763 9.656 13.516Q9.656 15.399 10.572 16.644Q11.487 17.889 13.766 18.805Q16.045 19.72 20.221 20.682Q26.504 22.025 30.186 24.048Q33.868 26.07 35.429 28.783Q36.99 31.497 36.99 34.988Q36.99 39.256 34.817 42.385Q32.643 45.513 28.704 47.193Q24.766 48.872 19.457 48.872ZM58.66 48.609Q53.404 48.609 49.538 46.343Q45.671 44.077 43.557 39.934Q41.443 35.791 41.443 30.232Q41.443 24.673 43.557 20.563Q45.671 16.453 49.498 14.155Q53.325 11.856 58.502 11.856Q63.521 11.856 67.289 14.102Q71.056 16.348 73.118 20.563Q75.179 24.779 75.179 30.693V32.577H50.19Q50.44 37.227 52.713 39.546Q54.985 41.864 58.766 41.864Q61.585 41.864 63.449 40.606Q65.313 39.348 66.063 37.03L74.679 37.57Q73.269 42.668 69.008 45.638Q64.746 48.609 58.66 48.609ZM50.19 26.913H66.432Q66.169 22.632 64.015 20.563Q61.861 18.495 58.502 18.495Q55.117 18.495 52.91 20.662Q50.704 22.829 50.19 26.913ZM95.071 48.609Q89.683 48.609 86.159 47.081Q82.635 45.553 80.811 42.872Q78.986 40.191 78.723 36.74L87.338 36.371Q87.812 39.111 89.571 40.646Q91.33 42.18 95.097 42.18Q98.048 42.18 99.622 41.212Q101.196 40.244 101.196 38.202Q101.196 37.003 100.636 36.213Q100.076 35.423 98.456 34.823Q96.836 34.224 93.701 33.671Q88.379 32.722 85.362 31.365Q82.345 30.008 81.12 27.967Q79.895 25.925 79.895 22.948Q79.895 18.008 83.682 14.932Q87.47 11.856 94.794 11.856Q99.879 11.856 103.126 13.456Q106.373 15.057 108.046 17.744Q109.719 20.432 109.996 23.685L101.46 24.081Q101.381 22.434 100.643 21.117Q99.905 19.799 98.456 19.042Q97.007 18.284 94.662 18.284Q91.672 18.284 90.144 19.483Q88.616 20.682 88.616 22.631Q88.616 24.054 89.229 24.97Q89.841 25.885 91.363 26.458Q92.884 27.031 95.492 27.453Q100.92 28.256 104.081 29.626Q107.243 30.996 108.58 33.071Q109.917 35.146 109.917 38.097Q109.917 43.142 105.879 45.876Q101.842 48.609 95.071 48.609ZM129.848 48.609Q124.46 48.609 120.936 47.081Q117.412 45.553 115.588 42.872Q113.763 40.191 113.5 36.74L122.115 36.371Q122.59 39.111 124.348 40.646Q126.107 42.18 129.874 42.18Q132.825 42.18 134.399 41.212Q135.973 40.244 135.973 38.202Q135.973 37.003 135.413 36.213Q134.854 35.423 133.233 34.823Q131.613 34.224 128.478 33.671Q123.156 32.722 120.139 31.365Q117.123 30.008 115.897 27.967Q114.672 25.925 114.672 22.948Q114.672 18.008 118.46 14.932Q122.247 11.856 129.571 11.856Q134.656 11.856 137.903 13.456Q141.151 15.057 142.824 17.744Q144.497 20.432 144.773 23.685L136.237 24.081Q136.158 22.434 135.42 21.117Q134.682 19.799 133.233 19.042Q131.784 18.284 129.44 18.284Q126.449 18.284 124.921 19.483Q123.393 20.682 123.393 22.631Q123.393 24.054 124.006 24.97Q124.618 25.885 126.14 26.458Q127.661 27.031 130.269 27.453Q135.697 28.256 138.858 29.626Q142.02 30.996 143.357 33.071Q144.694 35.146 144.694 38.097Q144.694 43.142 140.657 45.876Q136.619 48.609 129.848 48.609ZM150.332 47.819V12.646H158.763V47.819ZM150.174 7.943V0.487H158.921V7.943ZM181.645 48.609Q176.441 48.609 172.542 46.343Q168.643 44.077 166.496 39.934Q164.348 35.791 164.348 30.232Q164.348 24.634 166.496 20.524Q168.643 16.414 172.542 14.135Q176.441 11.856 181.645 11.856Q186.848 11.856 190.728 14.135Q194.607 16.414 196.754 20.524Q198.902 24.634 198.902 30.232Q198.902 35.791 196.754 39.934Q194.607 44.077 190.728 46.343Q186.848 48.609 181.645 48.609ZM181.645 41.785Q185.715 41.785 187.948 38.736Q190.181 35.686 190.181 30.232Q190.181 24.805 187.948 21.742Q185.715 18.68 181.645 18.68Q177.574 18.68 175.322 21.742Q173.069 24.805 173.069 30.232Q173.069 35.686 175.322 38.736Q177.574 41.785 181.645 41.785ZM204.474 47.819V12.646H212.101L212.431 22.513L211.403 22.105Q211.956 18.429 213.59 16.183Q215.223 13.937 217.614 12.897Q220.005 11.856 222.837 11.856Q226.723 11.856 229.378 13.555Q232.032 15.254 233.409 18.251Q234.785 21.248 234.785 25.2V47.819H226.354V27.914Q226.354 24.95 225.781 22.902Q225.208 20.853 223.865 19.78Q222.521 18.706 220.255 18.706Q216.87 18.706 214.887 21.071Q212.905 23.435 212.905 27.914V47.819ZM261.961 48.872Q255.27 48.872 250.488 45.75Q245.706 42.628 243.157 37.142Q240.608 31.655 240.608 24.502Q240.608 17.454 243.203 11.922Q245.798 6.389 250.679 3.194Q255.559 0 262.409 0Q268.324 0 272.388 2.029Q276.452 4.057 278.882 7.68Q281.313 11.303 282.275 16.071L273.369 16.519Q272.618 12.396 270.076 9.926Q267.534 7.456 262.462 7.456Q257.996 7.456 255.118 9.748Q252.24 12.04 250.85 15.893Q249.46 19.747 249.46 24.502Q249.46 29.389 250.843 33.203Q252.227 37.017 255.138 39.216Q258.049 41.416 262.567 41.416Q266.032 41.416 268.548 39.961Q271.064 38.505 272.487 35.989Q273.909 33.473 274.081 30.391H262.515V23.725H282.406V47.819H276.874L276.373 37.544L277.427 38.202Q276.715 41.337 274.489 43.741Q272.263 46.146 269.029 47.509Q265.795 48.872 261.961 48.872ZM288.584 47.819V12.646H296.462L296.778 22.421L296.093 22.25Q296.884 17.191 299.077 14.919Q301.27 12.646 305.064 12.646H308.331V19.865H305.051Q302.337 19.865 300.566 20.662Q298.794 21.459 297.905 23.139Q297.015 24.818 297.015 27.558V47.819ZM324.033 48.609Q318.553 48.609 315.188 46.08Q311.822 43.55 311.822 39.019Q311.822 34.435 314.654 31.879Q317.486 29.323 323.243 28.191L334.941 25.912Q334.941 22.157 333.222 20.274Q331.503 18.39 328.17 18.39Q325.101 18.39 323.349 19.793Q321.597 21.196 320.991 23.857L312.415 23.422Q313.429 17.876 317.519 14.866Q321.61 11.856 328.17 11.856Q335.679 11.856 339.525 15.63Q343.372 19.404 343.372 26.452V39.269Q343.372 40.665 343.853 41.173Q344.333 41.68 345.321 41.68H346.441V47.819Q346.046 47.937 345.163 48.023Q344.281 48.108 343.385 48.108Q341.198 48.108 339.492 47.39Q337.786 46.673 336.838 44.953Q335.889 43.234 335.889 40.204L336.653 40.705Q336.087 43.024 334.361 44.822Q332.636 46.62 329.988 47.614Q327.34 48.609 324.033 48.609ZM325.772 42.47Q328.578 42.47 330.627 41.37Q332.675 40.27 333.808 38.275Q334.941 36.279 334.941 33.618V31.642L325.825 33.486Q323.032 34.039 321.788 35.205Q320.543 36.371 320.543 38.228Q320.543 40.244 321.906 41.357Q323.269 42.47 325.772 42.47ZM350.432 57.698V12.646H358.495L358.679 20.129L357.862 19.76Q359.18 15.9 362.176 13.878Q365.173 11.856 369.165 11.856Q374.184 11.856 377.497 14.346Q380.81 16.835 382.463 20.998Q384.116 25.161 384.116 30.232Q384.116 35.278 382.45 39.454Q380.783 43.63 377.457 46.119Q374.131 48.609 369.112 48.609Q366.491 48.609 364.218 47.674Q361.946 46.738 360.332 45.039Q358.718 43.34 358.047 41.021L358.863 40.363V57.698ZM367.136 41.785Q370.969 41.785 373.182 38.716Q375.396 35.647 375.396 30.232Q375.396 24.818 373.182 21.749Q370.969 18.68 367.136 18.68Q364.58 18.68 362.73 19.971Q360.879 21.262 359.871 23.843Q358.863 26.425 358.863 30.232Q358.863 34.039 359.851 36.621Q360.839 39.203 362.71 40.494Q364.58 41.785 367.136 41.785ZM389.688 47.819V1.054H398.119V20.695L397.039 20.669Q397.592 17.639 399.16 15.702Q400.728 13.766 403.046 12.811Q405.365 11.856 408.131 11.856Q412.017 11.856 414.658 13.549Q417.3 15.241 418.65 18.265Q420 21.288 420 25.2V47.819H411.569V27.282Q411.569 22.974 410.14 20.84Q408.71 18.706 405.575 18.706Q402.15 18.706 400.135 20.932Q398.119 23.158 398.119 27.479V47.819Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><title>SessionGraph</title><g fill="currentColor"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="currentColor" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><title>SessionGraph</title><g fill="#b0e9d6"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="#b0e9d6" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40"><rect width="40" height="40" rx="10" fill="#0b1417"/><g fill="none" stroke="#b5efdc" stroke-width="1.7"><path d="m7 28 13-17 13 17M11 24h18M20 11v22"/><circle cx="20" cy="11" r="3" fill="#b5efdc"/><circle cx="7" cy="28" r="2"/><circle cx="33" cy="28" r="2"/></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><title>SessionGraph</title><rect width="128" height="128" rx="28" fill="#080e13"/><g transform="translate(8 8) scale(.875)"><g fill="#b0e9d6"><path d="M102 24 86 40H36a14 14 0 0 0 0 28h40a14 14 0 0 1 0 28H22" fill="none" stroke="#b0e9d6" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/><circle cx="102" cy="24" r="10"/><circle cx="36" cy="40" r="10"/><circle cx="22" cy="96" r="10"/></g></g></svg>
@@ -9,9 +9,11 @@
9
9
  content="Explore &amp; visualize all your LLM sessions"
10
10
  />
11
11
  <title>SessionGraph — Explore &amp; visualize all your LLM sessions</title>
12
+ <link rel="icon" sizes="any" href="/favicon.ico" />
12
13
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
13
- <script type="module" crossorigin src="/assets/index-D-Ue5tsr.js"></script>
14
- <link rel="stylesheet" crossorigin href="/assets/index-fjc8n25E.css">
14
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
15
+ <script type="module" crossorigin src="/assets/index-BtLEIWKh.js"></script>
16
+ <link rel="stylesheet" crossorigin href="/assets/index-BnhC5gO7.css">
15
17
  </head>
16
18
  <body>
17
19
  <div id="app"></div>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd"><path d="M16.793 10.358v3.867L7.236 18.82v-2.8l7.751-3.728-7.75-3.728V5.763l9.556 4.595z"/><path d="M19.608 0A4.392 4.392 0 0124 4.392v15.216A4.392 4.392 0 0119.608 24H4.392A4.392 4.392 0 010 19.608V4.392A4.392 4.392 0 014.392 0h15.216zM4.26 1.444A2.816 2.816 0 001.444 4.26v15.48a2.816 2.816 0 002.816 2.816h15.48a2.816 2.816 0 002.816-2.816V4.26a2.816 2.816 0 00-2.816-2.816H4.26z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0c1.55 6.7 5.3 10.45 12 12-6.7 1.55-10.45 5.3-12 12C10.45 17.3 6.7 13.55 0 12 6.7 10.45 10.45 6.7 12 0Z"/></svg>
@@ -6,7 +6,7 @@
6
6
  <dict>
7
7
  <key>Resources/icon.icns</key>
8
8
  <data>
9
- FeKnFCr2tFC9eg8QzcW0TyD6nmw=
9
+ hlQPu6gyKULhblsK+T4swWiMRcc=
10
10
  </data>
11
11
  <key>Resources/resources/LICENSE</key>
12
12
  <data>
@@ -14,12 +14,16 @@
14
14
  </data>
15
15
  <key>Resources/resources/node</key>
16
16
  <data>
17
- 12DkJCJ8qYRbNUUmbUVf5mLKJkE=
17
+ LwhUyzptHAPUkpORN2tZA7T6KfM=
18
18
  </data>
19
19
  <key>Resources/resources/server.mjs</key>
20
20
  <data>
21
21
  VEhZu8KsM3wadJyKPbTuy4LDA5o=
22
22
  </data>
23
+ <key>Resources/resources/web/apple-touch-icon.png</key>
24
+ <data>
25
+ 7IrT+H6J4h1FxtVwSpZiqT0xzjI=
26
+ </data>
23
27
  <key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
24
28
  <data>
25
29
  yYSDXNlt/tTRaj6rJo8ZMqvY7pQ=
@@ -84,45 +88,45 @@
84
88
  <data>
85
89
  LdRX2sBB3T5WDAsZLCwBlsMYXPw=
86
90
  </data>
87
- <key>Resources/resources/web/assets/index-B5TXKeav.js</key>
91
+ <key>Resources/resources/web/assets/index-BNX-8Jnn.js</key>
88
92
  <data>
89
- yL+7enhyNLi8GvbAoEZkUTVXcWQ=
93
+ Xp6L1p+ausNXOvhq3zwaCD+0pgk=
90
94
  </data>
91
- <key>Resources/resources/web/assets/index-BPR2p22J.js</key>
95
+ <key>Resources/resources/web/assets/index-BcoCDV6F.js</key>
92
96
  <data>
93
- MYZ+appCI/7ZoDPB3qme6PZUWck=
97
+ 3E8+JPs+piodH6of6YRH5da4HCI=
94
98
  </data>
95
- <key>Resources/resources/web/assets/index-CWphmptD.js</key>
99
+ <key>Resources/resources/web/assets/index-BnhC5gO7.css</key>
96
100
  <data>
97
- Xwrx8t/ueqsuCWBplcEHrFIYgY0=
101
+ RJSPTuyeJ+yb5dph4+Q0QFnk0r8=
98
102
  </data>
99
- <key>Resources/resources/web/assets/index-D-Ue5tsr.js</key>
103
+ <key>Resources/resources/web/assets/index-BtLEIWKh.js</key>
100
104
  <data>
101
- 9x13EEv4Gsb2WEfohz4XG5GYV6Y=
105
+ e+/jr3YHpx4iyazA14bQyDb//MQ=
102
106
  </data>
103
- <key>Resources/resources/web/assets/index-fjc8n25E.css</key>
107
+ <key>Resources/resources/web/assets/index-RfmyzBnX.js</key>
104
108
  <data>
105
- kBT9mRswpPJjgLJSCiTP0cxgJss=
109
+ g75sfvRD5OvbJVQ5Wx5CPddPCd4=
106
110
  </data>
107
111
  <key>Resources/resources/web/assets/mp4-worker-HFPra5JP.js</key>
108
112
  <data>
109
113
  ATVDz7hoBhGkjEraL7M3QJPykT0=
110
114
  </data>
111
- <key>Resources/resources/web/assets/publishing-D6ALMt6w.js</key>
115
+ <key>Resources/resources/web/assets/publishing-DoHRK4Ea.js</key>
112
116
  <data>
113
- S8x3YDdYOm77wvKDh0+F8+XsdDE=
117
+ P0LsULOGy1eADgxt02GIzlKoR5I=
114
118
  </data>
115
- <key>Resources/resources/web/assets/publishing-DG0jrGoB.css</key>
119
+ <key>Resources/resources/web/assets/publishing-VJhUmdPH.css</key>
116
120
  <data>
117
- d/rpcq/ilp3t9jczDOPw0S858zg=
121
+ 6fWzMO88QnTllqV2/V6JoSphpq8=
118
122
  </data>
119
- <key>Resources/resources/web/assets/scene-C2kTsRX_.js</key>
123
+ <key>Resources/resources/web/assets/scene-B_CpQ0qP.js</key>
120
124
  <data>
121
- dUuO3DugdINbX6O5sN06w5Xp2Is=
125
+ xhNd+SGEFktArCXAEzinW1oLibI=
122
126
  </data>
123
- <key>Resources/resources/web/assets/share-BhzLwRnE.js</key>
127
+ <key>Resources/resources/web/assets/share-DPdu1Hbo.js</key>
124
128
  <data>
125
- JE5gS5QRM3YZ/NY748IMa4Yy9tU=
129
+ 3JsTxUYGeTTkYEwCJ65nrQPyZ6E=
126
130
  </data>
127
131
  <key>Resources/resources/web/assets/three-D_1Qt16u.js</key>
128
132
  <data>
@@ -132,13 +136,37 @@
132
136
  <data>
133
137
  mImryodKVT09sI0yWPkhy8RUFX4=
134
138
  </data>
139
+ <key>Resources/resources/web/brand/icon.svg</key>
140
+ <data>
141
+ nV08Q8h8wuJqWnO/TJXXuvoK3tI=
142
+ </data>
143
+ <key>Resources/resources/web/brand/lockup-light.svg</key>
144
+ <data>
145
+ hqKIK1K6U5YL918zZFjXj0of5+s=
146
+ </data>
147
+ <key>Resources/resources/web/brand/lockup.svg</key>
148
+ <data>
149
+ LA9MyAoANMvss8YXTN21Cn+MRx4=
150
+ </data>
151
+ <key>Resources/resources/web/brand/mark-mono.svg</key>
152
+ <data>
153
+ AcxhEj5RKhF54at75yCGHDJGsao=
154
+ </data>
155
+ <key>Resources/resources/web/brand/mark.svg</key>
156
+ <data>
157
+ 3mS0j6yFJ+XjOXEMJEipm3kcWyw=
158
+ </data>
159
+ <key>Resources/resources/web/favicon.ico</key>
160
+ <data>
161
+ Wui0pP/yBRMtoWhPhr2JXjAawmw=
162
+ </data>
135
163
  <key>Resources/resources/web/favicon.svg</key>
136
164
  <data>
137
- xvV4UsLSQ7jl371/CXG/rjaP6XA=
165
+ nV08Q8h8wuJqWnO/TJXXuvoK3tI=
138
166
  </data>
139
167
  <key>Resources/resources/web/index.html</key>
140
168
  <data>
141
- ArW4bJFRlu2A6QzNUvFwS//rl/8=
169
+ cARCiBZ8EJNSGsGusJ7MB3q7Fc4=
142
170
  </data>
143
171
  <key>Resources/resources/web/sources/LICENSE-APACHE-2.0.txt</key>
144
172
  <data>
@@ -238,7 +266,7 @@
238
266
  </data>
239
267
  <key>Resources/resources/web/sources/gemini.svg</key>
240
268
  <data>
241
- 2eifJKRCu9rOWrtOSalFh/9vt8w=
269
+ Eeti9IoSLrAPLTz/BoInVdVQynA=
242
270
  </data>
243
271
  <key>Resources/resources/web/sources/generic.svg</key>
244
272
  <data>
@@ -383,7 +411,7 @@
383
411
  <dict>
384
412
  <key>hash2</key>
385
413
  <data>
386
- BGYSD8J0qJhWI5lVhwZLgDxOyMxKEkjQNlew5PXEmUw=
414
+ Hw+6ePb7wMUs90OrhXKKzobYqbsAlyAfnJCCxzje7Ew=
387
415
  </data>
388
416
  </dict>
389
417
  <key>Resources/resources/LICENSE</key>
@@ -397,7 +425,7 @@
397
425
  <dict>
398
426
  <key>hash2</key>
399
427
  <data>
400
- 2N3Kqsh+d+SLnmGx3m1wl8tfqvPrPfW1IoIaB7Gazp8=
428
+ YUpZ5XuEeDoIjY8doNHS1wIzSNBKRFN5TWzgrEMowmk=
401
429
  </data>
402
430
  </dict>
403
431
  <key>Resources/resources/server.mjs</key>
@@ -407,6 +435,13 @@
407
435
  xuoB/lT1DcsCafZ/pmNAf1O+VhDA+RMbZKp55aKMFgw=
408
436
  </data>
409
437
  </dict>
438
+ <key>Resources/resources/web/apple-touch-icon.png</key>
439
+ <dict>
440
+ <key>hash2</key>
441
+ <data>
442
+ r0avunkAKv+j4kuQJ3Lk5pFwJ+ds28pxrEPQMyqVahc=
443
+ </data>
444
+ </dict>
410
445
  <key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
411
446
  <dict>
412
447
  <key>hash2</key>
@@ -519,39 +554,39 @@
519
554
  vO1WHZkeP4HBUMCOcff6hJ/L/1I1YPYFkkXy7c4ZtgA=
520
555
  </data>
521
556
  </dict>
522
- <key>Resources/resources/web/assets/index-B5TXKeav.js</key>
557
+ <key>Resources/resources/web/assets/index-BNX-8Jnn.js</key>
523
558
  <dict>
524
559
  <key>hash2</key>
525
560
  <data>
526
- oAsuQQVokTuMtL5wx1U45dvJhBJ61nhil5cqDviZuMk=
561
+ 9nukl82gAfqwPqZSYXrqc7takYu/VdQ8bO4rH1R3Elw=
527
562
  </data>
528
563
  </dict>
529
- <key>Resources/resources/web/assets/index-BPR2p22J.js</key>
564
+ <key>Resources/resources/web/assets/index-BcoCDV6F.js</key>
530
565
  <dict>
531
566
  <key>hash2</key>
532
567
  <data>
533
- 2r8cgi5IevD+or452FLqn2TTJdnnbC6dWx065AbJLRM=
568
+ JG1JJixpHy2uqRG28hunWpzk+WL+QJwq1QR24o24G4A=
534
569
  </data>
535
570
  </dict>
536
- <key>Resources/resources/web/assets/index-CWphmptD.js</key>
571
+ <key>Resources/resources/web/assets/index-BnhC5gO7.css</key>
537
572
  <dict>
538
573
  <key>hash2</key>
539
574
  <data>
540
- 95s+/M81zngjsxoKcXn7aZuVyRaTd04RkSl3SGZOxQk=
575
+ OOjp+eY6EdTb12LkHD2/hUVlpkUowB8gbTHh6ehJD8o=
541
576
  </data>
542
577
  </dict>
543
- <key>Resources/resources/web/assets/index-D-Ue5tsr.js</key>
578
+ <key>Resources/resources/web/assets/index-BtLEIWKh.js</key>
544
579
  <dict>
545
580
  <key>hash2</key>
546
581
  <data>
547
- mXiydKzRuvxZ0GC0lUBoYTf8y4uAAwNQdistsEx6uYo=
582
+ feT4l1fWR0sFu/pRLwDkQhQU7gaT7o7ObPDlTmvM/zc=
548
583
  </data>
549
584
  </dict>
550
- <key>Resources/resources/web/assets/index-fjc8n25E.css</key>
585
+ <key>Resources/resources/web/assets/index-RfmyzBnX.js</key>
551
586
  <dict>
552
587
  <key>hash2</key>
553
588
  <data>
554
- sWci48xyh6YJNHb+xk/zlhnibhC7abQIFfcF2O3NEaM=
589
+ WATPvH4HDJ5jEyAVR0HvC3yxdnakkqMRmdWBCRDiZFc=
555
590
  </data>
556
591
  </dict>
557
592
  <key>Resources/resources/web/assets/mp4-worker-HFPra5JP.js</key>
@@ -561,32 +596,32 @@
561
596
  OcBpKX8DX9+EUp27mNDb0LMrwE28fDC5f3PbjJsXOjU=
562
597
  </data>
563
598
  </dict>
564
- <key>Resources/resources/web/assets/publishing-D6ALMt6w.js</key>
599
+ <key>Resources/resources/web/assets/publishing-DoHRK4Ea.js</key>
565
600
  <dict>
566
601
  <key>hash2</key>
567
602
  <data>
568
- 6rmWwIpggV83JHqx5aU9tAseVlNN7TrsZlkh+P+jwWM=
603
+ v/EgvZ8GwuHbVRCjArX4rNSGVoGWhd1MoeXakqEUfUE=
569
604
  </data>
570
605
  </dict>
571
- <key>Resources/resources/web/assets/publishing-DG0jrGoB.css</key>
606
+ <key>Resources/resources/web/assets/publishing-VJhUmdPH.css</key>
572
607
  <dict>
573
608
  <key>hash2</key>
574
609
  <data>
575
- +cEC3JP91lcHwFmjNIeSSnRkcWa9eFlfauLkrCScyR0=
610
+ qp+02zzJ3eDSRmM1QFKIs/gPNJJ1VudOM7MVpmEOywY=
576
611
  </data>
577
612
  </dict>
578
- <key>Resources/resources/web/assets/scene-C2kTsRX_.js</key>
613
+ <key>Resources/resources/web/assets/scene-B_CpQ0qP.js</key>
579
614
  <dict>
580
615
  <key>hash2</key>
581
616
  <data>
582
- bnliWmxJSVfMAa0pjMjrJyMnRUQHrUpVzDueSi4mBSA=
617
+ IWG7kuSklPHLPSqbfRE+99YMJCpBSsaUjvoRfUcSmc0=
583
618
  </data>
584
619
  </dict>
585
- <key>Resources/resources/web/assets/share-BhzLwRnE.js</key>
620
+ <key>Resources/resources/web/assets/share-DPdu1Hbo.js</key>
586
621
  <dict>
587
622
  <key>hash2</key>
588
623
  <data>
589
- JLTXkKKeuLNgtPU96/8m1/JKB7VOazD6GAd/+HCGwC4=
624
+ 6WjBAdAV8a19ktfDf5AMMKvWosknkWqVk79wWUmAiOE=
590
625
  </data>
591
626
  </dict>
592
627
  <key>Resources/resources/web/assets/three-D_1Qt16u.js</key>
@@ -603,18 +638,60 @@
603
638
  EOfLd1vncqhtsbvSQsOKlub/6ifr9YRRXzi731FNbJs=
604
639
  </data>
605
640
  </dict>
641
+ <key>Resources/resources/web/brand/icon.svg</key>
642
+ <dict>
643
+ <key>hash2</key>
644
+ <data>
645
+ zgJcOIXlV19apA+Khf/PZ5ecrQ0pKULAeV9WgqkWF+4=
646
+ </data>
647
+ </dict>
648
+ <key>Resources/resources/web/brand/lockup-light.svg</key>
649
+ <dict>
650
+ <key>hash2</key>
651
+ <data>
652
+ dGbMM9xgjNd85jQxvoHoVFjdczZXo/nWLIvHv75YtoM=
653
+ </data>
654
+ </dict>
655
+ <key>Resources/resources/web/brand/lockup.svg</key>
656
+ <dict>
657
+ <key>hash2</key>
658
+ <data>
659
+ SMfh65QMlGJp035qftkHf/nnzrNbn77majUMs6Uv6pw=
660
+ </data>
661
+ </dict>
662
+ <key>Resources/resources/web/brand/mark-mono.svg</key>
663
+ <dict>
664
+ <key>hash2</key>
665
+ <data>
666
+ uEGF3CNgmepvFzsuhLdWbd7VMTMHdZxWM+qGWK3C0xY=
667
+ </data>
668
+ </dict>
669
+ <key>Resources/resources/web/brand/mark.svg</key>
670
+ <dict>
671
+ <key>hash2</key>
672
+ <data>
673
+ d4zZIHJvnHsn1QuF2+qt5SwJU6wmjBYftfoONHQIlyU=
674
+ </data>
675
+ </dict>
676
+ <key>Resources/resources/web/favicon.ico</key>
677
+ <dict>
678
+ <key>hash2</key>
679
+ <data>
680
+ UPih9YukOqY/EPQSEDpRKpZ/CbbWT7HjTFE7mI/EIzo=
681
+ </data>
682
+ </dict>
606
683
  <key>Resources/resources/web/favicon.svg</key>
607
684
  <dict>
608
685
  <key>hash2</key>
609
686
  <data>
610
- /EOHGQsOnvyNNcwF1H59CKNwJECq5gPVVdSjpKVonPQ=
687
+ zgJcOIXlV19apA+Khf/PZ5ecrQ0pKULAeV9WgqkWF+4=
611
688
  </data>
612
689
  </dict>
613
690
  <key>Resources/resources/web/index.html</key>
614
691
  <dict>
615
692
  <key>hash2</key>
616
693
  <data>
617
- rI1iCR2nzIKnui2YZnnwZwfuY8zxwP2sTFT6VOWWgf8=
694
+ Ar6Jz2ncBhP+3uyqrBazcV6UD+NEcqqFQXDptNcwIvU=
618
695
  </data>
619
696
  </dict>
620
697
  <key>Resources/resources/web/sources/LICENSE-APACHE-2.0.txt</key>
@@ -789,7 +866,7 @@
789
866
  <dict>
790
867
  <key>hash2</key>
791
868
  <data>
792
- C1eZdG/lmVLOrW9chB8DMwealpUr3Px3x54W/yT1Xsg=
869
+ 9Gv20MY5oc8cqqo6lzEzBz19uW/2/ICUtGzHzX/7Al0=
793
870
  </data>
794
871
  </dict>
795
872
  <key>Resources/resources/web/sources/generic.svg</key>