@fenglimg/fabric-server 0.1.0 → 1.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/dist/chunk-U3IQH5H6.js +851 -0
- package/dist/http-FL3MB4L2.js +1231 -0
- package/dist/index.d.ts +70 -1
- package/dist/index.js +261 -188
- package/dist/static/assets/index-BiK8yn_c.js +5 -0
- package/dist/static/assets/index-D45wW11O.css +1 -0
- package/dist/static/index.html +14 -0
- package/package.json +13 -8
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function a(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=a(n);fetch(n.href,i)}})();var Qe,R,pa,ae,Mt,fa,ma,nt,Oe,xe,_a,Et,pt,ft,ba,Fe={},Ze=[],er=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,et=Array.isArray;function K(t,e){for(var a in e)t[a]=e[a];return t}function At(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function tr(t,e,a){var r,n,i,s={};for(i in e)i=="key"?r=e[i]:i=="ref"?n=e[i]:s[i]=e[i];if(arguments.length>2&&(s.children=arguments.length>3?Qe.call(arguments,2):a),typeof t=="function"&&t.defaultProps!=null)for(i in t.defaultProps)s[i]===void 0&&(s[i]=t.defaultProps[i]);return je(t,s,r,n,null)}function je(t,e,a,r,n){var i={type:t,props:e,key:a,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:n??++pa,__i:-1,__u:0};return n==null&&R.vnode!=null&&R.vnode(i),i}function tt(t){return t.children}function Le(t,e){this.props=t,this.context=e}function me(t,e){if(e==null)return t.__?me(t.__,t.__i+1):null;for(var a;e<t.__k.length;e++)if((a=t.__k[e])!=null&&a.__e!=null)return a.__e;return typeof t.type=="function"?me(t):null}function ar(t){if(t.__P&&t.__d){var e=t.__v,a=e.__e,r=[],n=[],i=K({},e);i.__v=e.__v+1,R.vnode&&R.vnode(i),It(t.__P,i,e,t.__n,t.__P.namespaceURI,32&e.__u?[a]:null,r,a??me(e),!!(32&e.__u),n),i.__v=e.__v,i.__.__k[i.__i]=i,ka(r,i,n),e.__e=e.__=null,i.__e!=a&&ga(i)}}function ga(t){if((t=t.__)!=null&&t.__c!=null)return t.__e=t.__c.base=null,t.__k.some(function(e){if(e!=null&&e.__e!=null)return t.__e=t.__c.base=e.__e}),ga(t)}function mt(t){(!t.__d&&(t.__d=!0)&&ae.push(t)&&!De.__r++||Mt!=R.debounceRendering)&&((Mt=R.debounceRendering)||fa)(De)}function De(){try{for(var t,e=1;ae.length;)ae.length>e&&ae.sort(ma),t=ae.shift(),e=ae.length,ar(t)}finally{ae.length=De.__r=0}}function va(t,e,a,r,n,i,s,o,c,l,h){var u,g,f,v,E,x,w,y=r&&r.__k||Ze,O=e.length;for(c=rr(a,e,y,c,O),u=0;u<O;u++)(f=a.__k[u])!=null&&(g=f.__i!=-1&&y[f.__i]||Fe,f.__i=u,x=It(t,f,g,n,i,s,o,c,l,h),v=f.__e,f.ref&&g.ref!=f.ref&&(g.ref&&$t(g.ref,null,f),h.push(f.ref,f.__c||v,f)),E==null&&v!=null&&(E=v),(w=!!(4&f.__u))||g.__k===f.__k?(c=ya(f,c,t,w),w&&g.__e&&(g.__e=null)):typeof f.type=="function"&&x!==void 0?c=x:v&&(c=v.nextSibling),f.__u&=-7);return a.__e=E,c}function rr(t,e,a,r,n){var i,s,o,c,l,h=a.length,u=h,g=0;for(t.__k=new Array(n),i=0;i<n;i++)(s=e[i])!=null&&typeof s!="boolean"&&typeof s!="function"?(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||s.constructor==String?s=t.__k[i]=je(null,s,null,null,null):et(s)?s=t.__k[i]=je(tt,{children:s},null,null,null):s.constructor===void 0&&s.__b>0?s=t.__k[i]=je(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):t.__k[i]=s,c=i+g,s.__=t,s.__b=t.__b+1,o=null,(l=s.__i=nr(s,a,c,u))!=-1&&(u--,(o=a[l])&&(o.__u|=2)),o==null||o.__v==null?(l==-1&&(n>h?g--:n<h&&g++),typeof s.type!="function"&&(s.__u|=4)):l!=c&&(l==c-1?g--:l==c+1?g++:(l>c?g--:g++,s.__u|=4))):t.__k[i]=null;if(u)for(i=0;i<h;i++)(o=a[i])!=null&&(2&o.__u)==0&&(o.__e==r&&(r=me(o)),xa(o,o));return r}function ya(t,e,a,r){var n,i;if(typeof t.type=="function"){for(n=t.__k,i=0;n&&i<n.length;i++)n[i]&&(n[i].__=t,e=ya(n[i],e,a,r));return e}t.__e!=e&&(r&&(e&&t.type&&!e.parentNode&&(e=me(t)),a.insertBefore(t.__e,e||null)),e=t.__e);do e=e&&e.nextSibling;while(e!=null&&e.nodeType==8);return e}function nr(t,e,a,r){var n,i,s,o=t.key,c=t.type,l=e[a],h=l!=null&&(2&l.__u)==0;if(l===null&&o==null||h&&o==l.key&&c==l.type)return a;if(r>(h?1:0)){for(n=a-1,i=a+1;n>=0||i<e.length;)if((l=e[s=n>=0?n--:i++])!=null&&(2&l.__u)==0&&o==l.key&&c==l.type)return s}return-1}function Ut(t,e,a){e[0]=="-"?t.setProperty(e,a??""):t[e]=a==null?"":typeof a!="number"||er.test(e)?a:a+"px"}function $e(t,e,a,r,n){var i,s;e:if(e=="style")if(typeof a=="string")t.style.cssText=a;else{if(typeof r=="string"&&(t.style.cssText=r=""),r)for(e in r)a&&e in a||Ut(t.style,e,"");if(a)for(e in a)r&&a[e]==r[e]||Ut(t.style,e,a[e])}else if(e[0]=="o"&&e[1]=="n")i=e!=(e=e.replace(_a,"$1")),s=e.toLowerCase(),e=s in t||e=="onFocusOut"||e=="onFocusIn"?s.slice(2):e.slice(2),t.l||(t.l={}),t.l[e+i]=a,a?r?a[xe]=r[xe]:(a[xe]=Et,t.addEventListener(e,i?ft:pt,i)):t.removeEventListener(e,i?ft:pt,i);else{if(n=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in t)try{t[e]=a??"";break e}catch{}typeof a=="function"||(a==null||a===!1&&e[4]!="-"?t.removeAttribute(e):t.setAttribute(e,e=="popover"&&a==1?"":a))}}function Ht(t){return function(e){if(this.l){var a=this.l[e.type+t];if(e[Oe]==null)e[Oe]=Et++;else if(e[Oe]<a[xe])return;return a(R.event?R.event(e):e)}}}function It(t,e,a,r,n,i,s,o,c,l){var h,u,g,f,v,E,x,w,y,O,U,ke,Dt,Ie,rt,q=e.type;if(e.constructor!==void 0)return null;128&a.__u&&(c=!!(32&a.__u),i=[o=e.__e=a.__e]),(h=R.__b)&&h(e);e:if(typeof q=="function")try{if(w=e.props,y=q.prototype&&q.prototype.render,O=(h=q.contextType)&&r[h.__c],U=h?O?O.props.value:h.__:r,a.__c?x=(u=e.__c=a.__c).__=u.__E:(y?e.__c=u=new q(w,U):(e.__c=u=new Le(w,U),u.constructor=q,u.render=sr),O&&O.sub(u),u.state||(u.state={}),u.__n=r,g=u.__d=!0,u.__h=[],u._sb=[]),y&&u.__s==null&&(u.__s=u.state),y&&q.getDerivedStateFromProps!=null&&(u.__s==u.state&&(u.__s=K({},u.__s)),K(u.__s,q.getDerivedStateFromProps(w,u.__s))),f=u.props,v=u.state,u.__v=e,g)y&&q.getDerivedStateFromProps==null&&u.componentWillMount!=null&&u.componentWillMount(),y&&u.componentDidMount!=null&&u.__h.push(u.componentDidMount);else{if(y&&q.getDerivedStateFromProps==null&&w!==f&&u.componentWillReceiveProps!=null&&u.componentWillReceiveProps(w,U),e.__v==a.__v||!u.__e&&u.shouldComponentUpdate!=null&&u.shouldComponentUpdate(w,u.__s,U)===!1){e.__v!=a.__v&&(u.props=w,u.state=u.__s,u.__d=!1),e.__e=a.__e,e.__k=a.__k,e.__k.some(function(pe){pe&&(pe.__=e)}),Ze.push.apply(u.__h,u._sb),u._sb=[],u.__h.length&&s.push(u);break e}u.componentWillUpdate!=null&&u.componentWillUpdate(w,u.__s,U),y&&u.componentDidUpdate!=null&&u.__h.push(function(){u.componentDidUpdate(f,v,E)})}if(u.context=U,u.props=w,u.__P=t,u.__e=!1,ke=R.__r,Dt=0,y)u.state=u.__s,u.__d=!1,ke&&ke(e),h=u.render(u.props,u.state,u.context),Ze.push.apply(u.__h,u._sb),u._sb=[];else do u.__d=!1,ke&&ke(e),h=u.render(u.props,u.state,u.context),u.state=u.__s;while(u.__d&&++Dt<25);u.state=u.__s,u.getChildContext!=null&&(r=K(K({},r),u.getChildContext())),y&&!g&&u.getSnapshotBeforeUpdate!=null&&(E=u.getSnapshotBeforeUpdate(f,v)),Ie=h!=null&&h.type===tt&&h.key==null?wa(h.props.children):h,o=va(t,et(Ie)?Ie:[Ie],e,a,r,n,i,s,o,c,l),u.base=e.__e,e.__u&=-161,u.__h.length&&s.push(u),x&&(u.__E=u.__=null)}catch(pe){if(e.__v=null,c||i!=null)if(pe.then){for(e.__u|=c?160:128;o&&o.nodeType==8&&o.nextSibling;)o=o.nextSibling;i[i.indexOf(o)]=null,e.__e=o}else{for(rt=i.length;rt--;)At(i[rt]);_t(e)}else e.__e=a.__e,e.__k=a.__k,pe.then||_t(e);R.__e(pe,e,a)}else i==null&&e.__v==a.__v?(e.__k=a.__k,e.__e=a.__e):o=e.__e=ir(a.__e,e,a,r,n,i,s,c,l);return(h=R.diffed)&&h(e),128&e.__u?void 0:o}function _t(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(_t))}function ka(t,e,a){for(var r=0;r<a.length;r++)$t(a[r],a[++r],a[++r]);R.__c&&R.__c(e,t),t.some(function(n){try{t=n.__h,n.__h=[],t.some(function(i){i.call(n)})}catch(i){R.__e(i,n.__v)}})}function wa(t){return typeof t!="object"||t==null||t.__b>0?t:et(t)?t.map(wa):K({},t)}function ir(t,e,a,r,n,i,s,o,c){var l,h,u,g,f,v,E,x=a.props||Fe,w=e.props,y=e.type;if(y=="svg"?n="http://www.w3.org/2000/svg":y=="math"?n="http://www.w3.org/1998/Math/MathML":n||(n="http://www.w3.org/1999/xhtml"),i!=null){for(l=0;l<i.length;l++)if((f=i[l])&&"setAttribute"in f==!!y&&(y?f.localName==y:f.nodeType==3)){t=f,i[l]=null;break}}if(t==null){if(y==null)return document.createTextNode(w);t=document.createElementNS(n,y,w.is&&w),o&&(R.__m&&R.__m(e,i),o=!1),i=null}if(y==null)x===w||o&&t.data==w||(t.data=w);else{if(i=i&&Qe.call(t.childNodes),!o&&i!=null)for(x={},l=0;l<t.attributes.length;l++)x[(f=t.attributes[l]).name]=f.value;for(l in x)f=x[l],l=="dangerouslySetInnerHTML"?u=f:l=="children"||l in w||l=="value"&&"defaultValue"in w||l=="checked"&&"defaultChecked"in w||$e(t,l,null,f,n);for(l in w)f=w[l],l=="children"?g=f:l=="dangerouslySetInnerHTML"?h=f:l=="value"?v=f:l=="checked"?E=f:o&&typeof f!="function"||x[l]===f||$e(t,l,f,x[l],n);if(h)o||u&&(h.__html==u.__html||h.__html==t.innerHTML)||(t.innerHTML=h.__html),e.__k=[];else if(u&&(t.innerHTML=""),va(e.type=="template"?t.content:t,et(g)?g:[g],e,a,r,y=="foreignObject"?"http://www.w3.org/1999/xhtml":n,i,s,i?i[0]:a.__k&&me(a,0),o,c),i!=null)for(l=i.length;l--;)At(i[l]);o||(l="value",y=="progress"&&v==null?t.removeAttribute("value"):v!=null&&(v!==t[l]||y=="progress"&&!v||y=="option"&&v!=x[l])&&$e(t,l,v,x[l],n),l="checked",E!=null&&E!=t[l]&&$e(t,l,E,x[l],n))}return t}function $t(t,e,a){try{if(typeof t=="function"){var r=typeof t.__u=="function";r&&t.__u(),r&&e==null||(t.__u=t(e))}else t.current=e}catch(n){R.__e(n,a)}}function xa(t,e,a){var r,n;if(R.unmount&&R.unmount(t),(r=t.ref)&&(r.current&&r.current!=t.__e||$t(r,null,e)),(r=t.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(i){R.__e(i,e)}r.base=r.__P=null}if(r=t.__k)for(n=0;n<r.length;n++)r[n]&&xa(r[n],e,a||typeof t.type!="function");a||At(t.__e),t.__c=t.__=t.__e=void 0}function sr(t,e,a){return this.constructor(t,a)}function or(t,e,a){var r,n,i,s;e==document&&(e=document.documentElement),R.__&&R.__(t,e),n=(r=!1)?null:e.__k,i=[],s=[],It(e,t=e.__k=tr(tt,null,[t]),n||Fe,Fe,e.namespaceURI,n?null:e.firstChild?Qe.call(e.childNodes):null,i,n?n.__e:e.firstChild,r,s),ka(i,t,s)}function dr(t){function e(a){var r,n;return this.getChildContext||(r=new Set,(n={})[e.__c]=this,this.getChildContext=function(){return n},this.componentWillUnmount=function(){r=null},this.shouldComponentUpdate=function(i){this.props.value!=i.value&&r.forEach(function(s){s.__e=!0,mt(s)})},this.sub=function(i){r.add(i);var s=i.componentWillUnmount;i.componentWillUnmount=function(){r&&r.delete(i),s&&s.call(i)}}),a.children}return e.__c="__cC"+ba++,e.__=t,e.Provider=e.__l=(e.Consumer=function(a,r){return a.children(r)}).contextType=e,e}Qe=Ze.slice,R={__e:function(t,e,a,r){for(var n,i,s;e=e.__;)if((n=e.__c)&&!n.__)try{if((i=n.constructor)&&i.getDerivedStateFromError!=null&&(n.setState(i.getDerivedStateFromError(t)),s=n.__d),n.componentDidCatch!=null&&(n.componentDidCatch(t,r||{}),s=n.__d),s)return n.__E=n}catch(o){t=o}throw t}},pa=0,Le.prototype.setState=function(t,e){var a;a=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=K({},this.state),typeof t=="function"&&(t=t(K({},a),this.props)),t&&K(a,t),t!=null&&this.__v&&(e&&this._sb.push(e),mt(this))},Le.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),mt(this))},Le.prototype.render=tt,ae=[],fa=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ma=function(t,e){return t.__v.__b-e.__v.__b},De.__r=0,nt=Math.random().toString(8),Oe="__d"+nt,xe="__a"+nt,_a=/(PointerCapture)$|Capture$/i,Et=0,pt=Ht(!1),ft=Ht(!0),ba=0;var lr=0;function d(t,e,a,r,n,i){e||(e={});var s,o,c=e;if("ref"in c)for(o in c={},e)o=="ref"?s=e[o]:c[o]=e[o];var l={type:t,props:c,key:a,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--lr,__i:-1,__u:0,__source:n,__self:i};if(typeof t=="function"&&(s=t.defaultProps))for(o in s)c[o]===void 0&&(c[o]=s[o]);return R.vnode&&R.vnode(l),l}var _e,P,it,Vt,bt=0,Na=[],F=R,zt=F.__b,Bt=F.__r,Wt=F.diffed,qt=F.__c,Gt=F.unmount,Jt=F.__;function at(t,e){F.__h&&F.__h(P,t,bt||e),bt=0;var a=P.__H||(P.__H={__:[],__h:[]});return t>=a.__.length&&a.__.push({}),a.__[t]}function j(t){return bt=1,cr(Ta,t)}function cr(t,e,a){var r=at(_e++,2);if(r.t=t,!r.__c&&(r.__=[Ta(void 0,e),function(o){var c=r.__N?r.__N[0]:r.__[0],l=r.t(c,o);c!==l&&(r.__N=[l,r.__[1]],r.__c.setState({}))}],r.__c=P,!P.__f)){var n=function(o,c,l){if(!r.__c.__H)return!0;var h=r.__c.__H.__.filter(function(g){return g.__c});if(h.every(function(g){return!g.__N}))return!i||i.call(this,o,c,l);var u=r.__c.props!==o;return h.some(function(g){if(g.__N){var f=g.__[0];g.__=g.__N,g.__N=void 0,f!==g.__[0]&&(u=!0)}}),i&&i.call(this,o,c,l)||u};P.__f=!0;var i=P.shouldComponentUpdate,s=P.componentWillUpdate;P.componentWillUpdate=function(o,c,l){if(this.__e){var h=i;i=void 0,n(o,c,l),i=h}s&&s.call(this,o,c,l)},P.shouldComponentUpdate=n}return r.__N||r.__}function V(t,e){var a=at(_e++,3);!F.__s&&Sa(a.__H,e)&&(a.__=t,a.u=e,P.__H.__h.push(a))}function ne(t,e){var a=at(_e++,7);return Sa(a.__H,e)&&(a.__=t(),a.__H=e,a.__h=t),a.__}function ur(t){var e=P.context[t.__c],a=at(_e++,9);return a.c=t,e?(a.__==null&&(a.__=!0,e.sub(P)),e.props.value):t.__}function hr(){for(var t;t=Na.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(Pe),e.__h.some(gt),e.__h=[]}catch(a){e.__h=[],F.__e(a,t.__v)}}}F.__b=function(t){P=null,zt&&zt(t)},F.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),Jt&&Jt(t,e)},F.__r=function(t){Bt&&Bt(t),_e=0;var e=(P=t.__c).__H;e&&(it===P?(e.__h=[],P.__h=[],e.__.some(function(a){a.__N&&(a.__=a.__N),a.u=a.__N=void 0})):(e.__h.some(Pe),e.__h.some(gt),e.__h=[],_e=0)),it=P},F.diffed=function(t){Wt&&Wt(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(Na.push(e)!==1&&Vt===F.requestAnimationFrame||((Vt=F.requestAnimationFrame)||pr)(hr)),e.__H.__.some(function(a){a.u&&(a.__H=a.u),a.u=void 0})),it=P=null},F.__c=function(t,e){e.some(function(a){try{a.__h.some(Pe),a.__h=a.__h.filter(function(r){return!r.__||gt(r)})}catch(r){e.some(function(n){n.__h&&(n.__h=[])}),e=[],F.__e(r,a.__v)}}),qt&&qt(t,e)},F.unmount=function(t){Gt&&Gt(t);var e,a=t.__c;a&&a.__H&&(a.__H.__.some(function(r){try{Pe(r)}catch(n){e=n}}),a.__H=void 0,e&&F.__e(e,a.__v))};var Xt=typeof requestAnimationFrame=="function";function pr(t){var e,a=function(){clearTimeout(r),Xt&&cancelAnimationFrame(e),setTimeout(t)},r=setTimeout(a,35);Xt&&(e=requestAnimationFrame(a))}function Pe(t){var e=P,a=t.__c;typeof a=="function"&&(t.__c=void 0,a()),P=e}function gt(t){var e=P;t.__c=t.__(),P=e}function Sa(t,e){return!t||t.length!==e.length||e.some(function(a,r){return a!==t[r]})}function Ta(t,e){return typeof e=="function"?e(t):e}var fr=Symbol.for("preact-signals");function Rt(){if(le>1)le--;else{var t,e=!1;for((function(){var n=Ue;for(Ue=void 0;n!==void 0;)n.S.v===n.v&&(n.S.i=n.i),n=n.o})();Ne!==void 0;){var a=Ne;for(Ne=void 0,Me++;a!==void 0;){var r=a.u;if(a.u=void 0,a.f&=-3,!(8&a.f)&&Aa(a))try{a.c()}catch(n){e||(t=n,e=!0)}a=r}}if(Me=0,le--,e)throw t}}var $=void 0;function Ca(t){var e=$;$=void 0;try{return t()}finally{$=e}}var Ne=void 0,le=0,Me=0,Kt=0,Ue=void 0,He=0;function Ea(t){if($!==void 0){var e=t.n;if(e===void 0||e.t!==$)return e={i:0,S:t,p:$.s,n:void 0,t:$,e:void 0,x:void 0,r:e},$.s!==void 0&&($.s.n=e),$.s=e,t.n=e,32&$.f&&t.S(e),e;if(e.i===-1)return e.i=0,e.n!==void 0&&(e.n.p=e.p,e.p!==void 0&&(e.p.n=e.n),e.p=$.s,e.n=void 0,$.s.n=e,$.s=e),e}}function M(t,e){this.v=t,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}M.prototype.brand=fr;M.prototype.h=function(){return!0};M.prototype.S=function(t){var e=this,a=this.t;a!==t&&t.e===void 0&&(t.x=a,this.t=t,a!==void 0?a.e=t:Ca(function(){var r;(r=e.W)==null||r.call(e)}))};M.prototype.U=function(t){var e=this;if(this.t!==void 0){var a=t.e,r=t.x;a!==void 0&&(a.x=r,t.e=void 0),r!==void 0&&(r.e=a,t.x=void 0),t===this.t&&(this.t=r,r===void 0&&Ca(function(){var n;(n=e.Z)==null||n.call(e)}))}};M.prototype.subscribe=function(t){var e=this;return _r(function(){var a=e.value,r=$;$=void 0;try{t(a)}finally{$=r}},{name:"sub"})};M.prototype.valueOf=function(){return this.value};M.prototype.toString=function(){return this.value+""};M.prototype.toJSON=function(){return this.value};M.prototype.peek=function(){var t=$;$=void 0;try{return this.value}finally{$=t}};Object.defineProperty(M.prototype,"value",{get:function(){var t=Ea(this);return t!==void 0&&(t.i=this.i),this.v},set:function(t){if(t!==this.v){if(Me>100)throw new Error("Cycle detected");(function(a){le!==0&&Me===0&&a.l!==Kt&&(a.l=Kt,Ue={S:a,v:a.v,i:a.i,o:Ue})})(this),this.v=t,this.i++,He++,le++;try{for(var e=this.t;e!==void 0;e=e.x)e.t.N()}finally{Rt()}}}});function Ot(t,e){return new M(t,e)}function Aa(t){for(var e=t.s;e!==void 0;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function Ia(t){for(var e=t.s;e!==void 0;e=e.n){var a=e.S.n;if(a!==void 0&&(e.r=a),e.S.n=e,e.i=-1,e.n===void 0){t.s=e;break}}}function $a(t){for(var e=t.s,a=void 0;e!==void 0;){var r=e.p;e.i===-1?(e.S.U(e),r!==void 0&&(r.n=e.n),e.n!==void 0&&(e.n.p=r)):a=e,e.S.n=e.r,e.r!==void 0&&(e.r=void 0),e=r}t.s=a}function ve(t,e){M.call(this,void 0),this.x=t,this.s=void 0,this.g=He-1,this.f=4,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}ve.prototype=new M;ve.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===He))return!0;if(this.g=He,this.f|=1,this.i>0&&!Aa(this))return this.f&=-2,!0;var t=$;try{Ia(this),$=this;var e=this.x();(16&this.f||this.v!==e||this.i===0)&&(this.v=e,this.f&=-17,this.i++)}catch(a){this.v=a,this.f|=16,this.i++}return $=t,$a(this),this.f&=-2,!0};ve.prototype.S=function(t){if(this.t===void 0){this.f|=36;for(var e=this.s;e!==void 0;e=e.n)e.S.S(e)}M.prototype.S.call(this,t)};ve.prototype.U=function(t){if(this.t!==void 0&&(M.prototype.U.call(this,t),this.t===void 0)){this.f&=-33;for(var e=this.s;e!==void 0;e=e.n)e.S.U(e)}};ve.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;t!==void 0;t=t.x)t.t.N()}};Object.defineProperty(ve.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var t=Ea(this);if(this.h(),t!==void 0&&(t.i=this.i),16&this.f)throw this.v;return this.v}});function Ra(t){var e=t.m;if(t.m=void 0,typeof e=="function"){le++;var a=$;$=void 0;try{e()}catch(r){throw t.f&=-2,t.f|=8,jt(t),r}finally{$=a,Rt()}}}function jt(t){for(var e=t.s;e!==void 0;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,Ra(t)}function mr(t){if($!==this)throw new Error("Out-of-order effect");$a(this),$=t,this.f&=-2,8&this.f&&jt(this),Rt()}function ye(t,e){this.x=t,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=e?.name}ye.prototype.c=function(){var t=this.S();try{if(8&this.f||this.x===void 0)return;var e=this.x();typeof e=="function"&&(this.m=e)}finally{t()}};ye.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,Ra(this),Ia(this),le++;var t=$;return $=this,mr.bind(this,t)};ye.prototype.N=function(){2&this.f||(this.f|=2,this.u=Ne,Ne=this)};ye.prototype.d=function(){this.f|=8,1&this.f||jt(this)};ye.prototype.dispose=function(){this.d()};function _r(t,e){var a=new ye(t,e);try{a.c()}catch(n){throw a.d(),n}var r=a.d.bind(a);return r[Symbol.dispose]=r,r}async function br(){return await Ee("/api/rules")}async function Oa(t={}){const e=new URLSearchParams;return t.source!==void 0&&e.set("source",t.source),t.since!==void 0&&e.set("since",String(t.since)),await Ee(Fa("/api/ledger",e))}async function gr(){return await Ee("/api/doctor")}async function ja(){return await Ee("/api/human-lock")}async function vr(t){return await La("/api/human-lock/approve",t)}async function yr(t){return await La("/api/intent/annotate",t)}async function kr(t){const e=new URLSearchParams;return t.ledgerId!==void 0&&e.set("ledger_id",t.ledgerId),t.ts!==void 0&&e.set("ts",String(t.ts)),await Ee(Fa("/api/history/state",e))}function wr(){return new EventSource("/events")}function xr(t){try{const e=JSON.parse(t);return typeof e.type=="string"&&"payload"in e?e:null}catch{return null}}async function Ee(t){const e=await fetch(t,{headers:{Accept:"application/json"}});return await Pa(e)}async function La(t,e){const a=await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)});return await Pa(a)}async function Pa(t){const e=await t.text(),a=e.length>0?JSON.parse(e):void 0;if(!t.ok)throw new Error(Nr(a,t.status));return a}function Nr(t,e){return t&&typeof t=="object"&&"error"in t&&typeof t.error?.message=="string"?t.error.message:`Fabric API request failed with HTTP ${e}.`}function Fa(t,e){const a=e.toString();return a.length>0?`${t}?${a}`:t}const Yt=["meta:updated","lock:drift","lock:approved","ledger:appended","drift:detected"],st=Ot([]),ot=Ot(!1),dt=Ot(0);function Sr(){const[t,e]=j({connected:ot.value,lastEvent:st.value[0]??null,version:dt.value});return V(()=>{const a=wr(),r=i=>{ot.value=i,e(s=>({...s,connected:i}))},n=i=>{const s=xr(i.data);s!==null&&(st.value=[s,...st.value].slice(0,50),dt.value+=1,e({connected:ot.value,lastEvent:s,version:dt.value}))};a.onopen=()=>r(!0),a.onerror=()=>r(!1);for(const i of Yt)a.addEventListener(i,n);return()=>{for(const i of Yt)a.removeEventListener(i,n);a.close(),r(!1)}},[]),t}var Tr={"cli.main.description":"Fabric CLI - AI agent collaboration framework","cli.shared.created":"Created","cli.shared.skipped":"Skipped","cli.shared.next":"Next","cli.shared.reason":"Reason","cli.shared.updated":"Updated","cli.shared.missing":"missing","cli.shared.present":"present","cli.shared.absent":"missing","cli.shared.yes":"yes","cli.shared.no":"no","cli.shared.none":"none","cli.shared.loading":"loading","cli.shared.refresh":"Refresh","cli.shared.target-invalid":"Target must be an existing directory: {target}","cli.shared.template-not-found":"Template not found: {path}","cli.shared.invalid-host-empty":"Invalid host: <empty>","cli.shared.invalid-port":"Invalid port: {value}","cli.bootstrap.description":"Install Fabric bootstrap prompts for supported AI clients.","cli.bootstrap.install.description":"Copy Fabric bootstrap templates into native client locations.","cli.bootstrap.install.args.clients.description":"Optional comma-separated client filter, for example claude,cursor,codex.","cli.bootstrap.install.no-targets":"No bootstrap targets detected. Pass --clients claude,cursor,windsurf,roo,gemini,codex to install explicitly.","cli.bootstrap.install.installed":"Installed {path}","cli.bootstrap.install.skipped-header":"Skipped {path}: Fabric Bootstrap header already present.","cli.bootstrap.install.prepended":"Prepended {path}","cli.bootstrap.errors.unknown-client":'Unknown client "{client}". Use a comma-separated list such as claude,cursor,codex.',"cli.config.description":"Manage Fabric MCP client configuration.","cli.config.install.description":"Install Fabric MCP server entries into detected client configs.","cli.config.install.args.clients.description":"Optional comma-separated client filter, for example cursor,codex,gemini.","cli.config.install.args.dry-run.description":"Preview detected write operations without modifying files.","cli.config.errors.unknown-client":'Unknown client "{client}". Use a comma-separated list such as cursor,codex,gemini.',"cli.config.errors.expected-object":"Expected object in {path}","cli.config.install.no-configs":"No Fabric MCP client config detected. Create the client directory or set clientPaths in fabric.config.json.","cli.config.install.no-config-path":"Skipping {client}: no config path detected.","cli.config.install.dry-run":"[dry-run] {client}: would write {path}","cli.config.install.wrote":"{client}: wrote {path}","cli.doctor.description":"Run Fabric doctor checks and optional compliance audit reporting.","cli.doctor.args.target.description":"Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.","cli.doctor.args.audit.description":"Print fab_get_rules compliance violations for AI edit intents.","cli.doctor.args.window-minutes.description":"Audit lookback window in minutes for matching fab_get_rules calls. Default 5.","cli.doctor.errors.invalid-window":"Invalid audit window: {value}","cli.doctor.audit.preview-only":"auditMode is off in fabric.config.json; running fab doctor --audit as a manual preview only.","cli.doctor.audit.none":"No AI edit intents recorded yet for compliance audit.","cli.doctor.audit.clean":"All {count} audited edit paths have a preceding fab_get_rules call within {window}.","cli.doctor.audit.violations":"{count} audited edit paths are missing a preceding fab_get_rules call within {window}.","cli.doctor.audit.table.path":"Path","cli.doctor.audit.table.edit":"Edit time","cli.doctor.audit.table.rules":"Last rules","cli.doctor.audit.table.intent":"Intent","cli.hooks.description":"Manage Fabric Git hook templates.","cli.hooks.install.description":"Install the Fabric Husky pre-commit hook template.","cli.hooks.install.args.target.description":"Target project path, default is the current working directory.","cli.hooks.errors.package-json-required":"package.json is required to install hooks: {path}","cli.hooks.install.hook-skipped":"Fabric hook already present in {path}, skipped.","cli.hooks.install.hook-appended":"Appended Fabric hook to existing {path}","cli.hooks.install.hook-created":"Created {path}","cli.hooks.install.prepare-left":"Left existing prepare script unchanged in {path}","cli.hooks.install.prepare-added":"Added prepare script to {path}","cli.human-lint.description":"Validate locked human-edit regions.","cli.human-lint.args.target.description":"Target project path, default is the current working directory.","cli.human-lint.drift-detected":"Human-locked content drift detected. Revert the edit or update approved hashes before committing.","cli.human-lint.table.location":"Location","cli.human-lint.table.expected":"Expected","cli.human-lint.table.got":"Got","cli.init.description":"Initialize Fabric in the target project.","cli.init.args.target.description":"Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.","cli.init.args.debug.description":"Print target resolution details to stderr.","cli.init.created-path":"{label} {path}","cli.init.skipped-existing-path":"{label} {path}: already exists.","cli.init.next-step":"{label} {message}","cli.init.reason-message":"{label} {message}","cli.init.next-step.message":"run fab hooks install to add the Day 4 pre-commit pipeline.","cli.init.reason-message.body":".fabric/forensic.json is ready; use the agents-md-init skill to finish AGENTS.md initialization.","cli.init.claude-settings.created":"{label} {path} with Claude Stop hook.","cli.init.claude-settings.updated":"{label} {path} with Claude Stop hook.","cli.init.claude-settings.skipped":"{label} {path}: Claude Stop hook already present.","cli.init.claude-settings.skipped-invalid":"{label} {path}: unable to merge Claude Stop hook.","cli.init.claude-settings.invalid-object":"{label} {path}: expected a JSON object.","cli.init.claude-settings.invalid-json":"{label} {path}: invalid JSON ({reason}).","cli.init.claude-settings.invalid-hooks":'{label} {path}: "hooks" must be a JSON object.',"cli.init.claude-settings.invalid-stop-array":'{label} {path}: "hooks.Stop" must be an array.',"cli.init.errors.abort-existing":"ABORT: {path} already exists. fab init is non-destructive.","cli.ledger-append.description":"Append an entry to the Fabric intent ledger.","cli.ledger-append.args.target.description":"Target project path, default is the current working directory.","cli.ledger-append.args.staged.description":"Derive the entry from staged changes (used during pre-commit).","cli.ledger-append.requires-staged":"requires --staged in pre-commit context","cli.ledger-append.intent.auto":"auto: {head}{suffix}","cli.ledger-append.intent.auto-more":" +{count} more","cli.pre-commit.description":"Composite pre-commit hook: runs sync-meta --check-only, human-lint, and ledger-append --staged in one Node process.","cli.pre-commit.args.target.description":"Project root directory, defaults to cwd or EXTERNAL_FIXTURE_PATH.","cli.pre-commit.run-failed":"fabric pre-commit: {name} failed - {message}","cli.scan.description":"Scan the project to detect Fabric bootstrap candidates.","cli.scan.args.target.description":"Target absolute path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.","cli.scan.args.debug.description":"Print detection evidence in formatted output.","cli.scan.args.json.description":"Print the diagnostic report as JSON.","cli.scan.report.title":"Fabric scan report","cli.scan.report.target":"Target","cli.scan.report.framework":"Framework","cli.scan.report.evidence":"Evidence","cli.scan.report.readme-quality":"README quality","cli.scan.report.contributing":"CONTRIBUTING.md","cli.scan.report.files-counted":"Files counted","cli.scan.report.ignored-entries":"Ignored entries","cli.scan.report.existing-fabric":"Existing Fabric files","cli.scan.report.recommendations":"Recommendations:","cli.scan.readme-quality.ok":"ok","cli.scan.readme-quality.stub":"stub","cli.scan.recommendation.init":"L0: Run fab init to scaffold AGENTS.md with TODO markers.","cli.scan.recommendation.readme":"L0: Expand README.md before promoting project facts into AGENTS.md references.","cli.scan.recommendation.contributing":"L0: Add CONTRIBUTING.md or leave an AGENTS.md TODO reference for contribution flow.","cli.scan.recommendation.unknown-framework":"L1: Add tech-stack TODOs manually because no framework marker was detected.","cli.scan.recommendation.framework-dirs":"L1: Review {framework} directories for future scoped AGENTS.md files.","cli.serve.description":"Start the local Fabric MCP HTTP service. Set FABRIC_AUTH_TOKEN to enable Bearer auth for non-localhost binding.","cli.serve.args.port.description":"Listen port, default 7373.","cli.serve.args.host.description":"Listen host, default 127.0.0.1. Set FABRIC_AUTH_TOKEN to enable Bearer auth for non-localhost binding.","cli.serve.args.target.description":"Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.","cli.serve.args.debug.description":"Print target resolution details to stderr.","cli.serve.ready.title":"Fabric Dashboard","cli.serve.warning.host-fallback":"--host {host} requires FABRIC_AUTH_TOKEN; falling back to 127.0.0.1 for safety","cli.serve.error.port-in-use":"Port {port} in use - try --port {nextPort}","cli.sync-meta.description":"Sync Fabric metadata from AGENTS.md files.","cli.sync-meta.args.target.description":"Target project path, default is the current working directory.","cli.sync-meta.args.check-only.description":"Exit with code 1 when .fabric/agents.meta.json is out of date.","cli.sync-meta.drift-detected":"Fabric metadata drift detected. Run fab sync-meta to update.","cli.sync-meta.updated":"{label} {path}","dashboard.app.nav.aria-label":"Dashboard views","dashboard.app.nav.rules.label":"Rules Tree","dashboard.app.nav.rules.label-bilingual":"规则树 Rules Tree","dashboard.app.nav.rules.subtitle":"meta graph","dashboard.app.nav.locks.label":"Human Lock","dashboard.app.nav.locks.label-bilingual":"人工锁 Human Lock","dashboard.app.nav.locks.subtitle":"protected regions","dashboard.app.nav.timeline.label":"Intent Timeline","dashboard.app.nav.timeline.label-bilingual":"意图时间线 Intent Timeline","dashboard.app.nav.timeline.subtitle":"ledger stream","dashboard.app.nav.history.label":"History Replay","dashboard.app.nav.history.label-bilingual":"历史回放 History Replay","dashboard.app.nav.history.subtitle":"time travel","dashboard.app.nav.doctor.label":"Doctor","dashboard.app.nav.doctor.label-bilingual":"诊断台 Doctor","dashboard.app.nav.doctor.subtitle":"fab diagnostics","dashboard.app.nav.section.diagnostics":"Diagnostics","dashboard.app.nav.drift-check":"Drift Check","dashboard.app.header.connected":"CONNECTED","dashboard.app.header.connecting":"CONNECTING","dashboard.app.live-region.received":"Received {type}","dashboard.app.breadcrumb.rules":"rules-tree","dashboard.app.breadcrumb.locks":"human-lock","dashboard.app.breadcrumb.timeline":"intent-timeline","dashboard.app.breadcrumb.history":"history-replay","dashboard.app.breadcrumb.doctor":"doctor","dashboard.rules-tree.title":"Rules Tree Browser","dashboard.rules-tree.subtitle":".fabric/agents.meta.json · L0/L1/L2 hierarchy · hash drift aware","dashboard.rules-tree.filter.placeholder":"Filter by file, glob, priority, hash...","dashboard.rules-tree.filter.aria-label":"Filter rules tree","dashboard.rules-tree.status.loading":"loading rules","dashboard.rules-tree.status.nodes":"{count} nodes · rev {revision}","dashboard.rules-tree.status.locks":"{count} human locks","dashboard.rules-tree.empty":"No matching rules found.","dashboard.rules-tree.tree.aria-label":"Fabric rules tree","dashboard.rules-tree.detail.title":"Node Detail","dashboard.rules-tree.detail.empty":"Select a rule node to inspect scope, dependencies, priority and hash.","dashboard.rules-tree.detail.file":"file","dashboard.rules-tree.detail.scope":"scope","dashboard.rules-tree.detail.priority":"priority","dashboard.rules-tree.detail.hash":"hash","dashboard.rules-tree.detail.no-deps":"no deps","dashboard.human-lock.title":"Human Lock Vault","dashboard.human-lock.subtitle":"Protected regions awaiting approval · ritual writes only","dashboard.human-lock.filters.aria-label":"Human lock filters","dashboard.human-lock.filters.all":"all","dashboard.human-lock.filters.drift":"drift","dashboard.human-lock.filters.approved":"approved","dashboard.human-lock.summary":"{drift} drift · {approved} confirmed","dashboard.human-lock.empty":"No human lock entries for this filter.","dashboard.intent-timeline.title":"Intent Timeline","dashboard.intent-timeline.subtitle":".intent-ledger.jsonl · dual-column AI | Human · sorted by timestamp desc","dashboard.intent-timeline.filter.label":"Source","dashboard.intent-timeline.filter.all":"All","dashboard.intent-timeline.summary":"AI {aiCount} · Human {humanCount}","dashboard.intent-timeline.columns.ai.title":"AI","dashboard.intent-timeline.columns.ai.entries":"{count} entries","dashboard.intent-timeline.columns.human.title":"Human","dashboard.intent-timeline.columns.human.entries":"{count} entries","dashboard.intent-timeline.empty":"No ledger entries found.","dashboard.intent-timeline.annotate.missing-id":"Cannot annotate a ledger entry without an id.","dashboard.history-replay.title":"History Replay","dashboard.history-replay.subtitle":"Time-travel through ledger commits and rehydrate the rules tree at any recorded point","dashboard.history-replay.toolbar.scrub":"Scrub","dashboard.history-replay.toolbar.latest":"Latest","dashboard.history-replay.selected.none":"No historical entry selected","dashboard.history-replay.status.replay-points":"{count} replay points","dashboard.history-replay.status.entries-applied":"{count} entries applied","dashboard.history-replay.empty.entries":"No ledger entries found for replay.","dashboard.history-replay.state.title":"Viewing state as of {label}","dashboard.history-replay.state.meta":"ledger {ledgerId} · commit {commit} · {mode}","dashboard.history-replay.status.loading":"loading snapshot","dashboard.history-replay.status.nodes":"{count} nodes","dashboard.history-replay.status.unknown-revision":"unknown revision","dashboard.history-replay.tree.aria-label":"Historical Fabric rules tree","dashboard.history-replay.empty.loading":"Loading historical snapshot...","dashboard.history-replay.empty.select":"Select a timeline entry to replay its state.","dashboard.history-replay.meta.not-available":"unavailable","dashboard.history-replay.meta.pending":"pending","dashboard.history-replay.meta.na":"n/a","dashboard.doctor.title":"Doctor Console","dashboard.doctor.subtitle":"fab doctor surface · framework, entry points, revision drift, protected paths","dashboard.doctor.toolbar.overall":"Overall","dashboard.doctor.toolbar.no-summary":"No summary yet","dashboard.doctor.toolbar.entry-points-summary":"{framework} · {count} entry points","dashboard.doctor.toolbar.entry-point-summary":"{framework} · {count} entry point","dashboard.doctor.empty.loading":"Loading doctor report...","dashboard.doctor.summary.framework":"Framework","dashboard.doctor.summary.protected-paths":"Protected paths","dashboard.doctor.summary.intent-ledger":"Intent ledger","dashboard.doctor.summary.no-meta-revision":"No meta revision yet","dashboard.doctor.summary.tracked-paths.none":"No tracked paths","dashboard.doctor.summary.tracked-paths.some":"{count} tracked","dashboard.doctor.summary.hashes-intact":"All approved hashes intact","dashboard.doctor.summary.drifted":"{count} drifted","dashboard.doctor.summary.no-ledger-entries":"No ledger entries yet","dashboard.doctor.card.entry-points":"Entry points","dashboard.doctor.card.checks":"Checks","dashboard.doctor.empty.entry-points":"No current entry points detected.","dashboard.doctor.framework.unknown":"unknown","dashboard.doctor.age.none":"No entries","dashboard.doctor.age.seconds":"{count}s ago","dashboard.doctor.age.minutes":"{count}m ago","dashboard.doctor.age.hours":"{count}h ago","dashboard.doctor.age.days":"{count}d ago","dashboard.doctor.age.weeks":"{count}w ago","dashboard.shared.refresh":"Refresh","dashboard.shared.loading":"loading","dashboard.shared.status.ok":"ok","dashboard.shared.status.warn":"warn","dashboard.shared.status.error":"error","dashboard.shared.status.confirmed":"confirmed","dashboard.shared.status.hash-drift":"hash drift","dashboard.shared.status.stale":"stale","dashboard.shared.status.orphan":"orphan","dashboard.shared.status.attention":"attention","dashboard.source.ai":"AI","dashboard.source.human":"Human","dashboard.timeline-entry.aria-label":"{source} intent {intent}","dashboard.timeline-entry.working-tree":"working tree","dashboard.timeline-entry.parent":"parent {parent}","dashboard.timeline-entry.paths":"paths","dashboard.timeline-entry.annotate":"Annotate","dashboard.timeline-entry.annotation-label":"Human annotation","dashboard.timeline-entry.annotation-placeholder":"Explain review outcome or approval context...","dashboard.timeline-entry.annotation-save":"Save annotation","dashboard.tree-node.locked":"locked","dashboard.tree-node.stale.hash-mismatch":"hash mismatch","dashboard.tree-node.stale.orphan":"orphan","dashboard.lock-card.aria-label":"{file} {lineRange} {status}","dashboard.lock-card.status.drift":"hash drift","dashboard.lock-card.status.confirmed":"confirmed","dashboard.lock-card.hash.locked":"locked hash","dashboard.lock-card.hash.current":"current hash","dashboard.lock-card.hash.diff":"diff","dashboard.lock-card.preview.drift":"DRIFT","dashboard.lock-card.preview.sync":"SYNC","dashboard.lock-card.preview.drift-detail":"Hash differs from protected region.","dashboard.lock-card.preview.sync-detail":"Protected region is in sync.","dashboard.lock-card.footer.region":"protected region · {count} lines","dashboard.lock-card.button.approve":"Approve new hash","dashboard.lock-card.button.confirmed":"Confirmed","dashboard.lock-card.diff.hash-mismatch":"hash mismatch","dashboard.lock-card.diff.no-changes":"no changes","dashboard.lock-card.diff.with-bytes":"+{added} / -{removed} · {bytes} bytes","dashboard.lock-card.diff.without-bytes":"+{added} / -{removed}","dashboard.approve-button.retry":"Retry"},Cr={"cli.main.description":"Fabric CLI - AI 智能体协作框架","cli.shared.created":"已创建","cli.shared.skipped":"已跳过","cli.shared.next":"下一步","cli.shared.reason":"原因","cli.shared.updated":"已更新","cli.shared.missing":"缺失","cli.shared.present":"存在","cli.shared.absent":"缺失","cli.shared.yes":"是","cli.shared.no":"否","cli.shared.none":"无","cli.shared.loading":"加载中","cli.shared.refresh":"刷新","cli.shared.target-invalid":"目标必须是已存在的目录:{target}","cli.shared.template-not-found":"未找到模板:{path}","cli.shared.invalid-host-empty":"无效 host:<empty>","cli.shared.invalid-port":"无效端口:{value}","cli.bootstrap.description":"为支持的 AI 客户端安装 Fabric 引导提示模板。","cli.bootstrap.install.description":"将 Fabric 引导模板复制到各客户端的原生位置。","cli.bootstrap.install.args.clients.description":"可选的逗号分隔客户端过滤器,例如 claude,cursor,codex。","cli.bootstrap.install.no-targets":"未检测到可安装的 bootstrap 目标。可显式传入 --clients claude,cursor,windsurf,roo,gemini,codex。","cli.bootstrap.install.installed":"已安装 {path}","cli.bootstrap.install.skipped-header":"已跳过 {path}:Fabric Bootstrap 头部已存在。","cli.bootstrap.install.prepended":"已前置写入 {path}","cli.bootstrap.errors.unknown-client":"未知客户端“{client}”。请使用逗号分隔列表,例如 claude,cursor,codex。","cli.config.description":"管理 Fabric MCP 客户端配置。","cli.config.install.description":"将 Fabric MCP 服务端条目安装到检测到的客户端配置中。","cli.config.install.args.clients.description":"可选的逗号分隔客户端过滤器,例如 cursor,codex,gemini。","cli.config.install.args.dry-run.description":"仅预览将要发生的写入操作,不修改文件。","cli.config.errors.unknown-client":"未知客户端“{client}”。请使用逗号分隔列表,例如 cursor,codex,gemini。","cli.config.errors.expected-object":"{path} 中应为对象。","cli.config.install.no-configs":"未检测到 Fabric MCP 客户端配置。请创建客户端目录,或在 fabric.config.json 中设置 clientPaths。","cli.config.install.no-config-path":"跳过 {client}:未检测到配置路径。","cli.config.install.dry-run":"[dry-run] {client}:将写入 {path}","cli.config.install.wrote":"{client}:已写入 {path}","cli.doctor.description":"运行 Fabric doctor 检查,并可选输出合规审计报告。","cli.doctor.args.target.description":"目标项目路径。默认依次使用 CLI 参数、EXTERNAL_FIXTURE_PATH、fabric.config.json、当前目录。","cli.doctor.args.audit.description":"输出 AI 编辑意图缺少 fab_get_rules 前置调用的违规项。","cli.doctor.args.window-minutes.description":"匹配 fab_get_rules 调用的回看时间窗口,单位为分钟。默认 5 分钟。","cli.doctor.errors.invalid-window":"无效的审计时间窗口:{value}","cli.doctor.audit.preview-only":"fabric.config.json 中 auditMode 为 off;当前 fab doctor --audit 仅执行手动预览,不会改变退出码。","cli.doctor.audit.none":"当前还没有可用于合规审计的 AI 编辑意图记录。","cli.doctor.audit.clean":"已审计的 {count} 个编辑路径都在 {window} 内存在前置 fab_get_rules 调用。","cli.doctor.audit.violations":"有 {count} 个已审计编辑路径在 {window} 内缺少前置 fab_get_rules 调用。","cli.doctor.audit.table.path":"路径","cli.doctor.audit.table.edit":"编辑时间","cli.doctor.audit.table.rules":"最近规则调用","cli.doctor.audit.table.intent":"意图","cli.hooks.description":"管理 Fabric Git 钩子模板。","cli.hooks.install.description":"安装 Fabric Husky pre-commit 钩子模板。","cli.hooks.install.args.target.description":"目标项目路径,默认为当前工作目录。","cli.hooks.errors.package-json-required":"安装 hooks 需要 package.json:{path}","cli.hooks.install.hook-skipped":"{path} 中已存在 Fabric hook,已跳过。","cli.hooks.install.hook-appended":"已向现有 {path} 追加 Fabric hook","cli.hooks.install.hook-created":"已创建 {path}","cli.hooks.install.prepare-left":"保留 {path} 中原有的 prepare 脚本不变","cli.hooks.install.prepare-added":"已向 {path} 添加 prepare 脚本","cli.human-lint.description":"验证锁定的人工编辑区块。","cli.human-lint.args.target.description":"目标项目路径,默认为当前工作目录。","cli.human-lint.drift-detected":"检测到 human-lock 内容漂移。请回退编辑,或在提交前更新已批准的哈希。","cli.human-lint.table.location":"位置","cli.human-lint.table.expected":"预期","cli.human-lint.table.got":"实际","cli.init.description":"在目标项目中初始化 Fabric。","cli.init.args.target.description":"目标项目路径。默认依次使用 CLI 参数、EXTERNAL_FIXTURE_PATH、fabric.config.json、当前目录。","cli.init.args.debug.description":"将目标解析细节输出到 stderr。","cli.init.created-path":"{label} {path}","cli.init.skipped-existing-path":"{label} {path}:已存在。","cli.init.next-step":"{label} {message}","cli.init.reason-message":"{label} {message}","cli.init.next-step.message":"运行 fab hooks install 以添加第 4 天的 pre-commit 流水线。","cli.init.reason-message.body":".fabric/forensic.json 已就绪;请使用 agents-md-init skill 完成 AGENTS.md 初始化。","cli.init.claude-settings.created":"{label} {path},并写入 Claude Stop hook。","cli.init.claude-settings.updated":"{label} {path},并写入 Claude Stop hook。","cli.init.claude-settings.skipped":"{label} {path}:Claude Stop hook 已存在。","cli.init.claude-settings.skipped-invalid":"{label} {path}:无法合并 Claude Stop hook。","cli.init.claude-settings.invalid-object":"{label} {path}:预期为 JSON 对象。","cli.init.claude-settings.invalid-json":"{label} {path}:JSON 无效({reason})。","cli.init.claude-settings.invalid-hooks":'{label} {path}:"hooks" 必须是 JSON 对象。',"cli.init.claude-settings.invalid-stop-array":'{label} {path}:"hooks.Stop" 必须是数组。',"cli.init.errors.abort-existing":"中止:{path} 已存在。fab init 是非破坏性的。","cli.ledger-append.description":"向 Fabric 意图日志追加一条记录。","cli.ledger-append.args.target.description":"目标项目路径,默认为当前工作目录。","cli.ledger-append.args.staged.description":"从暂存变更推导记录(用于 pre-commit 阶段)。","cli.ledger-append.requires-staged":"pre-commit 场景下必须传入 --staged","cli.ledger-append.intent.auto":"自动:{head}{suffix}","cli.ledger-append.intent.auto-more":" 等 {count} 项","cli.pre-commit.description":"复合 pre-commit 钩子:在单个 Node 进程中依次执行 sync-meta --check-only、human-lint、ledger-append --staged。","cli.pre-commit.args.target.description":"项目根目录,默认取当前目录或 EXTERNAL_FIXTURE_PATH。","cli.pre-commit.run-failed":"fabric pre-commit:{name} 失败 - {message}","cli.scan.description":"扫描项目以检测 Fabric 引导候选模块。","cli.scan.args.target.description":"目标绝对路径。默认依次使用 CLI 参数、EXTERNAL_FIXTURE_PATH、fabric.config.json、当前目录。","cli.scan.args.debug.description":"以格式化输出打印检测证据。","cli.scan.args.json.description":"以 JSON 格式输出诊断报告。","cli.scan.report.title":"Fabric 扫描报告","cli.scan.report.target":"目标","cli.scan.report.framework":"框架","cli.scan.report.evidence":"证据","cli.scan.report.readme-quality":"README 质量","cli.scan.report.contributing":"CONTRIBUTING.md","cli.scan.report.files-counted":"文件数","cli.scan.report.ignored-entries":"忽略项","cli.scan.report.existing-fabric":"现有 Fabric 文件","cli.scan.report.recommendations":"建议:","cli.scan.readme-quality.ok":"良好","cli.scan.readme-quality.stub":"草稿","cli.scan.recommendation.init":"L0:运行 fab init,为 AGENTS.md 生成带 TODO 标记的初始骨架。","cli.scan.recommendation.readme":"L0:先补充 README.md,再把项目事实沉淀到 AGENTS.md 引用中。","cli.scan.recommendation.contributing":"L0:添加 CONTRIBUTING.md,或在 AGENTS.md 中留下贡献流程的 TODO 引用。","cli.scan.recommendation.unknown-framework":"L1:当前未检测到框架标记,需要手动补充技术栈 TODO。","cli.scan.recommendation.framework-dirs":"L1:检查 {framework} 目录,后续为其补充作用域化 AGENTS.md 文件。","cli.serve.description":"启动本地 Fabric MCP HTTP 服务。若需绑定到非 localhost,请设置 FABRIC_AUTH_TOKEN 以启用 Bearer 鉴权。","cli.serve.args.port.description":"监听端口,默认 7373。","cli.serve.args.host.description":"监听主机,默认 127.0.0.1。若需绑定到非 localhost,请设置 FABRIC_AUTH_TOKEN 以启用 Bearer 鉴权。","cli.serve.args.target.description":"目标项目路径。默认依次使用 CLI 参数、EXTERNAL_FIXTURE_PATH、fabric.config.json、当前目录。","cli.serve.args.debug.description":"将目标解析细节输出到 stderr。","cli.serve.ready.title":"Fabric 仪表盘","cli.serve.warning.host-fallback":"--host {host} 需要 FABRIC_AUTH_TOKEN;为安全起见已回退到 127.0.0.1","cli.serve.error.port-in-use":"端口 {port} 已被占用,可尝试 --port {nextPort}","cli.sync-meta.description":"从 AGENTS.md 文件同步 Fabric 元数据。","cli.sync-meta.args.target.description":"目标项目路径,默认为当前工作目录。","cli.sync-meta.args.check-only.description":"如果 .fabric/agents.meta.json 已过期,则以代码 1 退出。","cli.sync-meta.drift-detected":"检测到 Fabric 元数据漂移。请运行 fab sync-meta 进行更新。","cli.sync-meta.updated":"{label} {path}","dashboard.app.nav.aria-label":"仪表盘视图导航","dashboard.app.nav.rules.label":"规则树","dashboard.app.nav.rules.label-bilingual":"规则树 Rules Tree","dashboard.app.nav.rules.subtitle":"元图","dashboard.app.nav.locks.label":"人工锁","dashboard.app.nav.locks.label-bilingual":"人工锁 Human Lock","dashboard.app.nav.locks.subtitle":"受保护区域","dashboard.app.nav.timeline.label":"意图时间线","dashboard.app.nav.timeline.label-bilingual":"意图时间线 Intent Timeline","dashboard.app.nav.timeline.subtitle":"日志流","dashboard.app.nav.history.label":"历史回放","dashboard.app.nav.history.label-bilingual":"历史回放 History Replay","dashboard.app.nav.history.subtitle":"时间回溯","dashboard.app.nav.doctor.label":"诊断台","dashboard.app.nav.doctor.label-bilingual":"诊断台 Doctor","dashboard.app.nav.doctor.subtitle":"fab 诊断","dashboard.app.nav.section.diagnostics":"诊断","dashboard.app.nav.drift-check":"漂移检查","dashboard.app.header.connected":"已连接","dashboard.app.header.connecting":"连接中","dashboard.app.live-region.received":"已收到 {type}","dashboard.app.breadcrumb.rules":"rules-tree","dashboard.app.breadcrumb.locks":"human-lock","dashboard.app.breadcrumb.timeline":"intent-timeline","dashboard.app.breadcrumb.history":"history-replay","dashboard.app.breadcrumb.doctor":"doctor","dashboard.rules-tree.title":"规则树浏览器","dashboard.rules-tree.subtitle":".fabric/agents.meta.json · L0/L1/L2 层级 · 感知哈希漂移","dashboard.rules-tree.filter.placeholder":"按文件、glob、优先级、哈希过滤...","dashboard.rules-tree.filter.aria-label":"过滤规则树","dashboard.rules-tree.status.loading":"规则加载中","dashboard.rules-tree.status.nodes":"{count} 个节点 · rev {revision}","dashboard.rules-tree.status.locks":"{count} 个人工锁","dashboard.rules-tree.empty":"没有匹配的规则。","dashboard.rules-tree.tree.aria-label":"Fabric 规则树","dashboard.rules-tree.detail.title":"节点详情","dashboard.rules-tree.detail.empty":"选择一个规则节点以查看作用域、依赖、优先级和哈希。","dashboard.rules-tree.detail.file":"文件","dashboard.rules-tree.detail.scope":"作用域","dashboard.rules-tree.detail.priority":"优先级","dashboard.rules-tree.detail.hash":"哈希","dashboard.rules-tree.detail.no-deps":"无依赖","dashboard.human-lock.title":"人工锁仓库","dashboard.human-lock.subtitle":"等待批准的受保护区域 · 仅允许仪式化写入","dashboard.human-lock.filters.aria-label":"人工锁过滤器","dashboard.human-lock.filters.all":"全部","dashboard.human-lock.filters.drift":"漂移","dashboard.human-lock.filters.approved":"已批准","dashboard.human-lock.summary":"{drift} 处漂移 · {approved} 项已确认","dashboard.human-lock.empty":"当前过滤条件下没有人工锁记录。","dashboard.intent-timeline.title":"意图时间线","dashboard.intent-timeline.subtitle":".intent-ledger.jsonl · AI | Human 双列 · 按时间倒序","dashboard.intent-timeline.filter.label":"来源","dashboard.intent-timeline.filter.all":"全部","dashboard.intent-timeline.summary":"AI {aiCount} · Human {humanCount}","dashboard.intent-timeline.columns.ai.title":"AI","dashboard.intent-timeline.columns.ai.entries":"{count} 条记录","dashboard.intent-timeline.columns.human.title":"人工","dashboard.intent-timeline.columns.human.entries":"{count} 条记录","dashboard.intent-timeline.empty":"没有找到日志记录。","dashboard.intent-timeline.annotate.missing-id":"缺少 id,无法为这条日志添加注释。","dashboard.history-replay.title":"历史回放","dashboard.history-replay.subtitle":"穿越日志提交,在任意记录点重新还原规则树状态","dashboard.history-replay.toolbar.scrub":"拖动","dashboard.history-replay.toolbar.latest":"最新","dashboard.history-replay.selected.none":"尚未选择历史记录","dashboard.history-replay.status.replay-points":"{count} 个回放点","dashboard.history-replay.status.entries-applied":"已应用 {count} 条记录","dashboard.history-replay.empty.entries":"没有可用于回放的日志记录。","dashboard.history-replay.state.title":"查看 {label} 时刻的状态","dashboard.history-replay.state.meta":"ledger {ledgerId} · commit {commit} · {mode}","dashboard.history-replay.status.loading":"快照加载中","dashboard.history-replay.status.nodes":"{count} 个节点","dashboard.history-replay.status.unknown-revision":"未知 revision","dashboard.history-replay.tree.aria-label":"历史 Fabric 规则树","dashboard.history-replay.empty.loading":"正在加载历史快照...","dashboard.history-replay.empty.select":"请选择一条时间线记录以回放其状态。","dashboard.history-replay.meta.not-available":"不可用","dashboard.history-replay.meta.pending":"等待中","dashboard.history-replay.meta.na":"无","dashboard.doctor.title":"诊断控制台","dashboard.doctor.subtitle":"fab doctor 面板 · 框架、入口点、revision 漂移、受保护路径","dashboard.doctor.toolbar.overall":"整体状态","dashboard.doctor.toolbar.no-summary":"暂无摘要","dashboard.doctor.toolbar.entry-points-summary":"{framework} · {count} 个入口点","dashboard.doctor.toolbar.entry-point-summary":"{framework} · {count} 个入口点","dashboard.doctor.empty.loading":"正在加载 doctor 报告...","dashboard.doctor.summary.framework":"框架","dashboard.doctor.summary.protected-paths":"受保护路径","dashboard.doctor.summary.intent-ledger":"意图日志","dashboard.doctor.summary.no-meta-revision":"暂无 meta revision","dashboard.doctor.summary.tracked-paths.none":"没有跟踪路径","dashboard.doctor.summary.tracked-paths.some":"已跟踪 {count} 项","dashboard.doctor.summary.hashes-intact":"所有已批准哈希均完好","dashboard.doctor.summary.drifted":"{count} 项发生漂移","dashboard.doctor.summary.no-ledger-entries":"暂无日志记录","dashboard.doctor.card.entry-points":"入口点","dashboard.doctor.card.checks":"检查项","dashboard.doctor.empty.entry-points":"当前未检测到入口点。","dashboard.doctor.framework.unknown":"未知","dashboard.doctor.age.none":"暂无记录","dashboard.doctor.age.seconds":"{count} 秒前","dashboard.doctor.age.minutes":"{count} 分钟前","dashboard.doctor.age.hours":"{count} 小时前","dashboard.doctor.age.days":"{count} 天前","dashboard.doctor.age.weeks":"{count} 周前","dashboard.shared.refresh":"刷新","dashboard.shared.loading":"加载中","dashboard.shared.status.ok":"正常","dashboard.shared.status.warn":"警告","dashboard.shared.status.error":"错误","dashboard.shared.status.confirmed":"已确认","dashboard.shared.status.hash-drift":"哈希漂移","dashboard.shared.status.stale":"过期","dashboard.shared.status.orphan":"孤立","dashboard.shared.status.attention":"注意","dashboard.source.ai":"AI","dashboard.source.human":"人工","dashboard.timeline-entry.aria-label":"{source} 意图 {intent}","dashboard.timeline-entry.working-tree":"工作区","dashboard.timeline-entry.parent":"父提交 {parent}","dashboard.timeline-entry.paths":"路径","dashboard.timeline-entry.annotate":"添加注释","dashboard.timeline-entry.annotation-label":"人工注释","dashboard.timeline-entry.annotation-placeholder":"说明审核结论或批准背景...","dashboard.timeline-entry.annotation-save":"保存注释","dashboard.tree-node.locked":"已锁定","dashboard.tree-node.stale.hash-mismatch":"哈希不匹配","dashboard.tree-node.stale.orphan":"孤立","dashboard.lock-card.aria-label":"{file} {lineRange} {status}","dashboard.lock-card.status.drift":"哈希漂移","dashboard.lock-card.status.confirmed":"已确认","dashboard.lock-card.hash.locked":"锁定哈希","dashboard.lock-card.hash.current":"当前哈希","dashboard.lock-card.hash.diff":"差异","dashboard.lock-card.preview.drift":"漂移","dashboard.lock-card.preview.sync":"同步","dashboard.lock-card.preview.drift-detail":"哈希与受保护区域不一致。","dashboard.lock-card.preview.sync-detail":"受保护区域当前保持同步。","dashboard.lock-card.footer.region":"受保护区域 · {count} 行","dashboard.lock-card.button.approve":"批准新哈希","dashboard.lock-card.button.confirmed":"已确认","dashboard.lock-card.diff.hash-mismatch":"哈希不一致","dashboard.lock-card.diff.no-changes":"无变更","dashboard.lock-card.diff.with-bytes":"+{added} / -{removed} · {bytes} 字节","dashboard.lock-card.diff.without-bytes":"+{added} / -{removed}","dashboard.approve-button.retry":"重试"},Er={en:Tr,"zh-CN":Cr};function Ar(t,e=Er){const a=e[t]??e.en,r=e.en;return(n,i)=>{const s=a[n]??r[n]??n;return i===void 0?s:Object.entries(i).reduce((o,[c,l])=>o.replaceAll(`{${c}}`,l),s)}}function Ir(t){if(typeof t!="string")return"en";const e=t.trim().toLowerCase().replace(/\..*$/,"").replace(/_/g,"-");return e.length===0?"en":e==="zh"||e.startsWith("zh-")?"zh-CN":"en"}function $r(){return typeof navigator<"u"&&typeof navigator.language=="string"?Ir(navigator.language):"en"}function Rr(t=$r()){return{locale:t,t:Ar(t)}}const Za=dr(null);function Or({children:t}){const e=ne(()=>Rr(),[]);return d(Za.Provider,{value:e,children:t})}function z(){const t=ur(Za);if(t===null)throw new Error("useI18n must be used within an I18nProvider.");return t}function Da({variant:t,state:e="idle",size:a="md",onClick:r,children:n,ariaLabel:i}){const{t:s}=z(),[o,c]=j(e),l=e==="idle"?o:e,h=l==="busy",u=async()=>{if(!h){c("busy");try{await r(),c("success"),window.setTimeout(()=>c("idle"),900)}catch{c("error"),window.setTimeout(()=>c("idle"),1400)}}};return d("button",{type:"button",className:`action-button action-${t} action-${a} action-${l}`,"aria-label":i,"aria-busy":h,"aria-disabled":h,onClick:u,children:[h?d("span",{className:"spinner","aria-hidden":"true"}):null,l==="success"?d("span",{"aria-hidden":"true",children:"✓"}):null,l==="error"?s("dashboard.approve-button.retry"):n]})}const jr={ok:"dashboard.shared.status.confirmed",drift:"dashboard.shared.status.hash-drift",stale:"dashboard.shared.status.stale",orphan:"dashboard.shared.status.orphan",locked:"dashboard.shared.status.attention"};function ie({kind:t,severity:e,message:a,diffStats:r}){const{t:n}=z();if(e==="ok"&&t==="dot")return null;const i=a??n(jr[e]),s=r===void 0?"":` +${r.added} / -${r.removed}`,o=`drift-indicator drift-${t} drift-${e}`;return t==="dot"?d("span",{className:o,"aria-label":i}):t==="banner"?d("div",{className:o,role:"status",children:[d("span",{"aria-hidden":"true",children:"!"}),d("span",{children:[i,s]})]}):d("span",{className:o,children:[d("span",{"aria-hidden":"true",children:e==="ok"?"✓":"!"}),d("span",{children:[i,s]})]})}function Lr({entry:t,currentHash:e,diffStats:a,diffPreview:r=[],onApprove:n,busy:i=!1}){const{t:s}=z(),o=e!==void 0&&e!==t.hash,c=o?"drift":"ok",l=s(o?"dashboard.lock-card.status.drift":"dashboard.lock-card.status.confirmed"),h=`L${t.start_line}-L${t.end_line}`;return d("article",{className:`lock-card lock-${c} ${i?"is-busy":""}`,"aria-label":s("dashboard.lock-card.aria-label",{file:t.file,lineRange:h,status:l}),children:[d("header",{className:"lock-head",children:[d("div",{className:"lock-icon","aria-hidden":"true",children:o?"!":"✓"}),d("div",{className:"lock-title",children:[d("strong",{children:t.file}),d("span",{children:h})]}),d(ie,{kind:"pill",severity:o?"drift":"ok",message:l})]}),d("div",{className:"lock-body",children:[d("div",{className:"hash-block",children:[d(lt,{label:s("dashboard.lock-card.hash.locked"),value:t.hash,stale:o}),d(lt,{label:s("dashboard.lock-card.hash.current"),value:e??s("dashboard.history-replay.meta.not-available")}),d(lt,{label:s("dashboard.lock-card.hash.diff"),value:Pr(a,o,s),accent:o})]}),d("div",{className:"preview",children:[d("div",{className:"preview-head",children:[d("span",{children:[t.file," · ",h]}),d("span",{children:s(o?"dashboard.lock-card.preview.drift":"dashboard.lock-card.preview.sync")})]}),d("pre",{className:"preview-body",children:r.length>0?r.map(u=>d("span",{className:`line-${u.kind}`,children:[d("span",{className:"line-num",children:u.line}),u.text,`
|
|
2
|
+
`]},`${u.kind}:${u.line}:${u.text}`)):`${t.file}
|
|
3
|
+
${h}
|
|
4
|
+
${s(o?"dashboard.lock-card.preview.drift-detail":"dashboard.lock-card.preview.sync-detail")}`})]})]}),d("footer",{className:"lock-foot",children:[d("span",{className:"meta-line",children:s("dashboard.lock-card.footer.region",{count:String(t.end_line-t.start_line+1)})}),o&&e!==void 0&&n!==void 0?d(Da,{variant:"approve",state:i?"busy":"idle",ariaLabel:s("dashboard.lock-card.button.approve"),onClick:()=>n(t),children:s("dashboard.lock-card.button.approve")}):d("button",{className:"action-button action-approve action-success",type:"button","aria-disabled":"true",children:["✓ ",s("dashboard.lock-card.button.confirmed")]})]})]})}function lt({label:t,value:e,stale:a=!1,accent:r=!1}){return d("div",{className:"hash-row",children:[d("span",{className:"hash-key",children:t}),d("span",{className:`hash-value ${a?"is-stale":""} ${r?"is-accent":""}`,children:e})]})}function Pr(t,e,a){return t===void 0?a(e?"dashboard.lock-card.diff.hash-mismatch":"dashboard.lock-card.diff.no-changes"):t.bytes!==void 0?a("dashboard.lock-card.diff.with-bytes",{added:String(t.added),removed:String(t.removed),bytes:String(t.bytes)}):a("dashboard.lock-card.diff.without-bytes",{added:String(t.added),removed:String(t.removed)})}function vt({source:t,size:e="sm",variant:a="filled",interactive:r=!1,selected:n=!1,onClick:i}){const{t:s}=z(),o=["source-badge",`source-badge-${t}`,`source-badge-${e}`,`source-badge-${a}`,n?"is-selected":""].filter(Boolean).join(" "),c=s(`dashboard.source.${t}`);return r?d("button",{className:o,type:"button","aria-pressed":n,onClick:i,children:[d("span",{className:"source-badge-dot","aria-hidden":"true"}),c]}):d("span",{className:o,children:[d("span",{className:"source-badge-dot","aria-hidden":"true"}),c]})}function Ma({entry:t,onAnnotate:e,expanded:a=!1,readOnly:r=!1}){const{locale:n,t:i}=z(),[s,o]=j(a),[c,l]=j(""),h=t.source==="ai",u=!r&&h&&e!==void 0&&t.id!==void 0,g=async()=>{const f=c.trim();!h||e===void 0||f.length===0||(await e(t,f),l(""),o(!1))};return d("article",{className:`timeline-entry timeline-${t.source}`,"aria-label":i("dashboard.timeline-entry.aria-label",{source:i(`dashboard.source.${t.source}`),intent:t.intent}),children:[d("div",{className:`dot-axis ${t.source}`,"aria-hidden":"true"}),d("div",{className:"timeline-head",children:[d(vt,{source:t.source}),h?d("span",{className:"commit-hash",children:t.commit_sha??i("dashboard.timeline-entry.working-tree")}):null,h?null:d("span",{className:"commit-hash",children:i("dashboard.timeline-entry.parent",{parent:t.parent_sha})}),h?null:d("span",{className:"diff-badge",children:t.diff_stat}),d("time",{className:"entry-time",dateTime:new Date(t.ts).toISOString(),children:Fr(t.ts,n)})]}),d("h3",{className:"entry-title",children:t.intent}),d("div",{className:"entry-meta",children:[d("span",{children:[d("span",{className:"meta-key",children:i("dashboard.timeline-entry.paths")})," ",t.affected_paths.length]}),t.affected_paths.slice(0,3).map(f=>d("span",{children:f},f))]}),!h&&t.annotation!==void 0?d("div",{className:"entry-body",children:t.annotation}):null,h&&u?d("div",{className:"entry-foot",children:d("button",{className:"ghost-button",type:"button",onClick:()=>o(f=>!f),children:i("dashboard.timeline-entry.annotate")})}):null,s&&h?d("form",{className:"annotate-form",onSubmit:f=>{f.preventDefault(),g()},children:[d("label",{htmlFor:`annotate-${t.id??t.ts}`,children:i("dashboard.timeline-entry.annotation-label")}),d("input",{id:`annotate-${t.id??t.ts}`,className:"annotate-input",value:c,onInput:f=>l(f.currentTarget.value),placeholder:i("dashboard.timeline-entry.annotation-placeholder")}),d(Da,{variant:"annotate",size:"sm",onClick:g,children:i("dashboard.timeline-entry.annotation-save")})]}):null]})}function Fr(t,e){return new Intl.DateTimeFormat(e,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(t))}function Lt({node:t,level:e,selected:a=!1,onSelect:r,humanLockedNearby:n=!1,staleReason:i=null,defaultExpanded:s=!1,readOnly:o=!1,children:c=[]}){const{t:l}=z(),[h,u]=j(s),g=c.length>0,f=t.file,v=i===null?"ok":i==="orphan"?"orphan":"stale",E=()=>{o||(g&&u(w=>!w),r?.(f))},x=w=>{o||((w.key==="Enter"||w.key===" ")&&(w.preventDefault(),E()),w.key==="ArrowRight"&&g&&u(!0),w.key==="ArrowLeft"&&g&&u(!1))};return d("div",{className:`tree-node-group tree-level-${e}`,children:[d("div",{className:["tree-node",a?"is-selected":"",h?"is-expanded":"",n?"is-locked":"",i!==null?"is-stale":"",o?"is-readonly":""].filter(Boolean).join(" "),role:"treeitem","aria-expanded":g?h:void 0,"aria-level":e+1,"aria-readonly":o||void 0,tabIndex:o?-1:0,onClick:o?void 0:E,onKeyDown:o?void 0:x,children:[d("span",{className:"tree-caret","aria-hidden":"true",children:g?"›":"·"}),d("span",{className:"tree-icon","aria-hidden":"true",children:e===0?"F":e===1?"D":"R"}),d("span",{className:"tree-label",children:f}),n?d("span",{className:"badge badge-locked",children:l("dashboard.tree-node.locked")}):null,i!==null?d(ie,{kind:"pill",severity:v,message:l(`dashboard.tree-node.stale.${i}`)}):null,d("span",{className:"tree-meta",children:[d("span",{className:"badge badge-level",children:["L",e]}),d("span",{className:"tree-hash",children:Zr(t.hash)})]})]}),g&&h?d("div",{className:"tree-children",role:"group",children:c.map(w=>d(Lt,{...w,onSelect:r,readOnly:o},`${w.node.file}:${w.level}`))}):null]})}function Zr(t){return t.length>18?`${t.slice(0,12)}…`:t}var I;(function(t){t.assertEqual=n=>{};function e(n){}t.assertIs=e;function a(n){throw new Error}t.assertNever=a,t.arrayToEnum=n=>{const i={};for(const s of n)i[s]=s;return i},t.getValidEnumValues=n=>{const i=t.objectKeys(n).filter(o=>typeof n[n[o]]!="number"),s={};for(const o of i)s[o]=n[o];return t.objectValues(s)},t.objectValues=n=>t.objectKeys(n).map(function(i){return n[i]}),t.objectKeys=typeof Object.keys=="function"?n=>Object.keys(n):n=>{const i=[];for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&i.push(s);return i},t.find=(n,i)=>{for(const s of n)if(i(s))return s},t.isInteger=typeof Number.isInteger=="function"?n=>Number.isInteger(n):n=>typeof n=="number"&&Number.isFinite(n)&&Math.floor(n)===n;function r(n,i=" | "){return n.map(s=>typeof s=="string"?`'${s}'`:s).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(n,i)=>typeof i=="bigint"?i.toString():i})(I||(I={}));var Qt;(function(t){t.mergeShapes=(e,a)=>({...e,...a})})(Qt||(Qt={}));const b=I.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),re=t=>{switch(typeof t){case"undefined":return b.undefined;case"string":return b.string;case"number":return Number.isNaN(t)?b.nan:b.number;case"boolean":return b.boolean;case"function":return b.function;case"bigint":return b.bigint;case"symbol":return b.symbol;case"object":return Array.isArray(t)?b.array:t===null?b.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?b.promise:typeof Map<"u"&&t instanceof Map?b.map:typeof Set<"u"&&t instanceof Set?b.set:typeof Date<"u"&&t instanceof Date?b.date:b.object;default:return b.unknown}},p=I.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class ee extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const a=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,a):this.__proto__=a,this.name="ZodError",this.issues=e}format(e){const a=e||function(i){return i.message},r={_errors:[]},n=i=>{for(const s of i.issues)if(s.code==="invalid_union")s.unionErrors.map(n);else if(s.code==="invalid_return_type")n(s.returnTypeError);else if(s.code==="invalid_arguments")n(s.argumentsError);else if(s.path.length===0)r._errors.push(a(s));else{let o=r,c=0;for(;c<s.path.length;){const l=s.path[c];c===s.path.length-1?(o[l]=o[l]||{_errors:[]},o[l]._errors.push(a(s))):o[l]=o[l]||{_errors:[]},o=o[l],c++}}};return n(this),r}static assert(e){if(!(e instanceof ee))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,I.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=a=>a.message){const a={},r=[];for(const n of this.issues)if(n.path.length>0){const i=n.path[0];a[i]=a[i]||[],a[i].push(e(n))}else r.push(e(n));return{formErrors:r,fieldErrors:a}}get formErrors(){return this.flatten()}}ee.create=t=>new ee(t);const yt=(t,e)=>{let a;switch(t.code){case p.invalid_type:t.received===b.undefined?a="Required":a=`Expected ${t.expected}, received ${t.received}`;break;case p.invalid_literal:a=`Invalid literal value, expected ${JSON.stringify(t.expected,I.jsonStringifyReplacer)}`;break;case p.unrecognized_keys:a=`Unrecognized key(s) in object: ${I.joinValues(t.keys,", ")}`;break;case p.invalid_union:a="Invalid input";break;case p.invalid_union_discriminator:a=`Invalid discriminator value. Expected ${I.joinValues(t.options)}`;break;case p.invalid_enum_value:a=`Invalid enum value. Expected ${I.joinValues(t.options)}, received '${t.received}'`;break;case p.invalid_arguments:a="Invalid function arguments";break;case p.invalid_return_type:a="Invalid function return type";break;case p.invalid_date:a="Invalid date";break;case p.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(a=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(a=`${a} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?a=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?a=`Invalid input: must end with "${t.validation.endsWith}"`:I.assertNever(t.validation):t.validation!=="regex"?a=`Invalid ${t.validation}`:a="Invalid";break;case p.too_small:t.type==="array"?a=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?a=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?a=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?a=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?a=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:a="Invalid input";break;case p.too_big:t.type==="array"?a=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?a=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?a=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?a=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?a=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:a="Invalid input";break;case p.custom:a="Invalid input";break;case p.invalid_intersection_types:a="Intersection results could not be merged";break;case p.not_multiple_of:a=`Number must be a multiple of ${t.multipleOf}`;break;case p.not_finite:a="Number must be finite";break;default:a=e.defaultError,I.assertNever(t)}return{message:a}};let Dr=yt;function Mr(){return Dr}const Ur=t=>{const{data:e,path:a,errorMaps:r,issueData:n}=t,i=[...a,...n.path||[]],s={...n,path:i};if(n.message!==void 0)return{...n,path:i,message:n.message};let o="";const c=r.filter(l=>!!l).slice().reverse();for(const l of c)o=l(s,{data:e,defaultError:o}).message;return{...n,path:i,message:o}};function _(t,e){const a=Mr(),r=Ur({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,a,a===yt?void 0:yt].filter(n=>!!n)});t.common.issues.push(r)}class D{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,a){const r=[];for(const n of a){if(n.status==="aborted")return N;n.status==="dirty"&&e.dirty(),r.push(n.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,a){const r=[];for(const n of a){const i=await n.key,s=await n.value;r.push({key:i,value:s})}return D.mergeObjectSync(e,r)}static mergeObjectSync(e,a){const r={};for(const n of a){const{key:i,value:s}=n;if(i.status==="aborted"||s.status==="aborted")return N;i.status==="dirty"&&e.dirty(),s.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof s.value<"u"||n.alwaysSet)&&(r[i.value]=s.value)}return{status:e.value,value:r}}}const N=Object.freeze({status:"aborted"}),we=t=>({status:"dirty",value:t}),W=t=>({status:"valid",value:t}),ea=t=>t.status==="aborted",ta=t=>t.status==="dirty",be=t=>t.status==="valid",Ve=t=>typeof Promise<"u"&&t instanceof Promise;var k;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(k||(k={}));class J{constructor(e,a,r,n){this._cachedPath=[],this.parent=e,this.data=a,this._path=r,this._key=n}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const aa=(t,e)=>{if(be(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const a=new ee(t.common.issues);return this._error=a,this._error}}};function T(t){if(!t)return{};const{errorMap:e,invalid_type_error:a,required_error:r,description:n}=t;if(e&&(a||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:n}:{errorMap:(s,o)=>{const{message:c}=t;return s.code==="invalid_enum_value"?{message:c??o.defaultError}:typeof o.data>"u"?{message:c??r??o.defaultError}:s.code!=="invalid_type"?{message:o.defaultError}:{message:c??a??o.defaultError}},description:n}}class A{get description(){return this._def.description}_getType(e){return re(e.data)}_getOrReturnCtx(e,a){return a||{common:e.parent.common,data:e.data,parsedType:re(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new D,ctx:{common:e.parent.common,data:e.data,parsedType:re(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const a=this._parse(e);if(Ve(a))throw new Error("Synchronous parse encountered promise.");return a}_parseAsync(e){const a=this._parse(e);return Promise.resolve(a)}parse(e,a){const r=this.safeParse(e,a);if(r.success)return r.data;throw r.error}safeParse(e,a){const r={common:{issues:[],async:a?.async??!1,contextualErrorMap:a?.errorMap},path:a?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:re(e)},n=this._parseSync({data:e,path:r.path,parent:r});return aa(r,n)}"~validate"(e){const a={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:re(e)};if(!this["~standard"].async)try{const r=this._parseSync({data:e,path:[],parent:a});return be(r)?{value:r.value}:{issues:a.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),a.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:a}).then(r=>be(r)?{value:r.value}:{issues:a.common.issues})}async parseAsync(e,a){const r=await this.safeParseAsync(e,a);if(r.success)return r.data;throw r.error}async safeParseAsync(e,a){const r={common:{issues:[],contextualErrorMap:a?.errorMap,async:!0},path:a?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:re(e)},n=this._parse({data:e,path:r.path,parent:r}),i=await(Ve(n)?n:Promise.resolve(n));return aa(r,i)}refine(e,a){const r=n=>typeof a=="string"||typeof a>"u"?{message:a}:typeof a=="function"?a(n):a;return this._refinement((n,i)=>{const s=e(n),o=()=>i.addIssue({code:p.custom,...r(n)});return typeof Promise<"u"&&s instanceof Promise?s.then(c=>c?!0:(o(),!1)):s?!0:(o(),!1)})}refinement(e,a){return this._refinement((r,n)=>e(r)?!0:(n.addIssue(typeof a=="function"?a(r,n):a),!1))}_refinement(e){return new oe({schema:this,typeName:S.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:a=>this["~validate"](a)}}optional(){return Q.create(this,this._def)}nullable(){return he.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return G.create(this)}promise(){return Je.create(this,this._def)}or(e){return Be.create([this,e],this._def)}and(e){return We.create(this,e,this._def)}transform(e){return new oe({...T(this._def),schema:this,typeName:S.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const a=typeof e=="function"?e:()=>e;return new Xe({...T(this._def),innerType:this,defaultValue:a,typeName:S.ZodDefault})}brand(){return new za({typeName:S.ZodBranded,type:this,...T(this._def)})}catch(e){const a=typeof e=="function"?e:()=>e;return new Ke({...T(this._def),innerType:this,catchValue:a,typeName:S.ZodCatch})}describe(e){const a=this.constructor;return new a({...this._def,description:e})}pipe(e){return Ft.create(this,e)}readonly(){return Ye.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Hr=/^c[^\s-]{8,}$/i,Vr=/^[0-9a-z]+$/,zr=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Br=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Wr=/^[a-z0-9_-]{21}$/i,qr=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Gr=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Jr=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Xr="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let ct;const Kr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Yr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Qr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,en=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,tn=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,an=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ua="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",rn=new RegExp(`^${Ua}$`);function Ha(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);const a=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${a}`}function nn(t){return new RegExp(`^${Ha(t)}$`)}function sn(t){let e=`${Ua}T${Ha(t)}`;const a=[];return a.push(t.local?"Z?":"Z"),t.offset&&a.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${a.join("|")})`,new RegExp(`^${e}$`)}function on(t,e){return!!((e==="v4"||!e)&&Kr.test(t)||(e==="v6"||!e)&&Qr.test(t))}function dn(t,e){if(!qr.test(t))return!1;try{const[a]=t.split(".");if(!a)return!1;const r=a.replace(/-/g,"+").replace(/_/g,"/").padEnd(a.length+(4-a.length%4)%4,"="),n=JSON.parse(atob(r));return!(typeof n!="object"||n===null||"typ"in n&&n?.typ!=="JWT"||!n.alg||e&&n.alg!==e)}catch{return!1}}function ln(t,e){return!!((e==="v4"||!e)&&Yr.test(t)||(e==="v6"||!e)&&en.test(t))}class Y extends A{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==b.string){const i=this._getOrReturnCtx(e);return _(i,{code:p.invalid_type,expected:b.string,received:i.parsedType}),N}const r=new D;let n;for(const i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(n=this._getOrReturnCtx(e,n),_(n,{code:p.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(n=this._getOrReturnCtx(e,n),_(n,{code:p.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){const s=e.data.length>i.value,o=e.data.length<i.value;(s||o)&&(n=this._getOrReturnCtx(e,n),s?_(n,{code:p.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):o&&_(n,{code:p.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Jr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"email",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")ct||(ct=new RegExp(Xr,"u")),ct.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"emoji",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Br.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"uuid",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Wr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"nanoid",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Hr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cuid",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Vr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cuid2",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")zr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"ulid",code:p.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),_(n,{validation:"url",code:p.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"regex",code:p.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?sn(i).test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?rn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?nn(i).test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:p.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Gr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"duration",code:p.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?on(e.data,i.version)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"ip",code:p.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?dn(e.data,i.alg)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"jwt",code:p.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?ln(e.data,i.version)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cidr",code:p.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?tn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"base64",code:p.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?an.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"base64url",code:p.invalid_string,message:i.message}),r.dirty()):I.assertNever(i);return{status:r.value,value:e.data}}_regex(e,a,r){return this.refinement(n=>e.test(n),{validation:a,code:p.invalid_string,...k.errToObj(r)})}_addCheck(e){return new Y({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...k.errToObj(e)})}url(e){return this._addCheck({kind:"url",...k.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...k.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...k.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...k.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...k.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...k.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...k.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...k.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...k.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...k.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...k.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...k.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...k.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...k.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...k.errToObj(e)})}regex(e,a){return this._addCheck({kind:"regex",regex:e,...k.errToObj(a)})}includes(e,a){return this._addCheck({kind:"includes",value:e,position:a?.position,...k.errToObj(a?.message)})}startsWith(e,a){return this._addCheck({kind:"startsWith",value:e,...k.errToObj(a)})}endsWith(e,a){return this._addCheck({kind:"endsWith",value:e,...k.errToObj(a)})}min(e,a){return this._addCheck({kind:"min",value:e,...k.errToObj(a)})}max(e,a){return this._addCheck({kind:"max",value:e,...k.errToObj(a)})}length(e,a){return this._addCheck({kind:"length",value:e,...k.errToObj(a)})}nonempty(e){return this.min(1,k.errToObj(e))}trim(){return new Y({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Y({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Y({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxLength(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}}Y.create=t=>new Y({checks:[],typeName:S.ZodString,coerce:t?.coerce??!1,...T(t)});function cn(t,e){const a=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,n=a>r?a:r,i=Number.parseInt(t.toFixed(n).replace(".","")),s=Number.parseInt(e.toFixed(n).replace(".",""));return i%s/10**n}class ge extends A{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==b.number){const i=this._getOrReturnCtx(e);return _(i,{code:p.invalid_type,expected:b.number,received:i.parsedType}),N}let r;const n=new D;for(const i of this._def.checks)i.kind==="int"?I.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),_(r,{code:p.invalid_type,expected:"integer",received:"float",message:i.message}),n.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),n.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),n.dirty()):i.kind==="multipleOf"?cn(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.not_multiple_of,multipleOf:i.value,message:i.message}),n.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),_(r,{code:p.not_finite,message:i.message}),n.dirty()):I.assertNever(i);return{status:n.value,value:e.data}}gte(e,a){return this.setLimit("min",e,!0,k.toString(a))}gt(e,a){return this.setLimit("min",e,!1,k.toString(a))}lte(e,a){return this.setLimit("max",e,!0,k.toString(a))}lt(e,a){return this.setLimit("max",e,!1,k.toString(a))}setLimit(e,a,r,n){return new ge({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:k.toString(n)}]})}_addCheck(e){return new ge({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:k.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:k.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:k.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:k.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:k.toString(e)})}multipleOf(e,a){return this._addCheck({kind:"multipleOf",value:e,message:k.toString(a)})}finite(e){return this._addCheck({kind:"finite",message:k.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:k.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:k.toString(e)})}get minValue(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxValue(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&I.isInteger(e.value))}get isFinite(){let e=null,a=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(a===null||r.value>a)&&(a=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(a)&&Number.isFinite(e)}}ge.create=t=>new ge({checks:[],typeName:S.ZodNumber,coerce:t?.coerce||!1,...T(t)});class Se extends A{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==b.bigint)return this._getInvalidInput(e);let r;const n=new D;for(const i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),n.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),n.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),_(r,{code:p.not_multiple_of,multipleOf:i.value,message:i.message}),n.dirty()):I.assertNever(i);return{status:n.value,value:e.data}}_getInvalidInput(e){const a=this._getOrReturnCtx(e);return _(a,{code:p.invalid_type,expected:b.bigint,received:a.parsedType}),N}gte(e,a){return this.setLimit("min",e,!0,k.toString(a))}gt(e,a){return this.setLimit("min",e,!1,k.toString(a))}lte(e,a){return this.setLimit("max",e,!0,k.toString(a))}lt(e,a){return this.setLimit("max",e,!1,k.toString(a))}setLimit(e,a,r,n){return new Se({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:k.toString(n)}]})}_addCheck(e){return new Se({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:k.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:k.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:k.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:k.toString(e)})}multipleOf(e,a){return this._addCheck({kind:"multipleOf",value:e,message:k.toString(a)})}get minValue(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxValue(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}}Se.create=t=>new Se({checks:[],typeName:S.ZodBigInt,coerce:t?.coerce??!1,...T(t)});class kt extends A{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==b.boolean){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.boolean,received:r.parsedType}),N}return W(e.data)}}kt.create=t=>new kt({typeName:S.ZodBoolean,coerce:t?.coerce||!1,...T(t)});class ze extends A{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==b.date){const i=this._getOrReturnCtx(e);return _(i,{code:p.invalid_type,expected:b.date,received:i.parsedType}),N}if(Number.isNaN(e.data.getTime())){const i=this._getOrReturnCtx(e);return _(i,{code:p.invalid_date}),N}const r=new D;let n;for(const i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(n=this._getOrReturnCtx(e,n),_(n,{code:p.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(n=this._getOrReturnCtx(e,n),_(n,{code:p.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):I.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new ze({...this._def,checks:[...this._def.checks,e]})}min(e,a){return this._addCheck({kind:"min",value:e.getTime(),message:k.toString(a)})}max(e,a){return this._addCheck({kind:"max",value:e.getTime(),message:k.toString(a)})}get minDate(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e!=null?new Date(e):null}}ze.create=t=>new ze({checks:[],coerce:t?.coerce||!1,typeName:S.ZodDate,...T(t)});class ra extends A{_parse(e){if(this._getType(e)!==b.symbol){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.symbol,received:r.parsedType}),N}return W(e.data)}}ra.create=t=>new ra({typeName:S.ZodSymbol,...T(t)});class wt extends A{_parse(e){if(this._getType(e)!==b.undefined){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.undefined,received:r.parsedType}),N}return W(e.data)}}wt.create=t=>new wt({typeName:S.ZodUndefined,...T(t)});class xt extends A{_parse(e){if(this._getType(e)!==b.null){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.null,received:r.parsedType}),N}return W(e.data)}}xt.create=t=>new xt({typeName:S.ZodNull,...T(t)});class na extends A{constructor(){super(...arguments),this._any=!0}_parse(e){return W(e.data)}}na.create=t=>new na({typeName:S.ZodAny,...T(t)});class ia extends A{constructor(){super(...arguments),this._unknown=!0}_parse(e){return W(e.data)}}ia.create=t=>new ia({typeName:S.ZodUnknown,...T(t)});class se extends A{_parse(e){const a=this._getOrReturnCtx(e);return _(a,{code:p.invalid_type,expected:b.never,received:a.parsedType}),N}}se.create=t=>new se({typeName:S.ZodNever,...T(t)});class sa extends A{_parse(e){if(this._getType(e)!==b.undefined){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.void,received:r.parsedType}),N}return W(e.data)}}sa.create=t=>new sa({typeName:S.ZodVoid,...T(t)});class G extends A{_parse(e){const{ctx:a,status:r}=this._processInputParams(e),n=this._def;if(a.parsedType!==b.array)return _(a,{code:p.invalid_type,expected:b.array,received:a.parsedType}),N;if(n.exactLength!==null){const s=a.data.length>n.exactLength.value,o=a.data.length<n.exactLength.value;(s||o)&&(_(a,{code:s?p.too_big:p.too_small,minimum:o?n.exactLength.value:void 0,maximum:s?n.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:n.exactLength.message}),r.dirty())}if(n.minLength!==null&&a.data.length<n.minLength.value&&(_(a,{code:p.too_small,minimum:n.minLength.value,type:"array",inclusive:!0,exact:!1,message:n.minLength.message}),r.dirty()),n.maxLength!==null&&a.data.length>n.maxLength.value&&(_(a,{code:p.too_big,maximum:n.maxLength.value,type:"array",inclusive:!0,exact:!1,message:n.maxLength.message}),r.dirty()),a.common.async)return Promise.all([...a.data].map((s,o)=>n.type._parseAsync(new J(a,s,a.path,o)))).then(s=>D.mergeArray(r,s));const i=[...a.data].map((s,o)=>n.type._parseSync(new J(a,s,a.path,o)));return D.mergeArray(r,i)}get element(){return this._def.type}min(e,a){return new G({...this._def,minLength:{value:e,message:k.toString(a)}})}max(e,a){return new G({...this._def,maxLength:{value:e,message:k.toString(a)}})}length(e,a){return new G({...this._def,exactLength:{value:e,message:k.toString(a)}})}nonempty(e){return this.min(1,e)}}G.create=(t,e)=>new G({type:t,minLength:null,maxLength:null,exactLength:null,typeName:S.ZodArray,...T(e)});function fe(t){if(t instanceof Z){const e={};for(const a in t.shape){const r=t.shape[a];e[a]=Q.create(fe(r))}return new Z({...t._def,shape:()=>e})}else return t instanceof G?new G({...t._def,type:fe(t.element)}):t instanceof Q?Q.create(fe(t.unwrap())):t instanceof he?he.create(fe(t.unwrap())):t instanceof ce?ce.create(t.items.map(e=>fe(e))):t}class Z extends A{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),a=I.objectKeys(e);return this._cached={shape:e,keys:a},this._cached}_parse(e){if(this._getType(e)!==b.object){const l=this._getOrReturnCtx(e);return _(l,{code:p.invalid_type,expected:b.object,received:l.parsedType}),N}const{status:r,ctx:n}=this._processInputParams(e),{shape:i,keys:s}=this._getCached(),o=[];if(!(this._def.catchall instanceof se&&this._def.unknownKeys==="strip"))for(const l in n.data)s.includes(l)||o.push(l);const c=[];for(const l of s){const h=i[l],u=n.data[l];c.push({key:{status:"valid",value:l},value:h._parse(new J(n,u,n.path,l)),alwaysSet:l in n.data})}if(this._def.catchall instanceof se){const l=this._def.unknownKeys;if(l==="passthrough")for(const h of o)c.push({key:{status:"valid",value:h},value:{status:"valid",value:n.data[h]}});else if(l==="strict")o.length>0&&(_(n,{code:p.unrecognized_keys,keys:o}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const l=this._def.catchall;for(const h of o){const u=n.data[h];c.push({key:{status:"valid",value:h},value:l._parse(new J(n,u,n.path,h)),alwaysSet:h in n.data})}}return n.common.async?Promise.resolve().then(async()=>{const l=[];for(const h of c){const u=await h.key,g=await h.value;l.push({key:u,value:g,alwaysSet:h.alwaysSet})}return l}).then(l=>D.mergeObjectSync(r,l)):D.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return k.errToObj,new Z({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(a,r)=>{const n=this._def.errorMap?.(a,r).message??r.defaultError;return a.code==="unrecognized_keys"?{message:k.errToObj(e).message??n}:{message:n}}}:{}})}strip(){return new Z({...this._def,unknownKeys:"strip"})}passthrough(){return new Z({...this._def,unknownKeys:"passthrough"})}extend(e){return new Z({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new Z({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:S.ZodObject})}setKey(e,a){return this.augment({[e]:a})}catchall(e){return new Z({...this._def,catchall:e})}pick(e){const a={};for(const r of I.objectKeys(e))e[r]&&this.shape[r]&&(a[r]=this.shape[r]);return new Z({...this._def,shape:()=>a})}omit(e){const a={};for(const r of I.objectKeys(this.shape))e[r]||(a[r]=this.shape[r]);return new Z({...this._def,shape:()=>a})}deepPartial(){return fe(this)}partial(e){const a={};for(const r of I.objectKeys(this.shape)){const n=this.shape[r];e&&!e[r]?a[r]=n:a[r]=n.optional()}return new Z({...this._def,shape:()=>a})}required(e){const a={};for(const r of I.objectKeys(this.shape))if(e&&!e[r])a[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof Q;)i=i._def.innerType;a[r]=i}return new Z({...this._def,shape:()=>a})}keyof(){return Va(I.objectKeys(this.shape))}}Z.create=(t,e)=>new Z({shape:()=>t,unknownKeys:"strip",catchall:se.create(),typeName:S.ZodObject,...T(e)});Z.strictCreate=(t,e)=>new Z({shape:()=>t,unknownKeys:"strict",catchall:se.create(),typeName:S.ZodObject,...T(e)});Z.lazycreate=(t,e)=>new Z({shape:t,unknownKeys:"strip",catchall:se.create(),typeName:S.ZodObject,...T(e)});class Be extends A{_parse(e){const{ctx:a}=this._processInputParams(e),r=this._def.options;function n(i){for(const o of i)if(o.result.status==="valid")return o.result;for(const o of i)if(o.result.status==="dirty")return a.common.issues.push(...o.ctx.common.issues),o.result;const s=i.map(o=>new ee(o.ctx.common.issues));return _(a,{code:p.invalid_union,unionErrors:s}),N}if(a.common.async)return Promise.all(r.map(async i=>{const s={...a,common:{...a.common,issues:[]},parent:null};return{result:await i._parseAsync({data:a.data,path:a.path,parent:s}),ctx:s}})).then(n);{let i;const s=[];for(const c of r){const l={...a,common:{...a.common,issues:[]},parent:null},h=c._parseSync({data:a.data,path:a.path,parent:l});if(h.status==="valid")return h;h.status==="dirty"&&!i&&(i={result:h,ctx:l}),l.common.issues.length&&s.push(l.common.issues)}if(i)return a.common.issues.push(...i.ctx.common.issues),i.result;const o=s.map(c=>new ee(c));return _(a,{code:p.invalid_union,unionErrors:o}),N}}get options(){return this._def.options}}Be.create=(t,e)=>new Be({options:t,typeName:S.ZodUnion,...T(e)});const X=t=>t instanceof St?X(t.schema):t instanceof oe?X(t.innerType()):t instanceof Ge?[t.value]:t instanceof ue?t.options:t instanceof Tt?I.objectValues(t.enum):t instanceof Xe?X(t._def.innerType):t instanceof wt?[void 0]:t instanceof xt?[null]:t instanceof Q?[void 0,...X(t.unwrap())]:t instanceof he?[null,...X(t.unwrap())]:t instanceof za||t instanceof Ye?X(t.unwrap()):t instanceof Ke?X(t._def.innerType):[];class Pt extends A{_parse(e){const{ctx:a}=this._processInputParams(e);if(a.parsedType!==b.object)return _(a,{code:p.invalid_type,expected:b.object,received:a.parsedType}),N;const r=this.discriminator,n=a.data[r],i=this.optionsMap.get(n);return i?a.common.async?i._parseAsync({data:a.data,path:a.path,parent:a}):i._parseSync({data:a.data,path:a.path,parent:a}):(_(a,{code:p.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),N)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,a,r){const n=new Map;for(const i of a){const s=X(i.shape[e]);if(!s.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const o of s){if(n.has(o))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(o)}`);n.set(o,i)}}return new Pt({typeName:S.ZodDiscriminatedUnion,discriminator:e,options:a,optionsMap:n,...T(r)})}}function Nt(t,e){const a=re(t),r=re(e);if(t===e)return{valid:!0,data:t};if(a===b.object&&r===b.object){const n=I.objectKeys(e),i=I.objectKeys(t).filter(o=>n.indexOf(o)!==-1),s={...t,...e};for(const o of i){const c=Nt(t[o],e[o]);if(!c.valid)return{valid:!1};s[o]=c.data}return{valid:!0,data:s}}else if(a===b.array&&r===b.array){if(t.length!==e.length)return{valid:!1};const n=[];for(let i=0;i<t.length;i++){const s=t[i],o=e[i],c=Nt(s,o);if(!c.valid)return{valid:!1};n.push(c.data)}return{valid:!0,data:n}}else return a===b.date&&r===b.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}class We extends A{_parse(e){const{status:a,ctx:r}=this._processInputParams(e),n=(i,s)=>{if(ea(i)||ea(s))return N;const o=Nt(i.value,s.value);return o.valid?((ta(i)||ta(s))&&a.dirty(),{status:a.value,value:o.data}):(_(r,{code:p.invalid_intersection_types}),N)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,s])=>n(i,s)):n(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}We.create=(t,e,a)=>new We({left:t,right:e,typeName:S.ZodIntersection,...T(a)});class ce extends A{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.array)return _(r,{code:p.invalid_type,expected:b.array,received:r.parsedType}),N;if(r.data.length<this._def.items.length)return _(r,{code:p.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),N;!this._def.rest&&r.data.length>this._def.items.length&&(_(r,{code:p.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),a.dirty());const i=[...r.data].map((s,o)=>{const c=this._def.items[o]||this._def.rest;return c?c._parse(new J(r,s,r.path,o)):null}).filter(s=>!!s);return r.common.async?Promise.all(i).then(s=>D.mergeArray(a,s)):D.mergeArray(a,i)}get items(){return this._def.items}rest(e){return new ce({...this._def,rest:e})}}ce.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ce({items:t,typeName:S.ZodTuple,rest:null,...T(e)})};class qe extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.object)return _(r,{code:p.invalid_type,expected:b.object,received:r.parsedType}),N;const n=[],i=this._def.keyType,s=this._def.valueType;for(const o in r.data)n.push({key:i._parse(new J(r,o,r.path,o)),value:s._parse(new J(r,r.data[o],r.path,o)),alwaysSet:o in r.data});return r.common.async?D.mergeObjectAsync(a,n):D.mergeObjectSync(a,n)}get element(){return this._def.valueType}static create(e,a,r){return a instanceof A?new qe({keyType:e,valueType:a,typeName:S.ZodRecord,...T(r)}):new qe({keyType:Y.create(),valueType:e,typeName:S.ZodRecord,...T(a)})}}class oa extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.map)return _(r,{code:p.invalid_type,expected:b.map,received:r.parsedType}),N;const n=this._def.keyType,i=this._def.valueType,s=[...r.data.entries()].map(([o,c],l)=>({key:n._parse(new J(r,o,r.path,[l,"key"])),value:i._parse(new J(r,c,r.path,[l,"value"]))}));if(r.common.async){const o=new Map;return Promise.resolve().then(async()=>{for(const c of s){const l=await c.key,h=await c.value;if(l.status==="aborted"||h.status==="aborted")return N;(l.status==="dirty"||h.status==="dirty")&&a.dirty(),o.set(l.value,h.value)}return{status:a.value,value:o}})}else{const o=new Map;for(const c of s){const l=c.key,h=c.value;if(l.status==="aborted"||h.status==="aborted")return N;(l.status==="dirty"||h.status==="dirty")&&a.dirty(),o.set(l.value,h.value)}return{status:a.value,value:o}}}}oa.create=(t,e,a)=>new oa({valueType:e,keyType:t,typeName:S.ZodMap,...T(a)});class Te extends A{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.set)return _(r,{code:p.invalid_type,expected:b.set,received:r.parsedType}),N;const n=this._def;n.minSize!==null&&r.data.size<n.minSize.value&&(_(r,{code:p.too_small,minimum:n.minSize.value,type:"set",inclusive:!0,exact:!1,message:n.minSize.message}),a.dirty()),n.maxSize!==null&&r.data.size>n.maxSize.value&&(_(r,{code:p.too_big,maximum:n.maxSize.value,type:"set",inclusive:!0,exact:!1,message:n.maxSize.message}),a.dirty());const i=this._def.valueType;function s(c){const l=new Set;for(const h of c){if(h.status==="aborted")return N;h.status==="dirty"&&a.dirty(),l.add(h.value)}return{status:a.value,value:l}}const o=[...r.data.values()].map((c,l)=>i._parse(new J(r,c,r.path,l)));return r.common.async?Promise.all(o).then(c=>s(c)):s(o)}min(e,a){return new Te({...this._def,minSize:{value:e,message:k.toString(a)}})}max(e,a){return new Te({...this._def,maxSize:{value:e,message:k.toString(a)}})}size(e,a){return this.min(e,a).max(e,a)}nonempty(e){return this.min(1,e)}}Te.create=(t,e)=>new Te({valueType:t,minSize:null,maxSize:null,typeName:S.ZodSet,...T(e)});class St extends A{get schema(){return this._def.getter()}_parse(e){const{ctx:a}=this._processInputParams(e);return this._def.getter()._parse({data:a.data,path:a.path,parent:a})}}St.create=(t,e)=>new St({getter:t,typeName:S.ZodLazy,...T(e)});class Ge extends A{_parse(e){if(e.data!==this._def.value){const a=this._getOrReturnCtx(e);return _(a,{received:a.data,code:p.invalid_literal,expected:this._def.value}),N}return{status:"valid",value:e.data}}get value(){return this._def.value}}Ge.create=(t,e)=>new Ge({value:t,typeName:S.ZodLiteral,...T(e)});function Va(t,e){return new ue({values:t,typeName:S.ZodEnum,...T(e)})}class ue extends A{_parse(e){if(typeof e.data!="string"){const a=this._getOrReturnCtx(e),r=this._def.values;return _(a,{expected:I.joinValues(r),received:a.parsedType,code:p.invalid_type}),N}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const a=this._getOrReturnCtx(e),r=this._def.values;return _(a,{received:a.data,code:p.invalid_enum_value,options:r}),N}return W(e.data)}get options(){return this._def.values}get enum(){const e={};for(const a of this._def.values)e[a]=a;return e}get Values(){const e={};for(const a of this._def.values)e[a]=a;return e}get Enum(){const e={};for(const a of this._def.values)e[a]=a;return e}extract(e,a=this._def){return ue.create(e,{...this._def,...a})}exclude(e,a=this._def){return ue.create(this.options.filter(r=>!e.includes(r)),{...this._def,...a})}}ue.create=Va;class Tt extends A{_parse(e){const a=I.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==b.string&&r.parsedType!==b.number){const n=I.objectValues(a);return _(r,{expected:I.joinValues(n),received:r.parsedType,code:p.invalid_type}),N}if(this._cache||(this._cache=new Set(I.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const n=I.objectValues(a);return _(r,{received:r.data,code:p.invalid_enum_value,options:n}),N}return W(e.data)}get enum(){return this._def.values}}Tt.create=(t,e)=>new Tt({values:t,typeName:S.ZodNativeEnum,...T(e)});class Je extends A{unwrap(){return this._def.type}_parse(e){const{ctx:a}=this._processInputParams(e);if(a.parsedType!==b.promise&&a.common.async===!1)return _(a,{code:p.invalid_type,expected:b.promise,received:a.parsedType}),N;const r=a.parsedType===b.promise?a.data:Promise.resolve(a.data);return W(r.then(n=>this._def.type.parseAsync(n,{path:a.path,errorMap:a.common.contextualErrorMap})))}}Je.create=(t,e)=>new Je({type:t,typeName:S.ZodPromise,...T(e)});class oe extends A{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===S.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:a,ctx:r}=this._processInputParams(e),n=this._def.effect||null,i={addIssue:s=>{_(r,s),s.fatal?a.abort():a.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),n.type==="preprocess"){const s=n.transform(r.data,i);if(r.common.async)return Promise.resolve(s).then(async o=>{if(a.value==="aborted")return N;const c=await this._def.schema._parseAsync({data:o,path:r.path,parent:r});return c.status==="aborted"?N:c.status==="dirty"||a.value==="dirty"?we(c.value):c});{if(a.value==="aborted")return N;const o=this._def.schema._parseSync({data:s,path:r.path,parent:r});return o.status==="aborted"?N:o.status==="dirty"||a.value==="dirty"?we(o.value):o}}if(n.type==="refinement"){const s=o=>{const c=n.refinement(o,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(r.common.async===!1){const o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?N:(o.status==="dirty"&&a.dirty(),s(o.value),{status:a.value,value:o.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>o.status==="aborted"?N:(o.status==="dirty"&&a.dirty(),s(o.value).then(()=>({status:a.value,value:o.value}))))}if(n.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!be(s))return N;const o=n.transform(s.value,i);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:a.value,value:o}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>be(s)?Promise.resolve(n.transform(s.value,i)).then(o=>({status:a.value,value:o})):N);I.assertNever(n)}}oe.create=(t,e,a)=>new oe({schema:t,typeName:S.ZodEffects,effect:e,...T(a)});oe.createWithPreprocess=(t,e,a)=>new oe({schema:e,effect:{type:"preprocess",transform:t},typeName:S.ZodEffects,...T(a)});class Q extends A{_parse(e){return this._getType(e)===b.undefined?W(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Q.create=(t,e)=>new Q({innerType:t,typeName:S.ZodOptional,...T(e)});class he extends A{_parse(e){return this._getType(e)===b.null?W(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}he.create=(t,e)=>new he({innerType:t,typeName:S.ZodNullable,...T(e)});class Xe extends A{_parse(e){const{ctx:a}=this._processInputParams(e);let r=a.data;return a.parsedType===b.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:a.path,parent:a})}removeDefault(){return this._def.innerType}}Xe.create=(t,e)=>new Xe({innerType:t,typeName:S.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...T(e)});class Ke extends A{_parse(e){const{ctx:a}=this._processInputParams(e),r={...a,common:{...a.common,issues:[]}},n=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Ve(n)?n.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new ee(r.common.issues)},input:r.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new ee(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}Ke.create=(t,e)=>new Ke({innerType:t,typeName:S.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...T(e)});class da extends A{_parse(e){if(this._getType(e)!==b.nan){const r=this._getOrReturnCtx(e);return _(r,{code:p.invalid_type,expected:b.nan,received:r.parsedType}),N}return{status:"valid",value:e.data}}}da.create=t=>new da({typeName:S.ZodNaN,...T(t)});class za extends A{_parse(e){const{ctx:a}=this._processInputParams(e),r=a.data;return this._def.type._parse({data:r,path:a.path,parent:a})}unwrap(){return this._def.type}}class Ft extends A{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?N:i.status==="dirty"?(a.dirty(),we(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{const n=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return n.status==="aborted"?N:n.status==="dirty"?(a.dirty(),{status:"dirty",value:n.value}):this._def.out._parseSync({data:n.value,path:r.path,parent:r})}}static create(e,a){return new Ft({in:e,out:a,typeName:S.ZodPipeline})}}class Ye extends A{_parse(e){const a=this._def.innerType._parse(e),r=n=>(be(n)&&(n.value=Object.freeze(n.value)),n);return Ve(a)?a.then(n=>r(n)):r(a)}unwrap(){return this._def.innerType}}Ye.create=(t,e)=>new Ye({innerType:t,typeName:S.ZodReadonly,...T(e)});var S;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(S||(S={}));const m=Y.create,H=ge.create,un=kt.create;se.create;const L=G.create,C=Z.create;Be.create;const Ba=Pt.create;We.create;ce.create;const Wa=qe.create,te=Ge.create,B=ue.create;Je.create;Q.create;he.create;const Zt=oe.createWithPreprocess;var la=".fabric/agents/",hn=["L0","L1","L2"],pn=["mirror","cross-cutting"],fn=B(hn),mn=B(pn),_n=C({file:m(),scope_glob:m(),deps:L(m()),priority:B(["high","medium","low"]),layer:fn,topology_type:mn,hash:m()}),bn=Zt(t=>!xn(t)||typeof t.file!="string"?t:Ct(t),_n),gn=C({revision:m(),nodes:Wa(bn)});function Ct(t){return{...t,layer:t.layer??vn(t.file),topology_type:t.topology_type??yn(t.file)}}function vn(t){const e=Ga(t);if(e==="AGENTS.md")return"L0";if(qa(e))return"L1";const a=kn(e),r=wn(a);return r===0?"L0":r<=2?"L1":"L2"}function yn(t){return qa(Ga(t))?"cross-cutting":"mirror"}function kn(t){return t.startsWith(la)?t.slice(la.length):t}function wn(t){const e=t.split("/").filter(Boolean);return Math.max(e.length-1,0)}function qa(t){return t.split("/").includes("_cross")}function Ga(t){return t.replaceAll("\\","/")}function xn(t){return typeof t=="object"&&t!==null}var Nn=B(["ai","human"]),Ja=Zt(t=>{if(!(t==null||t==="")){if(typeof t=="number")return t;if(typeof t=="string"){const e=t.trim();if(e.length===0)return;if(/^\d+$/.test(e))return Number.parseInt(e,10);const a=Date.parse(e);return Number.isNaN(a)?t:a}return t}},H().int().nonnegative());C({source:Nn.optional(),since:Ja.optional()});C({ledger_id:m().trim().min(1).optional(),ts:Ja.optional()}).superRefine((t,e)=>{[t.ledger_id,t.ts].filter(r=>r!==void 0).length!==1&&e.addIssue({code:p.custom,message:"Provide exactly one of ledger_id or ts.",path:["ledger_id"]})});C({file:m().min(1),start_line:H().int().positive(),end_line:H().int().positive(),new_hash:m().min(1)});C({file:m().min(1)});C({ledger_entry_id:m().min(1),annotation:m().trim().min(1)});var Xa={id:m().optional(),ts:H().int().nonnegative(),intent:m(),affected_paths:L(m())},Sn=C({...Xa,source:te("ai"),commit_sha:m().optional()}),Tn=C({...Xa,source:te("human"),parent_sha:m(),parent_ledger_entry_id:m().optional(),diff_stat:m(),annotation:m().optional()}),Cn=Ba("source",[Sn,Tn]),En=Zt(t=>t&&typeof t=="object"&&!Array.isArray(t)&&(!("source"in t)||t.source===void 0)?{...t,source:"human"}:t,Cn),Ce=C({file:m(),start_line:H().int().nonnegative(),end_line:H().int().nonnegative(),hash:m()});C({locked:L(Ce).optional()});var ca=B(["strict","warn","off"]),An=C({claudeCodeCLI:m().optional(),claudeCodeDesktop:m().optional(),cursor:m().optional(),windsurf:m().optional(),rooCode:m().optional(),geminiCLI:m().optional(),codexCLI:m().optional()});C({clientPaths:An.optional(),externalFixturePath:m().optional(),scanIgnores:L(m()).optional(),auditMode:ca.optional(),audit_mode:ca.optional()});var In=C({path:m(),lines:m(),snippet:m(),pattern_hint:m()}),$n=C({file:m(),line:m(),snippet:m()}),Rn=C({ratio:H().min(0).max(1),total:H().int().nonnegative(),matched:H().int().nonnegative(),co_occurring_patterns:L(m())}),On=C({type:B(["framework","pattern","invariant","domain"]),statement:m(),confidence:B(["HIGH","MEDIUM","LOW"]),evidence:L($n),coverage:Rn,proposed_rule:m().optional(),alternatives:L(m()).optional()}),jn=C({total_files:H().int().nonnegative(),by_ext:Wa(H().int().nonnegative()),key_dirs:L(m()),max_depth:H().int().nonnegative()}),Ln=C({path:m(),reason:m(),size_bytes:H().int().nonnegative().optional()}),Pn=C({kind:m(),version:m(),subkind:m(),evidence:L(m())}),Fn=C({quality:B(["missing","stub","ok"]),line_count:H().int().nonnegative(),has_contributing:un()}),Zn=C({path:m(),family:B(["entry","component","config","test","domain"]),rationale:m()}),Dn=C({max_files:te(15),max_lines_per_file:te(100)}),Mn=C({version:m(),generated_at:m(),generated_by:m(),target:m(),project_name:m(),framework:Pn,topology:jn,entry_points:L(Ln),code_samples:L(In),assertions:L(On),candidate_files:L(Zn),sampling_budget:Dn,readme:Fn,recommendations_for_skill:L(m()).optional()}),Un=C({kind:m(),version:m(),subkind:m()}),Hn=C({confidence:B(["HIGH","MEDIUM","LOW"]),evidence_refs:L(m())}),Vn=C({file:m(),lines:m()}),zn=C({type:B(["ban","require","protect"]),rule:m(),rationale:m().optional(),confidence_snapshot:Hn.optional(),source_evidence:L(Vn).optional()}),Bn=C({name:m(),paths:L(m()),summary:m().optional(),topology_type:B(["mirror","cross-cutting"]).optional(),target_path:m().optional()}),Wn=C({phase:m(),question:m(),answer:m(),presentation:m().optional(),user_corrections:L(m()).optional()});C({framework:Un,architecture_patterns:L(m()),invariants:L(zn),domain_groups:L(Bn),interview_trail:L(Wn),forensic_ref:m()});var qn=C({type:te("meta:updated"),payload:gn}),Gn=C({type:te("lock:drift"),payload:C({locked:L(Ce),drifted:L(Ce)})}),Jn=C({type:te("lock:approved"),payload:C({locked:L(Ce),approved:L(Ce)})}),Xn=C({type:te("ledger:appended"),payload:En}),Kn=C({type:te("drift:detected"),payload:Mn});Ba("type",[qn,Gn,Jn,Xn,Kn]);function Yn({lastEvent:t}){const{t:e}=z(),[a,r]=j(null),[n,i]=j([]),[s,o]=j(null),[c,l]=j(""),[h,u]=j(null),g=async()=>{try{const[x,w]=await Promise.all([br(),ja().catch(()=>[])]);r(x),i(w),u(null)}catch(x){u(x instanceof Error?x.message:String(x))}};V(()=>{g()},[]),V(()=>{(t?.type==="meta:updated"||t?.type==="drift:detected"||t?.type==="lock:drift")&&g()},[t]);const f=ne(()=>new Set(n.map(x=>x.file)),[n]),v=ne(()=>a===null?[]:Ka(a,f,c),[a,f,c]),E=s===null?null:a?.nodes[s]??null;return d("section",{className:"view",children:[d(Ae,{title:e("dashboard.rules-tree.title"),subtitle:e("dashboard.rules-tree.subtitle")}),h!==null?d(ie,{kind:"banner",severity:"stale",message:h}):null,d("div",{className:"view-split",children:[d("div",{className:"tree-panel",children:[d("div",{className:"tree-filter",children:[d("input",{value:c,onInput:x=>l(x.currentTarget.value),placeholder:e("dashboard.rules-tree.filter.placeholder"),"aria-label":e("dashboard.rules-tree.filter.aria-label")}),d("button",{className:"ghost-button",type:"button",onClick:()=>{g()},children:e("dashboard.shared.refresh")})]}),d("div",{className:"status-line",children:[d("span",{children:a===null?e("dashboard.rules-tree.status.loading"):e("dashboard.rules-tree.status.nodes",{count:String(Object.keys(a.nodes).length),revision:a.revision})}),d("span",{children:e("dashboard.rules-tree.status.locks",{count:String(n.length)})})]}),d("div",{className:"tree",role:"tree","aria-label":e("dashboard.rules-tree.tree.aria-label"),children:v.length>0?v.map(x=>d(Lt,{...x,selected:x.node.file===s,onSelect:o},x.node.file)):d("div",{className:"empty-card",children:e("dashboard.rules-tree.empty")})})]}),d("aside",{className:"detail-panel",children:[d("h3",{children:e("dashboard.rules-tree.detail.title")}),E===null?d("p",{className:"muted",children:e("dashboard.rules-tree.detail.empty")}):d("div",{className:"kv",children:[d(Re,{label:e("dashboard.rules-tree.detail.file"),value:E.file}),d(Re,{label:e("dashboard.rules-tree.detail.scope"),value:E.scope_glob}),d(Re,{label:e("dashboard.rules-tree.detail.priority"),value:E.priority}),d(Re,{label:e("dashboard.rules-tree.detail.hash"),value:E.hash}),d("pre",{className:"code",children:E.deps.length>0?E.deps.join(`
|
|
5
|
+
`):e("dashboard.rules-tree.detail.no-deps")})]})]})]})]})}function Ae({title:t,subtitle:e}){return d("div",{className:"view-header",children:d("div",{children:[d("h1",{className:"view-title",children:t}),d("p",{className:"view-subtitle",children:e})]})})}function Re({label:t,value:e}){return d("div",{className:"kv-row",children:[d("span",{className:"kv-key",children:t}),d("span",{className:"kv-value",children:e})]})}function Ka(t,e,a){const r=a.trim().toLowerCase(),n=Object.values(t.nodes).filter(o=>r.length===0||JSON.stringify(o).toLowerCase().includes(r)).sort((o,c)=>o.file.localeCompare(c.file)),i=new Map;for(const o of n){const c=o.file.split("/")[0]??"root";i.set(c,[...i.get(c)??[],o])}return[{node:Ct({file:`revision:${t.revision}`,scope_glob:"**/*",deps:[],priority:"high",hash:t.revision}),level:0,defaultExpanded:!0,children:Array.from(i.entries()).map(([o,c])=>({node:Ct({file:o,scope_glob:`${o}/**/*`,deps:[],priority:"medium",hash:`${c.length} nodes`}),level:1,defaultExpanded:!0,children:c.map(l=>({node:l,level:2,humanLockedNearby:e.has(l.file),staleReason:l.hash.length===0?"hash-mismatch":null}))}))}]}function Qn({lastEvent:t}){const{locale:e,t:a}=z(),[r,n]=j(null),[i,s]=j(!0),[o,c]=j(null),l=async()=>{s(!0);try{n(await gr()),c(null)}catch(h){c(h instanceof Error?h.message:String(h))}finally{s(!1)}};return V(()=>{l()},[]),V(()=>{(t?.type==="meta:updated"||t?.type==="lock:approved"||t?.type==="lock:drift"||t?.type==="ledger:appended"||t?.type==="drift:detected")&&l()},[t]),d("section",{className:"view",children:[d(Ae,{title:a("dashboard.doctor.title"),subtitle:a("dashboard.doctor.subtitle")}),o!==null?d(ie,{kind:"banner",severity:"stale",message:o}):null,d("div",{className:"filter-bar doctor-toolbar",children:[d("span",{className:"filter-label",children:a("dashboard.doctor.toolbar.overall")}),d(ie,{kind:"pill",severity:Ya(r?.status??"warn"),message:a(r===null?"dashboard.shared.loading":`dashboard.shared.status.${r.status}`)}),d("span",{className:"filter-date",children:r===null?a("dashboard.doctor.toolbar.no-summary"):r.summary.entryPoints.length===1?a("dashboard.doctor.toolbar.entry-point-summary",{framework:ht(r.summary.framework,a),count:"1"}):a("dashboard.doctor.toolbar.entry-points-summary",{framework:ht(r.summary.framework,a),count:String(r.summary.entryPoints.length)})}),d("button",{className:"ghost-button",type:"button",onClick:()=>{l()},children:a("dashboard.shared.refresh")})]}),i&&r===null?d("div",{className:"empty-card",children:a("dashboard.doctor.empty.loading")}):null,r!==null?d("div",{className:"doctor-layout",children:[d("div",{className:"doctor-summary-grid",children:[d(ut,{label:a("dashboard.doctor.summary.framework"),value:ht(r.summary.framework,a),detail:r.summary.metaRevision===null?a("dashboard.doctor.summary.no-meta-revision"):`rev ${r.summary.metaRevision}`}),d(ut,{label:a("dashboard.doctor.summary.protected-paths"),value:r.summary.protectedPathCount===0?a("dashboard.doctor.summary.tracked-paths.none"):a("dashboard.doctor.summary.tracked-paths.some",{count:String(r.summary.protectedPathCount)}),detail:r.summary.protectedPathsIntact?a("dashboard.doctor.summary.hashes-intact"):a("dashboard.doctor.summary.drifted",{count:String(r.summary.driftCount)})}),d(ut,{label:a("dashboard.doctor.summary.intent-ledger"),value:ti(r.summary.lastLedgerEntryAgeMs,a),detail:r.summary.lastLedgerEntryTs===null?a("dashboard.doctor.summary.no-ledger-entries"):new Date(r.summary.lastLedgerEntryTs).toLocaleString(e)})]}),d("div",{className:"doctor-panels",children:[d("article",{className:"doctor-card",children:[d("div",{className:"doctor-card-head",children:[d("h3",{children:a("dashboard.doctor.card.entry-points")}),d("span",{children:r.summary.entryPoints.length})]}),r.summary.entryPoints.length>0?d("div",{className:"doctor-entry-list",children:r.summary.entryPoints.map(h=>d("div",{className:"doctor-entry",children:[d("strong",{children:h.path}),d("span",{children:h.reason})]},`${h.path}:${h.reason}`))}):d("div",{className:"empty-card doctor-empty",children:a("dashboard.doctor.empty.entry-points")})]}),d("article",{className:"doctor-card",children:[d("div",{className:"doctor-card-head",children:[d("h3",{children:a("dashboard.doctor.card.checks")}),d("span",{children:r.checks.length})]}),d("div",{className:"doctor-check-list",children:r.checks.map(h=>d(ei,{check:h},h.name))})]})]})]}):null]})}function ut({label:t,value:e,detail:a}){return d("article",{className:"doctor-summary-card",children:[d("span",{className:"doctor-summary-label",children:t}),d("strong",{className:"doctor-summary-value",children:e}),d("span",{className:"doctor-summary-detail",children:a})]})}function ei({check:t}){const{t:e}=z();return d("div",{className:`doctor-check doctor-check-${t.status}`,children:[d("div",{className:"doctor-check-head",children:[d("strong",{children:t.name}),d(ie,{kind:"pill",severity:Ya(t.status),message:e(`dashboard.shared.status.${t.status}`)})]}),d("p",{children:t.message})]})}function Ya(t){switch(t){case"ok":return"ok";case"warn":return"locked";case"error":return"stale"}}function ht(t,e){const a=[t.kind,t.version,t.subkind].filter(r=>r!=="unknown");return a.length>0?a.join(" · "):e("dashboard.doctor.framework.unknown")}function ti(t,e){if(t===null)return e("dashboard.doctor.age.none");const a=Math.floor(t/1e3);if(a<60)return e("dashboard.doctor.age.seconds",{count:String(a)});const r=Math.floor(a/60);if(r<60)return e("dashboard.doctor.age.minutes",{count:String(r)});const n=Math.floor(r/60);if(n<48)return e("dashboard.doctor.age.hours",{count:String(n)});const i=Math.floor(n/24);return i<14?e("dashboard.doctor.age.days",{count:String(i)}):e("dashboard.doctor.age.weeks",{count:String(Math.floor(i/7))})}function ai({lastEvent:t}){const{locale:e,t:a}=z(),[r,n]=j([]),[i,s]=j(null),[o,c]=j(null),[l,h]=j(!1),[u,g]=j(null),f=async()=>{try{const y=(await Oa()).sort((O,U)=>O.ts-U.ts);n(y),s(O=>y.length===0?null:O!==null&&y.some(U=>U.id===O)?O:y.at(-1)?.id??null),g(null)}catch(y){g(y instanceof Error?y.message:String(y))}};V(()=>{f()},[]),V(()=>{t?.type==="ledger:appended"&&f()},[t]),V(()=>{if(i===null){c(null);return}let y=!1;return h(!0),kr({ledgerId:i}).then(O=>{y||(c(O),g(null))}).catch(O=>{y||(c(null),g(O instanceof Error?O.message:String(O)))}).finally(()=>{y||h(!1)}),()=>{y=!0}},[i]);const v=ne(()=>r.findIndex(y=>y.id===i),[r,i]),E=v>=0?r[v]??null:null,x=E===null?a("dashboard.history-replay.selected.none"):new Date(E.ts).toLocaleString(e),w=ne(()=>o===null?[]:Ka(o.meta,new Set,""),[o]);return d("section",{className:"view",children:[d(Ae,{title:a("dashboard.history-replay.title"),subtitle:a("dashboard.history-replay.subtitle")}),u!==null?d(ie,{kind:"banner",severity:"stale",message:u}):null,d("div",{className:"filter-bar history-toolbar",children:[d("span",{className:"filter-label",children:a("dashboard.history-replay.toolbar.scrub")}),d("input",{className:"history-slider",type:"range",min:"0",max:Math.max(r.length-1,0),value:v>=0?v:0,disabled:r.length===0,onInput:y=>{const O=Number.parseInt(y.currentTarget.value,10),U=r[O];U?.id!==void 0&&s(U.id)}}),d("span",{className:"filter-date",children:x}),d("button",{className:"ghost-button",type:"button",disabled:r.length===0,onClick:()=>s(r.at(-1)?.id??null),children:a("dashboard.history-replay.toolbar.latest")})]}),d("div",{className:"view-split history-layout",children:[d("div",{className:"tree-panel history-timeline-panel",children:[d("div",{className:"status-line",children:[d("span",{children:a("dashboard.history-replay.status.replay-points",{count:String(r.length)})}),d("span",{children:a("dashboard.history-replay.status.entries-applied",{count:String(o?.metadata.replayed_count??0)})})]}),d("div",{className:"history-timeline-list",children:r.length>0?[...r].reverse().map(y=>d("div",{className:`history-timeline-item ${y.id===i?"selected":""}`,role:"button",tabIndex:0,onClick:()=>s(y.id??null),onKeyDown:O=>{(O.key==="Enter"||O.key===" ")&&(O.preventDefault(),s(y.id??null))},children:d(Ma,{entry:y,readOnly:!0})},y.id??`${y.source}:${y.ts}:${y.intent}`)):d("div",{className:"empty-card",children:a("dashboard.history-replay.empty.entries")})})]}),d("div",{className:"tree-panel",children:[d("div",{className:"tree-filter history-state-head",children:d("div",{children:[d("div",{className:"history-state-title",children:a("dashboard.history-replay.state.title",{label:x})}),d("div",{className:"meta-line",children:a("dashboard.history-replay.state.meta",{ledgerId:o?.metadata.at_ledger_id??a("dashboard.history-replay.meta.na"),commit:o?.metadata.at_commit??a("dashboard.history-replay.meta.not-available"),mode:o?.metadata.mode??a("dashboard.history-replay.meta.pending")})})]})}),d("div",{className:"status-line",children:[d("span",{children:o===null?a("dashboard.history-replay.status.loading"):a("dashboard.history-replay.status.nodes",{count:String(Object.keys(o.meta.nodes).length)})}),d("span",{children:o?.meta.revision??a("dashboard.history-replay.status.unknown-revision")})]}),d("div",{className:"tree",role:"tree","aria-label":a("dashboard.history-replay.tree.aria-label"),children:[l?d("div",{className:"empty-card",children:a("dashboard.history-replay.empty.loading")}):null,!l&&w.length>0?w.map(y=>d(Lt,{...y,readOnly:!0},y.node.file)):null,!l&&w.length===0?d("div",{className:"empty-card",children:a("dashboard.history-replay.empty.select")}):null]})]})]})]})}function ri({lastEvent:t}){const{t:e}=z(),[a,r]=j([]),[n,i]=j("all"),[s,o]=j(null),[c,l]=j(null),h=async()=>{try{r(await ja()),l(null)}catch(v){l(v instanceof Error?v.message:String(v))}};V(()=>{h()},[]),V(()=>{(t?.type==="lock:drift"||t?.type==="lock:approved")&&h()},[t]);const u=ne(()=>({all:a.length,drift:a.filter(v=>v.drift).length,approved:a.filter(v=>!v.drift).length}),[a]),g=a.filter(v=>n==="all"||(n==="drift"?v.drift:!v.drift)),f=async v=>{const E=a.find(x=>de(x)===de(v));if(E!==void 0){o(de(v));try{const x=await vr({file:E.file,start_line:E.start_line,end_line:E.end_line,new_hash:E.current_hash});r(w=>w.map(y=>de(y)===de(v)?x.entry:y)),l(null)}catch(x){throw l(x instanceof Error?x.message:String(x)),x}finally{o(null)}}};return d("section",{className:"view",children:[d(Ae,{title:e("dashboard.human-lock.title"),subtitle:e("dashboard.human-lock.subtitle")}),c!==null?d(ie,{kind:"banner",severity:"drift",message:c}):null,d("div",{className:"filter-bar",role:"tablist","aria-label":e("dashboard.human-lock.filters.aria-label"),children:[["all","drift","approved"].map(v=>d("button",{className:`filter-chip ${n===v?"active":""} ${v}`,type:"button",role:"tab","aria-selected":n===v,onClick:()=>i(v),children:[e(`dashboard.human-lock.filters.${v}`),d("span",{className:"count",children:u[v]})]},v)),d("span",{className:"filter-date",children:e("dashboard.human-lock.summary",{drift:String(u.drift),approved:String(u.approved)})})]}),d("div",{className:"lock-grid",children:g.length>0?g.map(v=>d(Lr,{entry:v,currentHash:v.current_hash,onApprove:f,busy:s===de(v)},de(v))):d("div",{className:"empty-card",children:e("dashboard.human-lock.empty")})})]})}function de(t){return`${t.file}:${t.start_line}:${t.end_line}`}function ni({lastEvent:t}){const{t:e}=z(),[a,r]=j([]),[n,i]=j("all"),[s,o]=j(null),c=async()=>{try{r((await Oa()).sort((f,v)=>v.ts-f.ts)),o(null)}catch(f){o(f instanceof Error?f.message:String(f))}};V(()=>{c()},[]),V(()=>{t?.type==="ledger:appended"&&r(f=>[t.payload,...f].sort((v,E)=>E.ts-v.ts))},[t]);const l=ne(()=>a.filter(f=>n==="all"||f.source===n),[a,n]),h=a.filter(f=>f.source==="ai").length,u=a.length-h,g=async(f,v)=>{if(f.id===void 0)throw new Error(e("dashboard.intent-timeline.annotate.missing-id"));const E=await yr({ledger_entry_id:f.id,annotation:v});E.created&&r(x=>[E.entry,...x].sort((w,y)=>y.ts-w.ts))};return d("section",{className:"view",children:[d(Ae,{title:e("dashboard.intent-timeline.title"),subtitle:e("dashboard.intent-timeline.subtitle")}),s!==null?d("div",{className:"empty-card",children:s}):null,d("div",{className:"filter-bar",children:[d("span",{className:"filter-label",children:e("dashboard.intent-timeline.filter.label")}),d("button",{className:`filter-chip ${n==="all"?"active":""}`,type:"button",onClick:()=>i("all"),children:[e("dashboard.intent-timeline.filter.all")," ",a.length]}),d(vt,{source:"ai",interactive:!0,selected:n==="ai",onClick:()=>i("ai")}),d(vt,{source:"human",interactive:!0,selected:n==="human",onClick:()=>i("human")}),d("span",{className:"filter-date",children:e("dashboard.intent-timeline.summary",{aiCount:String(h),humanCount:String(u)})})]}),d("div",{className:"col-headers",children:[d("div",{className:"col-head ai",children:[d("strong",{children:e("dashboard.intent-timeline.columns.ai.title")}),d("span",{children:e("dashboard.intent-timeline.columns.ai.entries",{count:String(h)})})]}),d("div",{className:"col-head human",children:[d("strong",{children:e("dashboard.intent-timeline.columns.human.title")}),d("span",{children:e("dashboard.intent-timeline.columns.human.entries",{count:String(u)})})]})]}),d("div",{className:"timeline-grid",children:[d("div",{className:"axis",children:d("div",{className:"axis-line"})}),l.length>0?l.map(f=>d(Ma,{entry:f,onAnnotate:g},f.id??`${f.source}:${f.ts}:${f.intent}`)):d("div",{className:"empty-card timeline-empty",children:e("dashboard.intent-timeline.empty")})]})]})}function ii(){return d(Or,{children:d(si,{})})}function si(){const{t}=z(),[e,a]=j(ua()),r=Sr(),n=[{id:"rules",hash:"#/rules",label:t("dashboard.app.nav.rules.label-bilingual"),subtitle:t("dashboard.app.nav.rules.subtitle"),breadcrumb:t("dashboard.app.breadcrumb.rules")},{id:"locks",hash:"#/locks",label:t("dashboard.app.nav.locks.label-bilingual"),subtitle:t("dashboard.app.nav.locks.subtitle"),breadcrumb:t("dashboard.app.breadcrumb.locks")},{id:"timeline",hash:"#/timeline",label:t("dashboard.app.nav.timeline.label-bilingual"),subtitle:t("dashboard.app.nav.timeline.subtitle"),breadcrumb:t("dashboard.app.breadcrumb.timeline")},{id:"history",hash:"#/history",label:t("dashboard.app.nav.history.label-bilingual"),subtitle:t("dashboard.app.nav.history.subtitle"),breadcrumb:t("dashboard.app.breadcrumb.history")},{id:"doctor",hash:"#/doctor",label:t("dashboard.app.nav.doctor.label-bilingual"),subtitle:t("dashboard.app.nav.doctor.subtitle"),breadcrumb:t("dashboard.app.breadcrumb.doctor")}];V(()=>{const s=()=>a(ua());return window.addEventListener("hashchange",s),window.location.hash===""&&(window.location.hash="#/rules"),()=>window.removeEventListener("hashchange",s)},[]);const i=ne(()=>n.find(s=>s.id===e)??n[0],[e]);return d(oi,{connected:r.connected,port:ha(),activeRoute:i.id,children:[d("aside",{className:"sidebar",children:[d("div",{className:"brand",children:[d("span",{className:"brand-logo",children:"F"}),d("span",{children:"fabric"}),d("span",{className:"brand-version",children:"v1.1.0"})]}),d("nav",{"aria-label":t("dashboard.app.nav.aria-label"),children:n.map(s=>d("a",{className:`nav-item ${s.id===e?"active":""}`,href:s.hash,"aria-current":s.id===e?"page":void 0,children:[d("span",{className:"dot","aria-hidden":"true"}),d("span",{children:s.label}),d("small",{children:s.subtitle})]},s.id))}),d("div",{className:"nav-section",children:t("dashboard.app.nav.section.diagnostics")}),d("span",{className:"nav-item muted-nav",children:[d("span",{className:"dot"}),t("dashboard.app.nav.drift-check")]})]}),d("main",{className:"main",children:[d("header",{className:"header",children:[d("div",{className:"breadcrumb",children:[d("span",{children:window.location.pathname==="/"?"~":window.location.pathname}),d("span",{className:"sep",children:"/"}),d("strong",{children:i.breadcrumb})]}),d("div",{className:"header-actions",children:[d("span",{className:`badge-live ${r.connected?"connected":"disconnected"}`,children:[d("span",{className:"pulse","aria-hidden":"true"}),r.connected?t("dashboard.app.header.connected"):t("dashboard.app.header.connecting")]}),d("span",{className:"port-label",children:[":",ha()," /events"]})]})]}),e==="rules"?d(Yn,{lastEvent:r.lastEvent}):null,e==="locks"?d(ri,{lastEvent:r.lastEvent}):null,e==="timeline"?d(ni,{lastEvent:r.lastEvent}):null,e==="history"?d(ai,{lastEvent:r.lastEvent}):null,e==="doctor"?d(Qn,{lastEvent:r.lastEvent}):null]}),d("div",{className:"live-region","aria-live":"polite","aria-atomic":"true",children:r.lastEvent===null?"":t("dashboard.app.live-region.received",{type:r.lastEvent.type})})]})}function oi({connected:t,port:e,activeRoute:a,children:r}){return d("div",{className:`app-shell ${t?"is-connected":"is-disconnected"}`,"data-port":e,"data-route":a,children:r})}function ua(){switch(window.location.hash){case"#/locks":return"locks";case"#/timeline":return"timeline";case"#/history":return"history";case"#/doctor":return"doctor";default:return"rules"}}function ha(){const t=Number.parseInt(window.location.port,10);return Number.isFinite(t)?t:7373}const Qa=document.getElementById("app");if(Qa===null)throw new Error("Fabric Dashboard root element #app was not found.");or(d(ii,{}),Qa);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--color-surface-canvas: #0b1016;--color-surface-panel: #0f172a;--color-surface-raised: #1e293b;--color-surface-overlay: #334155;--color-surface-code: #020617;--color-border-subtle: #1e293b;--color-border-default: #334155;--color-border-strong: #475569;--color-text-primary: #f8fafc;--color-text-secondary: #cbd5e1;--color-text-muted: #94a3b8;--color-text-dim: #64748b;--color-text-mono: #e2e8f0;--color-state-locked-bg: rgba(245, 158, 11, .08);--color-state-locked-border: #b45309;--color-state-locked-text: #fbbf24;--color-state-locked-accent: #f59e0b;--color-state-stale-bg: rgba(220, 38, 38, .1);--color-state-stale-border: #991b1b;--color-state-stale-text: #f87171;--color-state-stale-accent: #ef4444;--color-state-drift-bg: rgba(234, 88, 12, .1);--color-state-drift-border: #c2410c;--color-state-drift-text: #fb923c;--color-state-drift-accent: #ea580c;--color-state-approved-bg: rgba(34, 197, 94, .1);--color-state-approved-border: #166534;--color-state-approved-text: #4ade80;--color-state-approved-accent: #22c55e;--color-state-pending-bg: rgba(100, 116, 139, .1);--color-state-pending-border: #475569;--color-state-pending-text: #94a3b8;--color-state-pending-accent: #64748b;--color-source-ai-bg: rgba(99, 102, 241, .12);--color-source-ai-border: #4338ca;--color-source-ai-text: #a5b4fc;--color-source-ai-accent: #6366f1;--color-source-human-bg: rgba(20, 184, 166, .12);--color-source-human-border: #0f766e;--color-source-human-text: #5eead4;--color-source-human-accent: #14b8a6;--color-action-primary: #22c55e;--color-action-primary-hover: #16a34a;--color-action-primary-text: #052e16;--color-action-neutral: #334155;--color-action-neutral-hover: #475569;--color-action-danger: #dc2626;--font-family-mono: "Space Mono", "JetBrains Mono", "SF Mono", "Monaco", "Consolas", ui-monospace, monospace;--font-family-sans: "Inter", -apple-system, "Segoe UI", system-ui, sans-serif;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-base: 13px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-base: 1.5;--line-height-loose: 1.65;--letter-spacing-mono: 0;--letter-spacing-sans: -.01em;--letter-spacing-chip: .04em;--space-0: 0;--space-0-5: 2px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-none: 0;--radius-sm: 3px;--radius-md: 6px;--radius-lg: 8px;--radius-pill: 999px;--shadow-card: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 1px rgba(0, 0, 0, .15);--shadow-raised: 0 4px 12px rgba(0, 0, 0, .4);--shadow-focus-ring: 0 0 0 2px #0f172a, 0 0 0 4px #a5b4fc;--motion-duration-fast: .12s;--motion-duration-base: .18s;--motion-duration-slow: .28s;--motion-easing-standard: cubic-bezier(.4, 0, .2, 1);--motion-easing-decel: cubic-bezier(0, 0, .2, 1);--z-base: 0;--z-sticky: 10;--z-dropdown: 20;--z-popover: 30;--z-modal: 50;--z-toast: 100;--layout-sidebar-width: 240px;--layout-sidebar-width-collapsed: 64px;--layout-header-height: 48px;--layout-container-max-width: 1440px;--layout-container-padding: 24px}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:radial-gradient(circle at top left,rgba(99,102,241,.12),transparent 32rem),linear-gradient(135deg,rgba(15,23,42,.9),var(--color-surface-canvas) 52%);color:var(--color-text-secondary);font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-base);-webkit-font-smoothing:antialiased}button,input{font:inherit}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{box-shadow:var(--shadow-focus-ring);outline:0}.app-shell{display:grid;grid-template-columns:var(--layout-sidebar-width) minmax(0,1fr);min-height:100vh}.sidebar{background:color-mix(in srgb,var(--color-surface-panel) 92%,black);border-right:1px solid var(--color-border-subtle);padding:var(--space-4)}.brand{align-items:center;color:var(--color-text-primary);display:flex;font-family:var(--font-family-mono);font-size:var(--font-size-md);font-weight:var(--font-weight-bold);gap:var(--space-2);margin-bottom:var(--space-4);padding:var(--space-2)}.brand-logo{align-items:center;border:1px solid var(--color-text-mono);border-radius:var(--radius-sm);color:var(--color-text-mono);display:inline-flex;font-size:10px;height:18px;justify-content:center;width:18px}.brand-version{color:var(--color-text-dim);font-size:10px;font-weight:var(--font-weight-regular);margin-left:auto}.nav-item{align-items:center;border-radius:var(--radius-md);color:var(--color-text-muted);display:grid;font-size:var(--font-size-sm);gap:var(--space-2);grid-template-columns:8px 1fr;margin-bottom:2px;min-height:44px;padding:var(--space-2) var(--space-3);text-decoration:none;transition:background var(--motion-duration-base),color var(--motion-duration-base)}.nav-item:hover,.nav-item.active{background:var(--color-surface-raised);color:var(--color-text-primary)}.nav-item small{color:var(--color-text-dim);font-family:var(--font-family-mono);font-size:10px;grid-column:2;margin-top:-6px}.nav-item .dot{background:var(--color-text-dim);border-radius:50%;height:6px;width:6px}.nav-item.active .dot{background:var(--color-action-primary)}.muted-nav{opacity:.7}.nav-section{color:var(--color-text-dim);font-size:10px;letter-spacing:.08em;padding:var(--space-4) var(--space-3) var(--space-2);text-transform:uppercase}.main{display:flex;flex-direction:column;min-width:0}.header{align-items:center;background:#0f172adb;border-bottom:1px solid var(--color-border-subtle);display:flex;height:var(--layout-header-height);justify-content:space-between;padding:0 var(--space-6)}.breadcrumb,.port-label{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.breadcrumb .sep{color:var(--color-text-dim);margin:0 var(--space-1)}.breadcrumb strong{color:var(--color-text-primary);font-weight:var(--font-weight-regular)}.header-actions{align-items:center;display:flex;gap:var(--space-3)}.badge-live{align-items:center;border:1px solid rgba(34,197,94,.3);border-radius:var(--radius-pill);color:var(--color-state-approved-text);display:inline-flex;font-family:var(--font-family-mono);font-size:10px;gap:var(--space-1);padding:2px var(--space-2)}.badge-live.disconnected{border-color:var(--color-state-pending-border);color:var(--color-state-pending-text)}.pulse{background:currentColor;border-radius:50%;height:6px;width:6px}.view{flex:1;overflow:auto;padding:var(--space-6)}.view-header{align-items:flex-end;display:flex;justify-content:space-between;margin-bottom:var(--space-5);position:sticky;top:0;z-index:var(--z-sticky)}.view-title{color:var(--color-text-primary);font-size:var(--font-size-xl);margin:0}.view-subtitle,.muted{color:var(--color-text-muted);font-size:var(--font-size-sm);margin:var(--space-1) 0 0}.view-split{align-items:start;display:grid;gap:var(--space-5);grid-template-columns:minmax(0,2fr) minmax(280px,1fr)}.tree-panel,.detail-panel,.empty-card,.filter-bar{background:var(--color-surface-panel);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}.tree-filter{border-bottom:1px solid var(--color-border-subtle);display:flex;gap:var(--space-3);padding:var(--space-4)}.tree-filter input,.annotate-input{background:var(--color-surface-code);border:1px solid var(--color-border-default);border-radius:var(--radius-md);color:var(--color-text-primary);font-family:var(--font-family-mono);min-height:44px;padding:var(--space-2) var(--space-3);width:100%}.status-line{color:var(--color-text-dim);display:flex;font-family:var(--font-family-mono);font-size:var(--font-size-xs);justify-content:space-between;padding:var(--space-3) var(--space-4)}.tree{font-family:var(--font-family-mono);padding:var(--space-2)}.tree-node{align-items:center;border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;display:flex;gap:var(--space-2);min-height:40px;padding:var(--space-2) var(--space-3);position:relative;transition:background var(--motion-duration-fast),transform var(--motion-duration-fast)}.tree-node.is-readonly{cursor:default}.tree-node:hover:not(.is-readonly),.tree-node.is-selected{background:var(--color-surface-raised)}.tree-node.is-selected{box-shadow:inset 2px 0 0 var(--color-source-ai-accent)}.tree-node.is-locked{background:var(--color-state-locked-bg);box-shadow:inset 3px 0 0 var(--color-state-locked-border)}.tree-node.is-stale:before{background:var(--color-state-stale-text);border-radius:50%;content:"";height:6px;left:-2px;position:absolute;top:50%;transform:translateY(-50%);width:6px}.tree-caret{color:var(--color-text-dim);display:inline-flex;justify-content:center;transition:transform var(--motion-duration-base);width:14px}.tree-node.is-expanded .tree-caret{transform:rotate(90deg)}.tree-label{color:var(--color-text-primary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-level-1 .tree-label{color:var(--color-text-mono)}.tree-level-2 .tree-label{color:var(--color-text-secondary);font-weight:var(--font-weight-regular)}.tree-meta{align-items:center;display:flex;gap:var(--space-2);margin-left:auto}.tree-hash{color:var(--color-text-dim);font-size:var(--font-size-xs)}.tree-children{border-left:1px dashed var(--color-border-subtle);margin-left:18px;padding-left:var(--space-2)}.badge,.drift-pill,.source-badge,.filter-chip{align-items:center;border:1px solid transparent;border-radius:var(--radius-pill);display:inline-flex;font-family:var(--font-family-mono);font-size:10px;gap:var(--space-1);letter-spacing:var(--letter-spacing-chip);line-height:1;padding:3px 7px;text-transform:uppercase}.badge-level{background:var(--color-surface-overlay);color:var(--color-text-muted)}.badge-locked{background:var(--color-state-locked-bg);border-color:var(--color-state-locked-border);color:var(--color-state-locked-text)}.drift-dot{border-radius:50%;display:inline-block;height:6px;width:6px}.drift-pill,.drift-banner{background:var(--color-state-pending-bg);border-color:var(--color-state-pending-border);color:var(--color-state-pending-text)}.drift-drift{background:var(--color-state-drift-bg);border-color:var(--color-state-drift-border);color:var(--color-state-drift-text)}.drift-stale{background:var(--color-state-stale-bg);border-color:var(--color-state-stale-border);color:var(--color-state-stale-text)}.drift-locked{background:var(--color-state-locked-bg);border-color:var(--color-state-locked-border);color:var(--color-state-locked-text)}.drift-ok{background:var(--color-state-approved-bg);border-color:var(--color-state-approved-border);color:var(--color-state-approved-text)}.drift-banner{border-radius:var(--radius-md);display:flex;gap:var(--space-2);margin-bottom:var(--space-4);padding:var(--space-3)}.detail-panel{padding:var(--space-5);position:sticky;top:var(--space-6)}.detail-panel h3{color:var(--color-text-muted);font-size:var(--font-size-sm);letter-spacing:.06em;margin:0 0 var(--space-3);text-transform:uppercase}.kv{font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.kv-row{border-bottom:1px dashed var(--color-border-subtle);display:flex;gap:var(--space-3);justify-content:space-between;padding:var(--space-1) 0}.kv-key{color:var(--color-text-muted)}.kv-value{color:var(--color-text-primary);overflow-wrap:anywhere;text-align:right}.code,.preview-body{background:var(--color-surface-code);color:var(--color-text-mono);font-family:var(--font-family-mono)}.code{border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);margin-top:var(--space-3);overflow:auto;padding:var(--space-3)}.filter-bar{align-items:center;display:flex;gap:var(--space-2);margin-bottom:var(--space-4);padding:var(--space-3)}.filter-chip,.ghost-button{background:var(--color-surface-raised);border-color:var(--color-border-subtle);color:var(--color-text-muted);cursor:pointer;min-height:40px}.filter-chip.active,.filter-chip:hover,.ghost-button:hover{border-color:var(--color-border-default);color:var(--color-text-primary)}.filter-chip .count{background:var(--color-surface-code);border-radius:var(--radius-pill);padding:1px 5px}.filter-date{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-sm);margin-left:auto}.filter-label{color:var(--color-text-dim);font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase}.history-toolbar{margin-bottom:var(--space-5)}.history-slider{flex:1}.history-layout{grid-template-columns:minmax(340px,1.05fr) minmax(0,1.4fr)}.history-timeline-panel{min-width:0}.history-timeline-list{display:grid;gap:var(--space-3);max-height:calc(100vh - 280px);overflow:auto;padding:var(--space-4)}.history-timeline-item{background:transparent;border:0;cursor:pointer;padding:0;text-align:left}.history-timeline-item .timeline-entry{margin-bottom:0}.history-timeline-item.selected .timeline-entry{box-shadow:inset 0 0 0 1px var(--color-source-ai-accent)}.history-state-head{align-items:start}.history-state-title{color:var(--color-text-primary);font-family:var(--font-family-mono)}.ghost-button{border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3)}.empty-card{color:var(--color-text-muted);padding:var(--space-6);text-align:center}.lock-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}.lock-card,.timeline-entry{background:var(--color-surface-panel);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);overflow:hidden}.lock-card{display:flex;flex-direction:column}.lock-drift{border-left:3px solid var(--color-state-drift-border)}.lock-ok{border-left:3px solid var(--color-state-approved-border)}.lock-head,.lock-foot{align-items:center;display:flex;gap:var(--space-3);padding:var(--space-4)}.lock-head{border-bottom:1px solid var(--color-border-subtle)}.lock-foot{border-top:1px solid var(--color-border-subtle);justify-content:space-between}.lock-icon{align-items:center;border-radius:var(--radius-md);display:inline-flex;font-family:var(--font-family-mono);height:28px;justify-content:center;width:28px}.lock-drift .lock-icon{background:var(--color-state-drift-bg);color:var(--color-state-drift-text)}.lock-ok .lock-icon{background:var(--color-state-approved-bg);color:var(--color-state-approved-text)}.lock-title{display:flex;flex:1;flex-direction:column;min-width:0}.lock-title strong{color:var(--color-text-primary);font-family:var(--font-family-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lock-title span,.meta-line{color:var(--color-text-dim);font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.lock-body{display:flex;flex:1;flex-direction:column;gap:var(--space-3);padding:var(--space-4)}.hash-block{font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.hash-row{display:grid;gap:var(--space-2);grid-template-columns:110px minmax(0,1fr);padding:var(--space-1) 0}.hash-key{color:var(--color-text-muted);font-size:10px;letter-spacing:.06em;text-transform:uppercase}.hash-value{color:var(--color-text-primary);overflow-wrap:anywhere}.hash-value.is-stale,.hash-value.is-accent{color:var(--color-state-drift-text)}.hash-value.is-stale{text-decoration:line-through}.preview{border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);overflow:hidden}.preview-head{align-items:center;background:var(--color-surface-panel);border-bottom:1px solid var(--color-border-subtle);color:var(--color-text-dim);display:flex;font-family:var(--font-family-mono);font-size:10px;justify-content:space-between;letter-spacing:.06em;padding:var(--space-1) var(--space-3);text-transform:uppercase}.preview-body{display:block;line-height:1.55;margin:0;min-height:92px;overflow:auto;padding:var(--space-3);white-space:pre-wrap}.line-add,.line-del,.line-ctx{display:block}.line-add{background:#22c55e14;color:#86efac}.line-del{background:#dc262614;color:#fca5a5;text-decoration:line-through}.line-num{color:var(--color-text-dim);display:inline-block;padding-right:var(--space-2);text-align:right;-webkit-user-select:none;user-select:none;width:28px}.action-button{align-items:center;border:1px solid var(--color-border-default);border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-weight:var(--font-weight-medium);gap:var(--space-2);min-height:40px;padding:var(--space-2) var(--space-4);transition:transform var(--motion-duration-fast),background var(--motion-duration-base)}.action-button:active{transform:scale(.98)}.action-approve{background:var(--color-action-primary);border-color:transparent;color:var(--color-action-primary-text)}.action-annotate{background:var(--color-source-human-bg);border-color:var(--color-source-human-border);color:var(--color-source-human-text)}.action-success{background:var(--color-state-approved-bg);border-color:var(--color-state-approved-border);color:var(--color-state-approved-text);cursor:default}.action-busy{pointer-events:none}.action-error{border-color:var(--color-action-danger)}.spinner{animation:spin .7s linear infinite;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;height:14px;width:14px}.source-badge{background:var(--color-surface-raised);color:var(--color-text-muted);min-height:28px}button.source-badge{cursor:pointer}.source-badge-ai{background:var(--color-source-ai-bg);border-color:var(--color-source-ai-border);color:var(--color-source-ai-text)}.source-badge-human{background:var(--color-source-human-bg);border-color:var(--color-source-human-border);color:var(--color-source-human-text)}.source-badge-outline{background:transparent}.source-badge.is-selected{box-shadow:inset 0 0 0 1px currentColor}.source-badge-dot{background:currentColor;border-radius:50%;height:6px;width:6px}.col-headers{display:grid;gap:var(--space-4);grid-template-columns:1fr 1fr;margin-bottom:var(--space-3)}.col-head{align-items:center;border-radius:var(--radius-md);display:flex;font-family:var(--font-family-mono);justify-content:space-between;padding:var(--space-3)}.col-head.ai{background:var(--color-source-ai-bg);color:var(--color-source-ai-text)}.col-head.human{background:var(--color-source-human-bg);color:var(--color-source-human-text)}.timeline-grid{display:grid;gap:0;grid-template-columns:1fr 40px 1fr;position:relative}.axis{align-items:center;display:flex;grid-column:2;grid-row:1 / span 999;justify-content:center;pointer-events:none}.axis-line{align-self:stretch;background:linear-gradient(var(--color-border-subtle),var(--color-border-default),var(--color-border-subtle));width:2px}.timeline-entry{margin-bottom:var(--space-3);padding:var(--space-3) var(--space-4);position:relative}.timeline-ai{border-left:3px solid var(--color-source-ai-border);grid-column:1}.timeline-human{border-right:3px solid var(--color-source-human-border);grid-column:3}.dot-axis{border:2px solid var(--color-surface-canvas);border-radius:50%;height:10px;position:absolute;top:16px;width:10px}.dot-axis.ai{background:var(--color-source-ai-accent);right:-27px}.dot-axis.human{background:var(--color-source-human-accent);left:-27px}.timeline-head,.entry-meta,.entry-foot{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-2)}.entry-time{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-xs);margin-left:auto}.entry-title{color:var(--color-text-primary);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);margin:var(--space-2) 0 0}.entry-meta{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-xs);margin-top:var(--space-2)}.meta-key{color:var(--color-text-dim)}.entry-body{color:var(--color-text-secondary);line-height:var(--line-height-loose);margin-top:var(--space-3)}.diff-badge,.commit-hash{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.diff-badge{background:var(--color-surface-code);border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);padding:2px 6px}.annotate-form{display:grid;gap:var(--space-2);margin-top:var(--space-3)}.annotate-form label{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-xs);text-transform:uppercase}.timeline-empty{grid-column:1 / -1}.doctor-toolbar{margin-bottom:var(--space-5)}.doctor-layout{display:grid;gap:var(--space-5)}.doctor-summary-grid,.doctor-panels{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.doctor-card,.doctor-summary-card{background:var(--color-surface-panel);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}.doctor-summary-card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4)}.doctor-summary-label,.doctor-summary-detail,.doctor-card-head span{color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.doctor-summary-label{letter-spacing:.08em;text-transform:uppercase}.doctor-summary-value{color:var(--color-text-primary);font-size:var(--font-size-lg)}.doctor-card{overflow:hidden}.doctor-card-head{align-items:center;border-bottom:1px solid var(--color-border-subtle);display:flex;justify-content:space-between;padding:var(--space-4)}.doctor-card-head h3{color:var(--color-text-primary);font-size:var(--font-size-md);margin:0}.doctor-entry-list,.doctor-check-list{display:grid}.doctor-entry,.doctor-check{display:grid;gap:var(--space-2);padding:var(--space-4)}.doctor-entry+.doctor-entry,.doctor-check+.doctor-check{border-top:1px solid var(--color-border-subtle)}.doctor-entry strong,.doctor-check strong{color:var(--color-text-primary);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.doctor-entry span,.doctor-check p{color:var(--color-text-muted);margin:0}.doctor-check-head{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between}.doctor-check-warn{background:linear-gradient(180deg,var(--color-state-locked-bg),transparent 90%)}.doctor-check-error{background:linear-gradient(180deg,var(--color-state-stale-bg),transparent 90%)}.doctor-check-ok{background:linear-gradient(180deg,var(--color-state-approved-bg),transparent 90%)}.doctor-empty{border:0;border-radius:0;box-shadow:none;margin:0}.live-region{clip:rect(0 0 0 0);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.45}}@media(prefers-reduced-motion:no-preference){.pulse,.drift-dot.drift-drift,.drift-dot.drift-stale{animation:pulse 2.4s infinite}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:0ms!important;scroll-behavior:auto!important;transition-duration:0ms!important}}@media(max-width:960px){.app-shell{grid-template-columns:var(--layout-sidebar-width-collapsed) minmax(0,1fr)}.brand span:not(.brand-logo),.nav-item span:not(.dot),.nav-item small,.nav-section,.muted-nav{display:none}.sidebar{padding:var(--space-3) var(--space-2)}.nav-item{grid-template-columns:1fr;justify-items:center}}@media(max-width:720px){.app-shell,.view-split,.timeline-grid,.col-headers,.doctor-panels,.doctor-summary-grid{grid-template-columns:1fr}.sidebar{border-bottom:1px solid var(--color-border-subtle);border-right:0;display:flex;overflow-x:auto}.main{min-height:0}.header{align-items:flex-start;flex-direction:column;height:auto;padding:var(--space-3)}.view{padding:var(--space-4)}.detail-panel{position:static}.axis,.dot-axis{display:none}.timeline-ai,.timeline-human{grid-column:1}}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="color-scheme" content="dark" />
|
|
7
|
+
<title>Fabric Dashboard</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BiK8yn_c.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D45wW11O.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fenglimg/fabric-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsup src/index.ts --format esm --dts --clean",
|
|
12
|
-
"dev": "tsup src/index.ts --format esm --dts --watch"
|
|
13
|
-
},
|
|
14
10
|
"dependencies": {
|
|
15
11
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
12
|
+
"chokidar": "^4.0.3",
|
|
13
|
+
"express": "^5.2.1",
|
|
16
14
|
"minimatch": "^10.0.1",
|
|
17
|
-
"zod": "^3.25.0"
|
|
15
|
+
"zod": "^3.25.0",
|
|
16
|
+
"@fenglimg/fabric-shared": "1.1.0"
|
|
18
17
|
},
|
|
19
18
|
"devDependencies": {
|
|
19
|
+
"@types/express": "^5.0.6",
|
|
20
20
|
"@types/node": "^22.15.0",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
|
-
"typescript": "^5.8.3"
|
|
22
|
+
"typescript": "^5.8.3",
|
|
23
|
+
"@fenglimg/fabric-dashboard": "1.1.0"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup src/index.ts --format esm --dts --clean && node scripts/copy-dashboard.mjs",
|
|
27
|
+
"dev": "tsup src/index.ts --format esm --dts --watch"
|
|
23
28
|
}
|
|
24
|
-
}
|
|
29
|
+
}
|