@fenglimg/fabric-server 1.1.0 → 1.3.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 → chunk-DQ7RCYKB.js} +180 -14
- package/dist/{http-FL3MB4L2.js → http-YPXWM5QS.js} +127 -15
- package/dist/index.d.ts +7 -1
- package/dist/index.js +148 -75
- package/dist/static/assets/index-Btq99IfR.js +10 -0
- package/dist/static/index.html +1 -1
- package/package.json +3 -3
- package/dist/static/assets/index-BiK8yn_c.js +0 -5
|
@@ -0,0 +1,10 @@
|
|
|
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 at,$,_a,ne,Vt,ga,ba,ot,je,Ne,va,It,_t,gt,ya,De={},Ze=[],rr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,rt=Array.isArray;function K(t,e){for(var a in e)t[a]=e[a];return t}function Rt(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function nr(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?at.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 Pe(t,s,r,n,null)}function Pe(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??++_a,__i:-1,__u:0};return n==null&&$.vnode!=null&&$.vnode(i),i}function nt(t){return t.children}function Fe(t,e){this.props=t,this.context=e}function _e(t,e){if(e==null)return t.__?_e(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"?_e(t):null}function ir(t){if(t.__P&&t.__d){var e=t.__v,a=e.__e,r=[],n=[],i=K({},e);i.__v=e.__v+1,$.vnode&&$.vnode(i),$t(t.__P,i,e,t.__n,t.__P.namespaceURI,32&e.__u?[a]:null,r,a??_e(e),!!(32&e.__u),n),i.__v=e.__v,i.__.__k[i.__i]=i,Na(r,i,n),e.__e=e.__=null,i.__e!=a&&ka(i)}}function ka(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}),ka(t)}function bt(t){(!t.__d&&(t.__d=!0)&&ne.push(t)&&!Ue.__r++||Vt!=$.debounceRendering)&&((Vt=$.debounceRendering)||ga)(Ue)}function Ue(){try{for(var t,e=1;ne.length;)ne.length>e&&ne.sort(ba),t=ne.shift(),e=ne.length,ir(t)}finally{ne.length=Ue.__r=0}}function wa(t,e,a,r,n,i,s,o,c,l,h){var u,g,p,v,C,w,x,y=r&&r.__k||Ze,O=e.length;for(c=sr(a,e,y,c,O),u=0;u<O;u++)(p=a.__k[u])!=null&&(g=p.__i!=-1&&y[p.__i]||De,p.__i=u,w=$t(t,p,g,n,i,s,o,c,l,h),v=p.__e,p.ref&&g.ref!=p.ref&&(g.ref&&Ot(g.ref,null,p),h.push(p.ref,p.__c||v,p)),C==null&&v!=null&&(C=v),(x=!!(4&p.__u))||g.__k===p.__k?(c=xa(p,c,t,x),x&&g.__e&&(g.__e=null)):typeof p.type=="function"&&w!==void 0?c=w:v&&(c=v.nextSibling),p.__u&=-7);return a.__e=C,c}function sr(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]=Pe(null,s,null,null,null):rt(s)?s=t.__k[i]=Pe(nt,{children:s},null,null,null):s.constructor===void 0&&s.__b>0?s=t.__k[i]=Pe(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=or(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=_e(o)),Ta(o,o));return r}function xa(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=xa(n[i],e,a,r));return e}t.__e!=e&&(r&&(e&&t.type&&!e.parentNode&&(e=_e(t)),a.insertBefore(t.__e,e||null)),e=t.__e);do e=e&&e.nextSibling;while(e!=null&&e.nodeType==8);return e}function or(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 Bt(t,e,a){e[0]=="-"?t.setProperty(e,a??""):t[e]=a==null?"":typeof a!="number"||rr.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||Bt(t.style,e,"");if(a)for(e in a)r&&a[e]==r[e]||Bt(t.style,e,a[e])}else if(e[0]=="o"&&e[1]=="n")i=e!=(e=e.replace(va,"$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[Ne]=r[Ne]:(a[Ne]=It,t.addEventListener(e,i?gt:_t,i)):t.removeEventListener(e,i?gt:_t,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 zt(t){return function(e){if(this.l){var a=this.l[e.type+t];if(e[je]==null)e[je]=It++;else if(e[je]<a[Ne])return;return a($.event?$.event(e):e)}}}function $t(t,e,a,r,n,i,s,o,c,l){var h,u,g,p,v,C,w,x,y,O,U,we,Ht,Re,st,q=e.type;if(e.constructor!==void 0)return null;128&a.__u&&(c=!!(32&a.__u),i=[o=e.__e=a.__e]),(h=$.__b)&&h(e);e:if(typeof q=="function")try{if(x=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?w=(u=e.__c=a.__c).__=u.__E:(y?e.__c=u=new q(x,U):(e.__c=u=new Fe(x,U),u.constructor=q,u.render=lr),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(x,u.__s))),p=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&&x!==p&&u.componentWillReceiveProps!=null&&u.componentWillReceiveProps(x,U),e.__v==a.__v||!u.__e&&u.shouldComponentUpdate!=null&&u.shouldComponentUpdate(x,u.__s,U)===!1){e.__v!=a.__v&&(u.props=x,u.state=u.__s,u.__d=!1),e.__e=a.__e,e.__k=a.__k,e.__k.some(function(fe){fe&&(fe.__=e)}),Ze.push.apply(u.__h,u._sb),u._sb=[],u.__h.length&&s.push(u);break e}u.componentWillUpdate!=null&&u.componentWillUpdate(x,u.__s,U),y&&u.componentDidUpdate!=null&&u.__h.push(function(){u.componentDidUpdate(p,v,C)})}if(u.context=U,u.props=x,u.__P=t,u.__e=!1,we=$.__r,Ht=0,y)u.state=u.__s,u.__d=!1,we&&we(e),h=u.render(u.props,u.state,u.context),Ze.push.apply(u.__h,u._sb),u._sb=[];else do u.__d=!1,we&&we(e),h=u.render(u.props,u.state,u.context),u.state=u.__s;while(u.__d&&++Ht<25);u.state=u.__s,u.getChildContext!=null&&(r=K(K({},r),u.getChildContext())),y&&!g&&u.getSnapshotBeforeUpdate!=null&&(C=u.getSnapshotBeforeUpdate(p,v)),Re=h!=null&&h.type===nt&&h.key==null?Sa(h.props.children):h,o=wa(t,rt(Re)?Re:[Re],e,a,r,n,i,s,o,c,l),u.base=e.__e,e.__u&=-161,u.__h.length&&s.push(u),w&&(u.__E=u.__=null)}catch(fe){if(e.__v=null,c||i!=null)if(fe.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(st=i.length;st--;)Rt(i[st]);vt(e)}else e.__e=a.__e,e.__k=a.__k,fe.then||vt(e);$.__e(fe,e,a)}else i==null&&e.__v==a.__v?(e.__k=a.__k,e.__e=a.__e):o=e.__e=dr(a.__e,e,a,r,n,i,s,c,l);return(h=$.diffed)&&h(e),128&e.__u?void 0:o}function vt(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(vt))}function Na(t,e,a){for(var r=0;r<a.length;r++)Ot(a[r],a[++r],a[++r]);$.__c&&$.__c(e,t),t.some(function(n){try{t=n.__h,n.__h=[],t.some(function(i){i.call(n)})}catch(i){$.__e(i,n.__v)}})}function Sa(t){return typeof t!="object"||t==null||t.__b>0?t:rt(t)?t.map(Sa):K({},t)}function dr(t,e,a,r,n,i,s,o,c){var l,h,u,g,p,v,C,w=a.props||De,x=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((p=i[l])&&"setAttribute"in p==!!y&&(y?p.localName==y:p.nodeType==3)){t=p,i[l]=null;break}}if(t==null){if(y==null)return document.createTextNode(x);t=document.createElementNS(n,y,x.is&&x),o&&($.__m&&$.__m(e,i),o=!1),i=null}if(y==null)w===x||o&&t.data==x||(t.data=x);else{if(i=i&&at.call(t.childNodes),!o&&i!=null)for(w={},l=0;l<t.attributes.length;l++)w[(p=t.attributes[l]).name]=p.value;for(l in w)p=w[l],l=="dangerouslySetInnerHTML"?u=p:l=="children"||l in x||l=="value"&&"defaultValue"in x||l=="checked"&&"defaultChecked"in x||$e(t,l,null,p,n);for(l in x)p=x[l],l=="children"?g=p:l=="dangerouslySetInnerHTML"?h=p:l=="value"?v=p:l=="checked"?C=p:o&&typeof p!="function"||w[l]===p||$e(t,l,p,w[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=""),wa(e.type=="template"?t.content:t,rt(g)?g:[g],e,a,r,y=="foreignObject"?"http://www.w3.org/1999/xhtml":n,i,s,i?i[0]:a.__k&&_e(a,0),o,c),i!=null)for(l=i.length;l--;)Rt(i[l]);o||(l="value",y=="progress"&&v==null?t.removeAttribute("value"):v!=null&&(v!==t[l]||y=="progress"&&!v||y=="option"&&v!=w[l])&&$e(t,l,v,w[l],n),l="checked",C!=null&&C!=t[l]&&$e(t,l,C,w[l],n))}return t}function Ot(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){$.__e(n,a)}}function Ta(t,e,a){var r,n;if($.unmount&&$.unmount(t),(r=t.ref)&&(r.current&&r.current!=t.__e||Ot(r,null,e)),(r=t.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(i){$.__e(i,e)}r.base=r.__P=null}if(r=t.__k)for(n=0;n<r.length;n++)r[n]&&Ta(r[n],e,a||typeof t.type!="function");a||Rt(t.__e),t.__c=t.__=t.__e=void 0}function lr(t,e,a){return this.constructor(t,a)}function cr(t,e,a){var r,n,i,s;e==document&&(e=document.documentElement),$.__&&$.__(t,e),n=(r=!1)?null:e.__k,i=[],s=[],$t(e,t=e.__k=nr(nt,null,[t]),n||De,De,e.namespaceURI,n?null:e.firstChild?at.call(e.childNodes):null,i,n?n.__e:e.firstChild,r,s),Na(i,t,s)}function ur(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,bt(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"+ya++,e.__=t,e.Provider=e.__l=(e.Consumer=function(a,r){return a.children(r)}).contextType=e,e}at=Ze.slice,$={__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}},_a=0,Fe.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),bt(this))},Fe.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),bt(this))},Fe.prototype.render=nt,ne=[],ga=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ba=function(t,e){return t.__v.__b-e.__v.__b},Ue.__r=0,ot=Math.random().toString(8),je="__d"+ot,Ne="__a"+ot,va=/(PointerCapture)$|Capture$/i,It=0,_t=zt(!1),gt=zt(!0),ya=0;var hr=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:--hr,__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 $.vnode&&$.vnode(l),l}var ge,P,dt,Wt,He=0,Ca=[],F=$,qt=F.__b,Gt=F.__r,Xt=F.diffed,Jt=F.__c,Kt=F.unmount,Yt=F.__;function it(t,e){F.__h&&F.__h(P,t,He||e),He=0;var a=P.__H||(P.__H={__:[],__h:[]});return t>=a.__.length&&a.__.push({}),a.__[t]}function L(t){return He=1,pr(Ea,t)}function pr(t,e,a){var r=it(ge++,2);if(r.t=t,!r.__c&&(r.__=[Ea(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 p=g.__[0];g.__=g.__N,g.__N=void 0,p!==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=it(ge++,3);!F.__s&&Aa(a.__H,e)&&(a.__=t,a.u=e,P.__H.__h.push(a))}function Oe(t){return He=5,ee(function(){return{current:t}},[])}function ee(t,e){var a=it(ge++,7);return Aa(a.__H,e)&&(a.__=t(),a.__H=e,a.__h=t),a.__}function fr(t){var e=P.context[t.__c],a=it(ge++,9);return a.c=t,e?(a.__==null&&(a.__=!0,e.sub(P)),e.props.value):t.__}function mr(){for(var t;t=Ca.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(Me),e.__h.some(yt),e.__h=[]}catch(a){e.__h=[],F.__e(a,t.__v)}}}F.__b=function(t){P=null,qt&&qt(t)},F.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),Yt&&Yt(t,e)},F.__r=function(t){Gt&&Gt(t),ge=0;var e=(P=t.__c).__H;e&&(dt===P?(e.__h=[],P.__h=[],e.__.some(function(a){a.__N&&(a.__=a.__N),a.u=a.__N=void 0})):(e.__h.some(Me),e.__h.some(yt),e.__h=[],ge=0)),dt=P},F.diffed=function(t){Xt&&Xt(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(Ca.push(e)!==1&&Wt===F.requestAnimationFrame||((Wt=F.requestAnimationFrame)||_r)(mr)),e.__H.__.some(function(a){a.u&&(a.__H=a.u),a.u=void 0})),dt=P=null},F.__c=function(t,e){e.some(function(a){try{a.__h.some(Me),a.__h=a.__h.filter(function(r){return!r.__||yt(r)})}catch(r){e.some(function(n){n.__h&&(n.__h=[])}),e=[],F.__e(r,a.__v)}}),Jt&&Jt(t,e)},F.unmount=function(t){Kt&&Kt(t);var e,a=t.__c;a&&a.__H&&(a.__H.__.some(function(r){try{Me(r)}catch(n){e=n}}),a.__H=void 0,e&&F.__e(e,a.__v))};var Qt=typeof requestAnimationFrame=="function";function _r(t){var e,a=function(){clearTimeout(r),Qt&&cancelAnimationFrame(e),setTimeout(t)},r=setTimeout(a,35);Qt&&(e=requestAnimationFrame(a))}function Me(t){var e=P,a=t.__c;typeof a=="function"&&(t.__c=void 0,a()),P=e}function yt(t){var e=P;t.__c=t.__(),P=e}function Aa(t,e){return!t||t.length!==e.length||e.some(function(a,r){return a!==t[r]})}function Ea(t,e){return typeof e=="function"?e(t):e}var gr=Symbol.for("preact-signals");function Lt(){if(ce>1)ce--;else{var t,e=!1;for((function(){var n=Be;for(Be=void 0;n!==void 0;)n.S.v===n.v&&(n.S.i=n.i),n=n.o})();Se!==void 0;){var a=Se;for(Se=void 0,Ve++;a!==void 0;){var r=a.u;if(a.u=void 0,a.f&=-3,!(8&a.f)&&$a(a))try{a.c()}catch(n){e||(t=n,e=!0)}a=r}}if(Ve=0,ce--,e)throw t}}var R=void 0;function Ia(t){var e=R;R=void 0;try{return t()}finally{R=e}}var Se=void 0,ce=0,Ve=0,ea=0,Be=void 0,ze=0;function Ra(t){if(R!==void 0){var e=t.n;if(e===void 0||e.t!==R)return e={i:0,S:t,p:R.s,n:void 0,t:R,e:void 0,x:void 0,r:e},R.s!==void 0&&(R.s.n=e),R.s=e,t.n=e,32&R.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=R.s,e.n=void 0,R.s.n=e,R.s=e),e}}function Z(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}Z.prototype.brand=gr;Z.prototype.h=function(){return!0};Z.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:Ia(function(){var r;(r=e.W)==null||r.call(e)}))};Z.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&&Ia(function(){var n;(n=e.Z)==null||n.call(e)}))}};Z.prototype.subscribe=function(t){var e=this;return vr(function(){var a=e.value,r=R;R=void 0;try{t(a)}finally{R=r}},{name:"sub"})};Z.prototype.valueOf=function(){return this.value};Z.prototype.toString=function(){return this.value+""};Z.prototype.toJSON=function(){return this.value};Z.prototype.peek=function(){var t=R;R=void 0;try{return this.value}finally{R=t}};Object.defineProperty(Z.prototype,"value",{get:function(){var t=Ra(this);return t!==void 0&&(t.i=this.i),this.v},set:function(t){if(t!==this.v){if(Ve>100)throw new Error("Cycle detected");(function(a){ce!==0&&Ve===0&&a.l!==ea&&(a.l=ea,Be={S:a,v:a.v,i:a.i,o:Be})})(this),this.v=t,this.i++,ze++,ce++;try{for(var e=this.t;e!==void 0;e=e.x)e.t.N()}finally{Lt()}}}});function jt(t,e){return new Z(t,e)}function $a(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 Oa(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 La(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 ye(t,e){Z.call(this,void 0),this.x=t,this.s=void 0,this.g=ze-1,this.f=4,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}ye.prototype=new Z;ye.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===ze))return!0;if(this.g=ze,this.f|=1,this.i>0&&!$a(this))return this.f&=-2,!0;var t=R;try{Oa(this),R=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 R=t,La(this),this.f&=-2,!0};ye.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)}Z.prototype.S.call(this,t)};ye.prototype.U=function(t){if(this.t!==void 0&&(Z.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)}};ye.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(ye.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var t=Ra(this);if(this.h(),t!==void 0&&(t.i=this.i),16&this.f)throw this.v;return this.v}});function ja(t){var e=t.m;if(t.m=void 0,typeof e=="function"){ce++;var a=R;R=void 0;try{e()}catch(r){throw t.f&=-2,t.f|=8,Pt(t),r}finally{R=a,Lt()}}}function Pt(t){for(var e=t.s;e!==void 0;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,ja(t)}function br(t){if(R!==this)throw new Error("Out-of-order effect");La(this),R=t,this.f&=-2,8&this.f&&Pt(this),Lt()}function ke(t,e){this.x=t,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=e?.name}ke.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()}};ke.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,ja(this),Oa(this),ce++;var t=R;return R=this,br.bind(this,t)};ke.prototype.N=function(){2&this.f||(this.f|=2,this.u=Se,Se=this)};ke.prototype.d=function(){this.f|=8,1&this.f||Pt(this)};ke.prototype.dispose=function(){this.d()};function vr(t,e){var a=new ke(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 yr(){return await Ee("/api/rules")}async function Pa(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(Za("/api/ledger",e))}async function kr(){return await Ee("/api/doctor")}async function Fa(){return await Ee("/api/human-lock")}async function wr(t){return await Ma("/api/human-lock/approve",t)}async function xr(t){return await Ma("/api/intent/annotate",t)}async function Nr(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(Za("/api/history/state",e))}let re;function Sr(t,e,a,r,n){let i=!1;const s=new AbortController;let o=!1;const c=Ft({Accept:"text/event-stream"});return e!==null&&e.length>0&&(c["Last-Event-ID"]=e),(async()=>{try{const h=await fetch(t,{headers:c,signal:s.signal});if(!h.ok||h.body===null){l(()=>{n()});return}r();const u=h.body.getReader(),g=new TextDecoder;let p="";for(;!i;){const{done:v,value:C}=await u.read();if(v)break;p+=g.decode(C,{stream:!0}),p=p.replace(/\r\n/g,`
|
|
2
|
+
`);let w;for(;(w=p.indexOf(`
|
|
3
|
+
|
|
4
|
+
`))>=0;){const x=p.slice(0,w);p=p.slice(w+2),Tr(x,a)}}}catch{}finally{i||l(()=>{n()})}})(),{close(){i=!0,s.abort()}};function l(h){o||(o=!0,h())}}function Tr(t,e){let a="message",r="",n="";for(const i of t.split(`
|
|
5
|
+
`))i.startsWith("event:")?a=i.slice(6).trim():i.startsWith("data:")?r=r.length>0?`${r}
|
|
6
|
+
${i.slice(5).trim()}`:i.slice(5).trim():i.startsWith("id:")&&(n=i.slice(3).trim());r.length>0&&e(a,r,n)}function Cr(){if(re!==void 0)return re;const e=window.__FABRIC_AUTH_TOKEN__;if(typeof e=="string"&&e.length>0)return re=e,re;const a=new URL(window.location.href),r=a.searchParams,n=r.get("token");if(n!==null&&n.length>0){r.delete("token");const i=r.toString(),s=`${a.pathname}${i.length>0?`?${i}`:""}${a.hash}`;return window.history.replaceState({},document.title,s),re=n,re}return re=null,re}function Ar(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:Ft({Accept:"application/json"})});return await Da(e)}async function Ma(t,e){const a=await fetch(t,{method:"POST",headers:Ft({Accept:"application/json","Content-Type":"application/json"}),body:JSON.stringify(e)});return await Da(a)}async function Da(t){const e=await t.text(),a=e.length>0?JSON.parse(e):void 0;if(!t.ok)throw new Error(Er(a,t.status));return a}function Er(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 Za(t,e){const a=e.toString();return a.length>0?`${t}?${a}`:t}function Ft(t){const e=Cr();return e===null?t:{...t,Authorization:`Bearer ${e}`}}const Ir=["meta:updated","lock:drift","lock:approved","ledger:appended","drift:detected"],Rr=new Set(Ir),lt=jt([]),ct=jt(!1),ut=jt(0),ta=1e3,$r=3e4,Or=2;function Lr(){const[t,e]=L({connected:ct.value,lastEvent:lt.value[0]??null,version:ut.value}),a=Oe(null),r=Oe(ta),n=Oe(void 0),i=Oe(!0);return V(()=>{i.current=!0;const s=h=>{ct.value=h,e(u=>({...u,connected:h}))},o=(h,u,g)=>{if(!Rr.has(h))return;g.length>0&&(a.current=g);const p=Ar(u);p!==null&&(lt.value=[p,...lt.value].slice(0,50),ut.value+=1,e({connected:ct.value,lastEvent:p,version:ut.value}))};let c=null;const l=()=>{i.current&&(c=Sr("/events",a.current,o,()=>{i.current&&(r.current=ta,s(!0))},()=>{if(!i.current)return;s(!1);const h=r.current;r.current=Math.min(r.current*Or,$r),n.current=setTimeout(l,h)}))};return l(),()=>{i.current=!1,clearTimeout(n.current),c?.close(),s(!1)}},[]),t}var jr={"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.clients.claude":"Claude Code CLI","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.args.force.description":"Overwrite existing files (bypass non-destructive guard)","cli.init.args.no-bootstrap.description":"Skip running bootstrap installer as part of init","cli.init.args.no-mcp.description":"Skip configuring MCP clients as part of init","cli.init.args.no-hooks.description":"Skip installing git hooks as part of init","cli.init.mcp.install.global":"Using globally-installed @fenglimg/fabric-server","cli.init.mcp.install.local":"Installing @fenglimg/fabric-server to project devDependencies","cli.init.mcp.install.prompt":"MCP server install scope (global|local)","cli.init.mcp.install.invalid":'Invalid --mcp-install value "{value}" — falling back to global',"cli.init.mcp.local.installing":"Running {manager} add -D @fenglimg/fabric-server...","cli.init.mcp.local.installed":"Installed to devDependencies","cli.init.created-path":"{label} {path}","cli.init.skipped-existing-path":"{label} {path}: already exists.","cli.init.force.overwritten":"Overwritten","cli.init.force.warning":"--force will overwrite existing Fabric artifacts in {path}","cli.init.stages.bootstrap":"Installing bootstrap templates...","cli.init.stages.mcp":"Configuring MCP clients...","cli.init.stages.hooks":"Installing git hooks...","cli.init.stages.skipped":"skipped","cli.init.stages.completed":"completed","cli.init.stages.failed":"failed","cli.init.stages.summary.ran":"ran","cli.init.stages.summary.skipped":"skipped","cli.init.stages.summary.failed":"failed","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.update.description":"Refresh MCP host configuration and git hooks without re-creating Fabric files.","cli.update.args.target.description":"Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.","cli.update.args.no-mcp.description":"Skip re-configuring MCP clients","cli.update.args.no-hooks.description":"Skip re-installing git hooks","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"},Pr={"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.clients.claude":"Claude Code CLI","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.args.force.description":"覆盖现有文件(绕过非破坏性保护)","cli.init.args.no-bootstrap.description":"初始化时跳过运行 bootstrap 安装器","cli.init.args.no-mcp.description":"初始化时跳过配置 MCP 客户端","cli.init.args.no-hooks.description":"初始化时跳过安装 git hooks","cli.init.mcp.install.global":"使用全局安装的 @fenglimg/fabric-server","cli.init.mcp.install.local":"将 @fenglimg/fabric-server 安装到项目 devDependencies","cli.init.mcp.install.prompt":"MCP 服务端安装范围(global|local)","cli.init.mcp.install.invalid":"无效的 --mcp-install 值“{value}”,将回退到 global","cli.init.mcp.local.installing":"正在运行 {manager} add -D @fenglimg/fabric-server...","cli.init.mcp.local.installed":"已安装到 devDependencies","cli.init.created-path":"{label} {path}","cli.init.skipped-existing-path":"{label} {path}:已存在。","cli.init.force.overwritten":"已覆盖","cli.init.force.warning":"--force 将覆盖 {path} 中现有的 Fabric 产物","cli.init.stages.bootstrap":"正在安装 bootstrap 模板...","cli.init.stages.mcp":"正在配置 MCP 客户端...","cli.init.stages.hooks":"正在安装 git hooks...","cli.init.stages.skipped":"已跳过","cli.init.stages.completed":"已完成","cli.init.stages.failed":"失败","cli.init.stages.summary.ran":"已执行","cli.init.stages.summary.skipped":"已跳过","cli.init.stages.summary.failed":"失败","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.update.description":"刷新 MCP 主机配置和 git hooks,不重新创建 Fabric 文件。","cli.update.args.target.description":"目标项目路径。默认依次使用 CLI 参数、EXTERNAL_FIXTURE_PATH、fabric.config.json、当前目录。","cli.update.args.no-mcp.description":"跳过重新配置 MCP 客户端","cli.update.args.no-hooks.description":"跳过重新安装 git hooks","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":"重试"},Fr={en:jr,"zh-CN":Pr};function Mr(t,e=Fr){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 Dr(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 Zr(){return typeof navigator<"u"&&typeof navigator.language=="string"?Dr(navigator.language):"en"}function Ur(t=Zr()){return{locale:t,t:Mr(t)}}const Ua=ur(null);function Hr({children:t}){const e=ee(()=>Ur(),[]);return d(Ua.Provider,{value:e,children:t})}function B(){const t=fr(Ua);if(t===null)throw new Error("useI18n must be used within an I18nProvider.");return t}function Ha({variant:t,state:e="idle",size:a="md",onClick:r,children:n,ariaLabel:i}){const{t:s}=B(),[o,c]=L(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 Vr={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 se({kind:t,severity:e,message:a,diffStats:r}){const{t:n}=B();if(e==="ok"&&t==="dot")return null;const i=a??n(Vr[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 Br({entry:t,currentHash:e,diffStats:a,diffPreview:r=[],onApprove:n,busy:i=!1}){const{t:s}=B(),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(se,{kind:"pill",severity:o?"drift":"ok",message:l})]}),d("div",{className:"lock-body",children:[d("div",{className:"hash-block",children:[d(ht,{label:s("dashboard.lock-card.hash.locked"),value:t.hash,stale:o}),d(ht,{label:s("dashboard.lock-card.hash.current"),value:e??s("dashboard.history-replay.meta.not-available")}),d(ht,{label:s("dashboard.lock-card.hash.diff"),value:zr(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,`
|
|
7
|
+
`]},`${u.kind}:${u.line}:${u.text}`)):`${t.file}
|
|
8
|
+
${h}
|
|
9
|
+
${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(Ha,{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 ht({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 zr(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 kt({source:t,size:e="sm",variant:a="filled",interactive:r=!1,selected:n=!1,onClick:i}){const{t:s}=B(),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 Va({entry:t,onAnnotate:e,expanded:a=!1,readOnly:r=!1}){const{locale:n,t:i}=B(),[s,o]=L(a),[c,l]=L(""),h=t.source==="ai",u=!r&&h&&e!==void 0&&t.id!==void 0,g=async()=>{const p=c.trim();!h||e===void 0||p.length===0||(await e(t,p),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(kt,{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:Wr(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(p=>d("span",{children:p},p))]}),!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(p=>!p),children:i("dashboard.timeline-entry.annotate")})}):null,s&&h?d("form",{className:"annotate-form",onSubmit:p=>{p.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:p=>l(p.currentTarget.value),placeholder:i("dashboard.timeline-entry.annotation-placeholder")}),d(Ha,{variant:"annotate",size:"sm",onClick:g,children:i("dashboard.timeline-entry.annotation-save")})]}):null]})}function Wr(t,e){return new Intl.DateTimeFormat(e,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(t))}function Mt({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}=B(),[h,u]=L(s),g=c.length>0,p=t.file,v=i===null?"ok":i==="orphan"?"orphan":"stale",C=()=>{o||(g&&u(x=>!x),r?.(p))},w=x=>{o||((x.key==="Enter"||x.key===" ")&&(x.preventDefault(),C()),x.key==="ArrowRight"&&g&&u(!0),x.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:C,onKeyDown:o?void 0:w,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:p}),n?d("span",{className:"badge badge-locked",children:l("dashboard.tree-node.locked")}):null,i!==null?d(se,{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:qr(t.hash)})]})]}),g&&h?d("div",{className:"tree-children",role:"group",children:c.map(x=>d(Mt,{...x,onSelect:r,readOnly:o},`${x.node.file}:${x.level}`))}):null]})}function qr(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 aa;(function(t){t.mergeShapes=(e,a)=>({...e,...a})})(aa||(aa={}));const b=I.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ie=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}},f=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 te 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 te))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()}}te.create=t=>new te(t);const wt=(t,e)=>{let a;switch(t.code){case f.invalid_type:t.received===b.undefined?a="Required":a=`Expected ${t.expected}, received ${t.received}`;break;case f.invalid_literal:a=`Invalid literal value, expected ${JSON.stringify(t.expected,I.jsonStringifyReplacer)}`;break;case f.unrecognized_keys:a=`Unrecognized key(s) in object: ${I.joinValues(t.keys,", ")}`;break;case f.invalid_union:a="Invalid input";break;case f.invalid_union_discriminator:a=`Invalid discriminator value. Expected ${I.joinValues(t.options)}`;break;case f.invalid_enum_value:a=`Invalid enum value. Expected ${I.joinValues(t.options)}, received '${t.received}'`;break;case f.invalid_arguments:a="Invalid function arguments";break;case f.invalid_return_type:a="Invalid function return type";break;case f.invalid_date:a="Invalid date";break;case f.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 f.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 f.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 f.custom:a="Invalid input";break;case f.invalid_intersection_types:a="Intersection results could not be merged";break;case f.not_multiple_of:a=`Number must be a multiple of ${t.multipleOf}`;break;case f.not_finite:a="Number must be finite";break;default:a=e.defaultError,I.assertNever(t)}return{message:a}};let Gr=wt;function Xr(){return Gr}const Jr=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=Xr(),r=Jr({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,a,a===wt?void 0:wt].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"}),xe=t=>({status:"dirty",value:t}),W=t=>({status:"valid",value:t}),ra=t=>t.status==="aborted",na=t=>t.status==="dirty",be=t=>t.status==="valid",We=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 X{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 ia=(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 te(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 E{get description(){return this._def.description}_getType(e){return ie(e.data)}_getOrReturnCtx(e,a){return a||{common:e.parent.common,data:e.data,parsedType:ie(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:ie(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const a=this._parse(e);if(We(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:ie(e)},n=this._parseSync({data:e,path:r.path,parent:r});return ia(r,n)}"~validate"(e){const a={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ie(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:ie(e)},n=this._parse({data:e,path:r.path,parent:r}),i=await(We(n)?n:Promise.resolve(n));return ia(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:f.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 de({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 pe.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return G.create(this)}promise(){return Ye.create(this,this._def)}or(e){return Ge.create([this,e],this._def)}and(e){return Xe.create(this,e,this._def)}transform(e){return new de({...T(this._def),schema:this,typeName:S.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const a=typeof e=="function"?e:()=>e;return new Qe({...T(this._def),innerType:this,defaultValue:a,typeName:S.ZodDefault})}brand(){return new qa({typeName:S.ZodBranded,type:this,...T(this._def)})}catch(e){const a=typeof e=="function"?e:()=>e;return new et({...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 Zt.create(this,e)}readonly(){return tt.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Kr=/^c[^\s-]{8,}$/i,Yr=/^[0-9a-z]+$/,Qr=/^[0-9A-HJKMNP-TV-Z]{26}$/i,en=/^[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,tn=/^[a-z0-9_-]{21}$/i,an=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,rn=/^[-+]?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)?)??$/,nn=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,sn="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let pt;const on=/^(?:(?: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])$/,dn=/^(?:(?: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])$/,ln=/^(([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]))$/,cn=/^(([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])$/,un=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,hn=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ba="((\\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])))",pn=new RegExp(`^${Ba}$`);function za(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 fn(t){return new RegExp(`^${za(t)}$`)}function mn(t){let e=`${Ba}T${za(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 _n(t,e){return!!((e==="v4"||!e)&&on.test(t)||(e==="v6"||!e)&&ln.test(t))}function gn(t,e){if(!an.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 bn(t,e){return!!((e==="v4"||!e)&&dn.test(t)||(e==="v6"||!e)&&cn.test(t))}class Y extends E{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==b.string){const i=this._getOrReturnCtx(e);return _(i,{code:f.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:f.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:f.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:f.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):o&&_(n,{code:f.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")nn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"email",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")pt||(pt=new RegExp(sn,"u")),pt.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"emoji",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")en.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"uuid",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")tn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"nanoid",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Kr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cuid",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Yr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cuid2",code:f.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Qr.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"ulid",code:f.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:f.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:f.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:f.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:f.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:f.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?mn(i).test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:f.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?pn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:f.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?fn(i).test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{code:f.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?rn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"duration",code:f.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?_n(e.data,i.version)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"ip",code:f.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?gn(e.data,i.alg)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"jwt",code:f.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?bn(e.data,i.version)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"cidr",code:f.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?un.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"base64",code:f.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?hn.test(e.data)||(n=this._getOrReturnCtx(e,n),_(n,{validation:"base64url",code:f.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:f.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 vn(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 ve extends E{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:f.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:f.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:f.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:f.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),n.dirty()):i.kind==="multipleOf"?vn(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),_(r,{code:f.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:f.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 ve({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:k.toString(n)}]})}_addCheck(e){return new ve({...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)}}ve.create=t=>new ve({checks:[],typeName:S.ZodNumber,coerce:t?.coerce||!1,...T(t)});class Te extends E{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:f.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:f.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:f.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:f.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 Te({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:k.toString(n)}]})}_addCheck(e){return new Te({...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}}Te.create=t=>new Te({checks:[],typeName:S.ZodBigInt,coerce:t?.coerce??!1,...T(t)});class xt extends E{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==b.boolean){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.boolean,received:r.parsedType}),N}return W(e.data)}}xt.create=t=>new xt({typeName:S.ZodBoolean,coerce:t?.coerce||!1,...T(t)});class qe extends E{_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:f.invalid_type,expected:b.date,received:i.parsedType}),N}if(Number.isNaN(e.data.getTime())){const i=this._getOrReturnCtx(e);return _(i,{code:f.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:f.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:f.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 qe({...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}}qe.create=t=>new qe({checks:[],coerce:t?.coerce||!1,typeName:S.ZodDate,...T(t)});class sa extends E{_parse(e){if(this._getType(e)!==b.symbol){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.symbol,received:r.parsedType}),N}return W(e.data)}}sa.create=t=>new sa({typeName:S.ZodSymbol,...T(t)});class Nt extends E{_parse(e){if(this._getType(e)!==b.undefined){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.undefined,received:r.parsedType}),N}return W(e.data)}}Nt.create=t=>new Nt({typeName:S.ZodUndefined,...T(t)});class St extends E{_parse(e){if(this._getType(e)!==b.null){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.null,received:r.parsedType}),N}return W(e.data)}}St.create=t=>new St({typeName:S.ZodNull,...T(t)});class oa extends E{constructor(){super(...arguments),this._any=!0}_parse(e){return W(e.data)}}oa.create=t=>new oa({typeName:S.ZodAny,...T(t)});class da extends E{constructor(){super(...arguments),this._unknown=!0}_parse(e){return W(e.data)}}da.create=t=>new da({typeName:S.ZodUnknown,...T(t)});class oe extends E{_parse(e){const a=this._getOrReturnCtx(e);return _(a,{code:f.invalid_type,expected:b.never,received:a.parsedType}),N}}oe.create=t=>new oe({typeName:S.ZodNever,...T(t)});class la extends E{_parse(e){if(this._getType(e)!==b.undefined){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.void,received:r.parsedType}),N}return W(e.data)}}la.create=t=>new la({typeName:S.ZodVoid,...T(t)});class G extends E{_parse(e){const{ctx:a,status:r}=this._processInputParams(e),n=this._def;if(a.parsedType!==b.array)return _(a,{code:f.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?f.too_big:f.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:f.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:f.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 X(a,s,a.path,o)))).then(s=>D.mergeArray(r,s));const i=[...a.data].map((s,o)=>n.type._parseSync(new X(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 me(t){if(t instanceof M){const e={};for(const a in t.shape){const r=t.shape[a];e[a]=Q.create(me(r))}return new M({...t._def,shape:()=>e})}else return t instanceof G?new G({...t._def,type:me(t.element)}):t instanceof Q?Q.create(me(t.unwrap())):t instanceof pe?pe.create(me(t.unwrap())):t instanceof ue?ue.create(t.items.map(e=>me(e))):t}class M extends E{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:f.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 oe&&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 X(n,u,n.path,l)),alwaysSet:l in n.data})}if(this._def.catchall instanceof oe){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:f.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 X(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 M({...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 M({...this._def,unknownKeys:"strip"})}passthrough(){return new M({...this._def,unknownKeys:"passthrough"})}extend(e){return new M({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new M({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 M({...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 M({...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 M({...this._def,shape:()=>a})}deepPartial(){return me(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 M({...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 M({...this._def,shape:()=>a})}keyof(){return Wa(I.objectKeys(this.shape))}}M.create=(t,e)=>new M({shape:()=>t,unknownKeys:"strip",catchall:oe.create(),typeName:S.ZodObject,...T(e)});M.strictCreate=(t,e)=>new M({shape:()=>t,unknownKeys:"strict",catchall:oe.create(),typeName:S.ZodObject,...T(e)});M.lazycreate=(t,e)=>new M({shape:t,unknownKeys:"strip",catchall:oe.create(),typeName:S.ZodObject,...T(e)});class Ge extends E{_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 te(o.ctx.common.issues));return _(a,{code:f.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 te(c));return _(a,{code:f.invalid_union,unionErrors:o}),N}}get options(){return this._def.options}}Ge.create=(t,e)=>new Ge({options:t,typeName:S.ZodUnion,...T(e)});const J=t=>t instanceof Ct?J(t.schema):t instanceof de?J(t.innerType()):t instanceof Ke?[t.value]:t instanceof he?t.options:t instanceof At?I.objectValues(t.enum):t instanceof Qe?J(t._def.innerType):t instanceof Nt?[void 0]:t instanceof St?[null]:t instanceof Q?[void 0,...J(t.unwrap())]:t instanceof pe?[null,...J(t.unwrap())]:t instanceof qa||t instanceof tt?J(t.unwrap()):t instanceof et?J(t._def.innerType):[];class Dt extends E{_parse(e){const{ctx:a}=this._processInputParams(e);if(a.parsedType!==b.object)return _(a,{code:f.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:f.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=J(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 Dt({typeName:S.ZodDiscriminatedUnion,discriminator:e,options:a,optionsMap:n,...T(r)})}}function Tt(t,e){const a=ie(t),r=ie(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=Tt(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=Tt(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 Xe extends E{_parse(e){const{status:a,ctx:r}=this._processInputParams(e),n=(i,s)=>{if(ra(i)||ra(s))return N;const o=Tt(i.value,s.value);return o.valid?((na(i)||na(s))&&a.dirty(),{status:a.value,value:o.data}):(_(r,{code:f.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}))}}Xe.create=(t,e,a)=>new Xe({left:t,right:e,typeName:S.ZodIntersection,...T(a)});class ue extends E{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.array)return _(r,{code:f.invalid_type,expected:b.array,received:r.parsedType}),N;if(r.data.length<this._def.items.length)return _(r,{code:f.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:f.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 X(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 ue({...this._def,rest:e})}}ue.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ue({items:t,typeName:S.ZodTuple,rest:null,...T(e)})};class Je extends E{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:f.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 X(r,o,r.path,o)),value:s._parse(new X(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 E?new Je({keyType:e,valueType:a,typeName:S.ZodRecord,...T(r)}):new Je({keyType:Y.create(),valueType:e,typeName:S.ZodRecord,...T(a)})}}class ca extends E{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:f.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 X(r,o,r.path,[l,"key"])),value:i._parse(new X(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}}}}ca.create=(t,e,a)=>new ca({valueType:e,keyType:t,typeName:S.ZodMap,...T(a)});class Ce extends E{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.set)return _(r,{code:f.invalid_type,expected:b.set,received:r.parsedType}),N;const n=this._def;n.minSize!==null&&r.data.size<n.minSize.value&&(_(r,{code:f.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:f.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 X(r,c,r.path,l)));return r.common.async?Promise.all(o).then(c=>s(c)):s(o)}min(e,a){return new Ce({...this._def,minSize:{value:e,message:k.toString(a)}})}max(e,a){return new Ce({...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)}}Ce.create=(t,e)=>new Ce({valueType:t,minSize:null,maxSize:null,typeName:S.ZodSet,...T(e)});class Ct extends E{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})}}Ct.create=(t,e)=>new Ct({getter:t,typeName:S.ZodLazy,...T(e)});class Ke extends E{_parse(e){if(e.data!==this._def.value){const a=this._getOrReturnCtx(e);return _(a,{received:a.data,code:f.invalid_literal,expected:this._def.value}),N}return{status:"valid",value:e.data}}get value(){return this._def.value}}Ke.create=(t,e)=>new Ke({value:t,typeName:S.ZodLiteral,...T(e)});function Wa(t,e){return new he({values:t,typeName:S.ZodEnum,...T(e)})}class he extends E{_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:f.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:f.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 he.create(e,{...this._def,...a})}exclude(e,a=this._def){return he.create(this.options.filter(r=>!e.includes(r)),{...this._def,...a})}}he.create=Wa;class At extends E{_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:f.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:f.invalid_enum_value,options:n}),N}return W(e.data)}get enum(){return this._def.values}}At.create=(t,e)=>new At({values:t,typeName:S.ZodNativeEnum,...T(e)});class Ye extends E{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:f.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})))}}Ye.create=(t,e)=>new Ye({type:t,typeName:S.ZodPromise,...T(e)});class de extends E{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"?xe(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"?xe(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)}}de.create=(t,e,a)=>new de({schema:t,typeName:S.ZodEffects,effect:e,...T(a)});de.createWithPreprocess=(t,e,a)=>new de({schema:e,effect:{type:"preprocess",transform:t},typeName:S.ZodEffects,...T(a)});class Q extends E{_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 pe extends E{_parse(e){return this._getType(e)===b.null?W(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}pe.create=(t,e)=>new pe({innerType:t,typeName:S.ZodNullable,...T(e)});class Qe extends E{_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}}Qe.create=(t,e)=>new Qe({innerType:t,typeName:S.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...T(e)});class et extends E{_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 We(n)?n.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new te(r.common.issues)},input:r.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new te(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}et.create=(t,e)=>new et({innerType:t,typeName:S.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...T(e)});class ua extends E{_parse(e){if(this._getType(e)!==b.nan){const r=this._getOrReturnCtx(e);return _(r,{code:f.invalid_type,expected:b.nan,received:r.parsedType}),N}return{status:"valid",value:e.data}}}ua.create=t=>new ua({typeName:S.ZodNaN,...T(t)});class qa extends E{_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 Zt extends E{_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(),xe(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 Zt({in:e,out:a,typeName:S.ZodPipeline})}}class tt extends E{_parse(e){const a=this._def.innerType._parse(e),r=n=>(be(n)&&(n.value=Object.freeze(n.value)),n);return We(a)?a.then(n=>r(n)):r(a)}unwrap(){return this._def.innerType}}tt.create=(t,e)=>new tt({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=ve.create,yn=xt.create;oe.create;const j=G.create,A=M.create;Ge.create;const Ga=Dt.create;Xe.create;ue.create;const Xa=Je.create,ae=Ke.create,z=he.create;Ye.create;Q.create;pe.create;const Ut=de.createWithPreprocess;var ha=".fabric/agents/",kn=["L0","L1","L2"],wn=["mirror","cross-cutting"],xn=z(kn),Nn=z(wn),Sn=A({file:m(),scope_glob:m(),deps:j(m()),priority:z(["high","medium","low"]),layer:xn,topology_type:Nn,hash:m()}),Tn=Ut(t=>!$n(t)||typeof t.file!="string"?t:Et(t),Sn),Cn=A({revision:m(),nodes:Xa(Tn)});function Et(t){return{...t,layer:t.layer??An(t.file),topology_type:t.topology_type??En(t.file)}}function An(t){const e=Ka(t);if(e==="AGENTS.md")return"L0";if(Ja(e))return"L1";const a=In(e),r=Rn(a);return r===0?"L0":r<=2?"L1":"L2"}function En(t){return Ja(Ka(t))?"cross-cutting":"mirror"}function In(t){return t.startsWith(ha)?t.slice(ha.length):t}function Rn(t){const e=t.split("/").filter(Boolean);return Math.max(e.length-1,0)}function Ja(t){return t.split("/").includes("_cross")}function Ka(t){return t.replaceAll("\\","/")}function $n(t){return typeof t=="object"&&t!==null}var On=z(["ai","human"]),Ya=Ut(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());A({source:On.optional(),since:Ya.optional()});A({ledger_id:m().trim().min(1).optional(),ts:Ya.optional()}).superRefine((t,e)=>{[t.ledger_id,t.ts].filter(r=>r!==void 0).length!==1&&e.addIssue({code:f.custom,message:"Provide exactly one of ledger_id or ts.",path:["ledger_id"]})});A({file:m().min(1),start_line:H().int().positive(),end_line:H().int().positive(),new_hash:m().min(1)});A({file:m().min(1)});A({ledger_entry_id:m().min(1),annotation:m().trim().min(1)});var Qa={id:m().optional(),ts:H().int().nonnegative(),intent:m(),affected_paths:j(m())},Ln=A({...Qa,source:ae("ai"),commit_sha:m().optional()}),jn=A({...Qa,source:ae("human"),parent_sha:m(),parent_ledger_entry_id:m().optional(),diff_stat:m(),annotation:m().optional()}),Pn=Ga("source",[Ln,jn]),Fn=Ut(t=>t&&typeof t=="object"&&!Array.isArray(t)&&(!("source"in t)||t.source===void 0)?{...t,source:"human"}:t,Pn),Ae=A({file:m(),start_line:H().int().nonnegative(),end_line:H().int().nonnegative(),hash:m()});A({locked:j(Ae).optional()});var pa=z(["strict","warn","off"]),Mn=A({claudeCodeCLI:m().optional(),claudeCodeDesktop:m().optional(),cursor:m().optional(),windsurf:m().optional(),rooCode:m().optional(),geminiCLI:m().optional(),codexCLI:m().optional()});A({clientPaths:Mn.optional(),externalFixturePath:m().optional(),scanIgnores:j(m()).optional(),auditMode:pa.optional(),audit_mode:pa.optional()});var Dn=A({path:m(),lines:m(),snippet:m(),pattern_hint:m()}),Zn=A({file:m(),line:m(),snippet:m()}),Un=A({ratio:H().min(0).max(1),total:H().int().nonnegative(),matched:H().int().nonnegative(),co_occurring_patterns:j(m())}),Hn=A({type:z(["framework","pattern","invariant","domain"]),statement:m(),confidence:z(["HIGH","MEDIUM","LOW"]),evidence:j(Zn),coverage:Un,proposed_rule:m().optional(),alternatives:j(m()).optional()}),Vn=A({total_files:H().int().nonnegative(),by_ext:Xa(H().int().nonnegative()),key_dirs:j(m()),max_depth:H().int().nonnegative()}),Bn=A({path:m(),reason:m(),size_bytes:H().int().nonnegative().optional()}),zn=A({kind:m(),version:m(),subkind:m(),evidence:j(m())}),Wn=A({quality:z(["missing","stub","ok"]),line_count:H().int().nonnegative(),has_contributing:yn()}),qn=A({path:m(),family:z(["entry","component","config","test","domain"]),rationale:m()}),Gn=A({max_files:ae(15),max_lines_per_file:ae(100)}),Xn=A({version:m(),generated_at:m(),generated_by:m(),target:m(),project_name:m(),framework:zn,topology:Vn,entry_points:j(Bn),code_samples:j(Dn),assertions:j(Hn),candidate_files:j(qn),sampling_budget:Gn,readme:Wn,recommendations_for_skill:j(m()).optional()}),Jn=A({kind:m(),version:m(),subkind:m()}),Kn=A({confidence:z(["HIGH","MEDIUM","LOW"]),evidence_refs:j(m())}),Yn=A({file:m(),lines:m()}),Qn=A({type:z(["ban","require","protect"]),rule:m(),rationale:m().optional(),confidence_snapshot:Kn.optional(),source_evidence:j(Yn).optional()}),ei=A({name:m(),paths:j(m()),summary:m().optional(),topology_type:z(["mirror","cross-cutting"]).optional(),target_path:m().optional()}),ti=A({phase:m(),question:m(),answer:m(),presentation:m().optional(),user_corrections:j(m()).optional()});A({framework:Jn,architecture_patterns:j(m()),invariants:j(Qn),domain_groups:j(ei),interview_trail:j(ti),forensic_ref:m()});var ai=A({type:ae("meta:updated"),payload:Cn}),ri=A({type:ae("lock:drift"),payload:A({locked:j(Ae),drifted:j(Ae)})}),ni=A({type:ae("lock:approved"),payload:A({locked:j(Ae),approved:j(Ae)})}),ii=A({type:ae("ledger:appended"),payload:Fn}),si=A({type:ae("drift:detected"),payload:Xn});Ga("type",[ai,ri,ni,ii,si]);function oi({lastEvent:t}){const{t:e}=B(),[a,r]=L(null),[n,i]=L([]),[s,o]=L(null),[c,l]=L(""),[h,u]=L(null),g=async()=>{try{const[w,x]=await Promise.all([yr(),Fa().catch(()=>[])]);r(w),i(x),u(null)}catch(w){u(w instanceof Error?w.message:String(w))}};V(()=>{g()},[]),V(()=>{(t?.type==="meta:updated"||t?.type==="drift:detected"||t?.type==="lock:drift")&&g()},[t]);const p=ee(()=>new Set(n.map(w=>w.file)),[n]),v=ee(()=>a===null?[]:er(a,p,c),[a,p,c]),C=s===null?null:a?.nodes[s]??null;return d("section",{className:"view",children:[d(Ie,{title:e("dashboard.rules-tree.title"),subtitle:e("dashboard.rules-tree.subtitle")}),h!==null?d(se,{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:w=>l(w.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(w=>d(Mt,{...w,selected:w.node.file===s,onSelect:o},w.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")}),C===null?d("p",{className:"muted",children:e("dashboard.rules-tree.detail.empty")}):d("div",{className:"kv",children:[d(Le,{label:e("dashboard.rules-tree.detail.file"),value:C.file}),d(Le,{label:e("dashboard.rules-tree.detail.scope"),value:C.scope_glob}),d(Le,{label:e("dashboard.rules-tree.detail.priority"),value:C.priority}),d(Le,{label:e("dashboard.rules-tree.detail.hash"),value:C.hash}),d("pre",{className:"code",children:C.deps.length>0?C.deps.join(`
|
|
10
|
+
`):e("dashboard.rules-tree.detail.no-deps")})]})]})]})]})}function Ie({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 Le({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 er(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:Et({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:Et({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 di({lastEvent:t}){const{locale:e,t:a}=B(),[r,n]=L(null),[i,s]=L(!0),[o,c]=L(null),l=async()=>{s(!0);try{n(await kr()),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(Ie,{title:a("dashboard.doctor.title"),subtitle:a("dashboard.doctor.subtitle")}),o!==null?d(se,{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(se,{kind:"pill",severity:tr(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:mt(r.summary.framework,a),count:"1"}):a("dashboard.doctor.toolbar.entry-points-summary",{framework:mt(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(ft,{label:a("dashboard.doctor.summary.framework"),value:mt(r.summary.framework,a),detail:r.summary.metaRevision===null?a("dashboard.doctor.summary.no-meta-revision"):`rev ${r.summary.metaRevision}`}),d(ft,{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(ft,{label:a("dashboard.doctor.summary.intent-ledger"),value:ci(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(li,{check:h},h.name))})]})]})]}):null]})}function ft({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 li({check:t}){const{t:e}=B();return d("div",{className:`doctor-check doctor-check-${t.status}`,children:[d("div",{className:"doctor-check-head",children:[d("strong",{children:t.name}),d(se,{kind:"pill",severity:tr(t.status),message:e(`dashboard.shared.status.${t.status}`)})]}),d("p",{children:t.message})]})}function tr(t){switch(t){case"ok":return"ok";case"warn":return"locked";case"error":return"stale"}}function mt(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 ci(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 ui({lastEvent:t}){const{locale:e,t:a}=B(),[r,n]=L([]),[i,s]=L(null),[o,c]=L(null),[l,h]=L(!1),[u,g]=L(null),p=async()=>{try{const y=(await Pa()).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(()=>{p()},[]),V(()=>{t?.type==="ledger:appended"&&p()},[t]),V(()=>{if(i===null){c(null);return}let y=!1;return h(!0),Nr({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=ee(()=>r.findIndex(y=>y.id===i),[r,i]),C=v>=0?r[v]??null:null,w=C===null?a("dashboard.history-replay.selected.none"):new Date(C.ts).toLocaleString(e),x=ee(()=>o===null?[]:er(o.meta,new Set,""),[o]);return d("section",{className:"view",children:[d(Ie,{title:a("dashboard.history-replay.title"),subtitle:a("dashboard.history-replay.subtitle")}),u!==null?d(se,{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:w}),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(Va,{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:w})}),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&&x.length>0?x.map(y=>d(Mt,{...y,readOnly:!0},y.node.file)):null,!l&&x.length===0?d("div",{className:"empty-card",children:a("dashboard.history-replay.empty.select")}):null]})]})]})]})}function hi({lastEvent:t}){const{t:e}=B(),[a,r]=L([]),[n,i]=L("all"),[s,o]=L(null),[c,l]=L(null),h=async()=>{try{r(await Fa()),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=ee(()=>({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)),p=async v=>{const C=a.find(w=>le(w)===le(v));if(C!==void 0){o(le(v));try{const w=await wr({file:C.file,start_line:C.start_line,end_line:C.end_line,new_hash:C.current_hash});r(x=>x.map(y=>le(y)===le(v)?w.entry:y)),l(null)}catch(w){throw l(w instanceof Error?w.message:String(w)),w}finally{o(null)}}};return d("section",{className:"view",children:[d(Ie,{title:e("dashboard.human-lock.title"),subtitle:e("dashboard.human-lock.subtitle")}),c!==null?d(se,{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(Br,{entry:v,currentHash:v.current_hash,onApprove:p,busy:s===le(v)},le(v))):d("div",{className:"empty-card",children:e("dashboard.human-lock.empty")})})]})}function le(t){return`${t.file}:${t.start_line}:${t.end_line}`}function pi({lastEvent:t}){const{t:e}=B(),[a,r]=L([]),[n,i]=L("all"),[s,o]=L(null),c=async()=>{try{r((await Pa()).sort((p,v)=>v.ts-p.ts)),o(null)}catch(p){o(p instanceof Error?p.message:String(p))}};V(()=>{c()},[]),V(()=>{t?.type==="ledger:appended"&&r(p=>[t.payload,...p].sort((v,C)=>C.ts-v.ts))},[t]);const l=ee(()=>a.filter(p=>n==="all"||p.source===n),[a,n]),h=a.filter(p=>p.source==="ai").length,u=a.length-h,g=async(p,v)=>{if(p.id===void 0)throw new Error(e("dashboard.intent-timeline.annotate.missing-id"));const C=await xr({ledger_entry_id:p.id,annotation:v});C.created&&r(w=>[C.entry,...w].sort((x,y)=>y.ts-x.ts))};return d("section",{className:"view",children:[d(Ie,{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(kt,{source:"ai",interactive:!0,selected:n==="ai",onClick:()=>i("ai")}),d(kt,{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(p=>d(Va,{entry:p,onAnnotate:g},p.id??`${p.source}:${p.ts}:${p.intent}`)):d("div",{className:"empty-card timeline-empty",children:e("dashboard.intent-timeline.empty")})]})]})}function fi(){return d(Hr,{children:d(mi,{})})}function mi(){const{t}=B(),[e,a]=L(fa()),r=Lr(),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(fa());return window.addEventListener("hashchange",s),window.location.hash===""&&(window.location.hash="#/rules"),()=>window.removeEventListener("hashchange",s)},[]);const i=ee(()=>n.find(s=>s.id===e)??n[0],[e]);return d(_i,{connected:r.connected,port:ma(),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.3.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:[":",ma()," /events"]})]})]}),e==="rules"?d(oi,{lastEvent:r.lastEvent}):null,e==="locks"?d(hi,{lastEvent:r.lastEvent}):null,e==="timeline"?d(pi,{lastEvent:r.lastEvent}):null,e==="history"?d(ui,{lastEvent:r.lastEvent}):null,e==="doctor"?d(di,{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 _i({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 fa(){switch(window.location.hash){case"#/locks":return"locks";case"#/timeline":return"timeline";case"#/history":return"history";case"#/doctor":return"doctor";default:return"rules"}}function ma(){const t=Number.parseInt(window.location.port,10);return Number.isFinite(t)?t:7373}const ar=document.getElementById("app");if(ar===null)throw new Error("Fabric Dashboard root element #app was not found.");cr(d(fi,{}),ar);
|
package/dist/static/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="color-scheme" content="dark" />
|
|
7
7
|
<title>Fabric Dashboard</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Btq99IfR.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-D45wW11O.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fenglimg/fabric-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
"express": "^5.2.1",
|
|
14
14
|
"minimatch": "^10.0.1",
|
|
15
15
|
"zod": "^3.25.0",
|
|
16
|
-
"@fenglimg/fabric-shared": "1.
|
|
16
|
+
"@fenglimg/fabric-shared": "1.3.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/express": "^5.0.6",
|
|
20
20
|
"@types/node": "^22.15.0",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"typescript": "^5.8.3",
|
|
23
|
-
"@fenglimg/fabric-dashboard": "1.
|
|
23
|
+
"@fenglimg/fabric-dashboard": "1.3.0"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsup src/index.ts --format esm --dts --clean && node scripts/copy-dashboard.mjs",
|