gisool 0.0.0-stage → 0.1.0
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.
- package/LICENSE +22 -0
- package/README.md +136 -2
- package/dist/api/routes.js +166 -0
- package/dist/api/security.js +86 -0
- package/dist/api/sse.js +55 -0
- package/dist/api/static.js +32 -0
- package/dist/catalog/fields.js +146 -0
- package/dist/catalog/index.js +133 -0
- package/dist/catalog/scanner.js +185 -0
- package/dist/catalog/uri.js +41 -0
- package/dist/catalog/watcher.js +59 -0
- package/dist/cli/config-writer.js +255 -0
- package/dist/cli/doctor.js +197 -0
- package/dist/cli/eval.js +64 -0
- package/dist/cli/export-import.js +66 -0
- package/dist/cli/init.js +271 -0
- package/dist/cli/main.js +165 -0
- package/dist/cli/open.js +24 -0
- package/dist/cli/serve.js +144 -0
- package/dist/config.js +78 -0
- package/dist/dashboard/assets/app.js +256 -0
- package/dist/dashboard/assets/chunk-4U4GNPH4.js +17 -0
- package/dist/dashboard/assets/chunk-5DFWNJC2.js +1 -0
- package/dist/dashboard/assets/chunk-JPIEF5XO.js +17 -0
- package/dist/dashboard/assets/chunk-ZBUKVJOI.js +1 -0
- package/dist/dashboard/assets/styles.css +487 -0
- package/dist/dashboard/index.html +15 -0
- package/dist/ingest/attribution.js +55 -0
- package/dist/ingest/hooks.js +168 -0
- package/dist/ingest/mcp-recorder.js +41 -0
- package/dist/ingest/otlp.js +160 -0
- package/dist/ingest/pipeline.js +100 -0
- package/dist/ingest/redact.js +36 -0
- package/dist/ingest/runtimes.js +25 -0
- package/dist/mcp/http.js +84 -0
- package/dist/mcp/skills-extension.js +35 -0
- package/dist/mcp/stdio-proxy.js +53 -0
- package/dist/mcp/tools.js +164 -0
- package/dist/packs/claude-code.js +157 -0
- package/dist/packs/codex.js +148 -0
- package/dist/packs/cursor.js +95 -0
- package/dist/packs/gajae.js +7 -0
- package/dist/packs/gemini.js +88 -0
- package/dist/packs/json-config.js +51 -0
- package/dist/packs/omo.js +149 -0
- package/dist/packs/openclaw.js +119 -0
- package/dist/packs/registry.js +13 -0
- package/dist/search/fts.js +61 -0
- package/dist/search/fusion.js +50 -0
- package/dist/search/guidance.js +7 -0
- package/dist/search/index.js +74 -0
- package/dist/search/lexical.js +69 -0
- package/dist/server.js +216 -0
- package/dist/store/db.js +74 -0
- package/dist/store/export.js +199 -0
- package/dist/store/index.js +13 -0
- package/dist/store/queries.js +458 -0
- package/dist/store/schema.sql +96 -0
- package/dist/store/writes.js +172 -0
- package/dist/types.js +1 -0
- package/dist/version.js +19 -0
- package/package.json +46 -4
- package/packs/claude-code/README.md +5 -0
- package/packs/claude-code/settings.template.json +24 -0
- package/packs/codex/README.md +5 -0
- package/packs/codex/config.template.toml +11 -0
- package/packs/cursor/hooks.example.json +8 -0
- package/packs/cursor/mcp.example.json +8 -0
- package/packs/gajae/extension/discovery.md +5 -0
- package/packs/gajae/extension/index.js +44 -0
- package/packs/gemini/settings.example.json +16 -0
- package/packs/hook-post.mjs +29 -0
- package/packs/omo/extension/discovery.md +5 -0
- package/packs/omo/extension/index.js +44 -0
- package/packs/openclaw/.codex-plugin/plugin.json +11 -0
- package/packs/openclaw/.mcp.json +12 -0
- package/packs/openclaw/gisool.json +1 -0
- package/packs/openclaw/hooks/gisool-discovery/HOOK.md +8 -0
- package/packs/openclaw/hooks/gisool-discovery/handler.js +27 -0
- package/packs/openclaw/index.mjs +47 -0
- package/packs/openclaw/openclaw.plugin.json +22 -0
- package/packs/openclaw/package.json +11 -0
- package/src/store/schema.sql +96 -0
- package/src/store/task-types.json +15 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
var Pe,A,Wt,dr,ne,Pt,zt,qt,nt,Ae,be,jt,st,rt,ot,pr,Ie={},He=[],fr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Be=Array.isArray;function Q(e,t){for(var n in t)e[n]=t[n];return e}function at(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function mr(e,t,n){var r,s,a,i={};for(a in t)a=="key"?r=t[a]:a=="ref"?s=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?Pe.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(a in e.defaultProps)i[a]===void 0&&(i[a]=e.defaultProps[a]);return Me(e,i,r,s,null)}function Me(e,t,n,r,s){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:s??++Wt,__i:-1,__u:0};return s==null&&A.vnode!=null&&A.vnode(a),a}function U(e){return e.children}function De(e,t){this.props=e,this.context=t}function se(e,t){if(t==null)return e.__?se(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?se(e):null}function _r(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,r=[],s=[],a=Q({},t);a.__v=t.__v+1,A.vnode&&A.vnode(a),it(e.__P,a,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,r,n??se(t),!!(32&t.__u),s),a.__v=t.__v,a.__.__k[a.__i]=a,Yt(r,a,s),t.__e=t.__=null,a.__e!=n&&Vt(a)}}function Vt(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Vt(e)}function Bt(e){(!e.__d&&(e.__d=!0)&&ne.push(e)&&!Ne.__r++||Pt!=A.debounceRendering)&&((Pt=A.debounceRendering)||zt)(Ne)}function Ne(){try{for(var e,t=1;ne.length;)ne.length>t&&ne.sort(qt),e=ne.shift(),t=ne.length,_r(e)}finally{ne.length=Ne.__r=0}}function Kt(e,t,n,r,s,a,i,l,u,d,p){var v,c,m,k,E,T,_=r&&r.__k||He,y=t.length;for(u=hr(n,t,_,u,y),v=0;v<y;v++)(m=n.__k[v])!=null&&(c=m.__i!=-1&&_[m.__i]||Ie,m.__i=v,T=it(e,m,c,s,a,i,l,u,d,p),k=m.__e,m.ref&&c.ref!=m.ref&&(c.ref&<(c.ref,null,m),p.push(m.ref,m.__c||k,m)),E==null&&k!=null&&(E=k),4&m.__u?(u=Gt(m,u,e),c.__e&&(c.__e=null)):typeof m.type=="function"&&T!==void 0?u=T:k&&(u=k.nextSibling),m.__u&=-7);return n.__e=E,u}function hr(e,t,n,r,s){var a,i,l,u,d,p=n.length,v=p,c=0;for(e.__k=new Array(s),a=0;a<s;a++)(i=t[a])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[a]=Me(null,i,null,null,null):Be(i)?i=e.__k[a]=Me(U,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[a]=Me(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[a]=i,u=a+c,i.__=e,i.__b=e.__b+1,l=null,(d=i.__i=vr(i,n,u,v))!=-1&&(v--,(l=n[d])&&(l.__u|=2)),l==null||l.__v==null?(d==-1&&(s>p?c--:s<p&&c++),typeof i.type!="function"&&(i.__u|=4)):d!=u&&(d==u-1?c--:d==u+1?c++:(d>u?c--:c++,i.__u|=4))):e.__k[a]=null;if(v)for(a=0;a<p;a++)(l=n[a])!=null&&(2&l.__u)==0&&(l.__e==r&&(r=se(l)),Qt(l,l));return r}function Gt(e,t,n){var r,s;if(typeof e.type=="function"){for(r=e.__k,s=0;r&&s<r.length;s++)r[s]&&(r[s].__=e,t=Gt(r[s],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=se(e)),t=n.insertBefore(e.__e,t||null));do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function vr(e,t,n,r){var s,a,i,l=e.key,u=e.type,d=t[n],p=d!=null&&(2&d.__u)==0;if(d===null&&l==null||p&&l==d.key&&u==d.type)return n;if(r>(p?1:0)){for(s=n-1,a=n+1;s>=0||a<t.length;)if((d=t[i=s>=0?s--:a++])!=null&&(2&d.__u)==0&&l==d.key&&u==d.type)return i}return-1}function Ut(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||fr.test(t)?n:n+"px"}function $e(e,t,n,r,s){var a,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof r=="string"&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Ut(e.style,t,"");if(n)for(t in n)r&&n[t]==r[t]||Ut(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")a=t!=(t=t.replace(jt,"$1")),i=t.toLowerCase(),t=i in e||t=="onFocusOut"||t=="onFocusIn"?i.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n[be]=r[be]:(n[be]=st,e.addEventListener(t,a?ot:rt,a)):e.removeEventListener(t,a?ot:rt,a);else{if(s=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function Ot(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[Ae]==null)t[Ae]=st++;else if(t[Ae]<n[be])return;return n(A.event?A.event(t):t)}}}function it(e,t,n,r,s,a,i,l,u,d){var p,v,c,m,k,E,T,_,y,C,D,H,z,h,L,R,$=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),a=[l=t.__e=n.__e]),(p=A.__b)&&p(t);e:if(typeof $=="function"){v=i.length;try{if(y=t.props,C=$.prototype&&$.prototype.render,D=(p=$.contextType)&&r[p.__c],H=p?D?D.props.value:p.__:r,n.__c?_=(c=t.__c=n.__c).__=c.__E:(C?t.__c=c=new $(y,H):(t.__c=c=new De(y,H),c.constructor=$,c.render=kr),D&&D.sub(c),c.state||(c.state={}),c.__n=r,m=c.__d=!0,c.__h=[],c._sb=[]),C&&c.__s==null&&(c.__s=c.state),C&&$.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=Q({},c.__s)),Q(c.__s,$.getDerivedStateFromProps(y,c.__s))),k=c.props,E=c.state,c.__v=t,m)C&&$.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),C&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(C&&$.getDerivedStateFromProps==null&&y!==k&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(y,H),t.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(y,c.__s,H)===!1){t.__v!=n.__v&&(c.props=y,c.state=c.__s,c.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(N){N&&(N.__=t)}),He.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&i.push(c),l=se(n);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(y,c.__s,H),C&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(k,E,T)})}if(c.context=H,c.props=y,c.__P=e,c.__e=!1,z=A.__r,h=0,C)c.state=c.__s,c.__d=!1,z&&z(t),p=c.render(c.props,c.state,c.context),He.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,z&&z(t),p=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++h<25);c.state=c.__s,c.getChildContext!=null&&(r=Q(Q({},r),c.getChildContext())),C&&!m&&c.getSnapshotBeforeUpdate!=null&&(T=c.getSnapshotBeforeUpdate(k,E)),L=p!=null&&p.type===U&&p.key==null?Zt(p.props.children):p,l=Kt(e,Be(L)?L:[L],t,n,r,s,a,i,l,u,d),c.base=t.__e,t.__u&=-161,c.__h.length&&i.push(c),_&&(c.__E=c.__=null)}catch(N){if(i.length=v,t.__v=null,u||a!=null){if(N.then){for(t.__u|=u?160:128;l&&l.nodeType==8&&l.nextSibling;)l=l.nextSibling;a!=null&&(a[a.indexOf(l)]=null),t.__e=l}else if(a!=null)for(R=a.length;R--;)at(a[R])}else t.__e=n.__e;t.__k==null&&(t.__k=n.__k||[]),N.then||Xt(t),A.__e(N,t,n)}}else a==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):l=t.__e=gr(n.__e,t,n,r,s,a,i,u,d);return(p=A.diffed)&&p(t),128&t.__u?void 0:l}function Xt(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(Xt))}function Yt(e,t,n){for(var r=0;r<n.length;r++)lt(n[r],n[++r],n[++r]);A.__c&&A.__c(t,e),e.some(function(s){try{e=s.__h,s.__h=[],e.some(function(a){a.call(s)})}catch(a){A.__e(a,s.__v)}})}function Zt(e){return typeof e!="object"||e==null||e.__b>0?e:Be(e)?e.map(Zt):e.constructor!==void 0?null:Q({},e)}function gr(e,t,n,r,s,a,i,l,u){var d,p,v,c,m,k,E,T=n.props||Ie,_=t.props,y=t.type;if(y=="svg"?s="http://www.w3.org/2000/svg":y=="math"?s="http://www.w3.org/1998/Math/MathML":s||(s="http://www.w3.org/1999/xhtml"),a!=null){for(d=0;d<a.length;d++)if((m=a[d])&&"setAttribute"in m==!!y&&(y?m.localName==y:m.nodeType==3)){e=m,a[d]=null;break}}if(e==null){if(y==null)return document.createTextNode(_);e=document.createElementNS(s,y,_.is&&_),l&&(A.__m&&A.__m(t,a),l=!1),a=null}if(y==null)T===_||l&&e.data==_||(e.data=_);else{if(a=y=="textarea"&&_.defaultValue!=null?null:a&&Pe.call(e.childNodes),!l&&a!=null)for(T={},d=0;d<e.attributes.length;d++)T[(m=e.attributes[d]).name]=m.value;for(d in T)m=T[d],d=="dangerouslySetInnerHTML"?v=m:d=="children"||d in _||d=="value"&&"defaultValue"in _||d=="checked"&&"defaultChecked"in _||$e(e,d,null,m,s);for(d in _)m=_[d],d=="children"?c=m:d=="dangerouslySetInnerHTML"?p=m:d=="value"?k=m:d=="checked"?E=m:l&&typeof m!="function"||T[d]===m||$e(e,d,m,T[d],s);if(p)l||v&&(p.__html==v.__html||p.__html==e.innerHTML)||(e.innerHTML=p.__html),t.__k=[];else if(v&&(e.innerHTML=""),Kt(t.type=="template"?e.content:e,Be(c)?c:[c],t,n,r,y=="foreignObject"?"http://www.w3.org/1999/xhtml":s,a,i,a?a[0]:n.__k&&se(n,0),l,u),a!=null)for(d=a.length;d--;)at(a[d]);l&&y!="textarea"||(d="value",y=="progress"&&k==null?e.removeAttribute("value"):k!=null&&(k!==e[d]||y=="progress"&&!k||y=="option"&&k!=T[d])&&$e(e,d,k,T[d],s),d="checked",E!=null&&E!=e[d]&&$e(e,d,E,T[d],s))}return e}function lt(e,t,n){try{if(typeof e=="function"){var r=typeof e.__u=="function";r&&e.__u(),r&&t==null||(e.__u=e(t))}else e.current=t}catch(s){A.__e(s,n)}}function Qt(e,t,n){var r,s;if(A.unmount&&A.unmount(e),(r=e.ref)&&(r.current&&r.current!=e.__e||lt(r,null,t)),(r=e.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(a){A.__e(a,t)}r.base=r.__P=r.__n=null}if(r=e.__k)for(s=0;s<r.length;s++)r[s]&&Qt(r[s],t,n||typeof e.type!="function");n||at(e.__e),e.__c=e.__=e.__e=void 0}function kr(e,t,n){return this.constructor(e,n)}function Jt(e,t,n){var r,s,a,i;t==document&&(t=document.documentElement),A.__&&A.__(e,t),s=(r=typeof n=="function")?null:n&&n.__k||t.__k,a=[],i=[],it(t,e=(!r&&n||t).__k=mr(U,null,[e]),s||Ie,Ie,t.namespaceURI,!r&&n?[n]:s?null:t.firstChild?Pe.call(t.childNodes):null,a,!r&&n?n:s?s.__e:t.firstChild,r,i),Yt(a,e,i),e.props.children=null}Pe=He.slice,A={__e:function(e,t,n,r){for(var s,a,i;t=t.__;)if((s=t.__c)&&!s.__)try{if((a=s.constructor)&&a.getDerivedStateFromError!=null&&(s.setState(a.getDerivedStateFromError(e)),i=s.__d),s.componentDidCatch!=null&&(s.componentDidCatch(e,r||{}),i=s.__d),i)return s.__E=s}catch(l){e=l}throw e}},Wt=0,dr=function(e){return e!=null&&e.constructor===void 0},De.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Q({},this.state),typeof e=="function"&&(e=e(Q({},n),this.props)),e&&Q(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Bt(this))},De.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Bt(this))},De.prototype.render=U,ne=[],zt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,qt=function(e,t){return e.__v.__b-t.__v.__b},Ne.__r=0,nt=Math.random().toString(8),Ae="__d"+nt,be="__a"+nt,jt=/(PointerCapture)$|Capture$/i,st=0,rt=Ot(!1),ot=Ot(!0),pr=0;var ye,I,ct,en,xe=0,cn=[],P=A,tn=P.__b,nn=P.__r,rn=P.diffed,on=P.__c,sn=P.unmount,an=P.__;function dt(e,t){P.__h&&P.__h(I,e,xe||t),xe=0;var n=I.__H||(I.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function F(e){return xe=1,br(fn,e)}function br(e,t,n){var r=dt(ye++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):fn(void 0,t),function(l){var u=r.__N?r.__N[0]:r.__[0],d=r.t(u,l);u!==d&&(r.__N=[d,r.__[1]],r.__c.setState({}))}],r.__c=I,!I.__f)){var s=function(l,u,d){if(!r.__c.__H)return!0;var p=!1,v=r.__c.props!==l;if(r.__c.__H.__.some(function(m){if(m.__N){p=!0;var k=m.__[0];m.__=m.__N,m.__N=void 0,k!==m.__[0]&&(v=!0)}}),a){var c=a.call(this,l,u,d);return p?c||v:c}return!p||v};I.__f=!0;var a=I.shouldComponentUpdate,i=I.componentWillUpdate;I.componentWillUpdate=function(l,u,d){if(this.__e){var p=a;a=void 0,s(l,u,d),a=p}i&&i.call(this,l,u,d)},I.shouldComponentUpdate=s}return r.__N||r.__}function B(e,t){var n=dt(ye++,3);!P.__s&&pn(n.__H,t)&&(n.__=e,n.u=t,I.__H.__h.push(n))}function un(e){return xe=5,j(function(){return{current:e}},[])}function j(e,t){var n=dt(ye++,7);return pn(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function dn(e,t){return xe=8,j(function(){return e},t)}function yr(){for(var e;e=cn.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(Ue),t.__h.some(ut),t.__h=[]}catch(n){t.__h=[],P.__e(n,e.__v)}}}P.__b=function(e){I=null,tn&&tn(e)},P.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),an&&an(e,t)},P.__r=function(e){nn&&nn(e),ye=0;var t=(I=e.__c).__H;t&&(ct===I?(t.__h=[],I.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.some(Ue),t.__h.some(ut),t.__h=[],ye=0)),ct=I},P.diffed=function(e){rn&&rn(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(cn.push(t)!==1&&en===P.requestAnimationFrame||((en=P.requestAnimationFrame)||xr)(yr)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),ct=I=null},P.__c=function(e,t){t.some(function(n){try{n.__h.some(Ue),n.__h=n.__h.filter(function(r){return!r.__||ut(r)})}catch(r){t.some(function(s){s.__h&&(s.__h=[])}),t=[],P.__e(r,n.__v)}}),on&&on(e,t)},P.unmount=function(e){sn&&sn(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(r){try{Ue(r)}catch(s){t=s}}),n.__H=void 0,t&&P.__e(t,n.__v))};var ln=typeof requestAnimationFrame=="function";function xr(e){var t,n=function(){clearTimeout(r),ln&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);ln&&(t=requestAnimationFrame(n))}function Ue(e){var t=I,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),I=t}function ut(e){var t=I;e.__c=e.__(),I=t}function pn(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function fn(e,t){return typeof t=="function"?t(e):t}var Se=["claude-code","codex","gemini","cursor","omo","gajae","openclaw","unknown"],Te=["loaded","exposed_only","no_match","aborted","not_used"],Le=["from","to","runtime","skill","state","dow","hour","hourSpan","q"],G={"claude-code":"Claude Code",codex:"Codex",gemini:"Gemini CLI",cursor:"Cursor",omo:"OmO",gajae:"Gajae Code",openclaw:"OpenClaw",unknown:"Unknown"},ce={"claude-code":"CC",codex:"CX",gemini:"GM",cursor:"CU",omo:"OM",gajae:"GJ",openclaw:"OC",unknown:"??"},V={loaded:"Loaded",exposed_only:"Exposed",no_match:"No match",aborted:"Aborted",not_used:"Not used"},Oe={loaded:"loaded: a skill was loaded in this session",exposed_only:"exposed_only: candidates were shown but none was loaded",no_match:"no_match: the search returned no candidate",aborted:"aborted: a load started but did not complete",not_used:"not_used: the session never searched for a skill"},We={runtime_id:"runtime id",vendor_meta:"vendor meta",trace_handle:"trace handle",window:"window",none:"unattributed"},J=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wr=new Set(Se),Sr=new Set(Te);function le(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return e}}function mn(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%2F/gi,"/")}function Tr(e){let t=e.startsWith("?")?e.slice(1):e;return t?t.split("&").filter(Boolean).map(n=>{let r=n.indexOf("=");return r<0?[le(n),""]:[le(n.slice(0,r)),n.slice(r+1)]}):[]}function we(e,t,n){let r=le(e).trim();if(!/^-?\d+$/.test(r))return;let s=Number(r);return s>=t&&s<=n?s:void 0}function pt(e){let t=new Set;for(let n of le(e).split(",")){let r=n.trim();r&&t.add(r)}return[...t]}function Lr(e){let t=typeof e=="string"?e:e.toString(),n={};for(let[r,s]of Tr(t))switch(r){case"from":n.from=we(s,0,Number.MAX_SAFE_INTEGER);break;case"to":n.to=we(s,0,Number.MAX_SAFE_INTEGER);break;case"runtime":{let a=pt(s).filter(i=>wr.has(i));a.length&&(n.runtime=a);break}case"skill":{let a=pt(s);a.length&&(n.skill=a);break}case"state":{let a=pt(s).filter(i=>Sr.has(i));a.length&&(n.state=a);break}case"dow":n.dow=we(s,0,6);break;case"hour":n.hour=we(s,0,23);break;case"hourSpan":n.hourSpan=we(s,1,24);break;case"q":{let a=le(s).trim();a&&(n.q=a);break}default:break}for(let r of Le)n[r]===void 0&&delete n[r];return n}function ee(e){let t=[];for(let n of Le){let r=e[n];r!=null&&(Array.isArray(r)?r.length&&t.push(`${n}=${r.map(mn).join(",")}`):typeof r=="number"?Number.isFinite(r)&&t.push(`${n}=${r}`):r.trim()&&t.push(`${n}=${mn(r.trim())}`))}return t.join("&")}function ue(e){return Le.every(t=>e[t]===void 0)}function _n(e,t){let n={...e};return delete n[t],t==="hour"&&delete n.hourSpan,n}function ft(e){let t=e.startsWith("#")?e.slice(1):e,n=t.indexOf("?"),r=(n>=0?t.slice(0,n):t).replace(/^\/+|\/+$/g,""),s=Lr(n>=0?t.slice(n+1):""),a=r?r.split("/").map(le):[];switch(a[0]){case"flow":return{view:"flow",filter:s};case"heatmap":return{view:"heatmap",filter:s};case"sessions":return a[1]?{view:"trace",sessionId:a[1],filter:s}:{view:"sessions",filter:s};default:return{view:"sessions",filter:s}}}function X(e){let t=e.view==="trace"?`/sessions/${encodeURIComponent(e.sessionId??"")}`:`/${e.view}`,n=ee(e.filter);return`#${t}${n?`?${n}`:""}`}function Y(e){let t=e.replace(/\/SKILL\.md$/i,"").split("/").filter(Boolean);return t[t.length-1]??e}function hn(e,t){if(t.from!==void 0&&e.startedAt<t.from||t.to!==void 0&&e.startedAt>t.to||t.runtime&&!t.runtime.includes(e.runtime)||t.state&&!t.state.includes(e.state)||t.skill&&!t.skill.some(r=>e.skills.includes(r)))return!1;let n=new Date(e.startedAt);if(t.dow!==void 0&&n.getDay()!==t.dow)return!1;if(t.hour!==void 0){let r=t.hourSpan??1,s=n.getHours();if(s<t.hour||s>=t.hour+r)return!1}if(t.q){let r=t.q.toLowerCase();if(![e.firstPrompt??"",e.id,...e.skills.map(Y)].join(`
|
|
2
|
+
`).toLowerCase().includes(r))return!1}return!0}var mt=class extends Error{constructor(n,r,s){super(s);this.status=n;this.code=r;this.name="ApiError"}status;code};function Ce(e,t,n={}){let r=[ee(t)];for(let[a,i]of Object.entries(n))i!==void 0&&i!==""&&r.push(`${a}=${encodeURIComponent(String(i))}`);let s=r.filter(Boolean).join("&");return s?`${e}?${s}`:e}async function te(e,t){let n=await fetch(e,{credentials:"same-origin",...t,headers:{Accept:"application/json",...t?.headers??{}}});if(!n.ok){let r=`http_${n.status}`,s=`${t?.method??"GET"} ${e} failed with ${n.status}`;try{let a=await n.json();a.error&&(r=a.error),a.message&&(s=a.message)}catch{}throw new mt(n.status,r,s)}if(n.status!==204)return await n.json()}var Cr={mode:"http",sessions:e=>te(Ce("/api/sessions",e)),trace:e=>te(`/api/sessions/${encodeURIComponent(e)}/trace`),flow:(e,t={})=>te(Ce("/api/flow",e,{unit:t.unit,top:t.top})),heatmap:(e,t={})=>te(Ce("/api/heatmap",e,{tz:t.tz,weekStart:t.weekStart,bucket:t.bucket})),skillWeek:e=>te(Ce("/api/skill-week",e)),stats:(e={})=>te(Ce("/api/stats",e)),skills:()=>te("/api/skills"),addEvalCase:e=>te("/api/eval-cases",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),health:()=>te("/healthz"),events({onSession:e,onState:t}){t?.("connecting");let n=new EventSource("/api/events/stream");return n.addEventListener("session",r=>{try{e?.(JSON.parse(r.data))}catch{}}),n.onopen=()=>t?.("live"),n.onerror=()=>t?.(n.readyState===EventSource.CLOSED?"offline":"connecting"),()=>n.close()}};function Er(e=typeof location>"u"?"":location.search){let t=new URLSearchParams(e).get("fixtures");if(t!==null)return t==="12"?"twelve":t==="0"||t==="empty"||t==="none"?"empty":"full"}function Fr(e){let t,n=()=>t??=import("./chunk-JPIEF5XO.js").then(l=>l.default),r=async l=>l(await n()),s,a=()=>s??=import("./chunk-5DFWNJC2.js").then(l=>l.default),i=l=>{let u=new Set(l.sessions12);return e==="empty"?[]:e==="twelve"?l.sessions.filter(d=>u.has(d.id)):l.sessions};return{mode:"fixtures",sessions:l=>r(u=>i(u).filter(d=>hn(d,l))),trace:l=>r(u=>u.traces[l]??[]),flow:(l,u={})=>r(d=>{let p=e==="twelve"?d.flow12:d.flow;return e==="empty"?{...p,nodes:[],links:[],sessionCount:0,unit:u.unit??p.unit}:{...p,unit:u.unit??p.unit}}),heatmap:()=>r(l=>{let u=e==="twelve"?l.heatmap12:l.heatmap;return e==="empty"?{...u,cells:[],rowTotals:u.rowTotals.map(()=>0),colTotals:u.colTotals.map(()=>0)}:u}),skillWeek:()=>r(l=>e==="empty"?{...l.skillWeek,rows:[]}:e==="twelve"?l.skillWeek12:l.skillWeek),stats:async()=>{let[l,u]=await Promise.all([n(),a()]);return e==="empty"?{...l.statsEmpty,...u.statsEmpty}:{...l.stats,...u.stats}},skills:()=>r(l=>l.skills),addEvalCase:()=>Promise.resolve(),health:()=>Promise.resolve({ok:!0,version:"fixtures"}),events({onState:l}){return l?.("fixtures"),()=>{}}}}var vn=Er(),O=vn?Fr(vn):Cr;function Ee(e,t){let n;if(t===void 0)for(let r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let s of e)(s=t(s,++r,e))!=null&&(n<s||n===void 0&&s>=s)&&(n=s)}return n}function ze(e,t){let n;if(t===void 0)for(let r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let s of e)(s=t(s,++r,e))!=null&&(n>s||n===void 0&&s>=s)&&(n=s)}return n}function de(e,t){let n=0;if(t===void 0)for(let r of e)(r=+r)&&(n+=r);else{let r=-1;for(let s of e)(s=+t(s,++r,e))&&(n+=s)}return n}function _t(e,t){return e.sourceLinks.length?e.depth:t-1}function pe(e){return function(){return e}}function gn(e,t){return qe(e.source,t.source)||e.index-t.index}function kn(e,t){return qe(e.target,t.target)||e.index-t.index}function qe(e,t){return e.y0-t.y0}function ht(e){return e.value}function Rr(e){return e.index}function $r(e){return e.nodes}function Ar(e){return e.links}function bn(e,t){let n=e.get(t);if(!n)throw new Error("missing: "+t);return n}function yn({nodes:e}){for(let t of e){let n=t.y0,r=n;for(let s of t.sourceLinks)s.y0=n+s.width/2,n+=s.width;for(let s of t.targetLinks)s.y1=r+s.width/2,r+=s.width}}function je(){let e=0,t=0,n=1,r=1,s=24,a=8,i,l=Rr,u=_t,d,p,v=$r,c=Ar,m=6;function k(){let f={nodes:v.apply(null,arguments),links:c.apply(null,arguments)};return E(f),T(f),_(f),y(f),H(f),yn(f),f}k.update=function(f){return yn(f),f},k.nodeId=function(f){return arguments.length?(l=typeof f=="function"?f:pe(f),k):l},k.nodeAlign=function(f){return arguments.length?(u=typeof f=="function"?f:pe(f),k):u},k.nodeSort=function(f){return arguments.length?(d=f,k):d},k.nodeWidth=function(f){return arguments.length?(s=+f,k):s},k.nodePadding=function(f){return arguments.length?(a=i=+f,k):a},k.nodes=function(f){return arguments.length?(v=typeof f=="function"?f:pe(f),k):v},k.links=function(f){return arguments.length?(c=typeof f=="function"?f:pe(f),k):c},k.linkSort=function(f){return arguments.length?(p=f,k):p},k.size=function(f){return arguments.length?(e=t=0,n=+f[0],r=+f[1],k):[n-e,r-t]},k.extent=function(f){return arguments.length?(e=+f[0][0],n=+f[1][0],t=+f[0][1],r=+f[1][1],k):[[e,t],[n,r]]},k.iterations=function(f){return arguments.length?(m=+f,k):m};function E({nodes:f,links:w}){for(let[x,g]of f.entries())g.index=x,g.sourceLinks=[],g.targetLinks=[];let b=new Map(f.map((x,g)=>[l(x,g,f),x]));for(let[x,g]of w.entries()){g.index=x;let{source:S,target:M}=g;typeof S!="object"&&(S=g.source=bn(b,S)),typeof M!="object"&&(M=g.target=bn(b,M)),S.sourceLinks.push(g),M.targetLinks.push(g)}if(p!=null)for(let{sourceLinks:x,targetLinks:g}of f)x.sort(p),g.sort(p)}function T({nodes:f}){for(let w of f)w.value=w.fixedValue===void 0?Math.max(de(w.sourceLinks,ht),de(w.targetLinks,ht)):w.fixedValue}function _({nodes:f}){let w=f.length,b=new Set(f),x=new Set,g=0;for(;b.size;){for(let S of b){S.depth=g;for(let{target:M}of S.sourceLinks)x.add(M)}if(++g>w)throw new Error("circular link");b=x,x=new Set}}function y({nodes:f}){let w=f.length,b=new Set(f),x=new Set,g=0;for(;b.size;){for(let S of b){S.height=g;for(let{source:M}of S.targetLinks)x.add(M)}if(++g>w)throw new Error("circular link");b=x,x=new Set}}function C({nodes:f}){let w=Ee(f,g=>g.depth)+1,b=(n-e-s)/(w-1),x=new Array(w);for(let g of f){let S=Math.max(0,Math.min(w-1,Math.floor(u.call(null,g,w))));g.layer=S,g.x0=e+S*b,g.x1=g.x0+s,x[S]?x[S].push(g):x[S]=[g]}if(d)for(let g of x)g.sort(d);return x}function D(f){let w=ze(f,b=>(r-t-(b.length-1)*i)/de(b,ht));for(let b of f){let x=t;for(let g of b){g.y0=x,g.y1=x+g.value*w,x=g.y1+i;for(let S of g.sourceLinks)S.width=S.value*w}x=(r-x+i)/(b.length+1);for(let g=0;g<b.length;++g){let S=b[g];S.y0+=x*(g+1),S.y1+=x*(g+1)}K(b)}}function H(f){let w=C(f);i=Math.min(a,(r-t)/(Ee(w,b=>b.length)-1)),D(w);for(let b=0;b<m;++b){let x=Math.pow(.99,b),g=Math.max(1-x,(b+1)/m);h(w,x,g),z(w,x,g)}}function z(f,w,b){for(let x=1,g=f.length;x<g;++x){let S=f[x];for(let M of S){let he=0,oe=0;for(let{source:ge,value:tt}of M.targetLinks){let ke=tt*(M.layer-ge.layer);he+=W(ge,M)*ke,oe+=ke}if(!(oe>0))continue;let ve=(he/oe-M.y0)*w;M.y0+=ve,M.y1+=ve,N(M)}d===void 0&&S.sort(qe),L(S,b)}}function h(f,w,b){for(let x=f.length,g=x-2;g>=0;--g){let S=f[g];for(let M of S){let he=0,oe=0;for(let{target:ge,value:tt}of M.sourceLinks){let ke=tt*(ge.layer-M.layer);he+=q(M,ge)*ke,oe+=ke}if(!(oe>0))continue;let ve=(he/oe-M.y0)*w;M.y0+=ve,M.y1+=ve,N(M)}d===void 0&&S.sort(qe),L(S,b)}}function L(f,w){let b=f.length>>1,x=f[b];$(f,x.y0-i,b-1,w),R(f,x.y1+i,b+1,w),$(f,r,f.length-1,w),R(f,t,0,w)}function R(f,w,b,x){for(;b<f.length;++b){let g=f[b],S=(w-g.y0)*x;S>1e-6&&(g.y0+=S,g.y1+=S),w=g.y1+i}}function $(f,w,b,x){for(;b>=0;--b){let g=f[b],S=(g.y1-w)*x;S>1e-6&&(g.y0-=S,g.y1-=S),w=g.y0-i}}function N({sourceLinks:f,targetLinks:w}){if(p===void 0){for(let{source:{sourceLinks:b}}of w)b.sort(kn);for(let{target:{targetLinks:b}}of f)b.sort(gn)}}function K(f){if(p===void 0)for(let{sourceLinks:w,targetLinks:b}of f)w.sort(kn),b.sort(gn)}function W(f,w){let b=f.y0-(f.sourceLinks.length-1)*i/2;for(let{target:x,width:g}of f.sourceLinks){if(x===w)break;b+=g+i}for(let{source:x,width:g}of w.targetLinks){if(x===f)break;b-=g}return b}function q(f,w){let b=w.y0-(w.targetLinks.length-1)*i/2;for(let{source:x,width:g}of w.targetLinks){if(x===f)break;b+=g+i}for(let{target:x,width:g}of f.sourceLinks){if(x===w)break;b-=g}return b}return k}var vt=Math.PI,gt=2*vt,ae=1e-6,Mr=gt-ae;function kt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function xn(){return new kt}kt.prototype=xn.prototype={constructor:kt,moveTo:function(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(e,t,n,r,s,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+s)+","+(this._y1=+a)},arcTo:function(e,t,n,r,s){e=+e,t=+t,n=+n,r=+r,s=+s;var a=this._x1,i=this._y1,l=n-e,u=r-t,d=a-e,p=i-t,v=d*d+p*p;if(s<0)throw new Error("negative radius: "+s);if(this._x1===null)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(v>ae)if(!(Math.abs(p*l-u*d)>ae)||!s)this._+="L"+(this._x1=e)+","+(this._y1=t);else{var c=n-a,m=r-i,k=l*l+u*u,E=c*c+m*m,T=Math.sqrt(k),_=Math.sqrt(v),y=s*Math.tan((vt-Math.acos((k+v-E)/(2*T*_)))/2),C=y/_,D=y/T;Math.abs(C-1)>ae&&(this._+="L"+(e+C*d)+","+(t+C*p)),this._+="A"+s+","+s+",0,0,"+ +(p*c>d*m)+","+(this._x1=e+D*l)+","+(this._y1=t+D*u)}},arc:function(e,t,n,r,s,a){e=+e,t=+t,n=+n,a=!!a;var i=n*Math.cos(r),l=n*Math.sin(r),u=e+i,d=t+l,p=1^a,v=a?r-s:s-r;if(n<0)throw new Error("negative radius: "+n);this._x1===null?this._+="M"+u+","+d:(Math.abs(this._x1-u)>ae||Math.abs(this._y1-d)>ae)&&(this._+="L"+u+","+d),n&&(v<0&&(v=v%gt+gt),v>Mr?this._+="A"+n+","+n+",0,1,"+p+","+(e-i)+","+(t-l)+"A"+n+","+n+",0,1,"+p+","+(this._x1=u)+","+(this._y1=d):v>ae&&(this._+="A"+n+","+n+",0,"+ +(v>=vt)+","+p+","+(this._x1=e+n*Math.cos(s))+","+(this._y1=t+n*Math.sin(s))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var bt=xn;function yt(e){return function(){return e}}function wn(e){return e[0]}function Sn(e){return e[1]}var Tn=Array.prototype.slice;function Dr(e){return e.source}function Ir(e){return e.target}function Hr(e){var t=Dr,n=Ir,r=wn,s=Sn,a=null;function i(){var l,u=Tn.call(arguments),d=t.apply(this,u),p=n.apply(this,u);if(a||(a=l=bt()),e(a,+r.apply(this,(u[0]=d,u)),+s.apply(this,u),+r.apply(this,(u[0]=p,u)),+s.apply(this,u)),l)return a=null,l+""||null}return i.source=function(l){return arguments.length?(t=l,i):t},i.target=function(l){return arguments.length?(n=l,i):n},i.x=function(l){return arguments.length?(r=typeof l=="function"?l:yt(+l),i):r},i.y=function(l){return arguments.length?(s=typeof l=="function"?l:yt(+l),i):s},i.context=function(l){return arguments.length?(a=l??null,i):a},i}function Nr(e,t,n,r,s){e.moveTo(t,n),e.bezierCurveTo(t=(t+r)/2,n,t,s,r,s)}function xt(){return Hr(Nr)}function Pr(e){return[e.source.x1,e.y0]}function Br(e){return[e.target.x0,e.y1]}function wt(){return xt().source(Pr).target(Br)}var Ur=0;function o(e,t,n,r,s,a){t||(t={});var i,l,u=t;if("ref"in u)for(l in u={},t)l=="ref"?i=t[l]:u[l]=t[l];var d={type:e,props:u,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ur,__i:-1,__u:0,__source:s,__self:a};if(typeof e=="function"&&(i=e.defaultProps))for(l in i)u[l]===void 0&&(u[l]=i[l]);return A.vnode&&A.vnode(d),d}var St={task_type:"Task type",skill:"Skill",state:"Outcome"},Ge=new Set(["loaded","exposed_only","no_match","aborted","not_used"]),Ke=10,Cn=24,Or=320,Wr=600,zr=640,fe=6,Ve=12,qr=80;function _e(e){let t=e.id.indexOf(":");return t<0?e.id:e.id.slice(t+1)}function me(e){let t=_e(e);return e.column===2&&Ge.has(t)?V[t]:e.label}function Tt(e,t){return t>0?e/t:0}function ie(e,t){let n=Tt(e,t)*100;return`${n>0&&n<1?"<1":Math.round(n)}%`}var Ln=new Set;function Fe(e,t){if(typeof document>"u"||Ln.has(e))return;if(Ln.add(e),"adoptedStyleSheets"in document&&typeof CSSStyleSheet<"u"&&"replaceSync"in CSSStyleSheet.prototype){let r=new CSSStyleSheet;r.replaceSync(t),document.adoptedStyleSheets=[...document.adoptedStyleSheets,r];return}let n=document.createElement("style");n.dataset.sheet=e,n.textContent=t,document.head.append(n)}function jr(e,t){let{width:n,height:r,top:s=0,nodeWidth:a=Ke,nodePadding:i=14}=t,l=new Set(e.nodes.map(_=>_.id)),u=[];e.links.forEach((_,y)=>{l.has(_.source)&&l.has(_.target)&&_.count>0&&u.push({source:_.source,target:_.target,value:_.count,index:y,count:_.count,state:_.state})});let d=new Set;for(let _ of u)d.add(_.source),d.add(_.target);let p=e.nodes.filter(_=>d.has(_.id)).map(_=>({..._}));if(!p.length||n<=a||r<=s)return{nodes:[],links:[]};let c=je().nodeId(_=>_.id).nodeAlign(_=>_.column).nodeSort((_,y)=>+!!_.other-+!!y.other||(y.value??0)-(_.value??0)||_.label.localeCompare(y.label)).nodeWidth(a).nodePadding(i).extent([[0,s],[n,r]])({nodes:p,links:u}),m=wt(),k=c.nodes.map(_=>({id:_.id,column:_.column,label:_.label,count:_.count,..._.other?{other:!0}:{},x0:_.x0??0,x1:_.x1??0,y0:_.y0??0,y1:_.y1??0,value:_.value??0})).sort((_,y)=>_.column-y.column||_.y0-y.y0),E=new Map(k.map(_=>[_.id,_.column])),T=c.links.map(_=>{let y=_.source,C=_.target;return{source:y.id,target:C.id,count:_.count,state:_.state,index:_.index,width:_.width??0,y0:_.y0??0,y1:_.y1??0,path:m(_)??""}}).sort((_,y)=>(E.get(_.source)??0)-(E.get(y.source)??0)||_.y0-y.y0);return{nodes:k,links:T}}function Vr(e,t){let n=new Map(e.nodes.map(p=>[p.id,p.column])),r=e.links.map((p,v)=>({...p,index:v})),s=r.filter(p=>n.get(p.source)===0),a=r.filter(p=>n.get(p.source)===1),i=new Set,l=p=>{for(let v of a)v.source===p.target&&v.state===p.state&&i.add(v.index)},u=p=>{for(let v of s)v.target===p.source&&v.state===p.state&&i.add(v.index)};if(t.kind==="link"){let p=r[t.index];p&&(i.add(p.index),n.get(p.source)===0?l(p):u(p))}else{let{id:p,column:v}=t.node;if(v===0)for(let c of s)c.source===p&&(i.add(c.index),l(c));else if(v===1)for(let c of r)(c.source===p||c.target===p)&&i.add(c.index);else for(let c of a)c.target===p&&(i.add(c.index),u(c))}let d=new Set;t.kind==="node"&&d.add(t.node.id);for(let p of i)d.add(r[p].source),d.add(r[p].target);return{links:i,nodes:d}}function Kr(e,t){let n=[0,0,0];for(let s of e.nodes)n[s.column]=(n[s.column]??0)+1;let r=Math.max(1,...n);return Math.min(Wr,Math.max(Or,Cn+8+r*(t?34:44)))}function Gr(e,t){return e.length>t?`${e.slice(0,Math.max(1,t-1))}\u2026`:e}function Xr(e,t){if(t.kind==="node"){let{node:s}=t;return{title:me(s),sub:`${s.count} ${s.count===1?"session":"sessions"} \xB7 ${ie(s.count,e.sessionCount)}`}}let n=new Map(e.nodes.map(s=>[s.id,me(s)])),{link:r}=t;return{title:`${n.get(r.source)??r.source} \u2192 ${n.get(r.target)??r.target}`,sub:`${V[r.state]??r.state} \xB7 ${r.count} ${r.count===1?"session":"sessions"} \xB7 ${ie(r.count,e.sessionCount)}`}}var Yr=`
|
|
3
|
+
.sankey { position: relative; }
|
|
4
|
+
.sankey__svg { display: block; overflow: visible; font: 500 var(--fs-cap) / 1 var(--font-sans); }
|
|
5
|
+
.sankey__svg.is-narrow { font-size: var(--fs-micro); }
|
|
6
|
+
.sankey__head { fill: var(--ink-3); font-size: var(--fs-micro); font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; }
|
|
7
|
+
.sankey__link { fill: none; stroke: var(--neutral); stroke-opacity: 0.38; transition: stroke-opacity var(--t-micro); }
|
|
8
|
+
.sankey__link.is-loaded { stroke: var(--ok); }
|
|
9
|
+
.sankey__link.is-exposed_only { stroke: var(--warn); }
|
|
10
|
+
.sankey__link.is-no_match { stroke: var(--bad); }
|
|
11
|
+
.sankey__link.is-aborted, .sankey__link.is-not_used { stroke: var(--neutral); }
|
|
12
|
+
.sankey__svg.is-hovering .sankey__link:not(.is-on) { stroke-opacity: 0.1; }
|
|
13
|
+
.sankey__svg.is-hovering .sankey__link.is-on { stroke-opacity: 0.72; }
|
|
14
|
+
.sankey__node { transition: opacity var(--t-micro); }
|
|
15
|
+
.sankey__svg.is-hovering .sankey__node:not(.is-on) { opacity: 0.35; }
|
|
16
|
+
.sankey__rect { fill: var(--ink-2); }
|
|
17
|
+
.sankey__node.is-other .sankey__rect { fill: var(--ink-3); }
|
|
18
|
+
.sankey__node.is-c2.is-loaded .sankey__rect { fill: var(--ok); }
|
|
19
|
+
.sankey__node.is-c2.is-exposed_only .sankey__rect { fill: var(--warn); }
|
|
20
|
+
.sankey__node.is-c2.is-no_match .sankey__rect { fill: var(--bad); }
|
|
21
|
+
.sankey__node.is-c2.is-aborted .sankey__rect, .sankey__node.is-c2.is-not_used .sankey__rect { fill: var(--neutral); }
|
|
22
|
+
.sankey__label { fill: var(--ink); paint-order: stroke; stroke: var(--surface); stroke-width: 3px; stroke-linejoin: round; dominant-baseline: central; pointer-events: none; }
|
|
23
|
+
.sankey__label--end, .sankey__head--end { text-anchor: end; }
|
|
24
|
+
.sankey__head--mid { text-anchor: middle; }
|
|
25
|
+
.sankey__count { fill: var(--ink-3); font-variant-numeric: tabular-nums; }
|
|
26
|
+
.sankey a, .sankey [role="button"] { cursor: pointer; outline: none; }
|
|
27
|
+
.sankey a:focus-visible .sankey__rect, .sankey [role="button"]:focus-visible .sankey__rect { stroke: var(--accent); stroke-width: 2px; }
|
|
28
|
+
.sankey a:focus-visible .sankey__link { stroke-opacity: 0.85; }
|
|
29
|
+
.sankey__tip { position: absolute; z-index: 2; max-width: 32ch; padding: var(--s-1) var(--s-2); border-radius: var(--r-sm); background: var(--ink); color: var(--bg); font-size: var(--fs-cap); font-weight: 500; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-shadow: var(--shadow-pop); pointer-events: none; }
|
|
30
|
+
.sankey__tip-sub { opacity: 0.75; font-variant-numeric: tabular-nums; }
|
|
31
|
+
`;Fe("sankey",Yr);function Zr(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function En({dto:e,hrefFor:t,onActivate:n,onExpandOther:r}){let s=un(null),[a,i]=F(0),[l,u]=F();B(()=>{let h=s.current;if(!h)return;let L=()=>i(Math.floor(h.getBoundingClientRect().width));L();let R=new ResizeObserver(L);return R.observe(h),()=>R.disconnect()},[]);let d=a<zr,p=Kr(e,d),v=d?a-qr:a,c=j(()=>jr(e,{width:v,height:p,top:Cn,nodeWidth:Ke,nodePadding:d?10:14}),[e,v,p,d]),m=j(()=>l?Vr(e,l.target):void 0,[e,l?.target]),k=j(()=>new Map(c.nodes.map(h=>[h.id,h])),[c]),E=(v-3*Ke)/2,T=Math.max(8,Math.min(24,Math.floor(d?(E*.95-22)/6.2:(E*.5-24)/7))),_=h=>h.column===2&&!d,y=h=>{let L=s.current?.getBoundingClientRect();return{x:h.clientX-(L?.left??0),y:h.clientY-(L?.top??0)}},C=(h,L)=>({onPointerEnter:R=>u({target:h,...y(R)}),onPointerMove:R=>u({target:h,...y(R)}),onPointerLeave:()=>u(void 0),onFocus:()=>u({target:h,...L}),onBlur:()=>u(void 0)}),D=h=>L=>{Zr(L)&&(L.preventDefault(),n(h))},H=l?Xr(e,l.target):void 0,z=l?l.x>a/2:!1;return o("div",{class:"sankey",ref:s,style:{minHeight:`${p}px`},children:[c.nodes.length>0&&o("svg",{class:`sankey__svg${d?" is-narrow":""}${l?" is-hovering":""}`,width:a,height:p,viewBox:`0 0 ${a} ${p}`,role:"group","aria-label":`Flow of ${e.sessionCount} sessions from task type to skill to outcome`,children:[o("g",{"aria-hidden":"true",children:[o("text",{class:"sankey__head",x:0,y:10,children:St[e.columns[0]]}),o("text",{class:"sankey__head sankey__head--mid",x:v/2,y:10,children:St[e.columns[1]]}),o("text",{class:d?"sankey__head":"sankey__head sankey__head--end",x:d?v-Ke:v,y:10,children:St[e.columns[2]]})]}),o("g",{children:c.links.map(h=>{let L={kind:"link",link:h,index:h.index},R=t(L),$=k.get(h.source),N=k.get(h.target),K=!m||m.links.has(h.index),W=o("path",{class:`sankey__link is-${h.state}${K?" is-on":""}`,d:h.path,"stroke-width":Math.max(1,h.width)}),q=`${$?me($):h.source} to ${N?me(N):h.target}, ${V[h.state]??h.state}: ${h.count} sessions (${ie(h.count,e.sessionCount)})`,f=C(L,{x:(($?.x1??0)+(N?.x0??v))/2,y:(h.y0+h.y1)/2});return R?o("a",{href:R,"aria-label":q,onClick:D(L),...f,children:W},`l${h.index}`):o("g",{...f,children:W},`l${h.index}`)})}),o("g",{children:c.nodes.map(h=>{let L={kind:"node",node:h},R=t(L),$=!!(h.other&&r),N=!m||m.nodes.has(h.id),K=_e(h),W=`sankey__node is-c${h.column}${h.other?" is-other":""}${h.column===2&&Ge.has(K)?` is-${K}`:""}${N?" is-on":""}`,q=_(h),f=o(U,{children:[o("rect",{class:"sankey__rect",x:h.x0,y:h.y0,width:h.x1-h.x0,height:Math.max(1,h.y1-h.y0),rx:2}),o("text",{class:`sankey__label${q?" sankey__label--end":""}`,x:q?h.x0-fe:h.x1+fe,y:(h.y0+h.y1)/2,children:[q?o("tspan",{class:"sankey__count",children:h.count}):null,o("tspan",{dx:q?fe:0,children:Gr(me(h),T)}),q?null:o("tspan",{class:"sankey__count",dx:fe,children:h.count})]})]}),w=`${me(h)}: ${h.count} sessions (${ie(h.count,e.sessionCount)})`,b=C(L,{x:q?h.x0-fe:h.x1+fe,y:(h.y0+h.y1)/2});return R?o("a",{class:W,href:R,"aria-label":w,onClick:D(L),...b,children:f},h.id):$?o("g",{class:W,role:"button",tabindex:0,"aria-label":`${h.label}: show up to 15 per column`,onClick:()=>r?.(),onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),r?.())},...b,children:f},h.id):o("g",{class:W,...b,children:f},h.id)})})]}),l&&H&&o("div",{class:"sankey__tip",role:"status",style:z?{right:`${a-l.x+Ve}px`,top:`${l.y+Ve}px`}:{left:`${l.x+Ve}px`,top:`${l.y+Ve}px`},children:[o("div",{children:H.title}),o("div",{class:"sankey__tip-sub",children:H.sub})]})]})}var Qr=30,Xe=7,Fn=15,Jr={first_load:"First load",all_loads:"All loads"},eo=300;function to(e){return e<Qr?"table":"chart"}function no(e){return e==="first_load"?"Band width = sessions (unit: first loaded skill)":"Band width = skill loads (unit: all loaded skills)"}function ro(e){let t=new Map;for(let n of e)t.set(n.name,n.uri),t.set(n.dir,n.uri),t.set(Y(n.uri),n.uri);return n=>n.startsWith("skill://")?n:t.get(n)}function Ye(e,t){if(!(!e||e.column!==1||e.other))return t(_e(e))}function Lt(e,t,n){if(e.kind==="node"){let{node:a}=e;if(a.other||a.column===0)return;if(a.column===1){let l=Ye(a,n);return l?{skill:[l]}:void 0}let i=_e(a);return Ge.has(i)?{state:[i]}:void 0}let r=new Map(t.map(a=>[a.id,a])),s=Ye(r.get(e.link.source),n)??Ye(r.get(e.link.target),n);return{...s?{skill:[s]}:{},state:[e.link.state]}}function Ct(e,t){return{view:"sessions",filter:{...e.filter,...t}}}function oo(e){let t=new Map(e.nodes.map(r=>[r.id,r])),n=[];return e.links.forEach((r,s)=>{let a=t.get(r.source),i=t.get(r.target);!a||!i||a.column!==0||i.column!==1||n.push({index:s,task:a.label,skill:i.label,skillNode:i,state:r.state,count:r.count,share:Tt(r.count,e.sessionCount)})}),n.sort((r,s)=>s.count-r.count||r.task.localeCompare(s.task)||r.skill.localeCompare(s.skill)||r.state.localeCompare(s.state))}var so=`
|
|
32
|
+
.flow__legend { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-4); margin: 0 0 var(--s-3); color: var(--ink-2); font-size: var(--fs-cap); }
|
|
33
|
+
.flow__key { display: inline-flex; flex-wrap: wrap; gap: var(--s-2) var(--s-3); }
|
|
34
|
+
.flow__swatch { display: inline-flex; align-items: center; gap: var(--s-2); white-space: nowrap; }
|
|
35
|
+
.flow__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--neutral); flex: none; }
|
|
36
|
+
.flow__dot.is-loaded { background: var(--ok); }
|
|
37
|
+
.flow__dot.is-exposed_only { background: var(--warn); }
|
|
38
|
+
.flow__dot.is-no_match { background: var(--bad); }
|
|
39
|
+
.flow__chart { padding: var(--s-4); }
|
|
40
|
+
.flow__paths { overflow-x: auto; }
|
|
41
|
+
.seg { display: inline-flex; border: 1px solid var(--line-2); border-radius: var(--r-sm); overflow: hidden; }
|
|
42
|
+
.seg__btn { height: 30px; padding: 0 var(--s-3); border: 0; background: transparent; color: var(--ink-2); font-size: var(--fs-sm); font-weight: 500; cursor: pointer; transition: background-color var(--t-micro), color var(--t-micro); }
|
|
43
|
+
.seg__btn + .seg__btn { border-left: 1px solid var(--line-2); }
|
|
44
|
+
.seg__btn:hover { background: var(--wash); color: var(--ink); }
|
|
45
|
+
.seg__btn[aria-pressed="true"] { background: var(--wash-2); color: var(--ink); }
|
|
46
|
+
.seg__btn:focus-visible { outline-offset: -2px; }
|
|
47
|
+
.paths { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
|
|
48
|
+
.paths th { text-align: left; padding: var(--s-2) var(--s-3); color: var(--ink-3); font-size: var(--fs-cap); font-weight: 500; border-bottom: 1px solid var(--line); white-space: nowrap; }
|
|
49
|
+
.paths td { padding: var(--s-3); border-bottom: 1px solid var(--line); vertical-align: middle; }
|
|
50
|
+
.paths tbody tr { cursor: pointer; transition: background-color var(--t-micro); }
|
|
51
|
+
.paths tbody tr:hover, .paths tbody tr:has(a:focus-visible) { background: var(--wash); }
|
|
52
|
+
.paths tbody tr:last-child td { border-bottom: 0; }
|
|
53
|
+
.paths__hint { margin-inline-start: var(--s-2); font-weight: 400; }
|
|
54
|
+
.paths__path { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-1) var(--s-2); }
|
|
55
|
+
.paths__task { color: var(--ink-2); }
|
|
56
|
+
.paths__arrow { color: var(--ink-3); }
|
|
57
|
+
.paths__skill { color: var(--ink); font-weight: 500; text-decoration: none; }
|
|
58
|
+
.paths__skill:hover { color: var(--ink); text-decoration: underline; }
|
|
59
|
+
.paths__skill--dim { color: var(--ink-3); font-weight: 400; }
|
|
60
|
+
.paths .num { width: 1%; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
|
|
61
|
+
.paths__share { display: inline-block; min-width: 4.5rem; padding: 2px var(--s-2); border-radius: var(--r-sm); background: linear-gradient(to right, var(--wash-2) var(--share, 0%), transparent 0); }
|
|
62
|
+
@media (max-width: 639.98px) {
|
|
63
|
+
.paths__hint { display: none; }
|
|
64
|
+
.paths th:first-child { white-space: normal; }
|
|
65
|
+
.paths__share { display: block; min-width: 0; }
|
|
66
|
+
}
|
|
67
|
+
`;Fe("flow",so);function Rn({label:e,value:t,options:n,onChange:r}){return o("div",{class:"seg",role:"group","aria-label":e,children:n.map(s=>o("button",{type:"button",class:"seg__btn","aria-pressed":s.value===t,onClick:()=>r(s.value),children:s.label},s.value))})}function ao({unit:e,withKey:t}){return o("p",{class:"flow__legend",children:[o("span",{children:t?no(e):`Share = sessions on the path / sessions in range (unit: ${e==="first_load"?"first loaded skill":"all loaded skills"})`}),t&&o("span",{class:"flow__key","aria-label":"Band color",children:Te.map(n=>o("span",{class:"flow__swatch",children:[o("i",{class:`flow__dot is-${n}`,"aria-hidden":"true"}),V[n]]},n))})]})}function io(e){return e instanceof Element&&e.closest("a, button")!==null}function lo({dto:e,route:t,navigate:n,resolve:r}){let s=oo(e);return o("div",{class:"card flow__paths",children:o("table",{class:"paths",children:[o("thead",{children:o("tr",{children:[o("th",{scope:"col",children:["Path",o("span",{class:"paths__hint",children:["task type ","\u2192"," skill ","\u2192"," outcome"]})]}),o("th",{scope:"col",class:"num",children:"Sessions"}),o("th",{scope:"col",class:"num",children:"Share"})]})}),o("tbody",{children:s.map(a=>{let i=e.links[a.index],l=Ct(t,Lt({kind:"link",link:i,index:a.index},e.nodes,r)??{state:[a.state]}),u=X(l),d=Ye(a.skillNode,r)!==void 0;return o("tr",{onClick:p=>{io(p.target)||n(l)},children:[o("td",{children:o("span",{class:"paths__path",children:[o("span",{class:"paths__task",children:a.task}),o("span",{class:"paths__arrow","aria-hidden":"true",children:"\u2192"}),o("a",{class:d?"paths__skill":"paths__skill paths__skill--dim",href:u,title:d?_e(a.skillNode):void 0,children:a.skill}),o("span",{class:"paths__arrow","aria-hidden":"true",children:"\u2192"}),o("span",{class:`badge badge--${a.state}`,children:V[a.state]??a.state})]})}),o("td",{class:"num",children:a.count}),o("td",{class:"num",children:o("span",{class:"paths__share",style:{"--share":ie(a.count,e.sessionCount)},children:ie(a.count,e.sessionCount)})})]},a.index)})})]})})}function co({route:e,navigate:t}){let n=!ue(e.filter);return o("section",{class:"empty",children:[o("h2",{children:"No sessions in this range"}),o("p",{children:n?"No session matches these filters, so there is no flow to draw.":"Start a session in a connected runtime and the task-to-skill flow appears here."}),n&&o("button",{type:"button",class:"btn",onClick:()=>t({...e,filter:{}}),children:"Clear filters"})]})}function $n({route:e,navigate:t,live:n}){let r=ee(e.filter),[s,a]=F("first_load"),[i,l]=F(Xe),[u,d]=F("auto"),[p,v]=F(),[c,m]=F([]),[k,E]=F(0),[T,_]=F(),[y,C]=F(0);B(()=>{if(n.seq===0)return;let R=setTimeout(()=>C($=>$+1),eo);return()=>clearTimeout(R)},[n.seq]),B(()=>{let R=!1;return Promise.allSettled([O.flow(e.filter,{unit:s,top:i}),O.skills(),O.stats(e.filter)]).then(([$,N,K])=>{if(R)return;let W=[$,N,K].find(q=>q.status==="rejected")?.reason;if(W!==void 0){_(W instanceof Error?W.message:String(W));return}v($.value),m(N.value),E(K.value.unattributed?.loads??0),_(void 0)}),()=>{R=!0}},[r,s,i,y]);let D=j(()=>ro(c),[c]),H=u==="auto"?to(p?.sessionCount??0):u,z=R=>{let $=p&&Lt(R,p.nodes,D);return $?X(Ct(e,$)):void 0},h=R=>{let $=p&&Lt(R,p.nodes,D);$&&t(Ct(e,$))},L;return p===void 0?L=null:p.sessionCount===0?L=o(co,{route:e,navigate:t}):L=o(U,{children:[o("div",{class:"toolbar",children:[o(Rn,{label:"View",value:H,options:[{value:"chart",label:"Chart"},{value:"table",label:"Top paths"}],onChange:d}),o(Rn,{label:"Unit",value:s,options:["first_load","all_loads"].map(R=>({value:R,label:Jr[R]})),onChange:a}),i!==Xe&&o("button",{type:"button",class:"btn",onClick:()=>l(Xe),children:["Top ",Xe," per column"]}),o("span",{class:"toolbar__count",children:[p.sessionCount," ",p.sessionCount===1?"session":"sessions",k>0&&o("span",{title:"MCP loads no session could be matched to; they are stored but not drawn in the flow",children:` \xB7 ${k} unattributed ${k===1?"load":"loads"} not shown`})]})]}),o(ao,{unit:s,withKey:H==="chart"}),H==="chart"?o("div",{class:"card flow__chart",children:o(En,{dto:p,hrefFor:z,onActivate:h,onExpandOther:i<Fn?()=>l(Fn):void 0})}):o(lo,{dto:p,route:e,navigate:t,resolve:D})]}),o("section",{"aria-busy":p===void 0&&!T,"data-mode":p?H:void 0,"data-top":i,"data-unit":s,children:[T&&o("p",{class:"notice",role:"alert",children:["Could not load the flow: ",T]}),L]})}var Dn=[1,2,4],Qe=50,uo=5,Ft=864e5,po=7*Ft;function fo(e){return e===1||e===2||e===4}function Re(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function re(e){return e.reduce((t,n)=>t+n,0)}function Ze(e,t){return t>0?Math.min(1,e/t):0}function In(e){let t=[...e].map(Re).filter(l=>l>0).sort((l,u)=>l-u);if(t.length===0)return()=>0;let n=t[t.length-1],r=l=>t[Math.max(0,Math.ceil(l*t.length)-1)],s=r(.25),a=r(.5),i=r(.75);return l=>{let u=Re(l);return u===0?0:u>=n?4:u<=s?1:u<=a?2:u<=i?3:4}}function $t(e,t){let n=Array.from({length:uo},()=>{});n[0]=[0,0];for(let r=1;r<=Math.max(0,Math.trunc(t));r++){let s=e(r),a=n[s];a?a[1]=r:n[s]=[r,r]}return n.map(r=>r?r[0]===r[1]?String(r[0]):`${r[0]}-${r[1]}`:"-")}function Hn(e,t={}){let n=fo(e.bucketHours)?e.bucketHours:1,r=t.bucketHours??n,s=r<n?n:r,a=t.weekStart??(e.weekStart===0?0:1),i=24/s,l=Array.from({length:7},()=>new Array(i).fill(0));for(let T of e.cells??[]){let _=Math.trunc(Number(T.dow)),y=Math.trunc(Number(T.hour)),C=Re(T.count);!(_>=0&&_<7&&y>=0&&y<24)||C===0||(l[_][Math.floor(y/s)]+=C)}let u=Array.from({length:7},(T,_)=>(a+_)%7),d=Array.from({length:i},(T,_)=>_*s),p=u.map(T=>re(l[T])),v=d.map((T,_)=>re(l.map(y=>y[_]))),c=re(p),m=l.flat(),k=In(m),E=u.map(T=>d.map((_,y)=>{let C=l[T][y];return{dow:T,hour:_,count:C,share:c>0?C/c:0,level:k(C)}}));return{bucketHours:s,weekStart:a,dows:u,hours:d,rows:E,rowTotals:p,colTotals:v,total:c,maxCount:Math.max(0,...m),maxRowTotal:Math.max(0,...p),maxColTotal:Math.max(0,...v),level:k}}function Nn(e){return re((e.cells??[]).map(t=>Re(t.count)))}function Pn(e,t=!1){return t||e<Qe?2:1}function Bn(e){let t=Array.isArray(e.weeks)?e.weeks.map(String):[],n=(e.rows??[]).map(l=>{let u=t.map((d,p)=>Re(l.counts?.[p]));return{uri:l.uri,name:l.name||mo(l.uri),counts:u,total:re(u)}}).filter(l=>l.total>0);n.sort((l,u)=>u.total-l.total);let r=n.flatMap(l=>l.counts),s=In(r),a=n.map(l=>({...l,levels:l.counts.map(s)})),i=t.map((l,u)=>re(a.map(d=>d.counts[u])));return{weeks:t,rows:a,colTotals:i,total:re(i),maxCount:Math.max(0,...r),maxRowTotal:Math.max(0,...a.map(l=>l.total)),maxColTotal:Math.max(0,...i),level:s}}function mo(e){let t=e.replace(/\/SKILL\.md$/i,"").split("/").filter(Boolean);return t[t.length-1]??e}function Un(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}catch{return"UTC"}}function On(e=typeof navigator>"u"?void 0:navigator.language){if(!e)return 1;try{return new Intl.Locale(e).getWeekInfo?.()?.firstDay===7?0:1}catch{return 1}}function An(e){return String(e).padStart(2,"0")}function Rt(e,t){return`${An(e)}:00-${An((e+t)%24)}:00`}function At(e,t){return`${J[e.dow]??String(e.dow)} ${Rt(e.hour,t)}`}function Z(e,t){return`${e} ${t}${e===1?"":"s"}`}function Je(e,t){if(!(t>0)||!(e>0))return"0%";let n=e/t*100;return`${n>=10||Number.isInteger(n)?String(Math.round(n)):n.toFixed(1)}%`}function _o(e,t,n,r="session"){let s=At(e,t);return e.count>0?`${s} \xB7 ${Z(e.count,r)} \xB7 ${Je(e.count,n)}`:`${s} \xB7 no ${r}s`}function ho(e){let t=e===1?3:4;return Array.from({length:24/e},(n,r)=>{let s=r*e;return s%t===0?String(s):""})}function vo(e){let t=/^(\d{4})-W(\d{2})$/.exec(e);if(!t)return;let n=Number(t[1]),r=Number(t[2]);if(r<1||r>53)return;let s=Date.UTC(n,0,4),i=s-(new Date(s).getUTCDay()+6)%7*Ft+(r-1)*po;return{start:new Date(i),end:new Date(i+6*Ft)}}var Et=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"});function Mn(e){let t=vo(e),n=e.replace(/^\d{4}-/,"");if(!t)return{short:n,range:e};let r=Et,s=r.formatRange?r.formatRange(t.start,t.end):`${Et.format(t.start)} - ${Et.format(t.end)}`;return{short:n,range:s}}function Wn(e,t,n){if(!e||e.dow!==t.dow)return{dow:t.dow,hour:t.hour,hourSpan:n};let r=Math.min(e.hour,t.hour),s=Math.max(e.hour+e.hourSpan,t.hour+n);return{dow:t.dow,hour:r,hourSpan:Math.min(24-r,s-r)}}function zn(e,t){return e!==void 0&&e.dow===t.dow&&t.hour>=e.hour&&t.hour<e.hour+e.hourSpan}function Mt(e){if(!(e.dow===void 0||e.hour===void 0))return{dow:e.dow,hour:e.hour,hourSpan:e.hourSpan??1}}function Dt(e){let{dow:t,hour:n,hourSpan:r,...s}=e;return s}function It(e,t){let n={...Dt(e),dow:t.dow,hour:t.hour};return t.hourSpan>1&&(n.hourSpan=t.hourSpan),n}function qn(e,t){let n=e.dows.indexOf(t.dow);return n<0?0:re(e.rows[n].filter(r=>zn(t,r)).map(r=>r.count))}function jn({grid:e,selection:t,onCellClick:n,label:r}){let s=e.hours.length,a=ho(e.bucketHours),i=Math.ceil(s/2);return o("div",{class:`hm hm--cols-${s}`,role:"table","aria-label":r,style:`--hm-cols:${s}`,children:[o("div",{class:"hm__row",role:"row",children:[o("div",{class:"hm__corner",role:"columnheader",children:"Day"}),e.hours.map((l,u)=>o("div",{class:"hm__h",role:"columnheader",title:Rt(l,e.bucketHours),children:a[u]},l)),o("div",{class:"hm__h hm__h--total",role:"columnheader",children:"Total"})]}),e.rows.map((l,u)=>{let d=e.dows[u],p=e.rowTotals[u];return o("div",{class:"hm__row",role:"row",children:[o("div",{class:"hm__d",role:"rowheader",children:J[d]}),l.map((v,c)=>{let m=zn(t,v),k=_o(v,e.bucketHours,e.total),E=`hm__cell hm__cell--l${v.level}${m?" hm__cell--selected":""}${c>=i?" hm__cell--end":""}`;return o("div",{class:"hm__c",role:"cell",children:o("button",{type:"button",class:E,"data-tip":k,"data-dow":d,"data-hour":v.hour,"data-count":v.count,"data-selected":m?"true":void 0,"aria-label":m?`${k} (selected)`:k,onClick:T=>n(v,T)})},v.hour)}),o("div",{class:"hm__rt",role:"cell",title:`${J[d]}: ${Z(p,"session")}`,children:[o("span",{class:"hm__rbar",style:`--v:${Ze(p,e.maxRowTotal)}`,"aria-hidden":"true"}),o("span",{class:"hm__n",children:p})]})]},d)}),o("div",{class:"hm__row hm__row--foot",role:"row",children:[o("div",{class:"hm__d hm__d--total",role:"rowheader",children:"Total"}),e.colTotals.map((l,u)=>o("div",{class:"hm__ct",role:"cell",title:`${Rt(e.hours[u],e.bucketHours)}: ${Z(l,"session")}`,children:[o("span",{class:"hm__cbar",style:`--v:${Ze(l,e.maxColTotal)}`,"aria-hidden":"true"}),o("span",{class:"hm__n",children:l})]},e.hours[u])),o("div",{class:"hm__grand",role:"cell",children:e.total})]})]})}function Vn({grid:e,activeSkills:t,onRowClick:n,label:r}){let s=e.weeks.length,a=Math.ceil(s/2);return o("div",{class:`hm hm--skills hm--cols-${s}`,role:"table","aria-label":r,style:`--hm-cols:${s}`,children:[o("div",{class:"hm__row",role:"row",children:[o("div",{class:"hm__corner",role:"columnheader",children:"Skill"}),e.weeks.map(i=>{let{short:l,range:u}=Mn(i);return o("div",{class:"hm__h hm__wk",role:"columnheader",title:`${i} (${u})`,children:[o("span",{children:[o("span",{class:"hm__wk__w",children:l.slice(0,1)}),l.slice(1)]}),o("small",{children:u.split(/\s[-\u2013]\s/)[0]})]},i)}),o("div",{class:"hm__h hm__h--total",role:"columnheader",children:"Total"})]}),e.rows.map(i=>{let l=t.includes(i.uri);return o("div",{class:"hm__row",role:"row",children:[o("div",{class:"hm__d hm__d--skill",role:"rowheader",children:o("button",{type:"button",class:"hm__skill",title:i.uri,"aria-pressed":l,onClick:()=>n(i.uri),children:i.name})}),i.counts.map((u,d)=>{let p=e.weeks[d],{short:v,range:c}=Mn(p),m=u>0?`${i.name} \xB7 ${v} (${c}) \xB7 ${Z(u,"load")} \xB7 ${Je(u,e.total)}`:`${i.name} \xB7 ${v} (${c}) \xB7 no loads`;return o("div",{class:"hm__c",role:"cell",children:o("button",{type:"button",class:`hm__cell hm__cell--l${i.levels[d]}${d>=a?" hm__cell--end":""}`,"data-tip":m,"data-week":p,"data-count":u,"aria-label":m,onClick:()=>n(i.uri)})},p)}),o("div",{class:"hm__rt",role:"cell",title:`${i.name}: ${Z(i.total,"load")}`,children:[o("span",{class:"hm__rbar",style:`--v:${Ze(i.total,e.maxRowTotal)}`,"aria-hidden":"true"}),o("span",{class:"hm__n",children:i.total})]})]},i.uri)}),o("div",{class:"hm__row hm__row--foot",role:"row",children:[o("div",{class:"hm__d hm__d--total",role:"rowheader",children:"Total"}),e.colTotals.map((i,l)=>o("div",{class:"hm__ct",role:"cell",title:`${e.weeks[l]}: ${Z(i,"load")}`,children:[o("span",{class:"hm__cbar",style:`--v:${Ze(i,e.maxColTotal)}`,"aria-hidden":"true"}),o("span",{class:"hm__n",children:i})]},e.weeks[l])),o("div",{class:"hm__grand",role:"cell",children:e.total})]})]})}function Ht({ranges:e,unit:t}){let n=r=>r==="-"?"unused at this scale":/^\d+$/.test(r)?Z(Number(r),t):`${r} ${t}s`;return o("div",{class:"hm__legend",children:[o("span",{children:"Less"}),e.map((r,s)=>o("span",{class:`hm__sw hm__cell--l${s}`,role:"img",title:n(r),"aria-label":`level ${s}: ${n(r)}`},s)),o("span",{children:"More"})]})}function Kn(){return o("style",{children:go})}var go=`
|
|
68
|
+
.hm-stack {
|
|
69
|
+
--hm-l0: var(--wash);
|
|
70
|
+
--hm-l1: color-mix(in srgb, var(--accent) 24%, transparent);
|
|
71
|
+
--hm-l2: color-mix(in srgb, var(--accent) 46%, transparent);
|
|
72
|
+
--hm-l3: color-mix(in srgb, var(--accent) 70%, transparent);
|
|
73
|
+
--hm-l4: var(--accent);
|
|
74
|
+
--hm-bar: color-mix(in srgb, var(--ink) 28%, transparent);
|
|
75
|
+
--hm-r: calc(var(--r-sm) / 2);
|
|
76
|
+
--hm-cell: var(--s-8);
|
|
77
|
+
display: grid;
|
|
78
|
+
gap: var(--s-4);
|
|
79
|
+
}
|
|
80
|
+
.hmc { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: var(--s-4); overflow: clip; }
|
|
81
|
+
.hmc__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-3); margin-bottom: var(--s-4); }
|
|
82
|
+
.hmc__title { margin: 0; font-size: var(--fs-title); font-weight: 600; letter-spacing: -0.01em; }
|
|
83
|
+
.hmc__meta { color: var(--ink-3); font-size: var(--fs-cap); font-variant-numeric: tabular-nums; }
|
|
84
|
+
.hmc__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-2) var(--s-4); margin-top: var(--s-4); color: var(--ink-3); font-size: var(--fs-cap); }
|
|
85
|
+
.hmc__hint { margin: 0; }
|
|
86
|
+
.hmc__empty { margin: 0 0 var(--s-3); color: var(--ink-2); font-size: var(--fs-sm); }
|
|
87
|
+
.hmc__empty .btn { margin-inline-start: var(--s-2); }
|
|
88
|
+
|
|
89
|
+
.seg { display: inline-flex; margin-inline-start: auto; border: 1px solid var(--line-2); border-radius: var(--r-sm); overflow: hidden; }
|
|
90
|
+
.seg__b { height: 32px; padding: 0 var(--s-3); border: 0; background: transparent; color: var(--ink-2); font-size: var(--fs-cap); font-weight: 500; cursor: pointer; transition: background-color var(--t-micro), color var(--t-micro); }
|
|
91
|
+
.seg__b + .seg__b { border-inline-start: 1px solid var(--line); }
|
|
92
|
+
.seg__b:hover { background: var(--wash); color: var(--ink); }
|
|
93
|
+
.seg__b[aria-pressed="true"] { background: var(--wash-2); color: var(--ink); }
|
|
94
|
+
.seg__b:focus-visible { outline-offset: -2px; }
|
|
95
|
+
|
|
96
|
+
.hm {
|
|
97
|
+
--hm-gap: var(--s-1);
|
|
98
|
+
display: grid;
|
|
99
|
+
grid-template-columns: max-content repeat(var(--hm-cols), minmax(0, 1fr)) max-content;
|
|
100
|
+
gap: var(--hm-gap);
|
|
101
|
+
align-items: center;
|
|
102
|
+
color: var(--ink-3);
|
|
103
|
+
font-size: var(--fs-micro);
|
|
104
|
+
font-weight: 500;
|
|
105
|
+
font-variant-numeric: tabular-nums;
|
|
106
|
+
line-height: 1.2;
|
|
107
|
+
}
|
|
108
|
+
.hm__row { display: contents; }
|
|
109
|
+
.hm__corner { padding-inline-end: var(--s-2); white-space: nowrap; }
|
|
110
|
+
.hm__h { text-align: center; white-space: nowrap; min-height: 1.2em; align-self: end; }
|
|
111
|
+
.hm__h--total { text-align: right; padding-inline-start: var(--s-1); }
|
|
112
|
+
.hm__wk { display: flex; flex-direction: column; align-items: center; }
|
|
113
|
+
.hm__wk small { font-size: inherit; font-weight: 400; }
|
|
114
|
+
.hm__d { padding-inline-end: var(--s-2); color: var(--ink-2); white-space: nowrap; }
|
|
115
|
+
.hm__d--total { color: var(--ink-3); }
|
|
116
|
+
.hm__d--skill { padding-inline-end: var(--s-1); max-width: 18ch; }
|
|
117
|
+
.hm__c { position: relative; height: var(--hm-cell); min-width: 0; }
|
|
118
|
+
.hm__cell { display: block; width: 100%; height: 100%; padding: 0; border: 0; border-radius: var(--hm-r); background: var(--hm-l0); cursor: pointer; transition: box-shadow var(--t-micro); }
|
|
119
|
+
.hm__cell--l1 { background: var(--hm-l1); }
|
|
120
|
+
.hm__cell--l2 { background: var(--hm-l2); }
|
|
121
|
+
.hm__cell--l3 { background: var(--hm-l3); }
|
|
122
|
+
.hm__cell--l4 { background: var(--hm-l4); }
|
|
123
|
+
.hm__cell:hover { box-shadow: inset 0 0 0 1px var(--ink-3); }
|
|
124
|
+
.hm__cell--selected, .hm__cell--selected:hover { box-shadow: inset 0 0 0 2px var(--ink); }
|
|
125
|
+
.hm__cell:focus-visible { outline-offset: 1px; z-index: 1; }
|
|
126
|
+
.hm__cell--end[data-tip]::after { left: auto; right: 0; }
|
|
127
|
+
.hm__skill { display: block; max-width: 100%; height: 100%; padding: 0 var(--s-2); border: 0; border-radius: var(--r-sm); background: transparent; color: var(--ink); font: 500 var(--fs-cap) / 1.3 var(--font-sans); text-align: left; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: background-color var(--t-micro); }
|
|
128
|
+
.hm__skill:hover { background: var(--wash); }
|
|
129
|
+
.hm__skill[aria-pressed="true"] { background: var(--wash-2); }
|
|
130
|
+
.hm__rt { display: flex; align-items: center; gap: var(--s-2); min-width: calc(var(--s-12) + var(--s-8)); padding-inline-start: var(--s-2); }
|
|
131
|
+
.hm__rbar { display: block; flex: none; width: calc(var(--v) * var(--s-12)); height: var(--s-2); border-radius: var(--r-full); background: var(--hm-bar); }
|
|
132
|
+
.hm__n { color: var(--ink-2); }
|
|
133
|
+
.hm__ct { display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: calc(var(--s-1) / 2); height: calc(var(--s-8) + var(--s-3)); min-width: 0; }
|
|
134
|
+
.hm__cbar { display: block; width: 100%; max-width: var(--s-3); height: calc(var(--v) * var(--s-6)); border-radius: var(--r-full); background: var(--hm-bar); }
|
|
135
|
+
.hm__ct .hm__n { max-width: 100%; overflow: hidden; }
|
|
136
|
+
.hm__grand { align-self: end; padding-inline-start: var(--s-2); color: var(--ink); font-size: var(--fs-cap); font-weight: 600; text-align: right; }
|
|
137
|
+
|
|
138
|
+
.hm__legend { display: inline-flex; align-items: center; gap: var(--s-1); }
|
|
139
|
+
.hm__sw { display: inline-block; width: var(--s-3); height: var(--s-3); border-radius: var(--hm-r); box-shadow: inset 0 0 0 1px var(--line-2); }
|
|
140
|
+
.hm__sel { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-3); margin-top: var(--s-4); padding: var(--s-2) var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); color: var(--ink); font-size: var(--fs-sm); }
|
|
141
|
+
.hm__sel strong { font-weight: 600; }
|
|
142
|
+
.hm__sel__actions { display: inline-flex; gap: var(--s-2); margin-inline-start: auto; }
|
|
143
|
+
|
|
144
|
+
@media (max-width: 639.98px) {
|
|
145
|
+
.hm-stack { --hm-cell: var(--s-6); }
|
|
146
|
+
.hm { --hm-gap: calc(var(--s-1) / 2); }
|
|
147
|
+
.hm--cols-24 .hm__ct .hm__n, .hm--cols-24 .hm__rbar { display: none; }
|
|
148
|
+
.hm--cols-24 .hm__rt { min-width: 0; padding-inline-start: var(--s-1); }
|
|
149
|
+
.hm__rt { gap: var(--s-1); min-width: calc(var(--s-6) + var(--s-5)); padding-inline-start: var(--s-1); }
|
|
150
|
+
.hm__rbar { width: calc(var(--v) * var(--s-6)); }
|
|
151
|
+
/* Skill x week: the label column goes away; each skill name sits on its own full-width line above its cells, wrapping instead of truncating. */
|
|
152
|
+
.hm--skills { grid-template-columns: repeat(var(--hm-cols), minmax(0, 1fr)) max-content; }
|
|
153
|
+
.hm--skills .hm__corner { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
154
|
+
.hm--skills .hm__d { grid-column: 1 / -1; max-width: none; margin-top: var(--s-2); padding-inline-end: 0; white-space: normal; }
|
|
155
|
+
.hm--skills .hm__d--total { padding-inline-start: var(--s-2); }
|
|
156
|
+
.hm--skills .hm__skill { width: 100%; max-width: none; height: auto; min-height: var(--s-6); padding: var(--s-1) var(--s-2); overflow: visible; text-overflow: clip; white-space: normal; }
|
|
157
|
+
.hm__wk small, .hm__wk__w { display: none; }
|
|
158
|
+
.seg { margin-inline-start: 0; }
|
|
159
|
+
}
|
|
160
|
+
`;var ko=300,bo="(max-width: 639.98px)",yo=["auto",...Dn];function xo(e){let[t,n]=F(()=>typeof matchMedia=="function"&&matchMedia(e).matches);return B(()=>{if(typeof matchMedia!="function")return;let r=matchMedia(e),s=a=>n(a.matches);return r.addEventListener("change",s),n(r.matches),()=>r.removeEventListener("change",s)},[e]),t}function wo({choice:e,onChange:t}){return o("div",{class:"seg",role:"group","aria-label":"Hour bucket",children:yo.map(n=>o("button",{type:"button",class:"seg__b","aria-pressed":e===n,onClick:()=>t(n),children:n==="auto"?"Auto":`${n} h`},n))})}function So({selection:e,count:t,total:n,onShow:r,onClear:s}){return o("div",{class:"hm__sel",role:"status",children:[o("span",{children:[o("strong",{children:At(e,e.hourSpan)})," \xB7 ",Z(t,"session"),n>0&&t>0?` (${Je(t,n)})`:""]}),o("span",{class:"hm__sel__actions",children:[o("button",{type:"button",class:"btn",onClick:r,children:"Show sessions"}),o("button",{type:"button",class:"btn",onClick:s,children:"Clear"})]})]})}function Gn({route:e,navigate:t,live:n}){let r=j(Un,[]),s=j(()=>On(),[]),a=xo(bo),i=j(()=>Dt(e.filter),[e.filter]),l=ee(i),[u,d]=F("auto"),p=u==="auto"?1:u,[v,c]=F(),[m,k]=F(),[E,T]=F(),[_,y]=F(0),[C,D]=F(()=>Mt(e.filter));B(()=>{D(Mt(e.filter))},[e.filter.dow,e.filter.hour,e.filter.hourSpan]),B(()=>{if(n.seq===0)return;let g=setTimeout(()=>y(S=>S+1),ko);return()=>clearTimeout(g)},[n.seq]),B(()=>{let g=!1;return Promise.all([O.heatmap(i,{tz:r,weekStart:s,bucket:p}),O.skillWeek(i)]).then(([S,M])=>{g||(c(S),k(M),T(void 0))}).catch(S=>{g||T(S instanceof Error?S.message:String(S))}),()=>{g=!0}},[l,r,s,p,_]);let H=v?Nn(v):0,z=u==="auto"?Pn(H,a):u,h=j(()=>v?Hn(v,{bucketHours:z}):void 0,[v,z]),L=j(()=>m?Bn(m):void 0,[m]),R=h&&C?qn(h,C):0,$=e.filter.skill??[],N=(g,S)=>{if(h){if(S.shiftKey){D(M=>Wn(M,g,h.bucketHours));return}t({view:"sessions",filter:It(e.filter,{dow:g.dow,hour:g.hour,hourSpan:h.bucketHours})})}},K=()=>{C&&t({view:"sessions",filter:It(e.filter,C)})},W=()=>{D(void 0),(e.filter.dow!==void 0||e.filter.hour!==void 0)&&t({...e,filter:i})},q=g=>{let S={...e,filter:{...e.filter}};$.includes(g)?delete S.filter.skill:S.filter.skill=[g],t(S)},f=()=>t({...e,filter:{}}),w=h?J[h.weekStart]:J[s],b=h?`${h.bucketHours} h buckets${u==="auto"?" (auto)":""}`:"",x=!ue(i);return o("section",{class:"hm-stack","aria-busy":h===void 0,children:[o(Kn,{}),E&&o("p",{class:"notice",role:"alert",children:["Could not load the heatmap: ",E]}),h&&o("article",{class:"hmc","aria-labelledby":"hm-dow-title",children:[o("header",{class:"hmc__head",children:[o("h2",{class:"hmc__title",id:"hm-dow-title",children:"Sessions by weekday and hour"}),o("span",{class:"hmc__meta",children:[Z(h.total,"session")," ","\xB7"," ",v?.tz??r," ","\xB7"," week starts ",w," ","\xB7"," ",b]}),o(wo,{choice:u,onChange:d})]}),h.total===0&&o("p",{class:"hmc__empty",role:"status",children:[x?"No sessions match these filters.":"No sessions yet.",x&&o("button",{type:"button",class:"btn",onClick:f,children:"Clear filters"})]}),o(jn,{grid:h,selection:C,onCellClick:N,label:"Sessions by weekday and hour"}),C&&o(So,{selection:C,count:R,total:h.total,onShow:K,onClear:W}),o("footer",{class:"hmc__foot",children:[o(Ht,{ranges:$t(h.level,h.maxCount),unit:"session"}),o("p",{class:"hmc__hint",children:["Click a cell to list its sessions ","\xB7"," shift-click to select a range of hours",u==="auto"&&h.total<Qe&&!a?` \xB7 2 h buckets below ${Qe} sessions`:""]})]})]}),L&&o("article",{class:"hmc","aria-labelledby":"hm-skill-title",children:[o("header",{class:"hmc__head",children:[o("h2",{class:"hmc__title",id:"hm-skill-title",children:"Skill loads by week"}),o("span",{class:"hmc__meta",children:[Z(L.total,"load")," ","\xB7"," last ",L.weeks.length," ISO weeks"]})]}),L.rows.length===0?o("p",{class:"hmc__empty",role:"status",children:["No skill was loaded in the last ",L.weeks.length," weeks."]}):o(Vn,{grid:L,activeSkills:$,onRowClick:q,label:"Skill loads by ISO week"}),o("footer",{class:"hmc__foot",children:[o(Ht,{ranges:$t(L.level,L.maxCount),unit:"load"}),o("p",{class:"hmc__hint",children:"Click a skill row to filter every view to that skill"})]})]})]})}var To=`
|
|
161
|
+
.usage { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--s-1) var(--s-4); margin: 0 0 var(--s-3); color: var(--ink-2); font-size: var(--fs-cap); font-variant-numeric: tabular-nums; }
|
|
162
|
+
.usage__item { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: var(--s-1) var(--s-2); }
|
|
163
|
+
.usage__key { color: var(--ink-3); }
|
|
164
|
+
.usage__why { color: var(--ink-3); text-decoration: underline dotted; text-underline-offset: 3px; cursor: help; }
|
|
165
|
+
.usage__why[data-tip]::after { width: min(44ch, calc(100vw - 2 * var(--s-4))); white-space: normal; }
|
|
166
|
+
.usage__rate { white-space: nowrap; }
|
|
167
|
+
.usage__rate--none { color: var(--ink-3); }
|
|
168
|
+
`;Fe("sessions-usage",To);var Xn="gisool links each MCP search and load to a runtime session by the runtime's session id, vendor metadata, the search trace handle, or a recent-activity window. These matched no session, so they are stored but appear in no session row.",Yn=(e,t,n)=>e===1?t:n;function Lo(e){return e==null?"-":`${Math.round(e*100)}%`}function Co(e){if(!(!e||e.searches+e.loads===0))return`${e.searches} unattributed ${Yn(e.searches,"search","searches")}, ${e.loads} ${Yn(e.loads,"load","loads")} (no session could be matched)`}function Eo(e){return Se.filter(t=>(e.attributionRate[t]??null)!==null||e.lastEventByRuntime[t]!==void 0).map(t=>({runtime:t,text:Lo(e.attributionRate[t]),known:(e.attributionRate[t]??null)!==null}))}function Fo({stats:e}){let t=Co(e.unattributed),n=Eo(e);return!t&&n.length===0?null:o("p",{class:"usage",children:[t&&o("span",{class:"usage__item","data-usage":"unattributed",children:[o("span",{children:t}),o("span",{class:"usage__why",tabIndex:0,"data-tip":Xn,"aria-label":Xn,children:"How attribution works"})]}),n.length>0&&o("span",{class:"usage__item","data-usage":"rates",title:"Share of each runtime's MCP events matched to a session; - means the runtime sent no MCP events",children:[o("span",{class:"usage__key",children:"MCP attribution"}),n.map(r=>o("span",{class:r.known?"usage__rate":"usage__rate usage__rate--none",children:[G[r.runtime]," ",r.text]},r.runtime))]})]})}var Ro=new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1}),$o=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}),Zn=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1});function Ao(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function Mo(e){let t=Math.round(e/6e4);if(t<1)return"<1m";if(t<60)return`${t}m`;let n=Math.floor(t/60),r=t%60;return r?`${n}h ${r}m`:`${n}h`}function Do({row:e}){let t=new Date(e.startedAt),n=Ao(t,new Date)?"Today":$o.format(t);return o("time",{class:"when",dateTime:t.toISOString(),title:t.toLocaleString(),children:[o("span",{class:"when__date",children:n}),o("span",{class:"when__time",children:Ro.format(t)}),e.endedAt!==void 0&&o("span",{class:"when__dur",children:Mo(e.endedAt-e.startedAt)})]})}function Io({runtime:e}){let t=G[e]??G.unknown;return o("span",{class:"rt",children:[o("span",{class:"rt__mark","aria-hidden":"true",children:ce[e]??ce.unknown}),o("span",{children:t})]})}var Qn=3;function Ho({skills:e}){if(!e.length)return o("span",{class:"skills__none",children:"none"});let t=e.slice(0,Qn),n=e.length-t.length;return o("span",{class:"skills",children:[t.map(r=>o("span",{class:"skill",title:r,children:Y(r)},r)),n>0&&o("span",{class:"skill skill--more",title:e.slice(Qn).map(Y).join(", "),children:["+",n]})]})}function No({state:e}){return o("span",{class:`badge badge--${e}`,title:Oe[e]??e,children:V[e]??e})}function Po({row:e}){if(e.attribution!=="none")return o("span",{class:"attr",children:We[e.attribution]??e.attribution});let t=`unattributed: ${e.attributionReason??"reason not reported"}`;return o("span",{class:"attr attr--none",tabIndex:0,"data-tip":t,"aria-label":t,children:"unattributed"})}function Bo(e){return e instanceof Element&&e.closest("a, button, input, select, [data-tip]")!==null}function Uo({row:e,route:t,navigate:n}){let r={view:"trace",sessionId:e.id,filter:t.filter};return o("tr",{onClick:s=>{Bo(s.target)||n(r)},children:[o("td",{class:"c-runtime","data-label":"Runtime",children:o(Io,{runtime:e.runtime})}),o("td",{class:"c-started","data-label":"Started",children:o(Do,{row:e})}),o("td",{class:"c-prompt","data-label":"First prompt",children:o("a",{class:e.firstPrompt?"rowlink":"rowlink rowlink--dim",href:X(r),children:e.firstPrompt??"(no prompt captured)"})}),o("td",{class:"c-skills","data-label":"Skills",children:o(Ho,{skills:e.skills})}),o("td",{class:"c-state","data-label":"State",children:o(No,{state:e.state})}),o("td",{class:"c-attr","data-label":"Attribution",children:o(Po,{row:e})})]})}function Oo({stats:e}){let{ingest:t}=e;return o("section",{class:"empty","aria-live":"polite",children:[o("h2",{children:"Waiting for the first event"}),o("p",{children:["No runtime has sent an event yet. Start a session in a connected runtime, or run"," ",o("code",{class:"cmd",children:"gisool doctor"})," to check each connection."]}),o("dl",{class:"checklist",children:[Se.filter(n=>n!=="unknown").map(n=>{let r=e.lastEventByRuntime[n];return o(U,{children:[o("dt",{children:G[n]},`${n}-k`),o("dd",{class:r!==void 0?"is-ok":void 0,children:r!==void 0?`last event ${Zn.format(r)}`:"no events yet"},`${n}-v`)]})}),o("dt",{children:"Ingest"}),o("dd",{class:t.rejected||t.dropped?"is-bad":void 0,children:[t.accepted," accepted, ",t.rejected," rejected, ",t.dropped," dropped"]}),t.lastError&&o(U,{children:[o("dt",{children:"Last error"}),o("dd",{class:"is-bad",children:[t.lastError.code," at ",Zn.format(t.lastError.ts)]})]})]})]})}function Wo({route:e,navigate:t}){return o("section",{class:"empty",children:[o("h2",{children:"No sessions match these filters"}),o("p",{children:"Widen the time range or remove a filter to see more sessions."}),o("button",{type:"button",class:"btn",onClick:()=>t({...e,filter:{}}),children:"Clear filters"})]})}function zo(){return o("section",{class:"empty",children:[o("h2",{children:"No sessions recorded yet"}),o("p",{children:["Events arrived but none opened a session. Start a prompt in a connected runtime, or run ",o("code",{class:"cmd",children:"gisool doctor"}),"."]})]})}function qo({route:e,navigate:t,count:n}){let{filter:r}=e,s=a=>{let i={...r,...a};for(let l of Object.keys(i))i[l]===void 0&&delete i[l];t({...e,filter:i})};return o("form",{class:"toolbar",role:"search",onSubmit:a=>{a.preventDefault();let l=a.currentTarget.elements.namedItem("q")?.value.trim()??"";s({q:l||void 0})},children:[o("input",{class:"field field--search",type:"search",name:"q",placeholder:"Search prompts and skills","aria-label":"Search prompts and skills",value:r.q??""}),o("select",{class:"field field--select","aria-label":"Runtime",value:r.runtime?.length===1?r.runtime[0]:"",onChange:a=>{let i=a.currentTarget.value;s({runtime:i?[i]:void 0})},children:[o("option",{value:"",children:"All runtimes"}),Se.map(a=>o("option",{value:a,children:G[a]},a))]}),o("select",{class:"field field--select","aria-label":"Adoption state",value:r.state?.length===1?r.state[0]:"",onChange:a=>{let i=a.currentTarget.value;s({state:i?[i]:void 0})},children:[o("option",{value:"",children:"All states"}),Te.map(a=>o("option",{value:a,children:V[a]},a))]}),n!==void 0&&o("span",{class:"toolbar__count",children:[n," ",n===1?"session":"sessions"]})]})}var jo=300;function Jn({route:e,navigate:t,live:n}){let r=ee(e.filter),[s,a]=F(),[i,l]=F(),[u,d]=F(),[p,v]=F(0);B(()=>{if(n.seq===0)return;let m=setTimeout(()=>v(k=>k+1),jo);return()=>clearTimeout(m)},[n.seq]),B(()=>{let m=!1;return Promise.all([O.sessions(e.filter),O.stats(e.filter)]).then(([k,E])=>{m||(a(k),l(E),d(void 0))}).catch(k=>{m||d(k instanceof Error?k.message:String(k))}),()=>{m=!0}},[r,p]);let c;return s===void 0?c=null:s.length===0&&i&&i.lastEventTs===void 0?c=o(Oo,{stats:i}):s.length===0&&!ue(e.filter)?c=o(Wo,{route:e,navigate:t}):s.length===0?c=o(zo,{}):c=o("div",{class:"card",children:o("table",{class:"sessions",children:[o("colgroup",{children:[o("col",{style:"width:15%"}),o("col",{style:"width:10%"}),o("col",{}),o("col",{style:"width:20%"}),o("col",{style:"width:13%"}),o("col",{style:"width:12%"})]}),o("thead",{children:o("tr",{children:[o("th",{scope:"col",children:"Runtime"}),o("th",{scope:"col",children:"Started"}),o("th",{scope:"col",children:"First prompt"}),o("th",{scope:"col",children:"Skills"}),o("th",{scope:"col",children:"State"}),o("th",{scope:"col",children:"Attribution"})]})}),o("tbody",{children:s.map(m=>o(Uo,{row:m,route:e,navigate:t},m.id))})]})}),o("section",{"aria-busy":s===void 0,children:[o(qo,{route:e,navigate:t,count:s?.length}),u&&o("p",{class:"notice",role:"alert",children:["Could not load sessions: ",u]}),s!==void 0&&i&&o(Fo,{stats:i}),c]})}function er(e,t){let n=new Set(t.map(r=>r.normalize("NFKC").toLowerCase()));return{hit:e.filter(r=>n.has(r)).length,total:e.length}}var Vo=e=>e.normalize("NFKC").toLowerCase().replace(/\s+/g," ").trim(),tr=new Set("a an the and or to of for in on with from by is are be it this that do please use using when how me my can could would should not only then after before need want help \uD574\uC918 \uD574\uC8FC\uC138\uC694 \uC54C\uB824\uC918 \uC791\uC131\uD574\uC918 \uB9CC\uB4E4\uC5B4\uC918 \uD655\uC778\uD574\uC918 \uAC80\uD1A0\uD574\uC918 \uD544\uC694 \uC5C6\uC5B4 \uC788\uC2B5\uB2C8\uB2E4 \uD569\uB2C8\uB2E4 \uC791\uC5C5 \uC0AC\uC6A9 \uD1B5\uD574 \uB300\uD55C \uC704\uD55C \uAD00\uB828 \uD604\uC7AC \uB2E4\uC74C \uBA3C\uC800 \uC2E4\uC81C \uD558\uB098 \uAC83 \uC218 \uBC0F \uB610\uB294 \uD558\uACE0 \uADF8\uB9AC\uACE0 \uBC29\uBC95 \uC740 \uB294 \uC774 \uAC00 \uC744 \uB97C \uC758 \uB3C4 \uB85C \uC640 \uACFC \uC5D0".split(" "));function Ko(e){if(/^[가-힣]+$/.test(e)&&e.length>2){let t=e.replace(/(?:해주세요|해줘|하기|하게|하는|하면서|하려는|으로|에서|에게|에는|까지|부터|처럼|보다|은|는|을|를|이|가|과|와|의|도|로)$/,"");return t.length>=2?t:e}return/^[a-z]{5,}s$/.test(e)&&!e.endsWith("ss")?e.slice(0,-1):e}function Go(e){return(Vo(e).match(/[\p{L}\p{N}]+/gu)??[]).flatMap(t=>t.split(/(?<=[가-힣])(?=[a-z0-9])|(?<=[a-z0-9])(?=[가-힣])/))}function nr(e){return[...new Set(Go(e).filter(t=>!tr.has(t)).map(Ko).filter(t=>!tr.has(t)))]}function Xo(e){return[...e].sort((t,n)=>t.rank-n.rank)}function Yo(e,t){let n=e?nr(e):[];if(!n.length)return;let{hit:r,total:s}=er(n,t??[]);return`${r}/${s} ${s===1?"term":"terms"}`}function Zo(e){let t=/^skill:\/\/local\/([^/]+)\//.exec(e);return t?decodeURIComponent(t[1]):void 0}function Qo(e){let t=new Map;for(let r of e)t.set(r.name,(t.get(r.name)??0)+1);let n=new Map;for(let r of e){let s=(t.get(r.name)??0)>1?Zo(r.uri):void 0;s&&n.set(r.uri,s)}return n}function Jo(e,t){let n=new Set(t??[]);for(let r of e)r.chosen&&n.add(r.uri);return n}function Nt(e){return Number.isFinite(e)?e.toFixed(2):"-"}function es(e){let t=Number.isFinite(e)?Math.min(1,Math.max(0,e)):0;return`${Math.round(t*100)}%`}var ts={automatic:"auto",explicit:"explicit"},ns={automatic:"automatic: eligible for automatic routing",explicit:"explicit: only loads when the skill is named"};function rs(){return o("svg",{class:"cand__check",viewBox:"0 0 24 24",width:"16",height:"16",role:"img","aria-label":"loaded after this search",focusable:"false",children:o("path",{d:"M20 6 9 17l-5-5",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})})}function rr({candidates:e,chosen:t,query:n}){if(!e.length)return o("p",{class:"cands__none",children:"No candidates were returned."});let r=Jo(e,t),s=Qo(e);return o(U,{children:[o("p",{class:"cands__legend",children:["match = rank score ","\xD7"," share of query terms matched"]}),o("ol",{class:"cands","aria-label":"Search candidates",children:Xo(e).map(a=>{let i=r.has(a.uri),l=s.get(a.uri),u=Yo(n,a.matched);return o("li",{class:i?"cand cand--chosen":"cand","data-uri":a.uri,"data-score":Nt(a.score),"data-chosen":i?"true":"false",children:[o("span",{class:"cand__rank","aria-label":`rank ${a.rank}`,children:a.rank}),o("span",{class:"cand__name",title:a.uri,children:[o("span",{class:"cand__nm",children:a.name}),l?o("span",{class:"cand__root","data-root":l,children:l}):null]}),o("span",{class:"cand__inv",title:ns[a.invocation]??a.invocation,children:ts[a.invocation]??a.invocation}),o("span",{class:"cand__bar",role:"img",title:"match","aria-label":`match ${Nt(a.score)}${u?`, ${u}`:""}`,children:o("span",{class:"cand__fill",style:{width:es(a.score)}})}),o("span",{class:"cand__score",children:Nt(a.score)}),o("span",{class:"cand__cov",children:u??""}),o("span",{class:"cand__pick",children:i?o(rs,{}):null}),o("span",{class:"cand__desc",children:[a.description,a.matched?.length?o("span",{class:"cand__matched",children:[" ","\xB7"," matched ",a.matched.join(", ")]}):null]})]},a.uri)})})]})}var os=600,ss=8,as={session_start:"Session started",prompt:"Prompt",search:"Searched gisool",load:"Loaded skill",read_file:"Read resource",native_skill:"Native skill",session_end:"Session ended",error:"Error"},is={discovery:"discovery",automatic:"automatic",explicit:"explicit"},ls={empty_query:"empty query",no_overlap:"no overlap",below_threshold:"below threshold",explicit_only:"explicit only"},cs="This session never consulted gisool";function sr(e){let t={steps:e.length,searches:0,abstained:0,loads:0,reads:0,natives:0,errors:0};for(let n of e)switch(n.kind){case"search":t.searches+=1,n.detail.abstained&&(t.abstained+=1);break;case"load":t.loads+=1;break;case"read_file":t.reads+=1;break;case"native_skill":t.natives+=1;break;case"error":t.errors+=1;break;default:break}return t}function ar(e,t){let n=e[0],r=e[e.length-1],s=e.find(a=>a.kind==="session_end");return{startedAt:t?.startedAt??n?.ts,endedAt:t?.endedAt??s?.ts,lastTs:r?.ts}}function et(e){let t=Math.round(e/6e4);if(t<1)return"<1m";if(t<60)return`${t}m`;let n=Math.floor(t/60),r=t%60;return r?`${n}h ${r}m`:`${n}h`}function us(e){if(!Number.isFinite(e)||e<0)return"";if(e<1e4)return`+${(e/1e3).toFixed(1)}s`;if(e<6e4)return`+${Math.round(e/1e3)}s`;let t=Math.round(e/1e3),n=Math.floor(t/60);return n<60?`+${n}m ${String(t%60).padStart(2,"0")}s`:`+${Math.floor(n/60)}h ${String(n%60).padStart(2,"0")}m`}function ds(e){return!Number.isFinite(e)||e<0?"-":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ps(e){return e?e.replace(/^sha256[:-]/,"").slice(0,ss):""}function fs(e){return!Number.isFinite(e)||e<0?"-":e<1?`${e.toFixed(2)} ms`:e<100?`${e.toFixed(1)} ms`:`${Math.round(e)} ms`}function ms(e,t){let n=e.replace(/\/SKILL\.md$/i,"");return n&&t.startsWith(`${n}/`)?t.slice(n.length+1):t}function _s(e,t=os){let n=Array.from(e);return n.length<=t?{head:e,folded:!1}:{head:n.slice(0,t).join(""),folded:!0}}function ir(e){let t=e.detail;return{kind:"search",traceId:typeof t.traceId=="string"?t.traceId:"",chosen:Array.isArray(t.chosen)?t.chosen:[],query:typeof t.query=="string"?t.query:"",mode:t.mode??"automatic",candidates:Array.isArray(t.candidates)?t.candidates:[],abstained:t.abstained,elapsedMs:Number(t.elapsedMs??0),total:Number(t.total??(Array.isArray(t.candidates)?t.candidates.length:0))}}function hs(e){return e.traceId?{query:e.query,fromTraceId:e.traceId}:{query:e.query}}function vs(e,t){return t?.firstPrompt?t.firstPrompt:e.find(s=>s.kind==="prompt")?.detail?.text||void 0}var gs=new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}),ks=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1});function bs({runtime:e}){return o("span",{class:"rt",children:[o("span",{class:"rt__mark","aria-hidden":"true",children:ce[e]??ce.unknown}),o("span",{children:G[e]??G.unknown})]})}function ys({sessionId:e,row:t,steps:n,backHref:r,liveState:s}){let a=ar(n,t),i=sr(n),l=vs(n,t),u=t?.runtime,d;a.startedAt===void 0?d="-":a.endedAt!==void 0?d=et(a.endedAt-a.startedAt):s==="live"?d=`in progress \xB7 ${et((a.lastTs??a.startedAt)-a.startedAt)} so far`:d=`${et((a.lastTs??a.startedAt)-a.startedAt)} (no end recorded)`;let p=t?t.attribution==="none"?`unattributed \xB7 ${t.attributionReason??"reason not reported"}`:We[t.attribution]??t.attribution:"-",v=[`${i.steps} ${i.steps===1?"step":"steps"}`,`${i.searches} ${i.searches===1?"search":"searches"}`,`${i.loads} ${i.loads===1?"load":"loads"}`];return i.reads&&v.push(`${i.reads} ${i.reads===1?"file read":"file reads"}`),i.natives&&v.push(`${i.natives} native`),i.errors&&v.push(`${i.errors} ${i.errors===1?"error":"errors"}`),o("header",{class:"trace__head card",children:[o("a",{class:"trace__back",href:r,children:[o("svg",{viewBox:"0 0 24 24",width:"14",height:"14","aria-hidden":"true",focusable:"false",children:o("path",{d:"m15 18-6-6 6-6",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})}),"Sessions"]}),o("h1",{class:l?"trace__title":"trace__title trace__title--dim",children:l??"(no prompt captured)"}),o("dl",{class:"trace__meta",children:[o("div",{children:[o("dt",{children:"Runtime"}),o("dd",{children:u?o(bs,{runtime:u}):o("span",{class:"trace__dim",children:"unknown"})})]}),o("div",{children:[o("dt",{children:"Started"}),o("dd",{children:a.startedAt!==void 0?o("time",{dateTime:new Date(a.startedAt).toISOString(),children:ks.format(a.startedAt)}):"-"})]}),o("div",{children:[o("dt",{children:"Duration"}),o("dd",{children:d})]}),o("div",{children:[o("dt",{children:"Attribution"}),o("dd",{class:t?.attribution==="none"?"trace__dim":void 0,children:p})]}),t&&o("div",{children:[o("dt",{children:"State"}),o("dd",{children:o("span",{class:`badge badge--${t.state}`,title:Oe[t.state]??t.state,children:V[t.state]??t.state})})]}),o("div",{children:[o("dt",{children:"Session"}),o("dd",{class:"trace__id",children:e})]})]}),o("p",{class:"trace__counts",children:v.join(" \xB7 ")})]})}function xs({ts:e,startedAt:t}){let n=t!==void 0?us(e-t):"";return o("time",{class:"tl__time",dateTime:new Date(e).toISOString(),title:new Date(e).toLocaleString(),children:[o("b",{children:gs.format(e)}),n&&o("span",{class:"tl__offset",children:n})]})}function ws({detail:e}){let[t,n]=F(!1);if(!e.text)return o("p",{class:"tl__dim",children:["(prompt not captured",e.textLength!==void 0?`, ${e.textLength} chars`:"",")"]});let{head:r,folded:s}=_s(e.text);return o("div",{children:[o("p",{class:"tl__text",children:t||!s?e.text:`${r}\u2026`}),s&&o("button",{type:"button",class:"foldbtn","aria-expanded":t,onClick:()=>n(a=>!a),children:t?"Show less":`Show more (${Array.from(e.text).length} chars)`})]})}function Ss({detail:e}){let[t,n]=F({status:"idle"}),r=()=>{n({status:"saving"}),O.addEvalCase(hs(e)).then(()=>n({status:"saved"})).catch(a=>n({status:"error",message:a instanceof Error?a.message:String(a)}))},s=t.status==="saved";return o("div",{class:"tl__save",children:[o("button",{type:"button",class:"btn","data-save-eval":t.status,disabled:t.status==="saving"||s,onClick:r,children:[s&&o("svg",{viewBox:"0 0 24 24",width:"14",height:"14","aria-hidden":"true",focusable:"false",children:o("path",{d:"M20 6 9 17l-5-5",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})}),s?"Saved as eval case":t.status==="saving"?"Saving\u2026":"Save as eval case"]}),t.status==="error"&&o("span",{class:"tl__err",role:"alert",children:["Could not save: ",t.message]})]})}function Ts({detail:e}){let t=e.candidates.length,n=e.abstained?"abstained":e.total>t?`top ${t} of ${e.total}`:`${t} ${t===1?"candidate":"candidates"}`;return o("div",{children:[o("p",{class:"tl__meta tl__meta--row",children:[o("span",{class:"tl__mode",title:`mode: ${e.mode}`,children:is[e.mode]??e.mode}),o("span",{children:fs(e.elapsedMs)}),o("span",{children:n}),e.traceId&&o("span",{class:"tl__id",title:"trace id",children:e.traceId})]}),o("blockquote",{class:"tl__query",children:e.query||o("span",{class:"tl__dim",children:"(empty query)"})}),e.abstained?o("div",{class:"tl__abstain","data-abstained":e.abstained.reason,children:[o("div",{class:"tl__abstain-head",children:o("span",{class:"badge badge--no_match",children:["abstained ","\xB7"," ",ls[e.abstained.reason]??e.abstained.reason]})}),o("p",{class:"tl__hint",children:e.abstained.hint}),o(Ss,{detail:e})]}):o(rr,{candidates:e.candidates,chosen:e.chosen,query:e.query})]})}function Ls({detail:e}){return o("p",{class:"tl__line",children:[o("span",{class:"tl__name",children:Y(e.uri)}),o("span",{class:"tl__uri",children:e.uri}),e.manifestDigest&&o("span",{class:"tl__digest",title:`manifest ${e.manifestDigest}`,children:["@",ps(e.manifestDigest)]})]})}function Cs({detail:e}){return o("p",{class:"tl__line",children:[o("span",{class:"tl__name tl__name--mono",children:ms(e.skillUri,e.uri)}),o("span",{class:"tl__meta",children:ds(e.bytes)}),e.skillUri&&o("span",{class:"tl__meta",children:["from ",Y(e.skillUri)]})]})}function Es({detail:e}){return o("p",{class:"tl__line",children:[o("span",{class:"tl__name",children:e.name}),o("span",{class:"tl__meta",children:["via ",e.via]})]})}function Fs({detail:e}){return o("p",{class:"tl__line",children:[o("span",{class:"tl__code",children:e.code}),o("span",{class:"tl__errmsg",children:e.message})]})}function Rs({step:e,bounds:t}){switch(e.kind){case"prompt":return o(ws,{detail:e.detail});case"search":return o(Ts,{detail:ir(e)});case"load":return o(Ls,{detail:e.detail});case"read_file":return o(Cs,{detail:e.detail});case"native_skill":return o(Es,{detail:e.detail});case"error":return o(Fs,{detail:e.detail});case"session_end":return t.startedAt!==void 0?o("p",{class:"tl__meta",children:["after ",et(e.ts-t.startedAt)]}):null;case"session_start":return null;default:return o("p",{class:"tl__meta",children:e.summary})}}function $s({step:e,bounds:t}){let n=e.kind==="search"?ir(e):void 0,r=e.kind==="read_file"||e.kind==="native_skill";return o("li",{class:`tl__step tl__step--${e.kind}`,"data-kind":e.kind,children:[o("span",{class:r?"tl__dot tl__dot--hollow":"tl__dot","aria-hidden":"true"}),o("div",{class:"tl__head",children:[o("span",{class:"tl__kind",children:as[e.kind]??e.kind}),e.kind==="native_skill"&&o("span",{class:"tl__tag",title:"handled by the runtime's own skill mechanism, not gisool",children:"native"}),n?.abstained&&o("span",{class:"tl__tag tl__tag--bad",children:"abstained"}),o(xs,{ts:e.ts,startedAt:t.startedAt})]}),o("div",{class:"tl__body",children:o(Rs,{step:e,bounds:t})})]})}function As({sessionId:e,backHref:t}){return o("section",{class:"empty empty--trace",children:[o("h2",{children:"Session not found"}),o("p",{children:["No events are recorded for ",o("code",{class:"cmd",children:e}),". It may have been removed by retention, or the link is stale."]}),o("a",{class:"btn",href:t,children:"Back to sessions"})]})}function Ms({counts:e}){return o("div",{class:"callout",role:"status","data-empty":"never-consulted",children:[o("strong",{children:cs}),o("span",{children:["No skill search was recorded, so no candidates were ranked.",e.natives?` The runtime handled ${e.natives===1?"one skill":`${e.natives} skills`} natively.`:""]})]})}var or="gisool-trace-style";function Ds(){if(typeof document>"u"||document.getElementById(or))return;let e=document.createElement("style");e.id=or,e.textContent=Is,document.head.append(e)}function lr({route:e,live:t}){Ds();let n=e.sessionId??"",r=X({view:"sessions",filter:e.filter}),[s,a]=F(),[i,l]=F(),[u,d]=F();if(B(()=>{let c=!1;return a(void 0),l(void 0),Promise.all([O.trace(n),O.sessions({})]).then(([m,k])=>{c||(a(m),l(k.find(E=>E.id===n)),d(void 0))}).catch(m=>{c||d(m instanceof Error?m.message:String(m))}),()=>{c=!0}},[n]),B(()=>{if(t.seq===0||!t.last||t.last.id!==n)return;l(t.last);let c=!1;return O.trace(n).then(m=>{c||(a(m),d(void 0))}).catch(m=>{c||d(m instanceof Error?m.message:String(m))}),()=>{c=!0}},[t.seq,n]),s===void 0)return o("section",{class:"trace","aria-busy":"true",children:u&&o("p",{class:"notice",role:"alert",children:["Could not load the trace: ",u]})});if(s.length===0&&!i)return o(As,{sessionId:n,backHref:r});let p=ar(s,i),v=sr(s);return o("section",{class:"trace","aria-busy":"false",children:[u&&o("p",{class:"notice",role:"alert",children:["Live update failed: ",u]}),o(ys,{sessionId:n,row:i,steps:s,backHref:r,liveState:t.state}),v.searches===0&&o(Ms,{counts:v}),s.length>0&&o("div",{class:"card tl__card",children:o("ol",{class:"tl","aria-label":"Session timeline",children:s.map((c,m)=>o($s,{step:c,bounds:p},`${c.ts}-${m}-${c.kind}`))})})]})}var Is=`
|
|
169
|
+
.trace { display: grid; gap: var(--s-4); }
|
|
170
|
+
.trace__head { display: grid; gap: var(--s-3); padding: var(--s-4) var(--s-5); }
|
|
171
|
+
.trace__back { display: inline-flex; align-items: center; gap: var(--s-1); justify-self: start; min-height: 32px; color: var(--ink-2); font-size: var(--fs-sm); font-weight: 500; text-decoration: none; }
|
|
172
|
+
.trace__back:hover { color: var(--ink); }
|
|
173
|
+
.trace__title { margin: 0; font-size: var(--fs-title); font-weight: 600; letter-spacing: -0.01em; line-height: 1.4; }
|
|
174
|
+
.trace__title--dim { color: var(--ink-3); font-style: italic; font-weight: 400; }
|
|
175
|
+
.trace__meta { display: flex; flex-wrap: wrap; gap: var(--s-3) var(--s-6); margin: 0; }
|
|
176
|
+
.trace__meta > div { display: grid; gap: var(--s-1); align-content: start; }
|
|
177
|
+
.trace__meta dt { color: var(--ink-3); font-size: var(--fs-cap); font-weight: 500; }
|
|
178
|
+
.trace__meta dd { margin: 0; color: var(--ink); font-size: var(--fs-sm); font-variant-numeric: tabular-nums; }
|
|
179
|
+
.trace__dim { color: var(--ink-3); }
|
|
180
|
+
.trace__id { font-family: var(--font-mono); font-size: var(--fs-cap); color: var(--ink-2); }
|
|
181
|
+
.trace__counts { margin: 0; color: var(--ink-3); font-size: var(--fs-cap); font-variant-numeric: tabular-nums; }
|
|
182
|
+
.empty--trace .btn { text-decoration: none; }
|
|
183
|
+
.callout { display: grid; gap: var(--s-1); padding: var(--s-3) var(--s-4); border: 1px solid var(--line); border-radius: var(--r-md); background: var(--surface); color: var(--ink-2); font-size: var(--fs-sm); }
|
|
184
|
+
.callout strong { color: var(--ink); font-weight: 600; }
|
|
185
|
+
.tl__card { padding: var(--s-4) var(--s-5); }
|
|
186
|
+
.tl { --dot-top: calc(var(--s-2) + 6px); list-style: none; margin: 0; padding: 0 0 0 var(--s-6); }
|
|
187
|
+
.tl__step { --dot: var(--neutral); position: relative; padding-block: var(--s-2) var(--s-4); }
|
|
188
|
+
.tl__step:last-child { padding-bottom: var(--s-2); }
|
|
189
|
+
.tl__step::before { content: ""; position: absolute; top: 0; bottom: 0; left: calc(var(--s-1) - 1px - var(--s-6)); width: 2px; background: var(--line-2); }
|
|
190
|
+
.tl__step:first-child::before { top: var(--dot-top); }
|
|
191
|
+
.tl__step:last-child::before { bottom: auto; height: var(--dot-top); }
|
|
192
|
+
.tl__step:only-child::before { display: none; }
|
|
193
|
+
.tl__step--prompt { --dot: var(--ink); }
|
|
194
|
+
.tl__step--search { --dot: var(--accent); }
|
|
195
|
+
.tl__step--load, .tl__step--read_file { --dot: var(--ok); }
|
|
196
|
+
.tl__step--native_skill { --dot: var(--warn); }
|
|
197
|
+
.tl__step--error { --dot: var(--bad); }
|
|
198
|
+
.tl__dot { position: absolute; left: calc(-1 * var(--s-6)); top: var(--dot-top); width: var(--s-2); height: var(--s-2); border-radius: 50%; background: var(--dot); box-shadow: 0 0 0 2px var(--surface); }
|
|
199
|
+
.tl__dot--hollow { background: var(--surface); box-shadow: inset 0 0 0 2px var(--dot), 0 0 0 2px var(--surface); }
|
|
200
|
+
.tl__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--s-1) var(--s-2); }
|
|
201
|
+
.tl__kind { color: var(--ink); font-size: var(--fs-sm); font-weight: 600; }
|
|
202
|
+
.tl__tag { display: inline-flex; align-items: center; height: 18px; padding: 0 var(--s-2); border: 1px solid var(--line); border-radius: var(--r-full); background: var(--surface-2); color: var(--ink-2); font: 600 var(--fs-micro) / 1 var(--font-mono); letter-spacing: 0.02em; text-transform: uppercase; }
|
|
203
|
+
.tl__tag--bad { color: var(--bad); background: color-mix(in srgb, var(--bad) 12%, transparent); border-color: transparent; }
|
|
204
|
+
.tl__time { display: inline-flex; gap: var(--s-2); margin-inline-start: auto; color: var(--ink-3); font-size: var(--fs-cap); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
205
|
+
.tl__time b { color: var(--ink-2); font-weight: 500; }
|
|
206
|
+
.tl__body { margin-top: var(--s-1); color: var(--ink-2); font-size: var(--fs-sm); }
|
|
207
|
+
.tl__body > :first-child { margin-top: 0; }
|
|
208
|
+
.tl__text { margin: 0; color: var(--ink); white-space: pre-wrap; }
|
|
209
|
+
.tl__dim { margin: 0; color: var(--ink-3); font-style: italic; }
|
|
210
|
+
.tl__line { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--s-1) var(--s-2); margin: 0; }
|
|
211
|
+
.tl__name { color: var(--ink); font-weight: 500; }
|
|
212
|
+
.tl__name--mono { font-family: var(--font-mono); font-size: var(--fs-cap); }
|
|
213
|
+
.tl__uri, .tl__digest, .tl__id, .tl__code { font-family: var(--font-mono); font-size: var(--fs-cap); color: var(--ink-3); overflow-wrap: anywhere; }
|
|
214
|
+
.tl__code { color: var(--bad); font-weight: 500; }
|
|
215
|
+
.tl__errmsg { color: var(--ink-2); }
|
|
216
|
+
.tl__meta { margin: 0; color: var(--ink-3); font-size: var(--fs-cap); }
|
|
217
|
+
.tl__meta--row { display: flex; flex-wrap: wrap; gap: var(--s-1) var(--s-3); }
|
|
218
|
+
.tl__mode { color: var(--ink-2); font-weight: 500; }
|
|
219
|
+
.tl__query { margin: var(--s-2) 0 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-sm); background: var(--wash); color: var(--ink); font-size: var(--fs-sm); }
|
|
220
|
+
.tl__abstain { display: grid; gap: var(--s-2); margin-top: var(--s-2); padding: var(--s-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); }
|
|
221
|
+
.tl__abstain-head { display: flex; flex-wrap: wrap; gap: var(--s-2); }
|
|
222
|
+
.tl__hint { margin: 0; color: var(--ink-2); }
|
|
223
|
+
.tl__save { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); }
|
|
224
|
+
.tl__save .btn[disabled] { cursor: default; color: var(--ink-2); }
|
|
225
|
+
.tl__save .btn[data-save-eval="saved"] { color: var(--ok); }
|
|
226
|
+
.tl__err { color: var(--bad); font-size: var(--fs-cap); }
|
|
227
|
+
.foldbtn { margin-top: var(--s-1); padding: 0; border: 0; background: none; color: var(--accent); font-size: var(--fs-cap); font-weight: 500; cursor: pointer; }
|
|
228
|
+
.foldbtn:hover { color: var(--accent-2); }
|
|
229
|
+
.cands { display: grid; gap: var(--s-1); list-style: none; margin: var(--s-2) 0 0; padding: 0; }
|
|
230
|
+
.cands__none { margin: var(--s-2) 0 0; color: var(--ink-3); font-size: var(--fs-cap); }
|
|
231
|
+
.cands__legend { margin: var(--s-2) 0 0; color: var(--ink-3); font-size: var(--fs-cap); }
|
|
232
|
+
.cands__legend + .cands { margin-top: var(--s-1); }
|
|
233
|
+
.cand { display: grid; grid-template-columns: var(--s-5) minmax(0, 11rem) auto minmax(4rem, 1fr) 2.6em 4.6em var(--s-5); grid-template-areas: "rank name inv bar score cov pick" "rank desc desc desc desc desc desc"; align-items: center; column-gap: var(--s-2); padding: var(--s-2); border-radius: var(--r-sm); font-size: var(--fs-sm); }
|
|
234
|
+
.cand--chosen { background: var(--wash); }
|
|
235
|
+
.cand__rank { grid-area: rank; align-self: start; color: var(--ink-3); font-size: var(--fs-cap); line-height: 1.6; font-variant-numeric: tabular-nums; text-align: right; }
|
|
236
|
+
.cand__name { grid-area: name; display: flex; align-items: baseline; gap: var(--s-1); min-width: 0; color: var(--ink); font-weight: 500; }
|
|
237
|
+
.cand__nm { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
238
|
+
.cand__root { flex: none; color: var(--ink-3); font: 500 var(--fs-micro) / 1 var(--font-mono); }
|
|
239
|
+
.cand__cov { grid-area: cov; color: var(--ink-3); font-size: var(--fs-cap); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
240
|
+
.cand__inv { grid-area: inv; display: inline-flex; align-items: center; height: 18px; padding: 0 var(--s-1); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface-2); color: var(--ink-2); font: 600 var(--fs-micro) / 1 var(--font-mono); letter-spacing: 0.02em; text-transform: uppercase; }
|
|
241
|
+
.cand__bar { grid-area: bar; display: block; height: 6px; border-radius: var(--r-full); background: var(--wash-2); overflow: hidden; }
|
|
242
|
+
.cand__fill { display: block; height: 100%; border-radius: inherit; background: color-mix(in srgb, var(--ink) 35%, transparent); }
|
|
243
|
+
.cand--chosen .cand__fill { background: var(--ok); }
|
|
244
|
+
.cand__score { grid-area: score; color: var(--ink); font-size: var(--fs-cap); font-weight: 500; font-variant-numeric: tabular-nums; text-align: right; }
|
|
245
|
+
.cand__pick { grid-area: pick; display: grid; place-items: center; width: var(--s-5); height: var(--s-5); color: var(--ok); }
|
|
246
|
+
.cand__desc { grid-area: desc; color: var(--ink-3); font-size: var(--fs-cap); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
247
|
+
.cand__matched { color: var(--ink-2); }
|
|
248
|
+
@media (max-width: 639.98px) {
|
|
249
|
+
.trace__head, .tl__card { padding: var(--s-4); }
|
|
250
|
+
.trace__meta { gap: var(--s-3) var(--s-5); }
|
|
251
|
+
.tl__time { flex-basis: 100%; margin-inline-start: 0; }
|
|
252
|
+
.cand { grid-template-columns: var(--s-5) minmax(0, 1fr) auto 2.6em var(--s-5); grid-template-areas: "rank name inv score pick" "rank bar bar cov cov" "rank desc desc desc desc"; row-gap: var(--s-1); }
|
|
253
|
+
.cand__cov { text-align: right; }
|
|
254
|
+
.cand__desc { white-space: normal; }
|
|
255
|
+
}
|
|
256
|
+
`;function Hs(){let[e,t]=F(()=>ft(location.hash));B(()=>{let r=()=>t(ft(location.hash));return addEventListener("hashchange",r),()=>removeEventListener("hashchange",r)},[]);let n=dn(r=>{location.hash=X(r)},[]);return[e,n]}function Ns(){let[e,t]=F({state:"connecting",seq:0});return B(()=>O.events({onState:n=>t(r=>r.state===n?r:{...r,state:n}),onSession:n=>t(r=>({...r,seq:r.seq+1,last:n}))}),[]),e}var Ps={connecting:"connecting",live:"live",offline:"offline",fixtures:"fixtures"},cr=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1});function Bs(e){let t=[];for(let n of Le){let r=e[n];if(r!==void 0)switch(n){case"from":t.push({key:n,label:"from",value:cr.format(r)});break;case"to":t.push({key:n,label:"to",value:cr.format(r)});break;case"runtime":t.push({key:n,label:"runtime",value:e.runtime.map(s=>G[s]).join(", ")});break;case"skill":t.push({key:n,label:"skill",value:e.skill.map(Y).join(", ")});break;case"state":t.push({key:n,label:"state",value:e.state.map(s=>V[s]).join(", ")});break;case"dow":t.push({key:n,label:"day",value:J[r]??String(r)});break;case"hour":{let s=e.hourSpan??1;t.push({key:n,label:"hour",value:`${String(r).padStart(2,"0")}:00-${String((r+s)%24).padStart(2,"0")}:00`});break}case"hourSpan":break;case"q":t.push({key:n,label:"search",value:String(r)});break}}return t}function Us({route:e,navigate:t}){let n=Bs(e.filter);return n.length?o("div",{class:"filters","aria-label":"Active filters",children:[n.map(r=>o("span",{class:"chip",children:[o("span",{class:"chip__k",children:r.label}),o("span",{class:"chip__v",title:r.value,children:r.value}),o("button",{type:"button",class:"chip__x","aria-label":`Remove ${r.label} filter`,onClick:()=>t({...e,filter:_n(e.filter,r.key)}),children:"\xD7"})]},r.key)),n.length>1&&o("button",{type:"button",class:"btn",onClick:()=>t({...e,filter:{}}),children:"Clear"})]}):null}var Os=[{view:"sessions",label:"Sessions"},{view:"flow",label:"Flow"},{view:"heatmap",label:"Heatmap"}];function Ws(){let[e,t]=Hs(),n=Ns(),r=e.view==="trace"?"sessions":e.view,s={route:e,navigate:t,live:n};return o(U,{children:[o("header",{class:"top",children:o("div",{class:"wrap",children:[o("div",{class:"top__row",children:[o("a",{class:"brand",href:X({view:"sessions",filter:e.filter}),children:"gisool"}),o("span",{class:`live live--${n.state}`,role:"status","aria-live":"polite",children:[o("span",{class:"live__dot","aria-hidden":"true"}),Ps[n.state]]}),o(Us,{route:e,navigate:t})]}),o("nav",{class:"tabs","aria-label":"Views",children:Os.map(a=>o("a",{class:"tab",href:X({view:a.view,filter:e.filter}),"aria-current":r===a.view?"page":void 0,children:a.label},a.view))})]})}),o("main",{class:"page wrap",children:[e.view==="sessions"&&o(Jn,{...s}),e.view==="trace"&&o(lr,{...s}),e.view==="flow"&&o($n,{...s}),e.view==="heatmap"&&o(Gn,{...s})]})]})}var ur=document.getElementById("app");ur&&Jt(o(Ws,{}),ur);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var s="Deterministic fixtures for `?fixtures=1` (40 sessions), `?fixtures=12` (12 sessions), `?fixtures=empty` (no events). Generated for visual work; not real data.",a={attributionRate:{"claude-code":1,codex:.95,gemini:0,cursor:0,omo:0,gajae:1,openclaw:0,unknown:0},abstainRate:.16,unusedSkills:["skill://local/agents/calendar-brief/SKILL.md"],lastEventTs:1791803932125,lastEventByRuntime:{codex:1791803932125,gajae:1791780277431,"claude-code":1791187883789},ingest:{accepted:412,rejected:3,dropped:1,lastError:{ts:1791796732125,code:"payload_too_large"}}},o={attributionRate:{"claude-code":0,codex:0,gemini:0,cursor:0,omo:0,gajae:0,openclaw:0,unknown:0},abstainRate:0,unusedSkills:["skill://local/agents/pr-review-ko/SKILL.md","skill://local/agents/api-contract/SKILL.md","skill://local/agents/db-migration/SKILL.md","skill://local/agents/status-brief/SKILL.md","skill://local/agents/meeting-notes/SKILL.md","skill://local/agents/terraform-r2/SKILL.md","skill://local/agents/deploy-checklist/SKILL.md","skill://local/agents/calendar-brief/SKILL.md"],lastEventByRuntime:{},ingest:{accepted:0,rejected:2,dropped:0,lastError:{ts:179186004e4,code:"unauthorized"}}},i=[{uri:"skill://local/agents/pr-review-ko/SKILL.md",rootId:"agents",dir:"pr-review-ko",name:"pr-review-ko",description:"Reviews a pull request and writes Korean review comments with risk notes.",tags:["review","git"],whenToUse:"Use when the task is review-related.",examples:["\uC774 PR \uB9AC\uBDF0\uD574\uC918","review this diff"],aliasesKo:["PR \uB9AC\uBDF0","\uCF54\uB4DC\uB9AC\uBDF0"],invocation:"automatic",bodyHead:`# pr-review-ko
|
|
2
|
+
|
|
3
|
+
Reviews a pull request and writes Korean review comments with risk notes.`,digest:"662e711c4c69252f",manifestDigest:"0ecb449f581a71ca",resources:[{uri:"skill://local/agents/pr-review-ko/references/checklist.md",digest:"81fa30f437f17957",size:900}],mtimeMs:1791774e6},{uri:"skill://local/agents/api-contract/SKILL.md",rootId:"agents",dir:"api-contract",name:"api-contract",description:"Keeps HTTP API request/response contracts in sync with handlers and docs.",tags:["api","backend"],whenToUse:"Use when the task is api-related.",examples:["API \uC751\uB2F5\uC5D0 \uD544\uB4DC \uCD94\uAC00"],aliasesKo:["API \uACC4\uC57D","\uC751\uB2F5 \uC2A4\uD0A4\uB9C8"],invocation:"automatic",bodyHead:`# api-contract
|
|
4
|
+
|
|
5
|
+
Keeps HTTP API request/response contracts in sync with handlers and docs.`,digest:"91a04d47661b90ac",manifestDigest:"9b130c1b727a7795",resources:[],mtimeMs:17916876e5},{uri:"skill://local/agents/db-migration/SKILL.md",rootId:"agents",dir:"db-migration",name:"db-migration",description:"Writes reversible SQL migrations with backfill and rollback steps.",tags:["db","sql"],whenToUse:"Use when the task is db-related.",examples:["\uD14C\uC774\uBE14\uC5D0 \uCEEC\uB7FC \uCD94\uAC00"],aliasesKo:["\uB9C8\uC774\uADF8\uB808\uC774\uC158","\uCEEC\uB7FC \uCD94\uAC00"],invocation:"automatic",bodyHead:`# db-migration
|
|
6
|
+
|
|
7
|
+
Writes reversible SQL migrations with backfill and rollback steps.`,digest:"f74ca9c53a224b53",manifestDigest:"e69fd1dae449ae8b",resources:[{uri:"skill://local/agents/db-migration/references/checklist.md",digest:"d10528720a401b33",size:974}],mtimeMs:17916012e5},{uri:"skill://local/agents/status-brief/SKILL.md",rootId:"agents",dir:"status-brief",name:"status-brief",description:"Turns recent work into a short status briefing for a team channel.",tags:["docs","writing"],whenToUse:"Use when the task is docs-related.",examples:["\uC774\uBC88 \uC8FC \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D"],aliasesKo:["\uC0C1\uD669 \uACF5\uC720","\uC9C4\uD589 \uC0C1\uD669"],invocation:"automatic",bodyHead:`# status-brief
|
|
8
|
+
|
|
9
|
+
Turns recent work into a short status briefing for a team channel.`,digest:"949e2fd10a565ef4",manifestDigest:"a85242479b3e3a17",resources:[],mtimeMs:17915148e5},{uri:"skill://local/agents/meeting-notes/SKILL.md",rootId:"agents",dir:"meeting-notes",name:"meeting-notes",description:"Drafts meeting prep and follow-up notes from a short agenda.",tags:["docs","meeting"],whenToUse:"Use when the task is docs-related.",examples:["\uBBF8\uD305 \uC815\uB9AC\uD574\uC11C \uACF5\uC720"],aliasesKo:["\uD68C\uC758\uB85D","\uBBF8\uD305 \uC815\uB9AC"],invocation:"automatic",bodyHead:`# meeting-notes
|
|
10
|
+
|
|
11
|
+
Drafts meeting prep and follow-up notes from a short agenda.`,digest:"ee64ca46a7a4829d",manifestDigest:"6be86d6130aca702",resources:[{uri:"skill://local/agents/meeting-notes/references/checklist.md",digest:"5a0596b6a199b1b7",size:1048}],mtimeMs:17914284e5},{uri:"skill://local/agents/terraform-r2/SKILL.md",rootId:"agents",dir:"terraform-r2",name:"terraform-r2",description:"Provisions Cloudflare R2 buckets and bindings with Terraform.",tags:["infra","terraform"],whenToUse:"Use when the task is infra-related.",examples:["Terraform\uC73C\uB85C \uBC84\uD0B7 \uB9CC\uB4E4\uAE30"],aliasesKo:["R2 \uBC84\uD0B7","\uD14C\uB77C\uD3FC"],invocation:"automatic",bodyHead:`# terraform-r2
|
|
12
|
+
|
|
13
|
+
Provisions Cloudflare R2 buckets and bindings with Terraform.`,digest:"5c957d7671d13399",manifestDigest:"2fb203968f806b20",resources:[],mtimeMs:1791342e6},{uri:"skill://local/agents/deploy-checklist/SKILL.md",rootId:"agents",dir:"deploy-checklist",name:"deploy-checklist",description:"Runs the staging and production deploy checklist and records receipts.",tags:["infra","deploy"],whenToUse:"Use when the task is infra-related.",examples:["\uBC30\uD3EC \uC804 \uC810\uAC80"],aliasesKo:["\uBC30\uD3EC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8"],invocation:"automatic",bodyHead:`# deploy-checklist
|
|
14
|
+
|
|
15
|
+
Runs the staging and production deploy checklist and records receipts.`,digest:"f22b656ebae2411f",manifestDigest:"27bff77a3705e3f1",resources:[{uri:"skill://local/agents/deploy-checklist/references/checklist.md",digest:"f272c78d9517e88c",size:1122}],mtimeMs:17912556e5},{uri:"skill://local/agents/calendar-brief/SKILL.md",rootId:"agents",dir:"calendar-brief",name:"calendar-brief",description:"Summarizes tomorrow's calendar into a short brief.",tags:["docs","calendar"],whenToUse:"Use when the task is docs-related.",examples:["\uB0B4\uC77C \uC77C\uC815 \uC815\uB9AC"],aliasesKo:["\uC77C\uC815 \uBE0C\uB9AC\uD551"],invocation:"automatic",bodyHead:`# calendar-brief
|
|
16
|
+
|
|
17
|
+
Summarizes tomorrow's calendar into a short brief.`,digest:"be8fe6568563b4b5",manifestDigest:"3545f618d6599c32",resources:[],mtimeMs:17911692e5}],r=[{id:"ses_770bad4531",runtime:"codex",startedAt:1791802312155,endedAt:1791803932125,firstPrompt:"Review the auth refactor diff and flag anything that changes session expiry",skills:["skill://local/agents/pr-review-ko/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_1fe658341a",runtime:"gajae",startedAt:1791779866963,endedAt:1791780277431,firstPrompt:"PR #212 \uB9AC\uBDF0\uD558\uACE0 \uB9AC\uC2A4\uD06C \uC815\uB9AC\uD574\uC918",skills:["skill://local/agents/pr-review-ko/SKILL.md"],state:"loaded",attribution:"trace_handle"},{id:"ses_4062597243",runtime:"gajae",startedAt:1791708135397,endedAt:1791709398709,firstPrompt:"\uC774\uBC88 \uC8FC \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D\uD574\uC11C status \uBE0C\uB9AC\uD551 \uC368\uC918",skills:["skill://local/agents/meeting-notes/SKILL.md"],state:"loaded",attribution:"trace_handle"},{id:"unattributed",runtime:"codex",startedAt:1791700762230,skills:["skill://local/agents/pr-review-ko/SKILL.md"],state:"loaded",attribution:"none",attributionReason:"ambiguous"},{id:"ses_50dc2cf1e4",runtime:"codex",startedAt:1791700102230,endedAt:1791701471616,firstPrompt:"\uB0B4\uC77C \uC624\uC804 \uBBF8\uD305 \uC815\uB9AC\uD574\uC11C \uD300\uC5D0 \uACF5\uC720\uD560 \uCD08\uC548 \uB9CC\uB4E4\uC5B4\uC918",skills:["skill://local/agents/meeting-notes/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_0f3e334360",runtime:"gajae",startedAt:1791547908239,endedAt:1791549883589,firstPrompt:"https://github.com/changeroa/gisul/pull/212/files#diff-9f1a3c0b2d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0 \uB9AC\uBDF0",skills:["skill://local/agents/meeting-notes/SKILL.md"],state:"loaded",attribution:"trace_handle"},{id:"ses_24439de297",runtime:"gajae",startedAt:1791536827555,endedAt:1791537590507,firstPrompt:"\uC8FC\uBB38 \uD14C\uC774\uBE14\uC5D0 \uC0C1\uD0DC \uCEEC\uB7FC \uCD94\uAC00\uD558\uACE0 API \uC751\uB2F5\uC5D0\uB3C4 \uBC18\uC601",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"trace_handle"},{id:"ses_0673bfc400",runtime:"codex",startedAt:1791510567915,endedAt:1791511841798,firstPrompt:"\uC8FC\uBB38 \uC0C1\uD0DC \uCEEC\uB7FC\uC744 \uCD94\uAC00\uD558\uBA74\uC11C \uAE30\uC874 \uC8FC\uBB38 \uB370\uC774\uD130\uB294 \uBAA8\uB450 'pending'\uC73C\uB85C \uBC31\uD544\uD558\uACE0, API \uC751\uB2F5 \uC2A4\uD0A4\uB9C8\uC640 OpenAPI \uBB38\uC11C, \uADF8\uB9AC\uACE0 \uD504\uB860\uD2B8\uC5D4\uB4DC \uD0C0\uC785 \uC815\uC758\uAE4C\uC9C0 \uD55C \uBC88\uC5D0 \uB9DE\uCDB0\uC918. \uB9C8\uC774\uADF8\uB808\uC774\uC158\uC740 \uB864\uBC31 \uAC00\uB2A5\uD574\uC57C \uD558\uACE0 \uBC30\uD3EC \uC911\uC5D0\uB3C4 \uC77D\uAE30 \uC694\uCCAD\uC774 \uC2E4\uD328\uD558\uBA74 \uC548 \uB3FC.",skills:["skill://local/agents/meeting-notes/SKILL.md","skill://local/agents/status-brief/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_e6e78509e2",runtime:"codex",startedAt:1791459036088,endedAt:1791460927700,firstPrompt:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",skills:["skill://local/agents/status-brief/SKILL.md"],state:"exposed_only",attribution:"runtime_id"},{id:"ses_403828dea4",runtime:"gajae",startedAt:1791440044550,endedAt:1791441727042,skills:[],state:"aborted",attribution:"window"},{id:"ses_784d05179e",runtime:"gajae",startedAt:1791365279717,endedAt:1791365865171,firstPrompt:"staging \uBC30\uD3EC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB3CC\uB824\uC918",skills:["skill://local/agents/terraform-r2/SKILL.md"],state:"exposed_only",attribution:"trace_handle"},{id:"ses_4cb9ff4eb1",runtime:"codex",startedAt:1791355664429,endedAt:1791357074941,firstPrompt:"\uC774 PR \uB9AC\uBDF0\uD574\uC918, \uD55C\uAD6D\uC5B4\uB85C \uCF54\uBA58\uD2B8",skills:["skill://local/agents/pr-review-ko/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_b143443884",runtime:"codex",startedAt:1791280190181,endedAt:1791281960858,firstPrompt:"\uC774 \uBCC0\uACBD\uC0AC\uD56D \uCF54\uB4DC\uB9AC\uBDF0 \uD574\uC918. \uD14C\uC2A4\uD2B8 \uB204\uB77D \uC788\uB294\uC9C0\uB3C4 \uBD10\uC918",skills:[],state:"not_used",attribution:"vendor_meta"},{id:"ses_6b52ae4f2b",runtime:"codex",startedAt:1791252605864,endedAt:1791253905249,firstPrompt:"\uB9B4\uB9AC\uC988 \uB178\uD2B8 \uCD08\uC548 \uC791\uC131\uD574\uC918",skills:["skill://local/agents/meeting-notes/SKILL.md","skill://local/agents/status-brief/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_ec401655c2",runtime:"claude-code",startedAt:1791185662397,endedAt:1791187883789,firstPrompt:"Write a migration that adds an index on orders(status) and backfills the column",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_d7e6d472e7",runtime:"claude-code",startedAt:1791173734458,endedAt:1791174578523,firstPrompt:"\uC774\uBC88 \uC8FC \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D\uD574\uC11C status \uBE0C\uB9AC\uD551 \uC368\uC918",skills:[],state:"no_match",attribution:"trace_handle"},{id:"ses_a4c604eb0f",runtime:"claude-code",startedAt:1790926834981,endedAt:1790927279548,firstPrompt:"Explain how the hook forwarder handles timeouts and retries",skills:[],state:"no_match",attribution:"runtime_id"},{id:"ses_149b077f7d",runtime:"claude-code",startedAt:1790906028007,endedAt:1790907504361,firstPrompt:"Summarize the deployment doc and list the open risks",skills:[],state:"aborted",attribution:"runtime_id"},{id:"ses_fbee7e136c",runtime:"codex",startedAt:1790852853387,endedAt:1790854155572,firstPrompt:"DB \uC870\uD68C\uAC00 \uB108\uBB34 \uB290\uB824\uC11C \uC6D0\uC778 \uC880 \uBD10\uC918",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_5c8ae46af5",runtime:"codex",startedAt:1790818284500,endedAt:1790818967566,firstPrompt:"\uC774 \uBCC0\uACBD\uC0AC\uD56D \uCF54\uB4DC\uB9AC\uBDF0 \uD574\uC918. \uD14C\uC2A4\uD2B8 \uB204\uB77D \uC788\uB294\uC9C0\uB3C4 \uBD10\uC918",skills:[],state:"not_used",attribution:"vendor_meta"},{id:"ses_bb85bd8f72",runtime:"codex",startedAt:1790757635691,endedAt:1790759191653,firstPrompt:"Terraform\uC73C\uB85C R2 \uBC84\uD0B7 \uB9CC\uB4E4\uC5B4\uC918",skills:[],state:"no_match",attribution:"runtime_id"},{id:"ses_f1cc46fbd7",runtime:"claude-code",startedAt:1790670367214,endedAt:1790671465842,firstPrompt:"\uC8FC\uBB38 \uD14C\uC774\uBE14\uC5D0 \uC0C1\uD0DC \uCEEC\uB7FC \uCD94\uAC00\uD558\uACE0 API \uC751\uB2F5\uC5D0\uB3C4 \uBC18\uC601",skills:["skill://local/agents/db-migration/SKILL.md"],state:"exposed_only",attribution:"runtime_id"},{id:"ses_453285f7a8",runtime:"claude-code",startedAt:1790652394408,endedAt:1790655029144,firstPrompt:"PR #212 \uB9AC\uBDF0\uD558\uACE0 \uB9AC\uC2A4\uD06C \uC815\uB9AC\uD574\uC918",skills:["skill://local/agents/pr-review-ko/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_13444120fd",runtime:"claude-code",startedAt:1790644907370,endedAt:1790645724614,firstPrompt:"\uB9B4\uB9AC\uC988 \uB178\uD2B8 \uCD08\uC548 \uC791\uC131\uD574\uC918",skills:["skill://local/agents/meeting-notes/SKILL.md"],state:"loaded",attribution:"trace_handle"},{id:"ses_6885a11728",runtime:"codex",startedAt:1790575143468,endedAt:1790577242922,firstPrompt:"\uB0B4\uC77C \uC624\uC804 \uBBF8\uD305 \uC815\uB9AC\uD574\uC11C \uD300\uC5D0 \uACF5\uC720\uD560 \uCD08\uC548 \uB9CC\uB4E4\uC5B4\uC918",skills:["skill://local/agents/status-brief/SKILL.md"],state:"exposed_only",attribution:"vendor_meta"},{id:"ses_4445eb2419",runtime:"gajae",startedAt:1790563241893,endedAt:1790563914526,firstPrompt:"DB \uC870\uD68C\uAC00 \uB108\uBB34 \uB290\uB824\uC11C \uC6D0\uC778 \uC880 \uBD10\uC918",skills:["skill://local/agents/db-migration/SKILL.md"],state:"exposed_only",attribution:"trace_handle"},{id:"ses_161ef32fa8",runtime:"codex",startedAt:1790427018548,endedAt:1790427817251,firstPrompt:"Summarize the deployment doc and list the open risks",skills:["skill://local/agents/meeting-notes/SKILL.md","skill://local/agents/status-brief/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_0f5aed7e3b",runtime:"claude-code",startedAt:1790324358656,endedAt:1790326252436,firstPrompt:"DB \uC870\uD68C\uAC00 \uB108\uBB34 \uB290\uB824\uC11C \uC6D0\uC778 \uC880 \uBD10\uC918",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_ac514fa3a9",runtime:"claude-code",startedAt:1790240018747,endedAt:1790242557112,firstPrompt:"Write a migration that adds an index on orders(status) and backfills the column",skills:["skill://local/agents/db-migration/SKILL.md","skill://local/agents/api-contract/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_9cc9814963",runtime:"claude-code",startedAt:1790209111983,endedAt:1790209936487,firstPrompt:"\uC774\uBC88 \uC8FC \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D\uD574\uC11C status \uBE0C\uB9AC\uD551 \uC368\uC918",skills:["skill://local/agents/status-brief/SKILL.md"],state:"exposed_only",attribution:"runtime_id"},{id:"ses_4eee4d5d2a",runtime:"codex",startedAt:1790139736444,endedAt:1790141882919,firstPrompt:"\uC138\uC158 \uD2B8\uB808\uC774\uC2A4 \uD654\uBA74\uC5D0 \uB4E4\uC5B4\uAC08 \uB370\uC774\uD130 \uAD6C\uC870 \uC124\uACC4\uD574\uC918",skills:[],state:"no_match",attribution:"vendor_meta"},{id:"ses_9c562959f6",runtime:"gajae",startedAt:1790064715443,endedAt:1790065692745,firstPrompt:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",skills:[],state:"no_match",attribution:"window"},{id:"ses_e1777b641f",runtime:"codex",startedAt:1789995822654,endedAt:1789998102760,firstPrompt:"users API\uC5D0 \uCEE4\uC11C \uAE30\uBC18 \uD398\uC774\uC9C0\uB124\uC774\uC158 \uCD94\uAC00",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_e3e1babe95",runtime:"codex",startedAt:1789988011694,endedAt:1789988690957,firstPrompt:"staging \uBC30\uD3EC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB3CC\uB824\uC918",skills:["skill://local/agents/terraform-r2/SKILL.md","skill://local/agents/deploy-checklist/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_359f478748",runtime:"claude-code",startedAt:1789965165028,endedAt:1789965534845,firstPrompt:"users API\uC5D0 \uCEE4\uC11C \uAE30\uBC18 \uD398\uC774\uC9C0\uB124\uC774\uC158 \uCD94\uAC00",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"runtime_id"},{id:"ses_5349b12304",runtime:"codex",startedAt:1789953556927,endedAt:1789955692e3,firstPrompt:"Set up a GitHub Actions workflow that runs the test suite on pull requests",skills:["skill://local/agents/terraform-r2/SKILL.md","skill://local/agents/deploy-checklist/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_85deb86473",runtime:"claude-code",startedAt:1789725905735,endedAt:1789727794984,firstPrompt:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",skills:[],state:"no_match",attribution:"trace_handle"},{id:"ses_ec34df6505",runtime:"gajae",startedAt:1789636685863,endedAt:1789638861315,firstPrompt:"DB \uC870\uD68C\uAC00 \uB108\uBB34 \uB290\uB824\uC11C \uC6D0\uC778 \uC880 \uBD10\uC918",skills:[],state:"not_used",attribution:"trace_handle"},{id:"ses_c51fa4cdc4",runtime:"codex",startedAt:1789627907572,endedAt:1789630289429,firstPrompt:"staging \uBC30\uD3EC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB3CC\uB824\uC918",skills:["skill://local/agents/terraform-r2/SKILL.md"],state:"loaded",attribution:"vendor_meta"},{id:"ses_cdeb057180",runtime:"codex",startedAt:1789616991909,endedAt:1789619151703,firstPrompt:"\uC8FC\uBB38 \uD14C\uC774\uBE14\uC5D0 \uC0C1\uD0DC \uCEEC\uB7FC \uCD94\uAC00\uD558\uACE0 API \uC751\uB2F5\uC5D0\uB3C4 \uBC18\uC601",skills:["skill://local/agents/db-migration/SKILL.md"],state:"loaded",attribution:"vendor_meta"}],n=["ses_770bad4531","ses_1fe658341a","ses_4062597243","unattributed","ses_50dc2cf1e4","ses_0f3e334360","ses_24439de297","ses_0673bfc400","ses_e6e78509e2","ses_403828dea4","ses_784d05179e","ses_4cb9ff4eb1"],d={ses_ac514fa3a9:[{ts:1790240018747,kind:"session_start",summary:"Session started",detail:{kind:"session_start"}},{ts:1790240020747,kind:"prompt",summary:"Write a migration that adds an index on orders(status) and backfills the column",detail:{kind:"prompt",text:"Write a migration that adds an index on orders(status) and backfills the column",textLength:79}},{ts:1790240021147,kind:"search",summary:"search_skills: 3 candidates, 2 chosen",detail:{kind:"search",traceId:"tr_907d051e",chosen:["skill://local/agents/db-migration/SKILL.md","skill://local/agents/api-contract/SKILL.md"],query:"Write a migration that adds an index on orders(status) and backfills the column",mode:"automatic",candidates:[{uri:"skill://local/agents/db-migration/SKILL.md",name:"db-migration",description:"Writes reversible SQL migrations with backfill and rollback steps.",score:.82,rank:1,invocation:"automatic",digest:"3ded922ddd04",matched:["\uCEEC\uB7FC \uCD94\uAC00","\uD14C\uC774\uBE14"]},{uri:"skill://local/agents/api-contract/SKILL.md",name:"api-contract",description:"Keeps HTTP API request/response contracts in sync with handlers and docs.",score:.77,rank:2,invocation:"automatic",digest:"5ca4fda5d5ce",matched:["API \uC751\uB2F5"]},{uri:"skill://local/agents/pr-review-ko/SKILL.md",name:"pr-review-ko",description:"Reviews a pull request and writes Korean review comments with risk notes.",score:.31,rank:3,invocation:"automatic",digest:"aca459effbb0",matched:["\uBC18\uC601"]}],elapsedMs:12,total:3}},{ts:1790240023747,kind:"load",summary:"Loaded db-migration",detail:{kind:"load",uri:"skill://local/agents/db-migration/SKILL.md",loadId:"ld_45601c03",manifestDigest:"3011f937739e79c8"}},{ts:1790240024047,kind:"load",summary:"Loaded api-contract",detail:{kind:"load",uri:"skill://local/agents/api-contract/SKILL.md",loadId:"ld_cbd8dbca",manifestDigest:"915a16e3682db4af"}},{ts:1790240066747,kind:"read_file",summary:"Read references/rollback.md",detail:{kind:"read_file",skillUri:"skill://local/agents/db-migration/SKILL.md",uri:"skill://local/agents/db-migration/references/rollback.md",bytes:2814}},{ts:1790240079747,kind:"read_file",summary:"Read checklist.md",detail:{kind:"read_file",skillUri:"skill://local/agents/api-contract/SKILL.md",uri:"skill://local/agents/api-contract/checklist.md",bytes:1203}},{ts:1790240208747,kind:"native_skill",summary:"Native skill: commit",detail:{kind:"native_skill",name:"commit",via:"tool"}},{ts:1790240348747,kind:"error",summary:"read_skill_file failed: resource_not_found",detail:{kind:"error",code:"resource_not_found",message:"skill://local/agents/db-migration/references/seed.sql is not in the manifest"}},{ts:1790242557112,kind:"session_end",summary:"Session ended",detail:{kind:"session_end"}}],ses_bb85bd8f72:[{ts:1790757635691,kind:"session_start",summary:"Session started",detail:{kind:"session_start"}},{ts:1790757637191,kind:"prompt",summary:"Terraform\uC73C\uB85C R2 \uBC84\uD0B7 \uB9CC\uB4E4\uC5B4\uC918",detail:{kind:"prompt",text:"Terraform\uC73C\uB85C R2 \uBC84\uD0B7 \uB9CC\uB4E4\uC5B4\uC918",textLength:22}},{ts:1790757637591,kind:"search",summary:"search_skills: abstained (no_overlap)",detail:{kind:"search",traceId:"tr_c03785ef",chosen:[],query:"Terraform\uC73C\uB85C R2 \uBC84\uD0B7 \uB9CC\uB4E4\uC5B4\uC918",mode:"automatic",candidates:[],abstained:{reason:"no_overlap",hint:"No skill mentions Terraform or R2; add aliases or a new skill."},elapsedMs:4,total:0}},{ts:1790759191653,kind:"session_end",summary:"Session ended",detail:{kind:"session_end"}}],ses_e6e78509e2:[{ts:1791459036088,kind:"session_start",summary:"Session started",detail:{kind:"session_start"}},{ts:1791459037088,kind:"prompt",summary:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",detail:{kind:"prompt",text:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",textLength:20}},{ts:1791459037388,kind:"search",summary:"search_skills: 2 candidates, none chosen",detail:{kind:"search",traceId:"tr_44e4b7aa",chosen:[],query:"\uC774 \uD568\uC218 \uB9AC\uD329\uD1A0\uB9C1\uD574\uC11C \uD14C\uC2A4\uD2B8 \uCD94\uAC00\uD574\uC918",mode:"automatic",candidates:[{uri:"skill://local/agents/status-brief/SKILL.md",name:"status-brief",description:"Turns recent work into a short status briefing for a team channel.",score:.44,rank:1,invocation:"automatic",digest:"2cdafef7e4aa",matched:["\uACF5\uC720"]},{uri:"skill://local/agents/meeting-notes/SKILL.md",name:"meeting-notes",description:"Drafts meeting prep and follow-up notes from a short agenda.",score:.22,rank:2,invocation:"automatic",digest:"c64da30b4d65",matched:["\uC815\uB9AC"]}],elapsedMs:9,total:2}},{ts:1791460927700,kind:"session_end",summary:"Session ended",detail:{kind:"session_end"}}],ses_b143443884:[{ts:1791280190181,kind:"session_start",summary:"Session started",detail:{kind:"session_start"}},{ts:1791280191181,kind:"prompt",summary:"\uC774 \uBCC0\uACBD\uC0AC\uD56D \uCF54\uB4DC\uB9AC\uBDF0 \uD574\uC918. \uD14C\uC2A4\uD2B8 \uB204\uB77D \uC788\uB294\uC9C0\uB3C4 \uBD10\uC918",detail:{kind:"prompt",textLength:30}},{ts:1791281960858,kind:"session_end",summary:"Session ended",detail:{kind:"session_end"}}],ses_149b077f7d:[{ts:1790906028007,kind:"session_start",summary:"Session started",detail:{kind:"session_start"}},{ts:1790906029007,kind:"prompt",summary:"Summarize the deployment doc and list the open risks",detail:{kind:"prompt",text:"Summarize the deployment doc and list the open risks",textLength:52}},{ts:1790906029407,kind:"search",summary:"search_skills: 1 candidate, 1 chosen",detail:{kind:"search",traceId:"tr_24584e23",chosen:["skill://local/agents/pr-review-ko/SKILL.md"],query:"Summarize the deployment doc and list the open risks",mode:"automatic",candidates:[{uri:"skill://local/agents/pr-review-ko/SKILL.md",name:"pr-review-ko",description:"Reviews a pull request and writes Korean review comments with risk notes.",score:.71,rank:1,invocation:"automatic",digest:"e28d51fee54a",matched:["\uB9AC\uBDF0"]}],elapsedMs:7,total:1}},{ts:1790906031007,kind:"error",summary:"load_skill aborted: client disconnected",detail:{kind:"error",code:"load_aborted",message:"client closed the MCP session before load_skill completed"}},{ts:1790907504361,kind:"session_end",summary:"Session ended",detail:{kind:"session_end"}}],unattributed:[{ts:1791700762230,kind:"search",summary:"search_skills: 1 candidate, 1 chosen (unattributed: ambiguous)",detail:{kind:"search",traceId:"tr_5e644e47",chosen:["skill://local/agents/pr-review-ko/SKILL.md"],query:"review this PR",mode:"automatic",candidates:[{uri:"skill://local/agents/pr-review-ko/SKILL.md",name:"pr-review-ko",description:"Reviews a pull request and writes Korean review comments with risk notes.",score:.66,rank:1,invocation:"automatic",digest:"f7adeae404c9",matched:["review","PR"]}],elapsedMs:6,total:1}},{ts:1791700764230,kind:"load",summary:"Loaded pr-review-ko",detail:{kind:"load",uri:"skill://local/agents/pr-review-ko/SKILL.md",loadId:"ld_451552c6",manifestDigest:"7f048bb7891e12d4"}}]},l={unit:"first_load",columns:["task_type","skill","state"],nodes:[{id:"t:review",column:0,label:"\uCF54\uB4DC \uB9AC\uBDF0",count:7},{id:"s:pr-review-ko",column:1,label:"pr-review-ko",count:5},{id:"st:loaded",column:2,label:"loaded",count:23},{id:"t:docs",column:0,label:"\uBB38\uC11C\xB7\uACF5\uC720",count:11},{id:"s:meeting-notes",column:1,label:"meeting-notes",count:7},{id:"t:dbapi",column:0,label:"DB\xB7API \uBCC0\uACBD",count:12},{id:"s:db-migration",column:1,label:"db-migration",count:10},{id:"t:other",column:0,label:"\uAE30\uD0C0",count:5},{id:"s:status-brief",column:1,label:"status-brief",count:3},{id:"st:exposed_only",column:2,label:"exposed_only",count:6},{id:"s:none",column:1,label:"(no skill)",count:11},{id:"st:aborted",column:2,label:"aborted",count:2},{id:"s:terraform-r2",column:1,label:"terraform-r2",count:4},{id:"st:not_used",column:2,label:"not_used",count:3},{id:"st:no_match",column:2,label:"no_match",count:6},{id:"t:other-group",column:0,label:"Other",count:5,other:!0}],links:[{source:"t:review",target:"s:pr-review-ko",count:5,state:"loaded"},{source:"s:pr-review-ko",target:"st:loaded",count:5,state:"loaded"},{source:"t:docs",target:"s:meeting-notes",count:7,state:"loaded"},{source:"s:meeting-notes",target:"st:loaded",count:7,state:"loaded"},{source:"t:dbapi",target:"s:db-migration",count:8,state:"loaded"},{source:"s:db-migration",target:"st:loaded",count:8,state:"loaded"},{source:"t:other",target:"s:status-brief",count:1,state:"exposed_only"},{source:"s:status-brief",target:"st:exposed_only",count:3,state:"exposed_only"},{source:"t:dbapi",target:"s:none",count:1,state:"aborted"},{source:"s:none",target:"st:aborted",count:2,state:"aborted"},{source:"t:other-group",target:"s:terraform-r2",count:1,state:"exposed_only"},{source:"s:terraform-r2",target:"st:exposed_only",count:1,state:"exposed_only"},{source:"t:review",target:"s:none",count:2,state:"not_used"},{source:"s:none",target:"st:not_used",count:3,state:"not_used"},{source:"t:docs",target:"s:none",count:1,state:"no_match"},{source:"s:none",target:"st:no_match",count:6,state:"no_match"},{source:"t:other",target:"s:none",count:4,state:"no_match"},{source:"t:docs",target:"s:none",count:1,state:"aborted"},{source:"t:other-group",target:"s:none",count:1,state:"no_match"},{source:"t:dbapi",target:"s:db-migration",count:2,state:"exposed_only"},{source:"s:db-migration",target:"st:exposed_only",count:2,state:"exposed_only"},{source:"t:docs",target:"s:status-brief",count:2,state:"exposed_only"},{source:"t:other-group",target:"s:terraform-r2",count:3,state:"loaded"},{source:"s:terraform-r2",target:"st:loaded",count:3,state:"loaded"},{source:"t:dbapi",target:"s:none",count:1,state:"not_used"}],sessionCount:40},c={unit:"first_load",columns:["task_type","skill","state"],nodes:[{id:"t:review",column:0,label:"\uCF54\uB4DC \uB9AC\uBDF0",count:4},{id:"s:pr-review-ko",column:1,label:"pr-review-ko",count:4},{id:"st:loaded",column:2,label:"loaded",count:9},{id:"t:docs",column:0,label:"\uBB38\uC11C\xB7\uACF5\uC720",count:4},{id:"s:meeting-notes",column:1,label:"meeting-notes",count:4},{id:"t:dbapi",column:0,label:"DB\xB7API \uBCC0\uACBD",count:2},{id:"s:db-migration",column:1,label:"db-migration",count:1},{id:"t:other",column:0,label:"\uAE30\uD0C0",count:1},{id:"s:status-brief",column:1,label:"status-brief",count:1},{id:"st:exposed_only",column:2,label:"exposed_only",count:2},{id:"s:none",column:1,label:"(no skill)",count:1},{id:"st:aborted",column:2,label:"aborted",count:1},{id:"s:terraform-r2",column:1,label:"terraform-r2",count:1},{id:"t:other-group",column:0,label:"Other",count:1,other:!0}],links:[{source:"t:review",target:"s:pr-review-ko",count:4,state:"loaded"},{source:"s:pr-review-ko",target:"st:loaded",count:4,state:"loaded"},{source:"t:docs",target:"s:meeting-notes",count:4,state:"loaded"},{source:"s:meeting-notes",target:"st:loaded",count:4,state:"loaded"},{source:"t:dbapi",target:"s:db-migration",count:1,state:"loaded"},{source:"s:db-migration",target:"st:loaded",count:1,state:"loaded"},{source:"t:other",target:"s:status-brief",count:1,state:"exposed_only"},{source:"s:status-brief",target:"st:exposed_only",count:1,state:"exposed_only"},{source:"t:dbapi",target:"s:none",count:1,state:"aborted"},{source:"s:none",target:"st:aborted",count:1,state:"aborted"},{source:"t:other-group",target:"s:terraform-r2",count:1,state:"exposed_only"},{source:"s:terraform-r2",target:"st:exposed_only",count:1,state:"exposed_only"}],sessionCount:12},u={tz:"Asia/Seoul",weekStart:1,bucketHours:1,cells:[{dow:0,hour:15,count:2},{dow:0,hour:17,count:1},{dow:1,hour:10,count:1},{dow:1,hour:11,count:1},{dow:1,hour:13,count:3},{dow:1,hour:14,count:1},{dow:1,hour:16,count:1},{dow:1,hour:19,count:2},{dow:1,hour:22,count:1},{dow:2,hour:10,count:1},{dow:2,hour:11,count:1},{dow:2,hour:12,count:1},{dow:2,hour:17,count:2},{dow:2,hour:18,count:1},{dow:3,hour:14,count:1},{dow:3,hour:15,count:1},{dow:3,hour:17,count:1},{dow:3,hour:18,count:1},{dow:4,hour:9,count:1},{dow:4,hour:10,count:1},{dow:4,hour:12,count:1},{dow:4,hour:15,count:2},{dow:4,hour:17,count:1},{dow:4,hour:18,count:1},{dow:4,hour:20,count:2},{dow:5,hour:10,count:2},{dow:5,hour:16,count:1},{dow:5,hour:17,count:1},{dow:5,hour:18,count:1},{dow:5,hour:19,count:1},{dow:5,hour:21,count:1},{dow:6,hour:21,count:1}],rowTotals:[3,10,6,4,9,7,1],colTotals:[0,0,0,0,0,0,0,0,0,1,5,2,2,3,2,5,2,6,4,3,2,2,1,0]},m={tz:"Asia/Seoul",weekStart:1,bucketHours:2,cells:[{dow:0,hour:14,count:2},{dow:0,hour:16,count:1},{dow:1,hour:12,count:1},{dow:1,hour:18,count:1},{dow:3,hour:14,count:1},{dow:3,hour:18,count:1},{dow:4,hour:14,count:1},{dow:4,hour:20,count:1},{dow:5,hour:10,count:1},{dow:5,hour:18,count:1},{dow:5,hour:20,count:1}],rowTotals:[3,2,0,2,2,3,0],colTotals:[0,0,0,0,0,1,1,4,1,3,2,0]},k={weeks:["2026-W35","2026-W36","2026-W37","2026-W38","2026-W39","2026-W40","2026-W41","2026-W42"],rows:[{uri:"skill://local/agents/pr-review-ko/SKILL.md",name:"pr-review-ko",counts:[5,6,3,4,1,5,2,2]},{uri:"skill://local/agents/db-migration/SKILL.md",name:"db-migration",counts:[2,0,2,4,6,4,2,0]},{uri:"skill://local/agents/status-brief/SKILL.md",name:"status-brief",counts:[3,3,3,1,3,2,2,0]},{uri:"skill://local/agents/meeting-notes/SKILL.md",name:"meeting-notes",counts:[3,2,1,1,2,1,5,0]},{uri:"skill://local/agents/terraform-r2/SKILL.md",name:"terraform-r2",counts:[2,0,3,4,3,2,0,0]},{uri:"skill://local/agents/deploy-checklist/SKILL.md",name:"deploy-checklist",counts:[1,1,2,3,3,2,0,0]},{uri:"skill://local/agents/api-contract/SKILL.md",name:"api-contract",counts:[0,0,1,1,3,3,0,0]}]},g={weeks:["2026-W35","2026-W36","2026-W37","2026-W38","2026-W39","2026-W40","2026-W41","2026-W42"],rows:[{uri:"skill://local/agents/pr-review-ko/SKILL.md",name:"pr-review-ko",counts:[0,0,0,0,0,0,2,2]},{uri:"skill://local/agents/meeting-notes/SKILL.md",name:"meeting-notes",counts:[0,0,0,0,0,0,4,0]},{uri:"skill://local/agents/db-migration/SKILL.md",name:"db-migration",counts:[0,0,0,0,0,0,1,0]},{uri:"skill://local/agents/status-brief/SKILL.md",name:"status-brief",counts:[0,0,0,0,0,0,1,0]}]},b={$comment:s,stats:a,statsEmpty:o,skills:i,sessions:r,sessions12:n,traces:d,flow:l,flow12:c,heatmap:u,heatmap12:m,skillWeek:k,skillWeek12:g};export{s as $comment,b as default,l as flow,c as flow12,u as heatmap,m as heatmap12,r as sessions,n as sessions12,k as skillWeek,g as skillWeek12,i as skills,a as stats,o as statsEmpty,d as traces};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={attributionRate:{"claude-code":1,codex:.95,gemini:null,cursor:null,omo:null,gajae:1,openclaw:null,unknown:null},lastEventByRuntime:{codex:1791803932125,gajae:1791780277431,"claude-code":1791187883789,gemini:179179e7},unattributed:{searches:3,loads:1}},u={attributionRate:{"claude-code":null,codex:null,gemini:null,cursor:null,omo:null,gajae:null,openclaw:null,unknown:null},unattributed:{searches:0,loads:0}},a={stats:e,statsEmpty:u};export{a as default,e as stats,u as statsEmpty};
|