sessiongraph-app-darwin-arm64 0.0.0-stage → 0.1.8

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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +22 -3
  3. package/payload/SessionGraph.app/Contents/Info.plist +36 -0
  4. package/payload/SessionGraph.app/Contents/MacOS/sessiongraph +0 -0
  5. package/payload/SessionGraph.app/Contents/Resources/icon.icns +0 -0
  6. package/payload/SessionGraph.app/Contents/Resources/resources/LICENSE +21 -0
  7. package/payload/SessionGraph.app/Contents/Resources/resources/node +4 -0
  8. package/payload/SessionGraph.app/Contents/Resources/resources/server.mjs +32258 -0
  9. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  10. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  11. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  12. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  13. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  14. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  15. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  16. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  17. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  18. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  19. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  20. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  21. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  22. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  23. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  24. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/index-0ZTrNFWY.js +165 -0
  25. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/index-7IkZaZQy.css +1 -0
  26. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/index-BVJmULd-.js +1 -0
  27. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/scene-BmLcylTN.js +49 -0
  28. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/three-B4kj4iLH.js +4394 -0
  29. package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/worker-YMPBjASm.js +2 -0
  30. package/payload/SessionGraph.app/Contents/Resources/resources/web/favicon.svg +1 -0
  31. package/payload/SessionGraph.app/Contents/Resources/resources/web/index.html +19 -0
  32. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/NOTICE.txt +4 -0
  33. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/claude.svg +1 -0
  34. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/cursor.svg +1 -0
  35. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/generic.svg +1 -0
  36. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/openai.svg +1 -0
  37. package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/opencode.svg +1 -0
  38. package/payload/SessionGraph.app/Contents/_CodeSignature/CodeResources +480 -0
  39. package/README.md +0 -3
@@ -0,0 +1,2 @@
1
+ (function(){"use strict";const Fe="ENTRIES",de="KEYS",le="VALUES";class G{constructor(e,t){const n=e._tree,r=Array.from(n.keys());this.set=e,this._type=t,this._path=r.length>0?[{node:n,keys:r}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=C(this._path);if(C(t)==="")return{done:!1,value:this.result()};const n=e.get(C(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=C(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>C(e)).filter(e=>e!=="").join("")}value(){return C(this._path).node.get("")}result(){switch(this._type){case le:return this.value();case de:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const C=s=>s[s.length-1],ve=(s,e,t)=>{const n=new Map;if(e===void 0)return n;const r=e.length+1,o=r+t,i=new Uint8Array(o*r).fill(t+1);for(let c=0;c<r;++c)i[c]=c;for(let c=1;c<o;++c)i[c*r]=c;return he(s,e,t,n,i,1,r,""),n},he=(s,e,t,n,r,o,i,c)=>{const a=o*i;e:for(const d of s.keys())if(d===""){const u=r[a-1];u<=t&&n.set(c,[s.get(d),u])}else{let u=o;for(let p=0;p<d.length;++p,++u){const l=d[p],h=i*u,g=h-i;let m=r[h];const f=Math.max(0,u-t-1),_=Math.min(i-1,u+t);for(let w=f;w<_;++w){const V=l!==e[w],R=r[g+w]+ +V,b=r[g+w+1]+1,F=r[h+w]+1,S=r[h+w+1]=Math.min(R,b,F);S<m&&(m=S)}if(m>t)continue e}he(s.get(d),e,t,n,r,u,i,c+d)}};class v{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=W(this._tree,e.slice(this._prefix.length));if(t===void 0){const[r,o]=X(n);for(const i of r.keys())if(i!==""&&i.startsWith(o)){const c=new Map;return c.set(i.slice(o.length),r.get(i)),new v(c,e)}}return new v(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,ze(this._tree,e)}entries(){return new G(this,Fe)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return ve(this._tree,e,t)}get(e){const t=K(this._tree,e);return t!==void 0?t.get(""):void 0}has(e){const t=K(this._tree,e);return t!==void 0&&t.has("")}keys(){return new G(this,de)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,H(this._tree,e).set("",t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=H(this._tree,e);return n.set("",t(n.get(""))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=H(this._tree,e);let r=n.get("");return r===void 0&&n.set("",r=t()),r}values(){return new G(this,le)}[Symbol.iterator](){return this.entries()}static from(e){const t=new v;for(const[n,r]of e)t.set(n,r);return t}static fromObject(e){return v.from(Object.entries(e))}}const W=(s,e,t=[])=>{if(e.length===0||s==null)return[s,t];for(const n of s.keys())if(n!==""&&e.startsWith(n))return t.push([s,n]),W(s.get(n),e.slice(n.length),t);return t.push([s,e]),W(void 0,"",t)},K=(s,e)=>{if(e.length===0||s==null)return s;for(const t of s.keys())if(t!==""&&e.startsWith(t))return K(s.get(t),e.slice(t.length))},H=(s,e)=>{const t=e.length;e:for(let n=0;s&&n<t;){for(const o of s.keys())if(o!==""&&e[n]===o[0]){const i=Math.min(t-n,o.length);let c=1;for(;c<i&&e[n+c]===o[c];)++c;const a=s.get(o);if(c===o.length)s=a;else{const d=new Map;d.set(o.slice(c),a),s.set(e.slice(n,n+c),d),s.delete(o),s=d}n+=c;continue e}const r=new Map;return s.set(e.slice(n),r),r}return s},ze=(s,e)=>{const[t,n]=W(s,e);if(t!==void 0){if(t.delete(""),t.size===0)ue(n);else if(t.size===1){const[r,o]=t.entries().next().value;fe(n,r,o)}}},ue=s=>{if(s.length===0)return;const[e,t]=X(s);if(e.delete(t),e.size===0)ue(s.slice(0,-1));else if(e.size===1){const[n,r]=e.entries().next().value;n!==""&&fe(s.slice(0,-1),n,r)}},fe=(s,e,t)=>{if(s.length===0)return;const[n,r]=X(s);n.set(r+e,t),n.delete(r)},X=s=>s[s.length-1],Z="or",me="and",ke="and_not";class E{constructor(e){if(e?.fields==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?ie:e.autoVacuum;this._options={...te,...e,autoVacuum:t,searchOptions:{...pe,...e.searchOptions||{}},autoSuggestOptions:{...De,...e.autoSuggestOptions||{}}},this._index=new v,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=ne,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:n,tokenize:r,processTerm:o,fields:i,idField:c}=this._options,a=t(e,c);if(a==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);if(this._idToShortId.has(a))throw new Error(`MiniSearch: duplicate ID ${a}`);const d=this.addDocumentId(a);this.saveStoredFields(d,e);for(const u of i){const p=t(e,u);if(p==null)continue;const l=r(n(p,u),u),h=this._fieldIds[u],g=new Set(l).size;this.addFieldLength(d,h,this._documentCount-1,g);for(const m of l){const f=o(m,u);if(Array.isArray(f))for(const _ of f)this.addTerm(h,d,_);else f&&this.addTerm(h,d,f)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,r={chunk:[],promise:Promise.resolve()},{chunk:o,promise:i}=e.reduce(({chunk:c,promise:a},d,u)=>(c.push(d),(u+1)%n===0?{chunk:[],promise:a.then(()=>new Promise(p=>setTimeout(p,0))).then(()=>this.addAll(c))}:{chunk:c,promise:a}),r);return i.then(()=>this.addAll(o))}remove(e){const{tokenize:t,processTerm:n,extractField:r,stringifyField:o,fields:i,idField:c}=this._options,a=r(e,c);if(a==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);const d=this._idToShortId.get(a);if(d==null)throw new Error(`MiniSearch: cannot remove document with ID ${a}: it is not in the index`);for(const u of i){const p=r(e,u);if(p==null)continue;const l=t(o(p,u),u),h=this._fieldIds[u],g=new Set(l).size;this.removeFieldLength(d,h,this._documentCount,g);for(const m of l){const f=n(m,u);if(Array.isArray(f))for(const _ of f)this.removeTerm(h,d,_);else f&&this.removeTerm(h,d,f)}}this._storedFields.delete(d),this._documentIds.delete(d),this._idToShortId.delete(a),this._fieldLength.delete(d),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new v,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,r)=>{this.removeFieldLength(t,r,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:r}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:r},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,r=n(e,t);this.discard(r),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=ne,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const r=e.batchSize||se.batchSize,o=e.batchWait||se.batchWait;let i=1;for(const[c,a]of this._index){for(const[d,u]of a)for(const[p]of u)this._documentIds.has(p)||(u.size<=1?a.delete(d):u.delete(p));this._index.get(c).size===0&&this._index.delete(c),i%r===0&&await new Promise(d=>setTimeout(d,o)),i+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||ie.minDirtCount,n=n||ie.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,r={...n,...t},o=this.executeQuery(e,t),i=[];for(const[c,{score:a,terms:d,match:u}]of o){const p=d.length||1,l={id:this._documentIds.get(c),score:a*p,terms:Object.keys(u),queryTerms:d,match:u};Object.assign(l,this._storedFields.get(c)),(r.filter==null||r.filter(l))&&i.push(l)}return e===E.wildcard&&r.boostDocument==null||i.sort(_e),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:o,terms:i}of this.search(e,t)){const c=i.join(" "),a=n.get(c);a!=null?(a.score+=o,a.count+=1):n.set(c,{score:o,terms:i,count:1})}const r=[];for(const[o,{score:i,terms:c,count:a}]of n)r.push({suggestion:o,terms:c,score:i/a});return r.sort(_e),r}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(te.hasOwnProperty(e))return ee(te,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:r,fieldLength:o,storedFields:i,serializationVersion:c}=e,a=this.instantiateMiniSearch(e,t);a._documentIds=P(r),a._fieldLength=P(o),a._storedFields=P(i);for(const[d,u]of a._documentIds)a._idToShortId.set(u,d);for(const[d,u]of n){const p=new Map;for(const l of Object.keys(u)){let h=u[l];c===1&&(h=h.ds),p.set(parseInt(l,10),P(h))}a._index.set(d,p)}return a}static async loadJSAsync(e,t){const{index:n,documentIds:r,fieldLength:o,storedFields:i,serializationVersion:c}=e,a=this.instantiateMiniSearch(e,t);a._documentIds=await U(r),a._fieldLength=await U(o),a._storedFields=await U(i);for(const[u,p]of a._documentIds)a._idToShortId.set(p,u);let d=0;for(const[u,p]of n){const l=new Map;for(const h of Object.keys(p)){let g=p[h];c===1&&(g=g.ds),l.set(parseInt(h,10),await U(g))}++d%1e3===0&&await ye(0),a._index.set(u,l)}return a}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:r,fieldIds:o,averageFieldLength:i,dirtCount:c,serializationVersion:a}=e;if(a!==1&&a!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const d=new E(t);return d._documentCount=n,d._nextId=r,d._idToShortId=new Map,d._fieldIds=o,d._avgFieldLength=i,d._dirtCount=c||0,d._index=new v,d}executeQuery(e,t={}){if(e===E.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const l={...t,...e,queries:void 0},h=e.queries.map(g=>this.executeQuery(g,l));return this.combineResults(h,l.combineWith)}const{tokenize:n,processTerm:r,searchOptions:o}=this._options,i={tokenize:n,processTerm:r,...o,...t},{tokenize:c,processTerm:a}=i,p=c(e).flatMap(l=>a(l)).filter(l=>!!l).map(Le(i)).map(l=>this.executeQuerySpec(l,i));return this.combineResults(p,i.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},r=(n.fields||this._options.fields).reduce((m,f)=>({...m,[f]:ee(n.boost,f)||1}),{}),{boostDocument:o,weights:i,maxFuzzy:c,bm25:a}=n,{fuzzy:d,prefix:u}={...pe.weights,...i},p=this._index.get(e.term),l=this.termResults(e.term,e.term,1,e.termBoost,p,r,o,a);let h,g;if(e.prefix&&(h=this._index.atPrefix(e.term)),e.fuzzy){const m=e.fuzzy===!0?.2:e.fuzzy,f=m<1?Math.min(c,Math.round(e.term.length*m)):m;f&&(g=this._index.fuzzyGet(e.term,f))}if(h)for(const[m,f]of h){const _=m.length-e.term.length;if(!_)continue;g?.delete(m);const w=u*m.length/(m.length+.3*_);this.termResults(e.term,m,w,e.termBoost,f,r,o,a,l)}if(g)for(const m of g.keys()){const[f,_]=g.get(m);if(!_)continue;const w=d*m.length/(m.length+_);this.termResults(e.term,m,w,e.termBoost,f,r,o,a,l)}return l}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[r,o]of this._documentIds){const i=n.boostDocument?n.boostDocument(o,"",this._storedFields.get(r)):1;t.set(r,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Z){if(e.length===0)return new Map;const n=t.toLowerCase(),r=Me[n];if(!r)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(r)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const r={};for(const[o,i]of n)r[o]=Object.fromEntries(i);e.push([t,r])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,r,o,i,c,a,d=new Map){if(o==null)return d;for(const u of Object.keys(i)){const p=i[u],l=this._fieldIds[u],h=o.get(l);if(h==null)continue;let g=h.size;const m=this._avgFieldLength[l];for(const f of h.keys()){if(!this._documentIds.has(f)){this.removeTerm(l,f,t),g-=1;continue}const _=c?c(this._documentIds.get(f),t,this._storedFields.get(f)):1;if(!_)continue;const w=h.get(f),V=this._fieldLength.get(f)[l],R=Ee(w,g,this._documentCount,V,m,a),b=n*r*p*_*R,F=d.get(f);if(F){F.score+=b,Te(F.terms,e);const S=ee(F.match,t);S?S.push(u):F.match[t]=[u]}else d.set(f,{score:b,terms:[e],match:{[t]:[u]}})}}return d}addTerm(e,t,n){const r=this._index.fetch(n,we);let o=r.get(e);if(o==null)o=new Map,o.set(t,1),r.set(e,o);else{const i=o.get(t);o.set(t,(i||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const r=this._index.fetch(n,we),o=r.get(e);o==null||o.get(t)==null?this.warnDocumentChanged(t,e,n):o.get(t)<=1?o.size<=1?r.delete(e):o.delete(t):o.set(t,o.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const r of Object.keys(this._fieldIds))if(this._fieldIds[r]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${r}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;t<e.length;t++)this._fieldIds[e[t]]=t}addFieldLength(e,t,n,r){let o=this._fieldLength.get(e);o==null&&this._fieldLength.set(e,o=[]),o[t]=r;const c=(this._avgFieldLength[t]||0)*n+r;this._avgFieldLength[t]=c/(n+1)}removeFieldLength(e,t,n,r){if(n===1){this._avgFieldLength[t]=0;return}const o=this._avgFieldLength[t]*n-r;this._avgFieldLength[t]=o/(n-1)}saveStoredFields(e,t){const{storeFields:n,extractField:r}=this._options;if(n==null||n.length===0)return;let o=this._storedFields.get(e);o==null&&this._storedFields.set(e,o={});for(const i of n){const c=r(t,i);c!==void 0&&(o[i]=c)}}}E.wildcard=Symbol("*");const ee=(s,e)=>Object.prototype.hasOwnProperty.call(s,e)?s[e]:void 0,Me={[Z]:(s,e)=>{for(const t of e.keys()){const n=s.get(t);if(n==null)s.set(t,e.get(t));else{const{score:r,terms:o,match:i}=e.get(t);n.score=n.score+r,n.match=Object.assign(n.match,i),ge(n.terms,o)}}return s},[me]:(s,e)=>{const t=new Map;for(const n of e.keys()){const r=s.get(n);if(r==null)continue;const{score:o,terms:i,match:c}=e.get(n);ge(r.terms,i),t.set(n,{score:r.score+o,terms:r.terms,match:Object.assign(r.match,c)})}return t},[ke]:(s,e)=>{for(const t of e.keys())s.delete(t);return s}},Ce={k:1.2,b:.7,d:.5},Ee=(s,e,t,n,r,o)=>{const{k:i,b:c,d:a}=o;return Math.log(1+(t-e+.5)/(e+.5))*(a+s*(i+1)/(s+i*(1-c+c*n/r)))},Le=s=>(e,t,n)=>{const r=typeof s.fuzzy=="function"?s.fuzzy(e,t,n):s.fuzzy||!1,o=typeof s.prefix=="function"?s.prefix(e,t,n):s.prefix===!0,i=typeof s.boostTerm=="function"?s.boostTerm(e,t,n):1;return{term:e,fuzzy:r,prefix:o,termBoost:i}},te={idField:"id",extractField:(s,e)=>s[e],stringifyField:(s,e)=>s.toString(),tokenize:s=>s.split(Ae),processTerm:s=>s.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(s,e)=>{typeof console?.[s]=="function"&&console[s](e)},autoVacuum:!0},pe={combineWith:Z,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ce},De={combineWith:me,prefix:(s,e,t)=>e===t.length-1},se={batchSize:1e3,batchWait:10},ne={minDirtFactor:.1,minDirtCount:20},ie={...se,...ne},Te=(s,e)=>{s.includes(e)||s.push(e)},ge=(s,e)=>{for(const t of e)s.includes(t)||s.push(t)},_e=({score:s},{score:e})=>e-s,we=()=>new Map,P=s=>{const e=new Map;for(const t of Object.keys(s))e.set(parseInt(t,10),s[t]);return e},U=async s=>{const e=new Map;let t=0;for(const n of Object.keys(s))e.set(parseInt(n,10),s[n]),++t%1e3===0&&await ye(0);return e},ye=s=>new Promise(e=>setTimeout(e,s)),Ae=/[\n\r\p{Z}\p{P}]+/u,z=24e6,J=48e3,Oe=2,L=s=>JSON.stringify([Oe,s.revision,s.updated,s.created,s.projectID,s.directory]);function Ve(s,e){if(!s||!e||s.id!==e.id||s.version!==L(e)||!Number.isInteger(s.pages)||s.pages<1||s.pages>8||!Number.isInteger(s.characters)||s.characters<0||s.characters>J||typeof s.partial!="boolean"||typeof s.complete!="boolean"||typeof s.capped!="boolean"||s.cursor!==void 0&&(typeof s.cursor!="string"||!/^\d{1,9}$/.test(s.cursor))||s.complete&&(s.partial||s.capped||s.cursor)||!s.complete&&!s.capped&&(!s.cursor||s.pages>=8)||!Array.isArray(s.fragments)||s.fragments.length>J)return!1;let t=0;for(const n of s.fragments){if(!n||!["You","Assistant","Tool","File"].includes(n.kind)||typeof n.text!="string"||n.text.length>2e3||!Number.isFinite(n.time))return!1;t+=n.text.length}return t===s.characters}const x=s=>s.normalize("NFKD").replace(new RegExp("\\p{M}","gu"),"").toLowerCase(),oe=s=>x(s).match(/[\p{L}\p{N}]+/gu)||[],re=s=>oe(s).join(" ");function je(s){const e={text:"",terms:[],phrases:[],filters:[]},t=[];for(const n of s.slice(0,300).match(/(?:[^\s"]+|"[^"]*")+/g)||[]){const r=/^(source|project|dir|model|is|after|before|in):(.+)$/i.exec(n);if(r){const i=r[1].toLowerCase(),c=x(r[2].replace(/^"|"$/g,""));if(i==="in"){const a={title:["title"],files:["files"],messages:["body"],tools:["tools"]};e.fields=a[c],e.fields||(e.error="Use in:title, in:files, in:messages, or in:tools.")}else i==="is"&&!["fork","child","root","archived"].includes(c)?e.error="Use is:fork, is:child, is:root, or is:archived.":["after","before"].includes(i)&&(!/^\d{4}-\d{2}-\d{2}$/.test(c)||!Number.isFinite(Date.parse(c))||new Date(c).toISOString().slice(0,10)!==c)?e.error="Use a valid date in YYYY-MM-DD format.":e.filters.push([i,c]);continue}const o=n.replace(/^"|"$/g,"");n.startsWith('"')&&n.endsWith('"')&&e.phrases.push(re(o)),t.push(o)}return e.text=t.join(" "),e.terms=oe(e.text).slice(0,12),e.text=e.terms.join(" "),e}function Ne(s,e,t=220){const n=x(s),r=e.reduce((i,c)=>{const a=n.indexOf(c);return a<0?i:Math.min(i,a)},1/0),o=Number.isFinite(r)?Math.max(0,r-55):0;return`${o?"…":""}${s.slice(o,o+t).replace(/\s+/g," ").trim()}${s.length>o+t?"…":""}`}class $e{index=new E({fields:["title","project","directory","model","sessionID","files","body","tools"],tokenize:oe,processTerm:x,searchOptions:{combineWith:"AND",prefix:!0,boost:{title:12,files:5,project:3,directory:3,model:2,sessionID:12,body:1,tools:.6}}});entries=new Map;cache=new Map;scope=new Set;setData(e,t){const n=new Set(e.map(o=>o.id));for(const[o,i]of this.entries)n.has(o)||(this.index.remove(i.doc),this.entries.delete(o));const r=new Map(t.map(o=>[o.id,o.name]));for(const o of e){const i=this.entries.get(o.id),c=i&&L(i.session)===L(o),a={id:o.id,title:o.title,project:r.get(o.projectID)||"",directory:o.directory,model:o.model,sessionID:o.id,body:c?i.doc.body:"",files:c?i.doc.files:"",tools:c?i.doc.tools:""};if(c&&Object.keys(a).every(d=>i.doc[d]===a[d])){i.session=o;continue}this.entries.set(o.id,{session:o,doc:a,fragments:c?i.fragments:[]}),i&&this.index.remove(i.doc),this.index.add(a)}this.cache.clear()}setScope(e){this.scope=new Set(e),this.cache.clear()}content(e){return this.entries.get(e)?.fragments.slice()||[]}addContent(e,t){const n=this.entries.get(e);if(!n)return;n.fragments.push(...t);const r={...n.doc};for(const o of t){const i=o.kind==="File"?"files":o.kind==="Tool"?"tools":"body";r[i]+=`
2
+ ${o.text}`}this.index.remove(n.doc),this.index.add(r),n.doc=r,this.cache.clear()}search(e,t=!1,n=80){const r=`${e}\0${t}\0${n}`,o=this.cache.get(r);if(o)return o;const i=je(e);if(i.error)return{hits:[],total:0,error:i.error};const c=l=>{const{session:h,doc:g}=l;if(t&&!this.scope.has(h.id))return!1;for(const[m,f]of i.filters)if(m==="source"&&!x(h.source||"opencode").includes(f)||m==="project"&&!x(g.project).includes(f)&&!x(h.projectID).includes(f)||m==="dir"&&!x(h.directory).includes(f)||m==="model"&&!x(h.model).includes(f)||m==="after"&&h.created<new Date(`${f}T00:00:00`).getTime()||m==="before"&&h.created>new Date(`${f}T23:59:59.999`).getTime()||m==="is"&&(f==="fork"&&!h.forkID||f==="child"&&(!h.parentID||h.forkID)||f==="root"&&(h.parentID||h.forkID)||f==="archived"&&!h.archived))return!1;if(i.phrases.length){const m=i.fields||["title","body","files","tools","project","directory","model"];if(!i.phrases.every(f=>m.some(_=>re(g[_]).includes(f))))return!1}return!0},d=(i.terms.length?this.index.search(i.text,{fields:i.fields,fuzzy:l=>l.length<4?!1:l.length>7?2:1,filter:l=>c(this.entries.get(String(l.id)))}):[...this.entries.values()].filter(c).map(l=>({id:l.session.id,score:0,terms:[],match:{}}))).map(l=>{const h=this.entries.get(String(l.id)),g=re(h.doc.title),m=new Set(Object.values(l.match).flat()),f=i.text?g.includes(i.text)&&(!i.fields||i.fields.includes("title"))?5:m.has("title")||m.has("sessionID")?4:m.has("files")?3:m.has("body")?2:1:0;return{match:l,entry:h,tier:f}}).sort((l,h)=>h.tier-l.tier||h.match.score-l.match.score||h.entry.session.updated-l.entry.session.updated||l.entry.session.id.localeCompare(h.entry.session.id)),p={hits:d.slice(0,Math.min(250,Math.max(1,n))).map(({match:l,entry:h,tier:g})=>{const m=l.terms.length?l.terms:i.terms,f=h.fragments.filter(b=>!i.fields||i.fields.includes(b.kind==="File"?"files":b.kind==="Tool"?"tools":"body"));let _,w=0;for(const b of f){const F=x(b.text),S=m.reduce((Pe,Ue)=>Pe+Number(F.includes(Ue)),0);if(S>w&&(_=b,w=S),S===m.length&&S>0)break}const V=new Set(Object.values(l.match).flat()),R=g>=4?V.has("sessionID")&&!V.has("title")?"Session ID":"Title":_?_.kind==="File"?"File":_.kind==="Tool"?"Tool":"Message":i.text?"Metadata":"Recent";return{id:h.session.id,score:l.score,source:R,excerpt:_?Ne(_.text,m):"",terms:m}}),total:d.length};return this.cache.size>=30&&this.cache.delete(this.cache.keys().next().value),this.cache.set(r,p),p}}class Re{available=!0;epoch=0;async restore(e,t,n){const r=new Map(t.map(c=>[c.id,c]));let o,i=0;try{do{const c=await fetch(`/api/sessiongraph/index${o?`?after=${encodeURIComponent(o)}`:""}`);if(!c.ok)throw new Error("Index unavailable");const a=await c.json();this.epoch=a.epoch;for(const d of a.records)Ve(d,r.get(d.id))&&i+d.characters<=z&&(i+=d.characters,n(d));o=a.cursor}while(o);try{globalThis.indexedDB?.deleteDatabase("atlas-search")}catch{}}catch{this.available=!1}}async save(e){if(this.available)try{const t=await fetch("/api/sessiongraph/index",{method:"POST",headers:{"Content-Type":"application/json","X-SessionGraph-Action":"index"},body:JSON.stringify({record:e,epoch:this.epoch})});!t.ok&&t.status!==409&&(this.available=!1)}catch{this.available=!1}}async clear(){const e=await fetch("/api/sessiongraph/index",{method:"DELETE",headers:{"X-SessionGraph-Action":"index"}});if(this.available=e.ok,!e.ok)throw new Error("Could not clear saved index.")}}const k=new $e,q=new Re,y=new Map,D=new Set;let T=!1,Q=0,I=0,M=0,B=!1,A,O,xe=[],ce,be=0;const Y=new Set,j=s=>postMessage(s);function N(){if(!O)return;const s=performance.now(),e=k.search(O.text,O.viewOnly,O.limit);xe=e.hits.slice(0,12).map(t=>t.id),j({type:"results",request:O.request,...e,elapsed:performance.now()-s})}function $(){const s=[...y.values()];j({type:"status",status:{indexed:s.filter(e=>e.pages>0).length,complete:s.filter(e=>e.complete).length,total:y.size,characters:I,active:T&&Q>0,limited:I>=z||s.some(e=>e.partial||e.capped),failed:s.filter(e=>e.failed>0).length,restored:D.size,storage:B?A?.sourceID&&q.available?"local":"memory":"restoring"}})}function Se(){ce||(ce=setTimeout(()=>{ce=void 0,N(),$()},200))}function We(){const s=t=>!!(t&&!t.inflight&&!t.complete&&!t.capped&&t.failed<1);for(const t of xe){const n=y.get(t);if(s(n)&&n.pages<2)return n}let e;for(const t of y.values())s(t)&&(!e||t.pages<e.pages)&&(e=t);return e}function ae(){if(!B||!T||I>=z){$();return}for(;Q<2;){const s=We();if(!s)break;s.inflight=!0,Q++;const e=M,t=new AbortController;Y.add(t),(async()=>{try{const n=new URLSearchParams({updated:String(s.session.updated)});s.cursor&&n.set("cursor",s.cursor);const r=await fetch(`/api/sessiongraph/session/${encodeURIComponent(s.session.id)}/content?${n}`,{signal:t.signal});if(!r.ok)throw new Error("Conversation unavailable");const o=await r.json();if(e!==M||t.signal.aborted)return;if(o.id!==s.session.id)throw new Error("Unexpected conversation");const i=Math.min(J,Math.floor(z/Math.max(1,y.size)));let c=Math.min(i-s.characters,z-I);const a=[],d=[...o.fragments].sort((l,h)=>+(h.kind==="File"||h.kind==="You")-+(l.kind==="File"||l.kind==="You")),u=Math.max(160,Math.min(2e3,Math.floor(c/Math.max(1,d.length))));let p=!1;for(const l of d){if(c<=0){p=!0;break}const h=l.text.slice(0,Math.min(c,u));p||=h.length<l.text.length,a.push({...l,text:h}),c-=h.length,s.characters+=h.length,I+=h.length}k.addContent(s.session.id,a),s.pages++,s.partial||=o.truncated||p,s.complete=!o.nextCursor&&!s.partial,s.capped=!s.complete&&(!o.nextCursor||s.characters>=i||s.pages>=8),s.cursor=o.nextCursor||void 0,Se(),A?.sourceID&&await q.save({id:s.session.id,version:L(s.session),fragments:k.content(s.session.id),pages:s.pages,characters:s.characters,partial:s.partial,complete:s.complete,capped:s.capped,cursor:s.cursor})}catch{!t.signal.aborted&&e===M&&s.failed++}finally{s.inflight=!1,Y.delete(t),Q--,T?setTimeout(ae,performance.now()-be<150?150:35):$()}})()}$()}async function Ie(s,e=!1){const t=++M;B=!1,Y.forEach(i=>i.abort());const n=A?.sourceID===s.sourceID&&!e,r=n?new Map(y):new Map;n||(k.setData([],[]),D.clear()),A=s,y.clear(),I=0;for(const i of[...s.sessions].sort((c,a)=>a.updated-c.updated)){const c=r.get(i.id),a=c&&L(c.session)===L(i),d=a?{...c,session:i,inflight:!1}:{session:i,pages:0,characters:0,partial:!1,complete:!1,capped:!1,failed:0,inflight:!1};a||D.delete(i.id),y.set(i.id,d),I+=d.characters}for(const i of D)y.has(i)||D.delete(i);if(k.setData(s.sessions,s.projects),N(),$(),e&&await q.clear(),t!==M||(s.sourceID&&await q.restore(s.sourceID,s.sessions,i=>{if(t!==M)return;const c=y.get(i.id);!c||c.pages||I+i.characters>z||(k.addContent(i.id,i.fragments),Object.assign(c,{pages:i.pages,characters:i.characters,partial:i.partial,complete:i.complete,capped:i.capped,cursor:i.cursor}),I+=i.characters,D.add(i.id),Se())}),t!==M))return;const o=Math.min(J,Math.floor(z/Math.max(1,y.size)));for(const i of y.values())!i.complete&&i.characters>=o&&(i.capped=!0);B=!0,N(),ae()}self.onmessage=s=>{try{const e=s.data;e.type==="data"?Ie(e).catch(()=>j({type:"error",message:"Search index could not load. Reload to retry."})):e.type==="scope"?(k.setScope(e.ids),N()):e.type==="query"?(be=performance.now(),O=e,N()):e.type==="clear-cache"?(T=!1,A&&Ie(A,!0).catch(()=>j({type:"error",message:"Search index could not reset. Reload to retry."}))):(T=e.enabled,T?y.forEach(t=>{t.failed=0}):Y.forEach(t=>t.abort()),ae())}catch(e){j({type:"error",message:e instanceof Error?e.message:"Search unavailable"})}}})();
@@ -0,0 +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>
@@ -0,0 +1,19 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="theme-color" content="#080c10" />
7
+ <meta
8
+ name="description"
9
+ content="Explore &amp; visualize all your LLM sessions"
10
+ />
11
+ <title>SessionGraph — Explore &amp; visualize all your LLM sessions</title>
12
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
13
+ <script type="module" crossorigin src="/assets/index-0ZTrNFWY.js"></script>
14
+ <link rel="stylesheet" crossorigin href="/assets/index-7IkZaZQy.css">
15
+ </head>
16
+ <body>
17
+ <div id="app"></div>
18
+ </body>
19
+ </html>
@@ -0,0 +1,4 @@
1
+ Claude, OpenAI, and OpenCode SVG paths are from Simple Icons (CC0-1.0).
2
+ Claude and OpenCode: https://github.com/simple-icons/simple-icons/tree/develop/icons
3
+ OpenAI: https://github.com/simple-icons/simple-icons/blob/11.15.0/icons/openai.svg
4
+ Brand names and marks belong to their respective owners. SessionGraph is independent.
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="m12 1 10 5.8v10.4L12 23 2 17.2V6.8zm0 2.3L4 7.9l8 4.6 8-4.6zM4 10.2v5.9l7 4v-5.9zm9 4v5.9l7-4v-5.9z"/></svg>
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="black" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3 9 5-9 5-9-5zM3 12l9 5 9-5M3 16l9 5 9-5"/></svg>
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M22 24H2V0h20zM17 4.8H7v14.4h10z"/></svg>
@@ -0,0 +1,480 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>files</key>
6
+ <dict>
7
+ <key>Resources/icon.icns</key>
8
+ <data>
9
+ FeKnFCr2tFC9eg8QzcW0TyD6nmw=
10
+ </data>
11
+ <key>Resources/resources/LICENSE</key>
12
+ <data>
13
+ sbZILGEhQm9cwkywdVEERiDp3bI=
14
+ </data>
15
+ <key>Resources/resources/node</key>
16
+ <data>
17
+ LwhUyzptHAPUkpORN2tZA7T6KfM=
18
+ </data>
19
+ <key>Resources/resources/server.mjs</key>
20
+ <data>
21
+ spdK3qr3HUzf8sevxN96Q0vuzlc=
22
+ </data>
23
+ <key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
24
+ <data>
25
+ yYSDXNlt/tTRaj6rJo8ZMqvY7pQ=
26
+ </data>
27
+ <key>Resources/resources/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2</key>
28
+ <data>
29
+ 5kpQSZEtAzzU5kdiuro3Zr2YR54=
30
+ </data>
31
+ <key>Resources/resources/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2</key>
32
+ <data>
33
+ mZu3Z7sOWqglha+kefNbUA9Pp+Q=
34
+ </data>
35
+ <key>Resources/resources/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2</key>
36
+ <data>
37
+ 9J+D7/6th5UzRxIgoFX9awJv47A=
38
+ </data>
39
+ <key>Resources/resources/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2</key>
40
+ <data>
41
+ 6MZ7/PEEOeDVF0eHI650KpwKQV8=
42
+ </data>
43
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2</key>
44
+ <data>
45
+ mDbzFbXDuciYuRDdYbcJkcocaWU=
46
+ </data>
47
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff</key>
48
+ <data>
49
+ wpeoT2YBcqJ4hbipsoiB1m58w98=
50
+ </data>
51
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff</key>
52
+ <data>
53
+ GBHBT1lClOFRLkxzjkkoZV1QN+Y=
54
+ </data>
55
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2</key>
56
+ <data>
57
+ w57wcK5m30ZZ4sBwsaWzlcI3F7c=
58
+ </data>
59
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff</key>
60
+ <data>
61
+ rWMSbc9cch7FBErQpfnWcshAYFM=
62
+ </data>
63
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2</key>
64
+ <data>
65
+ u4dQDjIEo6fGXWYzx5xchAw76NM=
66
+ </data>
67
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2</key>
68
+ <data>
69
+ SvjO9SK9iRLLL61B4GuQJWQP62I=
70
+ </data>
71
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff</key>
72
+ <data>
73
+ dfJwTWMZxHyGnUuJDGfpU4w2dLs=
74
+ </data>
75
+ <key>Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2</key>
76
+ <data>
77
+ bIkS18/YaTiWdOzfzp4pFXvLmqQ=
78
+ </data>
79
+ <key>Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff</key>
80
+ <data>
81
+ LdRX2sBB3T5WDAsZLCwBlsMYXPw=
82
+ </data>
83
+ <key>Resources/resources/web/assets/index-0ZTrNFWY.js</key>
84
+ <data>
85
+ scy465uefSDVFBURqmrLq/uCPyI=
86
+ </data>
87
+ <key>Resources/resources/web/assets/index-7IkZaZQy.css</key>
88
+ <data>
89
+ kgmaVNBeYQykMD7M9ksFrrw79w8=
90
+ </data>
91
+ <key>Resources/resources/web/assets/index-BVJmULd-.js</key>
92
+ <data>
93
+ +P/GjI42sLayfRxcbyCZIkG2q1k=
94
+ </data>
95
+ <key>Resources/resources/web/assets/scene-BmLcylTN.js</key>
96
+ <data>
97
+ dr/bv1Pko3gEqOvK5lZqoPoa/t8=
98
+ </data>
99
+ <key>Resources/resources/web/assets/three-B4kj4iLH.js</key>
100
+ <data>
101
+ arFPrv4KvGrmcCgcd5UehbG53E8=
102
+ </data>
103
+ <key>Resources/resources/web/assets/worker-YMPBjASm.js</key>
104
+ <data>
105
+ s1PlmcW/31grHCrnfv+t0eOY3To=
106
+ </data>
107
+ <key>Resources/resources/web/favicon.svg</key>
108
+ <data>
109
+ xvV4UsLSQ7jl371/CXG/rjaP6XA=
110
+ </data>
111
+ <key>Resources/resources/web/index.html</key>
112
+ <data>
113
+ XJ8mtqJ3jw5bu42ZTcRyFdgcHPg=
114
+ </data>
115
+ <key>Resources/resources/web/sources/NOTICE.txt</key>
116
+ <data>
117
+ PcV50barBE/NE/UoOh3xDCOJkvc=
118
+ </data>
119
+ <key>Resources/resources/web/sources/claude.svg</key>
120
+ <data>
121
+ 0AGYblcsm82YGkSC8pUjxhvBfts=
122
+ </data>
123
+ <key>Resources/resources/web/sources/cursor.svg</key>
124
+ <data>
125
+ lhK1I0PmwG/LfNs+BozKskI6mUE=
126
+ </data>
127
+ <key>Resources/resources/web/sources/generic.svg</key>
128
+ <data>
129
+ +5uM4sXiUd7CGqMuH/9ehuNBpW0=
130
+ </data>
131
+ <key>Resources/resources/web/sources/openai.svg</key>
132
+ <data>
133
+ TrnsY11nMZXL6Dhm1UWjH50eSkc=
134
+ </data>
135
+ <key>Resources/resources/web/sources/opencode.svg</key>
136
+ <data>
137
+ 5HZX/FV462o/NH7sNbE4i+c3pTA=
138
+ </data>
139
+ </dict>
140
+ <key>files2</key>
141
+ <dict>
142
+ <key>Resources/icon.icns</key>
143
+ <dict>
144
+ <key>hash2</key>
145
+ <data>
146
+ BGYSD8J0qJhWI5lVhwZLgDxOyMxKEkjQNlew5PXEmUw=
147
+ </data>
148
+ </dict>
149
+ <key>Resources/resources/LICENSE</key>
150
+ <dict>
151
+ <key>hash2</key>
152
+ <data>
153
+ Jd0/3ISlbw0OS4nAOMeFOMssh1Yf2XldGY59SQ42Dlo=
154
+ </data>
155
+ </dict>
156
+ <key>Resources/resources/node</key>
157
+ <dict>
158
+ <key>hash2</key>
159
+ <data>
160
+ YUpZ5XuEeDoIjY8doNHS1wIzSNBKRFN5TWzgrEMowmk=
161
+ </data>
162
+ </dict>
163
+ <key>Resources/resources/server.mjs</key>
164
+ <dict>
165
+ <key>hash2</key>
166
+ <data>
167
+ H8YI0ZFR3+6UuwfVW92+f2hKNFimae5LhvrN5MVp9fU=
168
+ </data>
169
+ </dict>
170
+ <key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
171
+ <dict>
172
+ <key>hash2</key>
173
+ <data>
174
+ Ixf6S7KTycCxEOGDFdUpI1xHoN3TM4zqPYx5VekniZ4=
175
+ </data>
176
+ </dict>
177
+ <key>Resources/resources/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2</key>
178
+ <dict>
179
+ <key>hash2</key>
180
+ <data>
181
+ aJRDlpSUalidFX7OADCGlgpqQBPXSoE9q3YC79s9jAk=
182
+ </data>
183
+ </dict>
184
+ <key>Resources/resources/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2</key>
185
+ <dict>
186
+ <key>hash2</key>
187
+ <data>
188
+ gk9IW10m4vLaPCsjYTLs4byOTkM3NFKVC7DkBUi0MT8=
189
+ </data>
190
+ </dict>
191
+ <key>Resources/resources/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2</key>
192
+ <dict>
193
+ <key>hash2</key>
194
+ <data>
195
+ GfnJJUaqMAwxIjXjElrxuBOU2NuaS8SkJc1bZB0tVOE=
196
+ </data>
197
+ </dict>
198
+ <key>Resources/resources/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2</key>
199
+ <dict>
200
+ <key>hash2</key>
201
+ <data>
202
+ j6QOXSSCR3NeuXoL1ZO4hSRAQwYA1roBNkwx/gq8H+E=
203
+ </data>
204
+ </dict>
205
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2</key>
206
+ <dict>
207
+ <key>hash2</key>
208
+ <data>
209
+ djVCK9EN27yw4MqhFUuSgpj1yDGbjACzCXjUOV9Hg84=
210
+ </data>
211
+ </dict>
212
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff</key>
213
+ <dict>
214
+ <key>hash2</key>
215
+ <data>
216
+ QtqBoou83dpnaKJaSzEF7ikeadX6bHR0e8UbvGcYxTg=
217
+ </data>
218
+ </dict>
219
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff</key>
220
+ <dict>
221
+ <key>hash2</key>
222
+ <data>
223
+ Dkojk+jtMYWuMA5KICttkUnUfYoOW7jx0dsz52uG7NE=
224
+ </data>
225
+ </dict>
226
+ <key>Resources/resources/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2</key>
227
+ <dict>
228
+ <key>hash2</key>
229
+ <data>
230
+ +MIuwYBL1pZrcPQ6x8MnAlZFtMCVlxF/yipabHUBBv4=
231
+ </data>
232
+ </dict>
233
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff</key>
234
+ <dict>
235
+ <key>hash2</key>
236
+ <data>
237
+ Mo1QtuzpyiXEbuo+iFukl/Yjfy+4Tve5L4jhShol44E=
238
+ </data>
239
+ </dict>
240
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2</key>
241
+ <dict>
242
+ <key>hash2</key>
243
+ <data>
244
+ CJSfco3FLVKOabFmfRXImlaGpO6aKW/5CYOYX5nDgPc=
245
+ </data>
246
+ </dict>
247
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2</key>
248
+ <dict>
249
+ <key>hash2</key>
250
+ <data>
251
+ a8DyJqW3iEqBcOP2LGPXZ1YJ1GMb3Fkxtc2rgYIfAOs=
252
+ </data>
253
+ </dict>
254
+ <key>Resources/resources/web/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff</key>
255
+ <dict>
256
+ <key>hash2</key>
257
+ <data>
258
+ +N2qCrnTwFLJ/gNXUcghS34NWebntpsEX4ZZwv5NztI=
259
+ </data>
260
+ </dict>
261
+ <key>Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2</key>
262
+ <dict>
263
+ <key>hash2</key>
264
+ <data>
265
+ YmMrY3UwXnDdyv3YlSGOauQaGE/NKAppxzlGBgTKAKk=
266
+ </data>
267
+ </dict>
268
+ <key>Resources/resources/web/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff</key>
269
+ <dict>
270
+ <key>hash2</key>
271
+ <data>
272
+ vO1WHZkeP4HBUMCOcff6hJ/L/1I1YPYFkkXy7c4ZtgA=
273
+ </data>
274
+ </dict>
275
+ <key>Resources/resources/web/assets/index-0ZTrNFWY.js</key>
276
+ <dict>
277
+ <key>hash2</key>
278
+ <data>
279
+ 0OAurzgn8bdroBIjIFNoKmn3r9bz4gi5C8GE5gHtZjM=
280
+ </data>
281
+ </dict>
282
+ <key>Resources/resources/web/assets/index-7IkZaZQy.css</key>
283
+ <dict>
284
+ <key>hash2</key>
285
+ <data>
286
+ uKWBaWeoY9Hed4TY9nyX2Fm72vwZyWaThVtloLAy1ws=
287
+ </data>
288
+ </dict>
289
+ <key>Resources/resources/web/assets/index-BVJmULd-.js</key>
290
+ <dict>
291
+ <key>hash2</key>
292
+ <data>
293
+ vIrEecAajDgZAcqyKBQl5mNkbsIT8yaO8oPuRHSTCdU=
294
+ </data>
295
+ </dict>
296
+ <key>Resources/resources/web/assets/scene-BmLcylTN.js</key>
297
+ <dict>
298
+ <key>hash2</key>
299
+ <data>
300
+ +PdCUDh8YRKmrfRC/WkeYoMQvbL9vPNVROvlK4PpK7o=
301
+ </data>
302
+ </dict>
303
+ <key>Resources/resources/web/assets/three-B4kj4iLH.js</key>
304
+ <dict>
305
+ <key>hash2</key>
306
+ <data>
307
+ pTnZpsxh4jkCqfyhtn0OlwfsOuCzQMd7IprRrLvgPgY=
308
+ </data>
309
+ </dict>
310
+ <key>Resources/resources/web/assets/worker-YMPBjASm.js</key>
311
+ <dict>
312
+ <key>hash2</key>
313
+ <data>
314
+ HDhcUd6lR7+KzOstKRHzGvp4rpPkzpl7jvBpVDj5xys=
315
+ </data>
316
+ </dict>
317
+ <key>Resources/resources/web/favicon.svg</key>
318
+ <dict>
319
+ <key>hash2</key>
320
+ <data>
321
+ /EOHGQsOnvyNNcwF1H59CKNwJECq5gPVVdSjpKVonPQ=
322
+ </data>
323
+ </dict>
324
+ <key>Resources/resources/web/index.html</key>
325
+ <dict>
326
+ <key>hash2</key>
327
+ <data>
328
+ v0MR/WeIxvHaWJEupSR6ipg67i+rh6kJKGPs5Y7albk=
329
+ </data>
330
+ </dict>
331
+ <key>Resources/resources/web/sources/NOTICE.txt</key>
332
+ <dict>
333
+ <key>hash2</key>
334
+ <data>
335
+ +w9OfpigovcrK0gxgPTzyuLdiycMKsvMTzRO5dXq1Bo=
336
+ </data>
337
+ </dict>
338
+ <key>Resources/resources/web/sources/claude.svg</key>
339
+ <dict>
340
+ <key>hash2</key>
341
+ <data>
342
+ Mbz3JfkJboA9Q+vRSOAzHo/Kd+ksDGmfzkByg5TnwaU=
343
+ </data>
344
+ </dict>
345
+ <key>Resources/resources/web/sources/cursor.svg</key>
346
+ <dict>
347
+ <key>hash2</key>
348
+ <data>
349
+ XB2782PojVGkOX6YZQ2sxlZQmw8y39Y2LKgMH95PuYw=
350
+ </data>
351
+ </dict>
352
+ <key>Resources/resources/web/sources/generic.svg</key>
353
+ <dict>
354
+ <key>hash2</key>
355
+ <data>
356
+ cXvb+smHfuzrKyOoY84cGdFyEhxFn1GBZicOPBcE2yY=
357
+ </data>
358
+ </dict>
359
+ <key>Resources/resources/web/sources/openai.svg</key>
360
+ <dict>
361
+ <key>hash2</key>
362
+ <data>
363
+ 1IAWbmmuyMmH4stu0pazdfSS+TjOydGWBq3DmlVybUE=
364
+ </data>
365
+ </dict>
366
+ <key>Resources/resources/web/sources/opencode.svg</key>
367
+ <dict>
368
+ <key>hash2</key>
369
+ <data>
370
+ 1Jd2bymgRKVUpN/EFAJ4rnQTUIIJ00WaI0e7ubmkAD8=
371
+ </data>
372
+ </dict>
373
+ </dict>
374
+ <key>rules</key>
375
+ <dict>
376
+ <key>^Resources/</key>
377
+ <true/>
378
+ <key>^Resources/.*\.lproj/</key>
379
+ <dict>
380
+ <key>optional</key>
381
+ <true/>
382
+ <key>weight</key>
383
+ <real>1000</real>
384
+ </dict>
385
+ <key>^Resources/.*\.lproj/locversion.plist$</key>
386
+ <dict>
387
+ <key>omit</key>
388
+ <true/>
389
+ <key>weight</key>
390
+ <real>1100</real>
391
+ </dict>
392
+ <key>^Resources/Base\.lproj/</key>
393
+ <dict>
394
+ <key>weight</key>
395
+ <real>1010</real>
396
+ </dict>
397
+ <key>^version.plist$</key>
398
+ <true/>
399
+ </dict>
400
+ <key>rules2</key>
401
+ <dict>
402
+ <key>.*\.dSYM($|/)</key>
403
+ <dict>
404
+ <key>weight</key>
405
+ <real>11</real>
406
+ </dict>
407
+ <key>^(.*/)?\.DS_Store$</key>
408
+ <dict>
409
+ <key>omit</key>
410
+ <true/>
411
+ <key>weight</key>
412
+ <real>2000</real>
413
+ </dict>
414
+ <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
415
+ <dict>
416
+ <key>nested</key>
417
+ <true/>
418
+ <key>weight</key>
419
+ <real>10</real>
420
+ </dict>
421
+ <key>^.*</key>
422
+ <true/>
423
+ <key>^Info\.plist$</key>
424
+ <dict>
425
+ <key>omit</key>
426
+ <true/>
427
+ <key>weight</key>
428
+ <real>20</real>
429
+ </dict>
430
+ <key>^PkgInfo$</key>
431
+ <dict>
432
+ <key>omit</key>
433
+ <true/>
434
+ <key>weight</key>
435
+ <real>20</real>
436
+ </dict>
437
+ <key>^Resources/</key>
438
+ <dict>
439
+ <key>weight</key>
440
+ <real>20</real>
441
+ </dict>
442
+ <key>^Resources/.*\.lproj/</key>
443
+ <dict>
444
+ <key>optional</key>
445
+ <true/>
446
+ <key>weight</key>
447
+ <real>1000</real>
448
+ </dict>
449
+ <key>^Resources/.*\.lproj/locversion.plist$</key>
450
+ <dict>
451
+ <key>omit</key>
452
+ <true/>
453
+ <key>weight</key>
454
+ <real>1100</real>
455
+ </dict>
456
+ <key>^Resources/Base\.lproj/</key>
457
+ <dict>
458
+ <key>weight</key>
459
+ <real>1010</real>
460
+ </dict>
461
+ <key>^[^/]+$</key>
462
+ <dict>
463
+ <key>nested</key>
464
+ <true/>
465
+ <key>weight</key>
466
+ <real>10</real>
467
+ </dict>
468
+ <key>^embedded\.provisionprofile$</key>
469
+ <dict>
470
+ <key>weight</key>
471
+ <real>20</real>
472
+ </dict>
473
+ <key>^version\.plist$</key>
474
+ <dict>
475
+ <key>weight</key>
476
+ <real>20</real>
477
+ </dict>
478
+ </dict>
479
+ </dict>
480
+ </plist>
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.