@hunsu/bridge 0.2.0-next.3 → 0.2.0-next.4

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/cli.js CHANGED
@@ -14,7 +14,7 @@ var tee=Object.create;var oS=Object.defineProperty;var ree=Object.getOwnProperty
14
14
  `).map(i=>` ${i}`).join(`
15
15
  `));let r=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${r} :
16
16
  ${e.join(`
17
- `)}`:`${r} :`}};o9=ec;je.Constructed=o9;ec.NAME="CONSTRUCTED";var Bw=class extends En{fromBER(e,r,n){return r}toBER(e){return Xs}};Bw.override="EndOfContentValueBlock";var s9,h0=class extends fn{constructor(e={}){super(e,Bw),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};s9=h0;je.EndOfContent=s9;h0.NAME=f0;var a9,g0=class extends fn{constructor(e={}){super(e,En),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,r,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,r+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):r+n}toBER(e,r){let n=new ArrayBuffer(2);if(!e){let i=new Uint8Array(n);i[0]=5,i[1]=0}return r&&r.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};a9=g0;je.Null=a9;g0.NAME="NULL";var Dw=class extends Ys(En){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...r}={}){super(r),r.valueHex?this.valueHexView=$t.BufferSourceConverter.toUint8Array(r.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,r,n){let i=$t.BufferSourceConverter.toUint8Array(e);return tc(this,i,r,n)?(this.valueHexView=i.subarray(r,r+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,ar.utilDecodeTC.call(this),this.blockLength=n,r+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Dw.NAME="BooleanValueBlock";var c9,y0=class extends fn{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,Dw),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};c9=y0;je.Boolean=c9;y0.NAME="BOOLEAN";var Nw=class extends Ys(Ks){constructor({isConstructed:e=!1,...r}={}){super(r),this.isConstructed=e}fromBER(e,r,n,i){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=Ks.prototype.fromBER.call(this,e,r,n,i),o===-1)return o;for(let s=0;s<this.value.length;s++){let a=this.value[s].constructor.NAME;if(a===f0){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(a!==QU)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,r,n),this.blockLength=n;return o}toBER(e,r){return this.isConstructed?Ks.prototype.toBER.call(this,e,r):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Nw.NAME="OctetStringValueBlock";var QP,v0=class extends fn{constructor({idBlock:e={},lenBlock:r={},...n}={}){var i,o;(i=n.isConstructed)!==null&&i!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...r,isIndefiniteForm:!!n.isIndefiniteForm},...n},Nw),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,r,n,i){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),r;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(r,r+n);try{if(s.byteLength){let a=i??V0(),c=YP(s,0,s.byteLength,a);c.offset!==-1&&c.offset===n&&(this.valueBlock.value=[c.result])}}catch{}}return super.fromBER(e,r,n,i)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ec.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,r=$t.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${r}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let r of this.valueBlock.value)r instanceof QP&&e.push(r.valueBlock.valueHexView);return $t.BufferSourceConverter.concat(e)}};QP=v0;je.OctetString=QP;v0.NAME=QU;var Ow=class extends Ys(Ks){constructor({unusedBits:e=0,isConstructed:r=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=r,this.blockLength=this.valueHexView.byteLength}fromBER(e,r,n,i){if(!n)return r;let o=-1;if(this.isConstructed){if(o=Ks.prototype.fromBER.call(this,e,r,n,i),o===-1)return o;for(let c of this.value){let u=c.constructor.NAME;if(u===f0){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(u!==ZU)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let d=c.valueBlock;if(this.unusedBits>0&&d.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=d.unusedBits}return o}let s=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,s,r,n))return-1;let a=s.subarray(r,r+n);if(this.unusedBits=a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let c=a.subarray(1);try{if(c.byteLength){let u=i??V0(),d=YP(c,0,c.byteLength,u);d.offset!==-1&&d.offset===n-1&&(this.value=[d.result])}}catch{}}return this.valueHexView=a.subarray(1),this.blockLength=a.length,r+n}toBER(e,r){if(this.isConstructed)return Ks.prototype.toBER.call(this,e,r);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let i=new Uint8Array(1);return i[0]=0,i.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};Ow.NAME="BitStringValueBlock";var u9,x0=class extends fn{constructor({idBlock:e={},lenBlock:r={},...n}={}){var i,o;(i=n.isConstructed)!==null&&i!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...r,isIndefiniteForm:!!n.isIndefiniteForm},...n},Ow),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,r,n,i){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,r,n,i)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ec.prototype.onAsciiEncoding.call(this);{let e=[],r=this.valueBlock.valueHexView;for(let s of r)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),i=this.constructor.NAME,o=n.substring(0,n.length-this.valueBlock.unusedBits);return`${i} : ${o}`}}};u9=x0;je.BitString=u9;x0.NAME=ZU;var d9;function ege(t,e){let r=new Uint8Array([0]),n=new Uint8Array(t),i=new Uint8Array(e),o=n.slice(0),s=o.length-1,a=i.slice(0),c=a.length-1,u=0,d=c<s?s:c,l=0;for(let f=d;f>=0;f--,l++)!0===l<a.length?u=o[s-l]+a[c-l]+r[0]:u=o[s-l]+r[0],r[0]=u/10,!0===l>=o.length?o=ar.utilConcatView(new Uint8Array([u%10]),o):o[s-l]=u%10;return r[0]>0&&(o=ar.utilConcatView(r,o)),o}function XU(t){if(t>=d0.length)for(let e=d0.length;e<=t;e++){let r=new Uint8Array([0]),n=d0[e-1].slice(0);for(let i=n.length-1;i>=0;i--){let o=new Uint8Array([(n[i]<<1)+r[0]]);r[0]=o[0]/10,n[i]=o[0]%10}r[0]>0&&(n=ar.utilConcatView(r,n)),d0.push(n)}return d0[t]}function tge(t,e){let r=0,n=new Uint8Array(t),i=new Uint8Array(e),o=n.slice(0),s=o.length-1,a=i.slice(0),c=a.length-1,u,d=0;for(let l=c;l>=0;l--,d++)u=o[s-d]-a[c-d]-r,!0===u<0?(r=1,o[s-d]=u+10):(r=0,o[s-d]=u);if(r>0)for(let l=s-c+1;l>=0;l--,d++)if(u=o[s-d]-r,u<0)r=1,o[s-d]=u+10;else{r=0,o[s-d]=u;break}return o.slice()}var S0=class extends Ys(En){setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=ar.utilDecodeTC.call(this)))}constructor({value:e,...r}={}){super(r),this._valueDec=0,r.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(ar.utilEncodeTC(e))}get valueDec(){return this._valueDec}fromDER(e,r,n,i=0){let o=this.fromBER(e,r,n);if(o===-1)return o;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):i!==0&&s.length<i&&(i-s.length>1&&(i=s.length+1),this.valueHexView=s.subarray(i-s.length)),o}toDER(e=!1){let r=this.valueHexView;switch(!0){case(r[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(r,1),this.valueHexView=n}break;case(r[0]===0&&(r[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,r,n){let i=super.fromBER(e,r,n);return i===-1||this.setValueHex(),i}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,r=new Uint8Array(this.valueHexView.length*8/3),n=0,i,o=this.valueHexView,s="",a=!1;for(let c=o.byteLength-1;c>=0;c--){i=o[c];for(let u=0;u<8;u++)(i&1)===1&&(n===e?(r=tge(XU(n),r),s="-"):r=ege(r,XU(n))),n++,i>>=1}for(let c=0;c<r.length;c++)r[c]&&(a=!0),a&&(s+=KU.charAt(r[c]));return a===!1&&(s+=KU.charAt(0)),s}};d9=S0;S0.NAME="IntegerValueBlock";Object.defineProperty(d9.prototype,"valueHex",{set:function(t){this.valueHexView=new Uint8Array(t),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var l0,Cp=class extends fn{constructor(e={}){super(e,S0),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Cw(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Cw();let r=BigInt(e),n=new Ap,i=r.toString(16).replace(/^-/,""),o=new Uint8Array($t.Convert.FromHex(i));if(r<0){let a=new Uint8Array(o.length+(o[0]&128?1:0));a[0]|=128;let u=BigInt(`0x${$t.Convert.ToHex(a)}`)+r,d=$t.BufferSourceConverter.toUint8Array($t.Convert.FromHex(u.toString(16)));d[0]|=128,n.write(d)}else o[0]&128&&n.write(new Uint8Array([0])),n.write(o);return new l0({valueHex:n.final()})}convertToDER(){let e=new l0({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new l0({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};l0=Cp;je.Integer=l0;Cp.NAME="INTEGER";var l9,b0=class extends Cp{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};l9=b0;je.Enumerated=l9;b0.NAME="ENUMERATED";var w0=class extends Ys(En){constructor({valueDec:e=-1,isFirstSid:r=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=r}fromBER(e,r,n){if(!n)return r;let i=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,i,r,n))return-1;let o=i.subarray(r,r+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(o[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ar.utilFromBase(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),r+this.blockLength)}set valueBigInt(e){Cw();let r=BigInt(e).toString(2);for(;r.length%7;)r="0"+r;let n=new Uint8Array(r.length/7);for(let i=0;i<n.length;i++)n[i]=parseInt(r.slice(i*7,i*7+7),2)+(i+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let i=this.valueHexView,o=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)o[s]=i[s]|128;return o[this.blockLength-1]=i[this.blockLength-1],o.buffer}let r=ar.utilToBase(this.valueDec,7);if(r.byteLength===0)return this.error="Error during encoding SID value",Xs;let n=new Uint8Array(r.byteLength);if(!e){let i=new Uint8Array(r),o=r.byteLength-1;for(let s=0;s<o;s++)n[s]=i[s]|128;n[o]=i[o]}return n}toString(){let e="";if(this.isHexOnly)e=$t.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let r=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",r-=40):(e="2.",r-=80),e+=r.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};w0.NAME="sidBlock";var Mw=class extends En{constructor({value:e=Pi,...r}={}){super(r),this.value=[],e&&this.fromString(e)}fromBER(e,r,n){let i=r;for(;n>0;){let o=new w0;if(i=o.fromBER(e,i,n),i===-1)return this.blockLength=0,this.error=o.error,i;this.value.length===0&&(o.isFirstSid=!0),this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return i}toBER(e){let r=[];for(let n=0;n<this.value.length;n++){let i=this.value[n].toBER(e);if(i.byteLength===0)return this.error=this.value[n].error,Xs;r.push(i)}return XP(r)}fromString(e){this.value=[];let r=0,n=0,i="",o=!1;do if(n=e.indexOf(".",r),n===-1?i=e.substring(r):i=e.substring(r,n),r=n+1,o){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(i,10);if(isNaN(c))return;s.valueDec=c+a,o=!1}else{let s=new w0;if(i>Number.MAX_SAFE_INTEGER){Cw();let a=BigInt(i);s.valueBigInt=a}else if(s.valueDec=parseInt(i,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,o=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",r=!1;for(let n=0;n<this.value.length;n++){r=this.value[n].isHexOnly;let i=this.value[n].toString();n!==0&&(e=`${e}.`),r?(i=`{${i}}`,this.value[n].isFirstSid?e=`2.{${i} - 80}`:e+=i):e+=i}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let r=0;r<this.value.length;r++)e.sidArray.push(this.value[r].toJSON());return e}};Mw.NAME="ObjectIdentifierValueBlock";var f9,I0=class extends fn{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Mw),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};f9=I0;je.ObjectIdentifier=f9;I0.NAME="OBJECT IDENTIFIER";var E0=class extends Ys(Za){constructor({valueDec:e=0,...r}={}){super(r),this.valueDec=e}fromBER(e,r,n){if(n===0)return r;let i=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,i,r,n))return-1;let o=i.subarray(r,r+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(o[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ar.utilFromBase(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),r+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let i=this.valueHexView,o=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)o[s]=i[s]|128;return o[this.blockLength-1]=i[this.blockLength-1],o.buffer}let r=ar.utilToBase(this.valueDec,7);if(r.byteLength===0)return this.error="Error during encoding SID value",Xs;let n=new Uint8Array(r.byteLength);if(!e){let i=new Uint8Array(r),o=r.byteLength-1;for(let s=0;s<o;s++)n[s]=i[s]|128;n[o]=i[o]}return n.buffer}toString(){let e="";return this.isHexOnly?e=$t.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};E0.NAME="relativeSidBlock";var Lw=class extends En{constructor({value:e=Pi,...r}={}){super(r),this.value=[],e&&this.fromString(e)}fromBER(e,r,n){let i=r;for(;n>0;){let o=new E0;if(i=o.fromBER(e,i,n),i===-1)return this.blockLength=0,this.error=o.error,i;this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return i}toBER(e,r){let n=[];for(let i=0;i<this.value.length;i++){let o=this.value[i].toBER(e);if(o.byteLength===0)return this.error=this.value[i].error,Xs;n.push(o)}return XP(n)}fromString(e){this.value=[];let r=0,n=0,i="";do{n=e.indexOf(".",r),n===-1?i=e.substring(r):i=e.substring(r,n),r=n+1;let o=new E0;if(o.valueDec=parseInt(i,10),isNaN(o.valueDec))return!0;this.value.push(o)}while(n!==-1);return!0}toString(){let e="",r=!1;for(let n=0;n<this.value.length;n++){r=this.value[n].isHexOnly;let i=this.value[n].toString();n!==0&&(e=`${e}.`),r&&(i=`{${i}}`),e+=i}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let r=0;r<this.value.length;r++)e.sidArray.push(this.value[r].toJSON());return e}};Lw.NAME="RelativeObjectIdentifierValueBlock";var p9,k0=class extends fn{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Lw),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};p9=k0;je.RelativeObjectIdentifier=p9;k0.NAME="RelativeObjectIdentifier";var m9,R0=class extends ec{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};m9=R0;je.Sequence=m9;R0.NAME="SEQUENCE";var h9,A0=class extends ec{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};h9=A0;je.Set=h9;A0.NAME="SET";var Hw=class extends Ys(En){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Pi}toJSON(){return{...super.toJSON(),value:this.value}}};Hw.NAME="StringValueBlock";var Uw=class extends Hw{};Uw.NAME="SimpleStringValueBlock";var di=class extends p0{constructor({...e}={}){super(e,Uw)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,$t.BufferSourceConverter.toUint8Array(e))}fromString(e){let r=e.length,n=this.valueBlock.valueHexView=new Uint8Array(r);for(let i=0;i<r;i++)n[i]=e.charCodeAt(i);this.valueBlock.value=e}};di.NAME="SIMPLE STRING";var $w=class extends di{fromBuffer(e){this.valueBlock.valueHexView=$t.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=$t.Convert.ToUtf8String(e)}catch(r){this.warnings.push(`Error during "decodeURIComponent": ${r}, using raw string`),this.valueBlock.value=$t.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array($t.Convert.FromUtf8String(e)),this.valueBlock.value=e}};$w.NAME="Utf8StringValueBlock";var g9,Js=class extends $w{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};g9=Js;je.Utf8String=g9;Js.NAME="UTF8String";var Fw=class extends di{fromBuffer(e){this.valueBlock.value=$t.Convert.ToUtf16String(e),this.valueBlock.valueHexView=$t.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array($t.Convert.FromUtf16String(e))}};Fw.NAME="BmpStringValueBlock";var y9,C0=class extends Fw{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};y9=C0;je.BmpString=y9;C0.NAME="BMPString";var jw=class extends di{fromBuffer(e){let r=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(r);for(let i=0;i<n.length;i+=4)n[i]=n[i+3],n[i+1]=n[i+2],n[i+2]=0,n[i+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(r))}fromString(e){let r=e.length,n=this.valueBlock.valueHexView=new Uint8Array(r*4);for(let i=0;i<r;i++){let o=ar.utilToBase(e.charCodeAt(i),8),s=new Uint8Array(o);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[i*4+c+a]=s[c]}this.valueBlock.value=e}};jw.NAME="UniversalStringValueBlock";var v9,P0=class extends jw{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};v9=P0;je.UniversalString=v9;P0.NAME="UniversalString";var x9,_0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};x9=_0;je.NumericString=x9;_0.NAME="NumericString";var S9,T0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};S9=T0;je.PrintableString=S9;T0.NAME="PrintableString";var b9,B0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};b9=B0;je.TeletexString=b9;B0.NAME="TeletexString";var w9,D0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};w9=D0;je.VideotexString=w9;D0.NAME="VideotexString";var I9,N0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};I9=N0;je.IA5String=I9;N0.NAME="IA5String";var E9,O0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};E9=O0;je.GraphicString=E9;O0.NAME="GraphicString";var k9,Pp=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};k9=Pp;je.VisibleString=k9;Pp.NAME="VisibleString";var R9,M0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};R9=M0;je.GeneralString=R9;M0.NAME="GeneralString";var A9,L0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};A9=L0;je.CharacterString=A9;L0.NAME="CharacterString";var C9,_p=class extends Pp{constructor({value:e,valueDate:r,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let i=0;i<e.length;i++)this.valueBlock.valueHexView[i]=e.charCodeAt(i)}r&&(this.fromDate(r),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,$t.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),r=new ArrayBuffer(e.length),n=new Uint8Array(r);for(let i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return r}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let i=parseInt(n[1],10);i>=50?this.year=1900+i:this.year=2e3+i,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let r=new Array(7);return r[0]=ar.padNumber(this.year<2e3?this.year-1900:this.year-2e3,2),r[1]=ar.padNumber(this.month,2),r[2]=ar.padNumber(this.day,2),r[3]=ar.padNumber(this.hour,2),r[4]=ar.padNumber(this.minute,2),r[5]=ar.padNumber(this.second,2),r[6]="Z",r.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};C9=_p;je.UTCTime=C9;_p.NAME="UTCTime";var P9,H0=class extends _p{constructor(e={}){var r;super(e),(r=this.millisecond)!==null&&r!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let r=!1,n="",i="",o=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),r=!0;else{let l=new Number(e[e.length-1]);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(r){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let l=1,f=n.indexOf("+"),p="";if(f===-1&&(f=n.indexOf("-"),l=-1),f!==-1){if(p=n.substring(f+1),n=n.substring(0,f),p.length!==2&&p.length!==4)throw new Error("Wrong input string for conversion");let g=parseInt(p.substring(0,2),10);if(isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");if(a=l*g,p.length===4){if(g=parseInt(p.substring(2,4),10),isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");c=l*g}}}let u=n.indexOf(".");if(u===-1&&(u=n.indexOf(",")),u!==-1){let l=new Number(`0${n.substring(u)}`);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");o=l.valueOf(),i=n.substring(0,u)}else i=n;switch(!0){case i.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,u!==-1)throw new Error("Wrong input string for conversion");break;case i.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*o;this.minute=Math.floor(l),l=60*(l-this.minute),this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case i.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*o;this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case i.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=1e3*o;this.millisecond=Math.floor(l)}break;default:throw new Error("Wrong input string for conversion")}let d=s.exec(i);if(d===null)throw new Error("Wrong input string for conversion");for(let l=1;l<d.length;l++)switch(l){case 1:this.year=parseInt(d[l],10);break;case 2:this.month=parseInt(d[l],10);break;case 3:this.day=parseInt(d[l],10);break;case 4:this.hour=parseInt(d[l],10)+a;break;case 5:this.minute=parseInt(d[l],10)+c;break;case 6:this.second=parseInt(d[l],10);break;default:throw new Error("Wrong input string for conversion")}if(r===!1){let l=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=l.getUTCFullYear(),this.month=l.getUTCMonth(),this.day=l.getUTCDay(),this.hour=l.getUTCHours(),this.minute=l.getUTCMinutes(),this.second=l.getUTCSeconds(),this.millisecond=l.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let r=[];return r.push(ar.padNumber(this.year,4)),r.push(ar.padNumber(this.month,2)),r.push(ar.padNumber(this.day,2)),r.push(ar.padNumber(this.hour,2)),r.push(ar.padNumber(this.minute,2)),r.push(ar.padNumber(this.second,2)),this.millisecond!==0&&(r.push("."),r.push(ar.padNumber(this.millisecond,3))),r.push("Z"),r.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};P9=H0;je.GeneralizedTime=P9;H0.NAME="GeneralizedTime";var _9,U0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};_9=U0;je.DATE=_9;U0.NAME="DATE";var T9,$0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};T9=$0;je.TimeOfDay=T9;$0.NAME="TimeOfDay";var B9,F0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};B9=F0;je.DateTime=B9;F0.NAME="DateTime";var D9,j0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};D9=j0;je.Duration=D9;j0.NAME="Duration";var N9,q0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};N9=q0;je.TIME=N9;q0.NAME="TIME";var yl=class{constructor({name:e=Pi,optional:r=!1}={}){this.name=e,this.optional=r}},qw=class extends yl{constructor({value:e=[],...r}={}){super(r),this.value=e}},W0=class extends yl{constructor({value:e=new yl,local:r=!1,...n}={}){super(n),this.value=e,this.local=r}},JP=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=$t.BufferSourceConverter.toUint8Array(e)}constructor({data:e=Ww}={}){this.dataView=$t.BufferSourceConverter.toUint8Array(e)}fromBER(e,r,n){let i=r+n;return this.dataView=$t.BufferSourceConverter.toUint8Array(e).subarray(r,i),i}toBER(e){return this.dataView.slice().buffer}};function Rp(t,e,r){if(r instanceof qw){for(let o of r.value)if(Rp(t,e,o).verified)return{verified:!0,result:t};{let o={verified:!1,result:{error:"Wrong values for Choice type"}};return r.hasOwnProperty(KP)&&(o.name=r.name),o}}if(r instanceof yl)return r.hasOwnProperty(KP)&&(t[r.name]=e),{verified:!0,result:t};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(Hhe in r))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(jhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(qhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=r.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(r.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(r.idBlock.hasOwnProperty(Uhe)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:t};if(r.idBlock.hasOwnProperty($he)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:t};if(r.idBlock.hasOwnProperty(Fhe)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:t};if(!(Lhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:t};if(r.idBlock.isHexOnly){if(!(JU in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let o=r.idBlock.valueHexView,s=e.idBlock.valueHexView;if(o.length!==s.length)return{verified:!1,result:t};for(let a=0;a<o.length;a++)if(o[a]!==s[1])return{verified:!1,result:t}}if(r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(t[r.name]=e)),r instanceof je.Constructed){let o=0,s={verified:!1,result:{error:"Unknown error"}},a=r.valueBlock.value.length;if(a>0&&r.valueBlock.value[0]instanceof W0&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:t};if(e.valueBlock.value.length===0&&r.valueBlock.value.length!==0){let c=!0;for(let u=0;u<r.valueBlock.value.length;u++)c=c&&(r.valueBlock.value[u].optional||!1);return c?{verified:!0,result:t}:(r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),t.error="Inconsistent object length",{verified:!1,result:t})}for(let c=0;c<a;c++)if(c-o>=e.valueBlock.value.length){if(r.valueBlock.value[c].optional===!1){let u={verified:!1,result:t};return t.error="Inconsistent length between ASN.1 data and schema",r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],u.name=r.name)),u}}else if(r.valueBlock.value[0]instanceof W0){if(s=Rp(t,e.valueBlock.value[c],r.valueBlock.value[0].value),s.verified===!1)if(r.valueBlock.value[0].optional)o++;else return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),s;if(KP in r.valueBlock.value[0]&&r.valueBlock.value[0].name.length>0){let u={};Whe in r.valueBlock.value[0]&&r.valueBlock.value[0].local?u=e:u=t,typeof u[r.valueBlock.value[0].name]>"u"&&(u[r.valueBlock.value[0].name]=[]),u[r.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=Rp(t,e.valueBlock.value[c-o],r.valueBlock.value[c]),s.verified===!1)if(r.valueBlock.value[c].optional)o++;else return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),s;if(s.verified===!1){let c={verified:!1,result:t};return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],c.name=r.name)),c}return{verified:!0,result:t}}if(r.primitiveSchema&&JU in e.valueBlock){let o=Vw(e.valueBlock.valueHexView);if(o.offset===-1){let s={verified:!1,result:o.result};return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],s.name=r.name)),s}return Rp(t,o.result,r.primitiveSchema)}return{verified:!0,result:t}}function rge(t,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let r=Vw($t.BufferSourceConverter.toUint8Array(t));return r.offset===-1?{verified:!1,result:r.result}:Rp(r.result,r.result,e)}ut.Any=yl;ut.BaseBlock=fn;ut.BaseStringBlock=p0;ut.BitString=x0;ut.BmpString=C0;ut.Boolean=y0;ut.CharacterString=L0;ut.Choice=qw;ut.Constructed=ec;ut.DATE=U0;ut.DEFAULT_MAX_CONTENT_LENGTH=i9;ut.DEFAULT_MAX_DEPTH=r9;ut.DEFAULT_MAX_NODES=n9;ut.DateTime=F0;ut.Duration=j0;ut.EndOfContent=h0;ut.Enumerated=b0;ut.GeneralString=M0;ut.GeneralizedTime=H0;ut.GraphicString=O0;ut.HexBlock=Ys;ut.IA5String=N0;ut.Integer=Cp;ut.Null=g0;ut.NumericString=_0;ut.ObjectIdentifier=I0;ut.OctetString=v0;ut.Primitive=m0;ut.PrintableString=T0;ut.RawData=JP;ut.RelativeObjectIdentifier=k0;ut.Repeated=W0;ut.Sequence=R0;ut.Set=A0;ut.TIME=q0;ut.TeletexString=B0;ut.TimeOfDay=$0;ut.UTCTime=_p;ut.UniversalString=P0;ut.Utf8String=Js;ut.ValueBlock=En;ut.VideotexString=D0;ut.ViewWriter=Ap;ut.VisibleString=Pp;ut.compareSchema=Rp;ut.fromBER=Qhe;ut.verifySchema=rge});function O9(t){return Object.prototype.toString.call(t)}function oge(t){if(ArrayBuffer.isView(t))return!0;if(!t||typeof t!="object")return!1;let e=t;return typeof e.byteOffset=="number"&&typeof e.byteLength=="number"&&Gw(e.buffer)}function ZP(t){return O9(t)===nge}function M9(t){return typeof SharedArrayBuffer<"u"&&O9(t)===ige}function Gw(t){return ZP(t)||M9(t)}function L9(t){return oge(t)}function rc(t){return Gw(t)||L9(t)}function e_(t){if(!rc(t))throw new TypeError("Expected ArrayBuffer, SharedArrayBuffer, or ArrayBufferView")}function wo(t){return e_(t),Gw(t)?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function pn(t){if(e_(t),ZP(t))return t;let e=new ArrayBuffer(t.byteLength);return new Uint8Array(e).set(wo(t)),e}var nge,ige,G0=N(()=>{nge="[object ArrayBuffer]",ige="[object SharedArrayBuffer]"});var H9=N(()=>{G0()});function t_(t,e,r={}){let n=wo(t),i=wo(e);if(!r.constantTime&&n.byteLength!==i.byteLength)return!1;let o=Math.max(n.byteLength,i.byteLength),s=n.byteLength^i.byteLength;for(let a=0;a<o;a++)s|=(n[a]??0)^(i[a]??0);return s===0}var U9=N(()=>{G0()});var $9=N(()=>{G0()});var Zi=N(()=>{G0();H9();U9();$9()});var L,k,vl=N(()=>{(function(t){t[t.Sequence=0]="Sequence",t[t.Set=1]="Set",t[t.Choice=2]="Choice"})(L||(L={}));(function(t){t[t.Any=1]="Any",t[t.Boolean=2]="Boolean",t[t.OctetString=3]="OctetString",t[t.BitString=4]="BitString",t[t.Integer=5]="Integer",t[t.Enumerated=6]="Enumerated",t[t.ObjectIdentifier=7]="ObjectIdentifier",t[t.Utf8String=8]="Utf8String",t[t.BmpString=9]="BmpString",t[t.UniversalString=10]="UniversalString",t[t.NumericString=11]="NumericString",t[t.PrintableString=12]="PrintableString",t[t.TeletexString=13]="TeletexString",t[t.VideotexString=14]="VideotexString",t[t.IA5String=15]="IA5String",t[t.GraphicString=16]="GraphicString",t[t.VisibleString=17]="VisibleString",t[t.GeneralString=18]="GeneralString",t[t.CharacterString=19]="CharacterString",t[t.UTCTime=20]="UTCTime",t[t.GeneralizedTime=21]="GeneralizedTime",t[t.DATE=22]="DATE",t[t.TimeOfDay=23]="TimeOfDay",t[t.DateTime=24]="DateTime",t[t.Duration=25]="Duration",t[t.TIME=26]="TIME",t[t.Null=27]="Null"})(k||(k={}))});var zw,es,F9=N(()=>{zw=tt(Lu(),1);Zi();es=class{unusedBits=0;value=new ArrayBuffer(0);constructor(e,r=0){if(e)if(typeof e=="number")this.fromNumber(e);else if(rc(e))this.unusedBits=r,this.value=pn(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof zw.BitString))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=pn(e.valueBlock.valueHex),this}toASN(){return new zw.BitString({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new zw.BitString({name:e})}toNumber(){let e="",r=new Uint8Array(this.value);for(let n of r)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let r=e.toString(2),n=r.length+7>>3;this.unusedBits=(n<<3)-r.length;let i=new Uint8Array(n);r=r.padStart(n<<3,"0").split("").reverse().join("");let o=0;for(;o<n;)i[o]=parseInt(r.slice(o<<3,(o<<3)+8),2),o++;this.value=i.buffer}}});var Kw,rt,j9=N(()=>{Kw=tt(Lu(),1);Zi();rt=class{buffer;get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):rc(e)?this.buffer=pn(e):Array.isArray(e)?this.buffer=new Uint8Array(e).buffer:this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Kw.OctetString))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=pn(e.valueBlock.valueHex),this}toASN(){return new Kw.OctetString({valueHex:this.buffer})}toSchema(e){return new Kw.OctetString({name:e})}}});var r_=N(()=>{F9();j9()});function Io(t){return{fromASN:e=>e.valueBlock.value,toASN:e=>new t({value:e})}}function nc(t){switch(t){case k.Any:return q9;case k.BitString:return G9;case k.BmpString:return X9;case k.Boolean:return K9;case k.CharacterString:return s$;case k.Enumerated:return V9;case k.GeneralString:return o$;case k.GeneralizedTime:return c$;case k.GraphicString:return n$;case k.IA5String:return r$;case k.Integer:return W9;case k.Null:return u$;case k.NumericString:return Q9;case k.ObjectIdentifier:return z9;case k.OctetString:return xl;case k.PrintableString:return Z9;case k.TeletexString:return e$;case k.UTCTime:return a$;case k.UniversalString:return Y9;case k.Utf8String:return J9;case k.VideotexString:return t$;case k.VisibleString:return i$;default:return null}}var dt,q9,W9,V9,Ot,cge,G9,z9,K9,xl,n_,J9,X9,Y9,Q9,Z9,e$,t$,r$,n$,i$,o$,s$,a$,c$,u$,z0=N(()=>{dt=tt(Lu(),1);Zi();vl();r_();q9={fromASN:t=>t instanceof dt.Null?null:pn(t.valueBeforeDecodeView),toASN:t=>{if(t===null)return new dt.Null;let e=dt.fromBER(t);if(e.result.error)throw new Error(e.result.error);return e.result}},W9={fromASN:t=>t.valueBlock.valueHexView.byteLength>=4?t.valueBlock.toString():t.valueBlock.valueDec,toASN:t=>new dt.Integer({value:+t})},V9={fromASN:t=>t.valueBlock.valueDec,toASN:t=>new dt.Enumerated({value:t})},Ot={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.Integer({valueHex:t})},cge={fromASN:t=>t.toBigInt(),toASN:t=>dt.Integer.fromBigInt(t)},G9={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.BitString({valueHex:t})},z9={fromASN:t=>t.valueBlock.toString(),toASN:t=>new dt.ObjectIdentifier({value:t})},K9={fromASN:t=>t.valueBlock.value,toASN:t=>new dt.Boolean({value:t})},xl={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.OctetString({valueHex:t})},n_={fromASN:t=>new rt(t.getValue()),toASN:t=>t.toASN()};J9=Io(dt.Utf8String),X9=Io(dt.BmpString),Y9=Io(dt.UniversalString),Q9=Io(dt.NumericString),Z9=Io(dt.PrintableString),e$=Io(dt.TeletexString),t$=Io(dt.VideotexString),r$=Io(dt.IA5String),n$=Io(dt.GraphicString),i$=Io(dt.VisibleString),o$=Io(dt.GeneralString),s$=Io(dt.CharacterString),a$={fromASN:t=>t.toDate(),toASN:t=>new dt.UTCTime({valueDate:t})},c$={fromASN:t=>t.toDate(),toASN:t=>new dt.GeneralizedTime({valueDate:t})},u$={fromASN:()=>null,toASN:()=>new dt.Null}});function Eo(t){return typeof t=="function"&&t.prototype?t.prototype.toASN&&t.prototype.fromASN?!0:Eo(t.prototype):!!(t&&typeof t=="object"&&"toASN"in t&&"fromASN"in t)}function o_(t){if(t){let e=Object.getPrototypeOf(t);return e?.prototype?.constructor===Array?!0:o_(e)}return!1}function d$(t,e){if(!(t&&e)||t.byteLength!==e.byteLength)return!1;let r=new Uint8Array(t),n=new Uint8Array(e);for(let i=0;i<t.byteLength;i++)if(r[i]!==n[i])return!1;return!0}var Jw=N(()=>{});var en,Xw,l$=N(()=>{en=tt(Lu(),1);vl();Jw();Xw=class{items=new WeakMap;has(e){return this.items.has(e)}get(e,r=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(r&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let r=this.get(e);r.schema||(r.schema=this.create(e,!0))}createDefault(e){let r={type:L.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(r,n),r.items=Object.assign({},r.items,n.items)),r}create(e,r){let n=this.items.get(e)||this.createDefault(e),i=[];for(let o in n.items){let s=n.items[o],a=r?o:"",c;if(typeof s.type=="number"){let d=k[s.type],l=en[d];if(!l)throw new Error(`Cannot get ASN1 class by name '${d}'`);c=new l({name:a})}else Eo(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===L.Choice?c=new en.Any({name:a}):(c=this.create(s.type,!1),c.name=a):c=new en.Any({name:a});let u=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let d=s.repeated==="set"?en.Set:en.Sequence;c=new d({name:"",value:[new en.Repeated({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||Eo(s.type)){let d=s.repeated?en.Constructed:en.Primitive;i.push(new d({name:a,optional:u,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let d=!!s.repeated,l=d?c:this.get(s.type,!0).schema;l="valueBlock"in l?l.valueBlock.value:l.value,i.push(new en.Constructed({name:d?"":a,optional:u,idBlock:{tagClass:3,tagNumber:s.context},value:l}))}else i.push(new en.Constructed({optional:u,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=u,i.push(c)}switch(n.type){case L.Sequence:return new en.Sequence({value:i,name:""});case L.Set:return new en.Set({value:i,name:""});case L.Choice:return new en.Choice({value:i,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,r){return this.items.set(e,r),this}findParentSchema(e){let r=Object.getPrototypeOf(e);return r?this.items.get(r)||this.findParentSchema(r):null}}});var tn,Yw=N(()=>{l$();tn=new Xw});var W,f$,p$,m$,x,h$=N(()=>{z0();vl();Yw();W=t=>e=>{let r;tn.has(e)?r=tn.get(e):(r=tn.createDefault(e),tn.set(e,r)),Object.assign(r,t)},f$=()=>W({type:L.Choice}),p$=t=>W({type:L.Set,...t}),m$=t=>W({type:L.Sequence,...t}),x=t=>(e,r)=>{let n;tn.has(e.constructor)?n=tn.get(e.constructor):(n=tn.createDefault(e.constructor),tn.set(e.constructor,n));let i=Object.assign({},t);if(typeof i.type=="number"&&!i.converter){let o=nc(t.type);if(!o)throw new Error(`Cannot get default converter for property '${r}' of ${e.constructor.name}`);i.converter=o}i.raw=t.raw,n.items[r]=i}});var ic,g$=N(()=>{ic=class extends Error{schemas=[]}});var s_=N(()=>{g$()});var mn,Tp,a_=N(()=>{mn=tt(Lu(),1);Zi();vl();z0();s_();Jw();Yw();Tp=class{static parse(e,r,n){let i=mn.fromBER(pn(e),n?.berOptions);if(i.result.error)throw new Error(i.result.error);return this.fromASN(i.result,r,n)}static fromASN(e,r,n){try{if(Eo(r))return new r().fromASN(e);let i=tn.get(r);tn.cache(r);let o=i.schema,s=this.handleChoiceTypes(e,i,r,o,n);if(s?.result)return s.result;s?.targetSchema&&(o=s.targetSchema);let a=this.handleSequenceTypes(e,i,r,o),c=new r;return o_(r)?this.handleArrayTypes(e,i,r,n):(this.processSchemaItems(i,a,c,n),c)}catch(i){throw i instanceof ic&&i.schemas.push(r.name),i}}static handleChoiceTypes(e,r,n,i,o){if(e.constructor===mn.Constructed&&r.type===L.Choice&&e.idBlock.tagClass===3)for(let s in r.items){let a=r.items[s];if(a.context===e.idBlock.tagNumber&&a.implicit&&typeof a.type=="function"&&tn.has(a.type)){let c=tn.get(a.type);if(c&&c.type===L.Sequence){let u=new mn.Sequence;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in u.valueBlock){u.valueBlock.value=e.valueBlock.value;let d=this.fromASN(u,a.type,o),l=new n;return l[s]=d,{result:l}}}}}else if(e.constructor===mn.Constructed&&r.type!==L.Choice){let s=new mn.Constructed({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:r.schema.valueBlock.value});for(let a in r.items)delete e[a];return{targetSchema:s}}return null}static handleSequenceTypes(e,r,n,i){if(r.type===L.Sequence){let o=mn.compareSchema({},e,i);if(!o.verified)throw new ic(`Data does not match to ${n.name} ASN1 schema.${o.result.error?` ${o.result.error}`:""}`);return o}else{let o=mn.compareSchema({},e,i);if(!o.verified)throw new ic(`Data does not match to ${n.name} ASN1 schema.${o.result.error?` ${o.result.error}`:""}`);return o}}static processRepeatedField(e,r,n){let i=e.slice(r);if(i.length===1&&i[0].constructor.name==="Sequence"){let o=i[0];o.valueBlock&&o.valueBlock.value&&Array.isArray(o.valueBlock.value)&&(i=o.valueBlock.value)}if(typeof n.type=="number"){let o=nc(n.type);if(!o)throw new Error(`No converter for ASN.1 type ${n.type}`);return i.filter(s=>s&&s.valueBlock).map(s=>{try{return o.fromASN(s)}catch{return}}).filter(s=>s!==void 0)}else return i.filter(o=>o&&o.valueBlock).map(o=>{try{return this.fromASN(o,n.type)}catch{return}}).filter(o=>o!==void 0)}static processPrimitiveField(e,r){let n=nc(r.type);if(!n)throw new Error(`No converter for ASN.1 type ${r.type}`);return n.fromASN(e)}static isOptionalChoiceField(e){return e.optional&&typeof e.type=="function"&&tn.has(e.type)&&tn.get(e.type).type===L.Choice}static processOptionalChoiceField(e,r){try{return{processed:!0,value:this.fromASN(e,r.type)}}catch(n){if(n instanceof ic&&/Wrong values for Choice type/.test(n.message))return{processed:!1};throw n}}static handleArrayTypes(e,r,n,i){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let o=r.itemType;if(typeof o=="number"){let s=nc(o);if(!s)throw new Error(`Cannot get default converter for array item of ${n.name} ASN1 schema`);return n.from(e.valueBlock.value,a=>s.fromASN(a))}else return n.from(e.valueBlock.value,s=>this.fromASN(s,o,i))}static processSchemaItems(e,r,n,i){for(let o in e.items){let s=r.result[o];if(!s)continue;let a=e.items[o],c=a.type,u;typeof c=="number"||Eo(c)?u=this.processPrimitiveSchemaItem(s,a,c,i):u=this.processComplexSchemaItem(s,a,c,i),u&&typeof u=="object"&&"value"in u&&"raw"in u?(n[o]=u.value,n[`${o}Raw`]=u.raw):n[o]=u}}static processPrimitiveSchemaItem(e,r,n,i){let o=r.converter??(Eo(n)?new n:null);if(!o)throw new Error("Converter is empty");return r.repeated?this.processRepeatedPrimitiveItem(e,r,o,i):this.processSinglePrimitiveItem(e,r,n,o,i)}static processRepeatedPrimitiveItem(e,r,n,i){if(r.implicit){let o=r.repeated==="sequence"?mn.Sequence:mn.Set,s=new o;s.valueBlock=e.valueBlock;let a=mn.fromBER(s.toBER(!1),i?.berOptions);if(a.offset===-1)throw new Error(`Cannot parse the child item. ${a.result.error}`);if(!("value"in a.result.valueBlock&&Array.isArray(a.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let c=a.result.valueBlock.value;return Array.from(c,u=>n.fromASN(u))}else return Array.from(e,o=>n.fromASN(o))}static processSinglePrimitiveItem(e,r,n,i,o){let s=e;if(r.implicit){let a;if(Eo(n))a=new n().toSchema("");else{let c=k[n],u=mn[c];if(!u)throw new Error(`Cannot get '${c}' class from asn1js module`);a=new u}a.valueBlock=s.valueBlock,s=mn.fromBER(a.toBER(!1),o?.berOptions).result}return i.fromASN(s)}static processComplexSchemaItem(e,r,n,i){if(r.repeated){if(!Array.isArray(e))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");return Array.from(e,o=>this.fromASN(o,n,i))}else{let o=this.handleImplicitTagging(e,r,n);if(this.isOptionalChoiceField(r))try{return this.fromASN(o,n,i)}catch(s){if(s instanceof ic&&/Wrong values for Choice type/.test(s.message))return;throw s}else{let s=this.fromASN(o,n,i);return r.raw?{value:s,raw:e.valueBeforeDecodeView}:s}}}static handleImplicitTagging(e,r,n){if(r.implicit&&typeof r.context=="number"){let i=tn.get(n);if(i.type===L.Sequence){let o=new mn.Sequence;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in o.valueBlock)return o.valueBlock.value=e.valueBlock.value,o}else if(i.type===L.Set){let o=new mn.Set;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in o.valueBlock)return o.valueBlock.value=e.valueBlock.value,o}}return e}}});var Nn,Bp,c_=N(()=>{Nn=tt(Lu(),1);Zi();z0();vl();Jw();Yw();Bp=class t{static serialize(e){return e instanceof Nn.BaseBlock?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&Eo(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let r=e.constructor,n=tn.get(r);tn.cache(r);let i=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=nc(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${r.name} ASN1 schema`);i=e.map(a=>s.toASN(a))}else i=e.map(s=>this.toAsnItem({type:n.itemType},"[]",r,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&d$(this.serialize(a.defaultValue),this.serialize(c)))continue;let u=t.toAsnItem(a,s,r,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||Eo(a.type))){let d={};d.valueHex=u instanceof Nn.Null?pn(u.valueBeforeDecodeView):u.valueBlock.toBER(),i.push(new Nn.Primitive({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...d}))}else i.push(new Nn.Constructed({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:u.valueBlock.value}));else i.push(new Nn.Constructed({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[u]}));else a.repeated?i=i.concat(u):i.push(u)}let o;switch(n.type){case L.Sequence:o=new Nn.Sequence({value:i});break;case L.Set:o=new Nn.Set({value:i});break;case L.Choice:if(!i[0])throw new Error(`Schema '${r.name}' has wrong data. Choice cannot be empty.`);o=i[0];break}return o}static toAsnItem(e,r,n,i){let o;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${r}' doesn't have converter for type ${k[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(i))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(i,u=>s.toASN(u)),c=e.repeated==="sequence"?Nn.Sequence:Nn.Set;o=new c({value:a})}else o=s.toASN(i)}else if(e.repeated){if(!Array.isArray(i))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(i,c=>this.toASN(c)),a=e.repeated==="sequence"?Nn.Sequence:Nn.Set;o=new a({value:s})}else o=this.toASN(i);return o}}});var Ze,y$=N(()=>{Ze=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let r of e)this.push(r)}}}});var v$,ko,x$=N(()=>{v$=tt(Lu(),1);Zi();a_();c_();ko=class t{static serialize(e){return Bp.serialize(e)}static parse(e,r,n){return Tp.parse(e,r,n)}static toString(e,r){let n=rc(e)?pn(e):t.serialize(e),i=v$.fromBER(n,r?.berOptions);if(i.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${i.result.error}`);return i.result.toString()}}});var S$={};bi(S$,{AsnAnyConverter:()=>q9,AsnArray:()=>Ze,AsnBitStringConverter:()=>G9,AsnBmpStringConverter:()=>X9,AsnBooleanConverter:()=>K9,AsnCharacterStringConverter:()=>s$,AsnChoiceType:()=>f$,AsnConstructedOctetStringConverter:()=>n_,AsnConvert:()=>ko,AsnEnumeratedConverter:()=>V9,AsnGeneralStringConverter:()=>o$,AsnGeneralizedTimeConverter:()=>c$,AsnGraphicStringConverter:()=>n$,AsnIA5StringConverter:()=>r$,AsnIntegerArrayBufferConverter:()=>Ot,AsnIntegerBigIntConverter:()=>cge,AsnIntegerConverter:()=>W9,AsnNullConverter:()=>u$,AsnNumericStringConverter:()=>Q9,AsnObjectIdentifierConverter:()=>z9,AsnOctetStringConverter:()=>xl,AsnParser:()=>Tp,AsnPrintableStringConverter:()=>Z9,AsnProp:()=>x,AsnPropTypes:()=>k,AsnSchemaValidationError:()=>ic,AsnSequenceType:()=>m$,AsnSerializer:()=>Bp,AsnSetType:()=>p$,AsnTeletexStringConverter:()=>e$,AsnType:()=>W,AsnTypeTypes:()=>L,AsnUTCTimeConverter:()=>a$,AsnUniversalStringConverter:()=>Y9,AsnUtf8StringConverter:()=>J9,AsnVideotexStringConverter:()=>t$,AsnVisibleStringConverter:()=>i$,BitString:()=>es,OctetString:()=>rt,defaultConverter:()=>nc});var ae=N(()=>{z0();r_();h$();vl();a_();c_();s_();y$();x$()});var J$=ce((D4e,eI)=>{var b$,w$,I$,E$,k$,R$,A$,C$,P$,_$,T$,B$,D$,Qw,u_,N$,O$,M$,Dp,L$,H$,U$,$$,F$,j$,q$,W$,V$,Zw,G$,z$,K$;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof eI=="object"&&typeof eI.exports=="object"?t(r(e,r(eI.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,s){return n[o]=i?i(o,s):s}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,s){o.__proto__=s}||function(o,s){for(var a in s)Object.prototype.hasOwnProperty.call(s,a)&&(o[a]=s[a])};b$=function(o,s){if(typeof s!="function"&&s!==null)throw new TypeError("Class extends value "+String(s)+" is not a constructor or null");e(o,s);function a(){this.constructor=o}o.prototype=s===null?Object.create(s):(a.prototype=s.prototype,new a)},w$=Object.assign||function(o){for(var s,a=1,c=arguments.length;a<c;a++){s=arguments[a];for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(o[u]=s[u])}return o},I$=function(o,s){var a={};for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&s.indexOf(c)<0&&(a[c]=o[c]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var u=0,c=Object.getOwnPropertySymbols(o);u<c.length;u++)s.indexOf(c[u])<0&&Object.prototype.propertyIsEnumerable.call(o,c[u])&&(a[c[u]]=o[c[u]]);return a},E$=function(o,s,a,c){var u=arguments.length,d=u<3?s:c===null?c=Object.getOwnPropertyDescriptor(s,a):c,l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")d=Reflect.decorate(o,s,a,c);else for(var f=o.length-1;f>=0;f--)(l=o[f])&&(d=(u<3?l(d):u>3?l(s,a,d):l(s,a))||d);return u>3&&d&&Object.defineProperty(s,a,d),d},k$=function(o,s){return function(a,c){s(a,c,o)}},R$=function(o,s,a,c,u,d){function l(z){if(z!==void 0&&typeof z!="function")throw new TypeError("Function expected");return z}for(var f=c.kind,p=f==="getter"?"get":f==="setter"?"set":"value",g=!s&&o?c.static?o:o.prototype:null,v=s||(g?Object.getOwnPropertyDescriptor(g,c.name):{}),b,C=!1,B=a.length-1;B>=0;B--){var _={};for(var F in c)_[F]=F==="access"?{}:c[F];for(var F in c.access)_.access[F]=c.access[F];_.addInitializer=function(z){if(C)throw new TypeError("Cannot add initializers after decoration has completed");d.push(l(z||null))};var he=(0,a[B])(f==="accessor"?{get:v.get,set:v.set}:v[p],_);if(f==="accessor"){if(he===void 0)continue;if(he===null||typeof he!="object")throw new TypeError("Object expected");(b=l(he.get))&&(v.get=b),(b=l(he.set))&&(v.set=b),(b=l(he.init))&&u.unshift(b)}else(b=l(he))&&(f==="field"?u.unshift(b):v[p]=b)}g&&Object.defineProperty(g,c.name,v),C=!0},A$=function(o,s,a){for(var c=arguments.length>2,u=0;u<s.length;u++)a=c?s[u].call(o,a):s[u].call(o);return c?a:void 0},C$=function(o){return typeof o=="symbol"?o:"".concat(o)},P$=function(o,s,a){return typeof s=="symbol"&&(s=s.description?"[".concat(s.description,"]"):""),Object.defineProperty(o,"name",{configurable:!0,value:a?"".concat(a," ",s):s})},_$=function(o,s){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,s)},T$=function(o,s,a,c){function u(d){return d instanceof a?d:new a(function(l){l(d)})}return new(a||(a=Promise))(function(d,l){function f(v){try{g(c.next(v))}catch(b){l(b)}}function p(v){try{g(c.throw(v))}catch(b){l(b)}}function g(v){v.done?d(v.value):u(v.value).then(f,p)}g((c=c.apply(o,s||[])).next())})},B$=function(o,s){var a={label:0,sent:function(){if(d[0]&1)throw d[1];return d[1]},trys:[],ops:[]},c,u,d,l=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return l.next=f(0),l.throw=f(1),l.return=f(2),typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(g){return function(v){return p([g,v])}}function p(g){if(c)throw new TypeError("Generator is already executing.");for(;l&&(l=0,g[0]&&(a=0)),a;)try{if(c=1,u&&(d=g[0]&2?u.return:g[0]?u.throw||((d=u.return)&&d.call(u),0):u.next)&&!(d=d.call(u,g[1])).done)return d;switch(u=0,d&&(g=[g[0]&2,d.value]),g[0]){case 0:case 1:d=g;break;case 4:return a.label++,{value:g[1],done:!1};case 5:a.label++,u=g[1],g=[0];continue;case 7:g=a.ops.pop(),a.trys.pop();continue;default:if(d=a.trys,!(d=d.length>0&&d[d.length-1])&&(g[0]===6||g[0]===2)){a=0;continue}if(g[0]===3&&(!d||g[1]>d[0]&&g[1]<d[3])){a.label=g[1];break}if(g[0]===6&&a.label<d[1]){a.label=d[1],d=g;break}if(d&&a.label<d[2]){a.label=d[2],a.ops.push(g);break}d[2]&&a.ops.pop(),a.trys.pop();continue}g=s.call(o,a)}catch(v){g=[6,v],u=0}finally{c=d=0}if(g[0]&5)throw g[1];return{value:g[0]?g[1]:void 0,done:!0}}},D$=function(o,s){for(var a in o)a!=="default"&&!Object.prototype.hasOwnProperty.call(s,a)&&Zw(s,o,a)},Zw=Object.create?(function(o,s,a,c){c===void 0&&(c=a);var u=Object.getOwnPropertyDescriptor(s,a);(!u||("get"in u?!s.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return s[a]}}),Object.defineProperty(o,c,u)}):(function(o,s,a,c){c===void 0&&(c=a),o[c]=s[a]}),Qw=function(o){var s=typeof Symbol=="function"&&Symbol.iterator,a=s&&o[s],c=0;if(a)return a.call(o);if(o&&typeof o.length=="number")return{next:function(){return o&&c>=o.length&&(o=void 0),{value:o&&o[c++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")},u_=function(o,s){var a=typeof Symbol=="function"&&o[Symbol.iterator];if(!a)return o;var c=a.call(o),u,d=[],l;try{for(;(s===void 0||s-- >0)&&!(u=c.next()).done;)d.push(u.value)}catch(f){l={error:f}}finally{try{u&&!u.done&&(a=c.return)&&a.call(c)}finally{if(l)throw l.error}}return d},N$=function(){for(var o=[],s=0;s<arguments.length;s++)o=o.concat(u_(arguments[s]));return o},O$=function(){for(var o=0,s=0,a=arguments.length;s<a;s++)o+=arguments[s].length;for(var c=Array(o),u=0,s=0;s<a;s++)for(var d=arguments[s],l=0,f=d.length;l<f;l++,u++)c[u]=d[l];return c},M$=function(o,s,a){if(a||arguments.length===2)for(var c=0,u=s.length,d;c<u;c++)(d||!(c in s))&&(d||(d=Array.prototype.slice.call(s,0,c)),d[c]=s[c]);return o.concat(d||Array.prototype.slice.call(s))},Dp=function(o){return this instanceof Dp?(this.v=o,this):new Dp(o)},L$=function(o,s,a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var c=a.apply(o,s||[]),u,d=[];return u=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),f("next"),f("throw"),f("return",l),u[Symbol.asyncIterator]=function(){return this},u;function l(B){return function(_){return Promise.resolve(_).then(B,b)}}function f(B,_){c[B]&&(u[B]=function(F){return new Promise(function(he,z){d.push([B,F,he,z])>1||p(B,F)})},_&&(u[B]=_(u[B])))}function p(B,_){try{g(c[B](_))}catch(F){C(d[0][3],F)}}function g(B){B.value instanceof Dp?Promise.resolve(B.value.v).then(v,b):C(d[0][2],B)}function v(B){p("next",B)}function b(B){p("throw",B)}function C(B,_){B(_),d.shift(),d.length&&p(d[0][0],d[0][1])}},H$=function(o){var s,a;return s={},c("next"),c("throw",function(u){throw u}),c("return"),s[Symbol.iterator]=function(){return this},s;function c(u,d){s[u]=o[u]?function(l){return(a=!a)?{value:Dp(o[u](l)),done:!1}:d?d(l):l}:d}},U$=function(o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var s=o[Symbol.asyncIterator],a;return s?s.call(o):(o=typeof Qw=="function"?Qw(o):o[Symbol.iterator](),a={},c("next"),c("throw"),c("return"),a[Symbol.asyncIterator]=function(){return this},a);function c(d){a[d]=o[d]&&function(l){return new Promise(function(f,p){l=o[d](l),u(f,p,l.done,l.value)})}}function u(d,l,f,p){Promise.resolve(p).then(function(g){d({value:g,done:f})},l)}},$$=function(o,s){return Object.defineProperty?Object.defineProperty(o,"raw",{value:s}):o.raw=s,o};var r=Object.create?(function(o,s){Object.defineProperty(o,"default",{enumerable:!0,value:s})}):function(o,s){o.default=s},n=function(o){return n=Object.getOwnPropertyNames||function(s){var a=[];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[a.length]=c);return a},n(o)};F$=function(o){if(o&&o.__esModule)return o;var s={};if(o!=null)for(var a=n(o),c=0;c<a.length;c++)a[c]!=="default"&&Zw(s,o,a[c]);return r(s,o),s},j$=function(o){return o&&o.__esModule?o:{default:o}},q$=function(o,s,a,c){if(a==="a"&&!c)throw new TypeError("Private accessor was defined without a getter");if(typeof s=="function"?o!==s||!c:!s.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return a==="m"?c:a==="a"?c.call(o):c?c.value:s.get(o)},W$=function(o,s,a,c,u){if(c==="m")throw new TypeError("Private method is not writable");if(c==="a"&&!u)throw new TypeError("Private accessor was defined without a setter");if(typeof s=="function"?o!==s||!u:!s.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return c==="a"?u.call(o,a):u?u.value=a:s.set(o,a),a},V$=function(o,s){if(s===null||typeof s!="object"&&typeof s!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof o=="function"?s===o:o.has(s)},G$=function(o,s,a){if(s!=null){if(typeof s!="object"&&typeof s!="function")throw new TypeError("Object expected.");var c,u;if(a){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=s[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=s[Symbol.dispose],a&&(u=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");u&&(c=function(){try{u.call(this)}catch(d){return Promise.reject(d)}}),o.stack.push({value:s,dispose:c,async:a})}else a&&o.stack.push({async:!0});return s};var i=typeof SuppressedError=="function"?SuppressedError:function(o,s,a){var c=new Error(a);return c.name="SuppressedError",c.error=o,c.suppressed=s,c};z$=function(o){function s(d){o.error=o.hasError?new i(d,o.error,"An error was suppressed during disposal."):d,o.hasError=!0}var a,c=0;function u(){for(;a=o.stack.pop();)try{if(!a.async&&c===1)return c=0,o.stack.push(a),Promise.resolve().then(u);if(a.dispose){var d=a.dispose.call(a.value);if(a.async)return c|=2,Promise.resolve(d).then(u,function(l){return s(l),u()})}else c|=1}catch(l){s(l)}if(c===1)return o.hasError?Promise.reject(o.error):Promise.resolve();if(o.hasError)throw o.error}return u()},K$=function(o,s){return typeof o=="string"&&/^\.\.?\//.test(o)?o.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(a,c,u,d,l){return c?s?".jsx":".js":u&&(!d||!l)?a:u+d+"."+l.toLowerCase()+"js"}):o},t("__extends",b$),t("__assign",w$),t("__rest",I$),t("__decorate",E$),t("__param",k$),t("__esDecorate",R$),t("__runInitializers",A$),t("__propKey",C$),t("__setFunctionName",P$),t("__metadata",_$),t("__awaiter",T$),t("__generator",B$),t("__exportStar",D$),t("__createBinding",Zw),t("__values",Qw),t("__read",u_),t("__spread",N$),t("__spreadArrays",O$),t("__spreadArray",M$),t("__await",Dp),t("__asyncGenerator",L$),t("__asyncDelegator",H$),t("__asyncValues",U$),t("__makeTemplateObject",$$),t("__importStar",F$),t("__importDefault",j$),t("__classPrivateFieldGet",q$),t("__classPrivateFieldSet",W$),t("__classPrivateFieldIn",V$),t("__addDisposableResource",G$),t("__disposeResources",z$),t("__rewriteRelativeImportExtension",K$)})});var X$={};bi(X$,{__addDisposableResource:()=>Lge,__assign:()=>dge,__asyncDelegator:()=>Pge,__asyncGenerator:()=>Cge,__asyncValues:()=>_ge,__await:()=>Age,__awaiter:()=>vge,__classPrivateFieldGet:()=>Nge,__classPrivateFieldIn:()=>Mge,__classPrivateFieldSet:()=>Oge,__createBinding:()=>bge,__decorate:()=>h,__disposeResources:()=>Hge,__esDecorate:()=>pge,__exportStar:()=>Sge,__extends:()=>uge,__generator:()=>xge,__importDefault:()=>Dge,__importStar:()=>Bge,__makeTemplateObject:()=>Tge,__metadata:()=>yge,__param:()=>fge,__propKey:()=>hge,__read:()=>Ige,__rest:()=>lge,__rewriteRelativeImportExtension:()=>Uge,__runInitializers:()=>mge,__setFunctionName:()=>gge,__spread:()=>Ege,__spreadArray:()=>Rge,__spreadArrays:()=>kge,__values:()=>wge,default:()=>$ge});var d_,uge,dge,lge,h,fge,pge,mge,hge,gge,yge,vge,xge,Sge,bge,wge,Ige,Ege,kge,Rge,Age,Cge,Pge,_ge,Tge,Bge,Dge,Nge,Oge,Mge,Lge,Hge,Uge,$ge,fe=N(()=>{d_=tt(J$(),1),{__extends:uge,__assign:dge,__rest:lge,__decorate:h,__param:fge,__esDecorate:pge,__runInitializers:mge,__propKey:hge,__setFunctionName:gge,__metadata:yge,__awaiter:vge,__generator:xge,__exportStar:Sge,__createBinding:bge,__values:wge,__read:Ige,__spread:Ege,__spreadArrays:kge,__spreadArray:Rge,__await:Age,__asyncGenerator:Cge,__asyncDelegator:Pge,__asyncValues:_ge,__makeTemplateObject:Tge,__importStar:Bge,__importDefault:Dge,__classPrivateFieldGet:Nge,__classPrivateFieldSet:Oge,__classPrivateFieldIn:Mge,__addDisposableResource:Lge,__disposeResources:Hge,__rewriteRelativeImportExtension:Uge}=d_.default,$ge=d_.default});var l_=N(()=>{Zi()});var Np={};bi(Np,{decode:()=>p_,encode:()=>f_,format:()=>t7,formats:()=>r7,hex:()=>Qge,is:()=>Z$,normalize:()=>K0,parse:()=>e7});function Wge(t){return t.separators==="none"?[]:!t.separators||t.separators==="common"?qge:t.separators}function Vge(t){if(!t)throw new TypeError("Hex separators must be non-empty strings")}function Gge(t,e,r){for(let n of r)if(t.startsWith(n,e))return n}function zge(t){let e=/[A-F]/.test(t),r=/[a-f]/.test(t);return e&&!r?"upper":"lower"}function Kge(t){let e=/\r\n|\n/.exec(t);if(e)return e[0]===`\r
17
+ `)}`:`${r} :`}};o9=ec;je.Constructed=o9;ec.NAME="CONSTRUCTED";var Bw=class extends En{fromBER(e,r,n){return r}toBER(e){return Xs}};Bw.override="EndOfContentValueBlock";var s9,h0=class extends fn{constructor(e={}){super(e,Bw),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};s9=h0;je.EndOfContent=s9;h0.NAME=f0;var a9,g0=class extends fn{constructor(e={}){super(e,En),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,r,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,r+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):r+n}toBER(e,r){let n=new ArrayBuffer(2);if(!e){let i=new Uint8Array(n);i[0]=5,i[1]=0}return r&&r.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};a9=g0;je.Null=a9;g0.NAME="NULL";var Dw=class extends Ys(En){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...r}={}){super(r),r.valueHex?this.valueHexView=$t.BufferSourceConverter.toUint8Array(r.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,r,n){let i=$t.BufferSourceConverter.toUint8Array(e);return tc(this,i,r,n)?(this.valueHexView=i.subarray(r,r+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,ar.utilDecodeTC.call(this),this.blockLength=n,r+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Dw.NAME="BooleanValueBlock";var c9,y0=class extends fn{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,Dw),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};c9=y0;je.Boolean=c9;y0.NAME="BOOLEAN";var Nw=class extends Ys(Ks){constructor({isConstructed:e=!1,...r}={}){super(r),this.isConstructed=e}fromBER(e,r,n,i){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=Ks.prototype.fromBER.call(this,e,r,n,i),o===-1)return o;for(let s=0;s<this.value.length;s++){let a=this.value[s].constructor.NAME;if(a===f0){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(a!==QU)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,r,n),this.blockLength=n;return o}toBER(e,r){return this.isConstructed?Ks.prototype.toBER.call(this,e,r):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Nw.NAME="OctetStringValueBlock";var QP,v0=class extends fn{constructor({idBlock:e={},lenBlock:r={},...n}={}){var i,o;(i=n.isConstructed)!==null&&i!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...r,isIndefiniteForm:!!n.isIndefiniteForm},...n},Nw),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,r,n,i){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),r;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(r,r+n);try{if(s.byteLength){let a=i??V0(),c=YP(s,0,s.byteLength,a);c.offset!==-1&&c.offset===n&&(this.valueBlock.value=[c.result])}}catch{}}return super.fromBER(e,r,n,i)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ec.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,r=$t.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${r}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let r of this.valueBlock.value)r instanceof QP&&e.push(r.valueBlock.valueHexView);return $t.BufferSourceConverter.concat(e)}};QP=v0;je.OctetString=QP;v0.NAME=QU;var Ow=class extends Ys(Ks){constructor({unusedBits:e=0,isConstructed:r=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=r,this.blockLength=this.valueHexView.byteLength}fromBER(e,r,n,i){if(!n)return r;let o=-1;if(this.isConstructed){if(o=Ks.prototype.fromBER.call(this,e,r,n,i),o===-1)return o;for(let c of this.value){let u=c.constructor.NAME;if(u===f0){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(u!==ZU)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let d=c.valueBlock;if(this.unusedBits>0&&d.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=d.unusedBits}return o}let s=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,s,r,n))return-1;let a=s.subarray(r,r+n);if(this.unusedBits=a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let c=a.subarray(1);try{if(c.byteLength){let u=i??V0(),d=YP(c,0,c.byteLength,u);d.offset!==-1&&d.offset===n-1&&(this.value=[d.result])}}catch{}}return this.valueHexView=a.subarray(1),this.blockLength=a.length,r+n}toBER(e,r){if(this.isConstructed)return Ks.prototype.toBER.call(this,e,r);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let i=new Uint8Array(1);return i[0]=0,i.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};Ow.NAME="BitStringValueBlock";var u9,x0=class extends fn{constructor({idBlock:e={},lenBlock:r={},...n}={}){var i,o;(i=n.isConstructed)!==null&&i!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...r,isIndefiniteForm:!!n.isIndefiniteForm},...n},Ow),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,r,n,i){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,r,n,i)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ec.prototype.onAsciiEncoding.call(this);{let e=[],r=this.valueBlock.valueHexView;for(let s of r)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),i=this.constructor.NAME,o=n.substring(0,n.length-this.valueBlock.unusedBits);return`${i} : ${o}`}}};u9=x0;je.BitString=u9;x0.NAME=ZU;var d9;function ege(t,e){let r=new Uint8Array([0]),n=new Uint8Array(t),i=new Uint8Array(e),o=n.slice(0),s=o.length-1,a=i.slice(0),c=a.length-1,u=0,d=c<s?s:c,l=0;for(let f=d;f>=0;f--,l++)!0===l<a.length?u=o[s-l]+a[c-l]+r[0]:u=o[s-l]+r[0],r[0]=u/10,!0===l>=o.length?o=ar.utilConcatView(new Uint8Array([u%10]),o):o[s-l]=u%10;return r[0]>0&&(o=ar.utilConcatView(r,o)),o}function XU(t){if(t>=d0.length)for(let e=d0.length;e<=t;e++){let r=new Uint8Array([0]),n=d0[e-1].slice(0);for(let i=n.length-1;i>=0;i--){let o=new Uint8Array([(n[i]<<1)+r[0]]);r[0]=o[0]/10,n[i]=o[0]%10}r[0]>0&&(n=ar.utilConcatView(r,n)),d0.push(n)}return d0[t]}function tge(t,e){let r=0,n=new Uint8Array(t),i=new Uint8Array(e),o=n.slice(0),s=o.length-1,a=i.slice(0),c=a.length-1,u,d=0;for(let l=c;l>=0;l--,d++)u=o[s-d]-a[c-d]-r,!0===u<0?(r=1,o[s-d]=u+10):(r=0,o[s-d]=u);if(r>0)for(let l=s-c+1;l>=0;l--,d++)if(u=o[s-d]-r,u<0)r=1,o[s-d]=u+10;else{r=0,o[s-d]=u;break}return o.slice()}var S0=class extends Ys(En){setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=ar.utilDecodeTC.call(this)))}constructor({value:e,...r}={}){super(r),this._valueDec=0,r.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(ar.utilEncodeTC(e))}get valueDec(){return this._valueDec}fromDER(e,r,n,i=0){let o=this.fromBER(e,r,n);if(o===-1)return o;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):i!==0&&s.length<i&&(i-s.length>1&&(i=s.length+1),this.valueHexView=s.subarray(i-s.length)),o}toDER(e=!1){let r=this.valueHexView;switch(!0){case(r[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(r,1),this.valueHexView=n}break;case(r[0]===0&&(r[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,r,n){let i=super.fromBER(e,r,n);return i===-1||this.setValueHex(),i}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,r=new Uint8Array(this.valueHexView.length*8/3),n=0,i,o=this.valueHexView,s="",a=!1;for(let c=o.byteLength-1;c>=0;c--){i=o[c];for(let u=0;u<8;u++)(i&1)===1&&(n===e?(r=tge(XU(n),r),s="-"):r=ege(r,XU(n))),n++,i>>=1}for(let c=0;c<r.length;c++)r[c]&&(a=!0),a&&(s+=KU.charAt(r[c]));return a===!1&&(s+=KU.charAt(0)),s}};d9=S0;S0.NAME="IntegerValueBlock";Object.defineProperty(d9.prototype,"valueHex",{set:function(t){this.valueHexView=new Uint8Array(t),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var l0,Cp=class extends fn{constructor(e={}){super(e,S0),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Cw(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Cw();let r=BigInt(e),n=new Ap,i=r.toString(16).replace(/^-/,""),o=new Uint8Array($t.Convert.FromHex(i));if(r<0){let a=new Uint8Array(o.length+(o[0]&128?1:0));a[0]|=128;let u=BigInt(`0x${$t.Convert.ToHex(a)}`)+r,d=$t.BufferSourceConverter.toUint8Array($t.Convert.FromHex(u.toString(16)));d[0]|=128,n.write(d)}else o[0]&128&&n.write(new Uint8Array([0])),n.write(o);return new l0({valueHex:n.final()})}convertToDER(){let e=new l0({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new l0({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};l0=Cp;je.Integer=l0;Cp.NAME="INTEGER";var l9,b0=class extends Cp{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};l9=b0;je.Enumerated=l9;b0.NAME="ENUMERATED";var w0=class extends Ys(En){constructor({valueDec:e=-1,isFirstSid:r=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=r}fromBER(e,r,n){if(!n)return r;let i=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,i,r,n))return-1;let o=i.subarray(r,r+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(o[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ar.utilFromBase(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),r+this.blockLength)}set valueBigInt(e){Cw();let r=BigInt(e).toString(2);for(;r.length%7;)r="0"+r;let n=new Uint8Array(r.length/7);for(let i=0;i<n.length;i++)n[i]=parseInt(r.slice(i*7,i*7+7),2)+(i+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let i=this.valueHexView,o=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)o[s]=i[s]|128;return o[this.blockLength-1]=i[this.blockLength-1],o.buffer}let r=ar.utilToBase(this.valueDec,7);if(r.byteLength===0)return this.error="Error during encoding SID value",Xs;let n=new Uint8Array(r.byteLength);if(!e){let i=new Uint8Array(r),o=r.byteLength-1;for(let s=0;s<o;s++)n[s]=i[s]|128;n[o]=i[o]}return n}toString(){let e="";if(this.isHexOnly)e=$t.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let r=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",r-=40):(e="2.",r-=80),e+=r.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};w0.NAME="sidBlock";var Mw=class extends En{constructor({value:e=Pi,...r}={}){super(r),this.value=[],e&&this.fromString(e)}fromBER(e,r,n){let i=r;for(;n>0;){let o=new w0;if(i=o.fromBER(e,i,n),i===-1)return this.blockLength=0,this.error=o.error,i;this.value.length===0&&(o.isFirstSid=!0),this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return i}toBER(e){let r=[];for(let n=0;n<this.value.length;n++){let i=this.value[n].toBER(e);if(i.byteLength===0)return this.error=this.value[n].error,Xs;r.push(i)}return XP(r)}fromString(e){this.value=[];let r=0,n=0,i="",o=!1;do if(n=e.indexOf(".",r),n===-1?i=e.substring(r):i=e.substring(r,n),r=n+1,o){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(i,10);if(isNaN(c))return;s.valueDec=c+a,o=!1}else{let s=new w0;if(i>Number.MAX_SAFE_INTEGER){Cw();let a=BigInt(i);s.valueBigInt=a}else if(s.valueDec=parseInt(i,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,o=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",r=!1;for(let n=0;n<this.value.length;n++){r=this.value[n].isHexOnly;let i=this.value[n].toString();n!==0&&(e=`${e}.`),r?(i=`{${i}}`,this.value[n].isFirstSid?e=`2.{${i} - 80}`:e+=i):e+=i}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let r=0;r<this.value.length;r++)e.sidArray.push(this.value[r].toJSON());return e}};Mw.NAME="ObjectIdentifierValueBlock";var f9,I0=class extends fn{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Mw),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};f9=I0;je.ObjectIdentifier=f9;I0.NAME="OBJECT IDENTIFIER";var E0=class extends Ys(Za){constructor({valueDec:e=0,...r}={}){super(r),this.valueDec=e}fromBER(e,r,n){if(n===0)return r;let i=$t.BufferSourceConverter.toUint8Array(e);if(!tc(this,i,r,n))return-1;let o=i.subarray(r,r+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(o[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ar.utilFromBase(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),r+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let i=this.valueHexView,o=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)o[s]=i[s]|128;return o[this.blockLength-1]=i[this.blockLength-1],o.buffer}let r=ar.utilToBase(this.valueDec,7);if(r.byteLength===0)return this.error="Error during encoding SID value",Xs;let n=new Uint8Array(r.byteLength);if(!e){let i=new Uint8Array(r),o=r.byteLength-1;for(let s=0;s<o;s++)n[s]=i[s]|128;n[o]=i[o]}return n.buffer}toString(){let e="";return this.isHexOnly?e=$t.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};E0.NAME="relativeSidBlock";var Lw=class extends En{constructor({value:e=Pi,...r}={}){super(r),this.value=[],e&&this.fromString(e)}fromBER(e,r,n){let i=r;for(;n>0;){let o=new E0;if(i=o.fromBER(e,i,n),i===-1)return this.blockLength=0,this.error=o.error,i;this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return i}toBER(e,r){let n=[];for(let i=0;i<this.value.length;i++){let o=this.value[i].toBER(e);if(o.byteLength===0)return this.error=this.value[i].error,Xs;n.push(o)}return XP(n)}fromString(e){this.value=[];let r=0,n=0,i="";do{n=e.indexOf(".",r),n===-1?i=e.substring(r):i=e.substring(r,n),r=n+1;let o=new E0;if(o.valueDec=parseInt(i,10),isNaN(o.valueDec))return!0;this.value.push(o)}while(n!==-1);return!0}toString(){let e="",r=!1;for(let n=0;n<this.value.length;n++){r=this.value[n].isHexOnly;let i=this.value[n].toString();n!==0&&(e=`${e}.`),r&&(i=`{${i}}`),e+=i}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let r=0;r<this.value.length;r++)e.sidArray.push(this.value[r].toJSON());return e}};Lw.NAME="RelativeObjectIdentifierValueBlock";var p9,k0=class extends fn{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Lw),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};p9=k0;je.RelativeObjectIdentifier=p9;k0.NAME="RelativeObjectIdentifier";var m9,R0=class extends ec{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};m9=R0;je.Sequence=m9;R0.NAME="SEQUENCE";var h9,A0=class extends ec{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};h9=A0;je.Set=h9;A0.NAME="SET";var Hw=class extends Ys(En){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Pi}toJSON(){return{...super.toJSON(),value:this.value}}};Hw.NAME="StringValueBlock";var Uw=class extends Hw{};Uw.NAME="SimpleStringValueBlock";var di=class extends p0{constructor({...e}={}){super(e,Uw)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,$t.BufferSourceConverter.toUint8Array(e))}fromString(e){let r=e.length,n=this.valueBlock.valueHexView=new Uint8Array(r);for(let i=0;i<r;i++)n[i]=e.charCodeAt(i);this.valueBlock.value=e}};di.NAME="SIMPLE STRING";var $w=class extends di{fromBuffer(e){this.valueBlock.valueHexView=$t.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=$t.Convert.ToUtf8String(e)}catch(r){this.warnings.push(`Error during "decodeURIComponent": ${r}, using raw string`),this.valueBlock.value=$t.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array($t.Convert.FromUtf8String(e)),this.valueBlock.value=e}};$w.NAME="Utf8StringValueBlock";var g9,Js=class extends $w{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};g9=Js;je.Utf8String=g9;Js.NAME="UTF8String";var Fw=class extends di{fromBuffer(e){this.valueBlock.value=$t.Convert.ToUtf16String(e),this.valueBlock.valueHexView=$t.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array($t.Convert.FromUtf16String(e))}};Fw.NAME="BmpStringValueBlock";var y9,C0=class extends Fw{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};y9=C0;je.BmpString=y9;C0.NAME="BMPString";var jw=class extends di{fromBuffer(e){let r=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(r);for(let i=0;i<n.length;i+=4)n[i]=n[i+3],n[i+1]=n[i+2],n[i+2]=0,n[i+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(r))}fromString(e){let r=e.length,n=this.valueBlock.valueHexView=new Uint8Array(r*4);for(let i=0;i<r;i++){let o=ar.utilToBase(e.charCodeAt(i),8),s=new Uint8Array(o);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[i*4+c+a]=s[c]}this.valueBlock.value=e}};jw.NAME="UniversalStringValueBlock";var v9,P0=class extends jw{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};v9=P0;je.UniversalString=v9;P0.NAME="UniversalString";var x9,_0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};x9=_0;je.NumericString=x9;_0.NAME="NumericString";var S9,T0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};S9=T0;je.PrintableString=S9;T0.NAME="PrintableString";var b9,B0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};b9=B0;je.TeletexString=b9;B0.NAME="TeletexString";var w9,D0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};w9=D0;je.VideotexString=w9;D0.NAME="VideotexString";var I9,N0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};I9=N0;je.IA5String=I9;N0.NAME="IA5String";var E9,O0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};E9=O0;je.GraphicString=E9;O0.NAME="GraphicString";var k9,Pp=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};k9=Pp;je.VisibleString=k9;Pp.NAME="VisibleString";var R9,M0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};R9=M0;je.GeneralString=R9;M0.NAME="GeneralString";var A9,L0=class extends di{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};A9=L0;je.CharacterString=A9;L0.NAME="CharacterString";var C9,_p=class extends Pp{constructor({value:e,valueDate:r,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let i=0;i<e.length;i++)this.valueBlock.valueHexView[i]=e.charCodeAt(i)}r&&(this.fromDate(r),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,$t.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),r=new ArrayBuffer(e.length),n=new Uint8Array(r);for(let i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return r}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let i=parseInt(n[1],10);i>=50?this.year=1900+i:this.year=2e3+i,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let r=new Array(7);return r[0]=ar.padNumber(this.year<2e3?this.year-1900:this.year-2e3,2),r[1]=ar.padNumber(this.month,2),r[2]=ar.padNumber(this.day,2),r[3]=ar.padNumber(this.hour,2),r[4]=ar.padNumber(this.minute,2),r[5]=ar.padNumber(this.second,2),r[6]="Z",r.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};C9=_p;je.UTCTime=C9;_p.NAME="UTCTime";var P9,H0=class extends _p{constructor(e={}){var r;super(e),(r=this.millisecond)!==null&&r!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let r=!1,n="",i="",o=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),r=!0;else{let l=new Number(e[e.length-1]);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(r){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let l=1,f=n.indexOf("+"),p="";if(f===-1&&(f=n.indexOf("-"),l=-1),f!==-1){if(p=n.substring(f+1),n=n.substring(0,f),p.length!==2&&p.length!==4)throw new Error("Wrong input string for conversion");let g=parseInt(p.substring(0,2),10);if(isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");if(a=l*g,p.length===4){if(g=parseInt(p.substring(2,4),10),isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");c=l*g}}}let u=n.indexOf(".");if(u===-1&&(u=n.indexOf(",")),u!==-1){let l=new Number(`0${n.substring(u)}`);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");o=l.valueOf(),i=n.substring(0,u)}else i=n;switch(!0){case i.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,u!==-1)throw new Error("Wrong input string for conversion");break;case i.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*o;this.minute=Math.floor(l),l=60*(l-this.minute),this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case i.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*o;this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case i.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=1e3*o;this.millisecond=Math.floor(l)}break;default:throw new Error("Wrong input string for conversion")}let d=s.exec(i);if(d===null)throw new Error("Wrong input string for conversion");for(let l=1;l<d.length;l++)switch(l){case 1:this.year=parseInt(d[l],10);break;case 2:this.month=parseInt(d[l],10);break;case 3:this.day=parseInt(d[l],10);break;case 4:this.hour=parseInt(d[l],10)+a;break;case 5:this.minute=parseInt(d[l],10)+c;break;case 6:this.second=parseInt(d[l],10);break;default:throw new Error("Wrong input string for conversion")}if(r===!1){let l=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=l.getUTCFullYear(),this.month=l.getUTCMonth(),this.day=l.getUTCDay(),this.hour=l.getUTCHours(),this.minute=l.getUTCMinutes(),this.second=l.getUTCSeconds(),this.millisecond=l.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let r=[];return r.push(ar.padNumber(this.year,4)),r.push(ar.padNumber(this.month,2)),r.push(ar.padNumber(this.day,2)),r.push(ar.padNumber(this.hour,2)),r.push(ar.padNumber(this.minute,2)),r.push(ar.padNumber(this.second,2)),this.millisecond!==0&&(r.push("."),r.push(ar.padNumber(this.millisecond,3))),r.push("Z"),r.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};P9=H0;je.GeneralizedTime=P9;H0.NAME="GeneralizedTime";var _9,U0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};_9=U0;je.DATE=_9;U0.NAME="DATE";var T9,$0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};T9=$0;je.TimeOfDay=T9;$0.NAME="TimeOfDay";var B9,F0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};B9=F0;je.DateTime=B9;F0.NAME="DateTime";var D9,j0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};D9=j0;je.Duration=D9;j0.NAME="Duration";var N9,q0=class extends Js{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};N9=q0;je.TIME=N9;q0.NAME="TIME";var yl=class{constructor({name:e=Pi,optional:r=!1}={}){this.name=e,this.optional=r}},qw=class extends yl{constructor({value:e=[],...r}={}){super(r),this.value=e}},W0=class extends yl{constructor({value:e=new yl,local:r=!1,...n}={}){super(n),this.value=e,this.local=r}},JP=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=$t.BufferSourceConverter.toUint8Array(e)}constructor({data:e=Ww}={}){this.dataView=$t.BufferSourceConverter.toUint8Array(e)}fromBER(e,r,n){let i=r+n;return this.dataView=$t.BufferSourceConverter.toUint8Array(e).subarray(r,i),i}toBER(e){return this.dataView.slice().buffer}};function Rp(t,e,r){if(r instanceof qw){for(let o of r.value)if(Rp(t,e,o).verified)return{verified:!0,result:t};{let o={verified:!1,result:{error:"Wrong values for Choice type"}};return r.hasOwnProperty(KP)&&(o.name=r.name),o}}if(r instanceof yl)return r.hasOwnProperty(KP)&&(t[r.name]=e),{verified:!0,result:t};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(Hhe in r))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(jhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(qhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=r.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(r.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(r.idBlock.hasOwnProperty(Uhe)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:t};if(r.idBlock.hasOwnProperty($he)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:t};if(r.idBlock.hasOwnProperty(Fhe)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:t};if(!(Lhe in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(r.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:t};if(r.idBlock.isHexOnly){if(!(JU in r.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let o=r.idBlock.valueHexView,s=e.idBlock.valueHexView;if(o.length!==s.length)return{verified:!1,result:t};for(let a=0;a<o.length;a++)if(o[a]!==s[1])return{verified:!1,result:t}}if(r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(t[r.name]=e)),r instanceof je.Constructed){let o=0,s={verified:!1,result:{error:"Unknown error"}},a=r.valueBlock.value.length;if(a>0&&r.valueBlock.value[0]instanceof W0&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:t};if(e.valueBlock.value.length===0&&r.valueBlock.value.length!==0){let c=!0;for(let u=0;u<r.valueBlock.value.length;u++)c=c&&(r.valueBlock.value[u].optional||!1);return c?{verified:!0,result:t}:(r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),t.error="Inconsistent object length",{verified:!1,result:t})}for(let c=0;c<a;c++)if(c-o>=e.valueBlock.value.length){if(r.valueBlock.value[c].optional===!1){let u={verified:!1,result:t};return t.error="Inconsistent length between ASN.1 data and schema",r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],u.name=r.name)),u}}else if(r.valueBlock.value[0]instanceof W0){if(s=Rp(t,e.valueBlock.value[c],r.valueBlock.value[0].value),s.verified===!1)if(r.valueBlock.value[0].optional)o++;else return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),s;if(KP in r.valueBlock.value[0]&&r.valueBlock.value[0].name.length>0){let u={};Whe in r.valueBlock.value[0]&&r.valueBlock.value[0].local?u=e:u=t,typeof u[r.valueBlock.value[0].name]>"u"&&(u[r.valueBlock.value[0].name]=[]),u[r.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=Rp(t,e.valueBlock.value[c-o],r.valueBlock.value[c]),s.verified===!1)if(r.valueBlock.value[c].optional)o++;else return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&delete t[r.name]),s;if(s.verified===!1){let c={verified:!1,result:t};return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],c.name=r.name)),c}return{verified:!0,result:t}}if(r.primitiveSchema&&JU in e.valueBlock){let o=Vw(e.valueBlock.valueHexView);if(o.offset===-1){let s={verified:!1,result:o.result};return r.name&&(r.name=r.name.replace(/^\s+|\s+$/g,Pi),r.name&&(delete t[r.name],s.name=r.name)),s}return Rp(t,o.result,r.primitiveSchema)}return{verified:!0,result:t}}function rge(t,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let r=Vw($t.BufferSourceConverter.toUint8Array(t));return r.offset===-1?{verified:!1,result:r.result}:Rp(r.result,r.result,e)}ut.Any=yl;ut.BaseBlock=fn;ut.BaseStringBlock=p0;ut.BitString=x0;ut.BmpString=C0;ut.Boolean=y0;ut.CharacterString=L0;ut.Choice=qw;ut.Constructed=ec;ut.DATE=U0;ut.DEFAULT_MAX_CONTENT_LENGTH=i9;ut.DEFAULT_MAX_DEPTH=r9;ut.DEFAULT_MAX_NODES=n9;ut.DateTime=F0;ut.Duration=j0;ut.EndOfContent=h0;ut.Enumerated=b0;ut.GeneralString=M0;ut.GeneralizedTime=H0;ut.GraphicString=O0;ut.HexBlock=Ys;ut.IA5String=N0;ut.Integer=Cp;ut.Null=g0;ut.NumericString=_0;ut.ObjectIdentifier=I0;ut.OctetString=v0;ut.Primitive=m0;ut.PrintableString=T0;ut.RawData=JP;ut.RelativeObjectIdentifier=k0;ut.Repeated=W0;ut.Sequence=R0;ut.Set=A0;ut.TIME=q0;ut.TeletexString=B0;ut.TimeOfDay=$0;ut.UTCTime=_p;ut.UniversalString=P0;ut.Utf8String=Js;ut.ValueBlock=En;ut.VideotexString=D0;ut.ViewWriter=Ap;ut.VisibleString=Pp;ut.compareSchema=Rp;ut.fromBER=Qhe;ut.verifySchema=rge});function O9(t){return Object.prototype.toString.call(t)}function oge(t){if(ArrayBuffer.isView(t))return!0;if(!t||typeof t!="object")return!1;let e=t;return typeof e.byteOffset=="number"&&typeof e.byteLength=="number"&&Gw(e.buffer)}function ZP(t){return O9(t)===nge}function M9(t){return typeof SharedArrayBuffer<"u"&&O9(t)===ige}function Gw(t){return ZP(t)||M9(t)}function L9(t){return oge(t)}function rc(t){return Gw(t)||L9(t)}function e_(t){if(!rc(t))throw new TypeError("Expected ArrayBuffer, SharedArrayBuffer, or ArrayBufferView")}function wo(t){return e_(t),Gw(t)?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function pn(t){if(e_(t),ZP(t))return t;let e=new ArrayBuffer(t.byteLength);return new Uint8Array(e).set(wo(t)),e}var nge,ige,G0=N(()=>{nge="[object ArrayBuffer]",ige="[object SharedArrayBuffer]"});var H9=N(()=>{G0()});function t_(t,e,r={}){let n=wo(t),i=wo(e);if(!r.constantTime&&n.byteLength!==i.byteLength)return!1;let o=Math.max(n.byteLength,i.byteLength),s=n.byteLength^i.byteLength;for(let a=0;a<o;a++)s|=(n[a]??0)^(i[a]??0);return s===0}var U9=N(()=>{G0()});var $9=N(()=>{G0()});var Zi=N(()=>{G0();H9();U9();$9()});var L,k,vl=N(()=>{(function(t){t[t.Sequence=0]="Sequence",t[t.Set=1]="Set",t[t.Choice=2]="Choice"})(L||(L={}));(function(t){t[t.Any=1]="Any",t[t.Boolean=2]="Boolean",t[t.OctetString=3]="OctetString",t[t.BitString=4]="BitString",t[t.Integer=5]="Integer",t[t.Enumerated=6]="Enumerated",t[t.ObjectIdentifier=7]="ObjectIdentifier",t[t.Utf8String=8]="Utf8String",t[t.BmpString=9]="BmpString",t[t.UniversalString=10]="UniversalString",t[t.NumericString=11]="NumericString",t[t.PrintableString=12]="PrintableString",t[t.TeletexString=13]="TeletexString",t[t.VideotexString=14]="VideotexString",t[t.IA5String=15]="IA5String",t[t.GraphicString=16]="GraphicString",t[t.VisibleString=17]="VisibleString",t[t.GeneralString=18]="GeneralString",t[t.CharacterString=19]="CharacterString",t[t.UTCTime=20]="UTCTime",t[t.GeneralizedTime=21]="GeneralizedTime",t[t.DATE=22]="DATE",t[t.TimeOfDay=23]="TimeOfDay",t[t.DateTime=24]="DateTime",t[t.Duration=25]="Duration",t[t.TIME=26]="TIME",t[t.Null=27]="Null"})(k||(k={}))});var zw,es,F9=N(()=>{zw=tt(Lu(),1);Zi();es=class{unusedBits=0;value=new ArrayBuffer(0);constructor(e,r=0){if(e)if(typeof e=="number")this.fromNumber(e);else if(rc(e))this.unusedBits=r,this.value=pn(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof zw.BitString))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=pn(e.valueBlock.valueHex),this}toASN(){return new zw.BitString({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new zw.BitString({name:e})}toNumber(){let e="",r=new Uint8Array(this.value);for(let n of r)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let r=e.toString(2),n=r.length+7>>3;this.unusedBits=(n<<3)-r.length;let i=new Uint8Array(n);r=r.padStart(n<<3,"0").split("").reverse().join("");let o=0;for(;o<n;)i[o]=parseInt(r.slice(o<<3,(o<<3)+8),2),o++;this.value=i.buffer}}});var Kw,rt,j9=N(()=>{Kw=tt(Lu(),1);Zi();rt=class{buffer;get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):rc(e)?this.buffer=pn(e):Array.isArray(e)?this.buffer=new Uint8Array(e).buffer:this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Kw.OctetString))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=pn(e.valueBlock.valueHex),this}toASN(){return new Kw.OctetString({valueHex:this.buffer})}toSchema(e){return new Kw.OctetString({name:e})}}});var r_=N(()=>{F9();j9()});function Io(t){return{fromASN:e=>e.valueBlock.value,toASN:e=>new t({value:e})}}function nc(t){switch(t){case k.Any:return q9;case k.BitString:return G9;case k.BmpString:return X9;case k.Boolean:return K9;case k.CharacterString:return s$;case k.Enumerated:return V9;case k.GeneralString:return o$;case k.GeneralizedTime:return c$;case k.GraphicString:return n$;case k.IA5String:return r$;case k.Integer:return W9;case k.Null:return u$;case k.NumericString:return Q9;case k.ObjectIdentifier:return z9;case k.OctetString:return xl;case k.PrintableString:return Z9;case k.TeletexString:return e$;case k.UTCTime:return a$;case k.UniversalString:return Y9;case k.Utf8String:return J9;case k.VideotexString:return t$;case k.VisibleString:return i$;default:return null}}var dt,q9,W9,V9,Ot,cge,G9,z9,K9,xl,n_,J9,X9,Y9,Q9,Z9,e$,t$,r$,n$,i$,o$,s$,a$,c$,u$,z0=N(()=>{dt=tt(Lu(),1);Zi();vl();r_();q9={fromASN:t=>t instanceof dt.Null?null:pn(t.valueBeforeDecodeView),toASN:t=>{if(t===null)return new dt.Null;let e=dt.fromBER(t);if(e.result.error)throw new Error(e.result.error);return e.result}},W9={fromASN:t=>t.valueBlock.valueHexView.byteLength>=4?t.valueBlock.toString():t.valueBlock.valueDec,toASN:t=>new dt.Integer({value:+t})},V9={fromASN:t=>t.valueBlock.valueDec,toASN:t=>new dt.Enumerated({value:t})},Ot={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.Integer({valueHex:t})},cge={fromASN:t=>t.toBigInt(),toASN:t=>dt.Integer.fromBigInt(t)},G9={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.BitString({valueHex:t})},z9={fromASN:t=>t.valueBlock.toString(),toASN:t=>new dt.ObjectIdentifier({value:t})},K9={fromASN:t=>t.valueBlock.value,toASN:t=>new dt.Boolean({value:t})},xl={fromASN:t=>pn(t.valueBlock.valueHexView),toASN:t=>new dt.OctetString({valueHex:t})},n_={fromASN:t=>new rt(t.getValue()),toASN:t=>t.toASN()};J9=Io(dt.Utf8String),X9=Io(dt.BmpString),Y9=Io(dt.UniversalString),Q9=Io(dt.NumericString),Z9=Io(dt.PrintableString),e$=Io(dt.TeletexString),t$=Io(dt.VideotexString),r$=Io(dt.IA5String),n$=Io(dt.GraphicString),i$=Io(dt.VisibleString),o$=Io(dt.GeneralString),s$=Io(dt.CharacterString),a$={fromASN:t=>t.toDate(),toASN:t=>new dt.UTCTime({valueDate:t})},c$={fromASN:t=>t.toDate(),toASN:t=>new dt.GeneralizedTime({valueDate:t})},u$={fromASN:()=>null,toASN:()=>new dt.Null}});function Eo(t){return typeof t=="function"&&t.prototype?t.prototype.toASN&&t.prototype.fromASN?!0:Eo(t.prototype):!!(t&&typeof t=="object"&&"toASN"in t&&"fromASN"in t)}function o_(t){if(t){let e=Object.getPrototypeOf(t);return e?.prototype?.constructor===Array?!0:o_(e)}return!1}function d$(t,e){if(!(t&&e)||t.byteLength!==e.byteLength)return!1;let r=new Uint8Array(t),n=new Uint8Array(e);for(let i=0;i<t.byteLength;i++)if(r[i]!==n[i])return!1;return!0}var Jw=N(()=>{});var en,Xw,l$=N(()=>{en=tt(Lu(),1);vl();Jw();Xw=class{items=new WeakMap;has(e){return this.items.has(e)}get(e,r=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(r&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let r=this.get(e);r.schema||(r.schema=this.create(e,!0))}createDefault(e){let r={type:L.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(r,n),r.items=Object.assign({},r.items,n.items)),r}create(e,r){let n=this.items.get(e)||this.createDefault(e),i=[];for(let o in n.items){let s=n.items[o],a=r?o:"",c;if(typeof s.type=="number"){let d=k[s.type],l=en[d];if(!l)throw new Error(`Cannot get ASN1 class by name '${d}'`);c=new l({name:a})}else Eo(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===L.Choice?c=new en.Any({name:a}):(c=this.create(s.type,!1),c.name=a):c=new en.Any({name:a});let u=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let d=s.repeated==="set"?en.Set:en.Sequence;c=new d({name:"",value:[new en.Repeated({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||Eo(s.type)){let d=s.repeated?en.Constructed:en.Primitive;i.push(new d({name:a,optional:u,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let d=!!s.repeated,l=d?c:this.get(s.type,!0).schema;l="valueBlock"in l?l.valueBlock.value:l.value,i.push(new en.Constructed({name:d?"":a,optional:u,idBlock:{tagClass:3,tagNumber:s.context},value:l}))}else i.push(new en.Constructed({optional:u,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=u,i.push(c)}switch(n.type){case L.Sequence:return new en.Sequence({value:i,name:""});case L.Set:return new en.Set({value:i,name:""});case L.Choice:return new en.Choice({value:i,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,r){return this.items.set(e,r),this}findParentSchema(e){let r=Object.getPrototypeOf(e);return r?this.items.get(r)||this.findParentSchema(r):null}}});var tn,Yw=N(()=>{l$();tn=new Xw});var W,f$,p$,m$,x,h$=N(()=>{z0();vl();Yw();W=t=>e=>{let r;tn.has(e)?r=tn.get(e):(r=tn.createDefault(e),tn.set(e,r)),Object.assign(r,t)},f$=()=>W({type:L.Choice}),p$=t=>W({type:L.Set,...t}),m$=t=>W({type:L.Sequence,...t}),x=t=>(e,r)=>{let n;tn.has(e.constructor)?n=tn.get(e.constructor):(n=tn.createDefault(e.constructor),tn.set(e.constructor,n));let i=Object.assign({},t);if(typeof i.type=="number"&&!i.converter){let o=nc(t.type);if(!o)throw new Error(`Cannot get default converter for property '${r}' of ${e.constructor.name}`);i.converter=o}i.raw=t.raw,n.items[r]=i}});var ic,g$=N(()=>{ic=class extends Error{schemas=[]}});var s_=N(()=>{g$()});var mn,Tp,a_=N(()=>{mn=tt(Lu(),1);Zi();vl();z0();s_();Jw();Yw();Tp=class{static parse(e,r,n){let i=mn.fromBER(pn(e),n?.berOptions);if(i.result.error)throw new Error(i.result.error);return this.fromASN(i.result,r,n)}static fromASN(e,r,n){try{if(Eo(r))return new r().fromASN(e);let i=tn.get(r);tn.cache(r);let o=i.schema,s=this.handleChoiceTypes(e,i,r,o,n);if(s?.result)return s.result;s?.targetSchema&&(o=s.targetSchema);let a=this.handleSequenceTypes(e,i,r,o),c=new r;return o_(r)?this.handleArrayTypes(e,i,r,n):(this.processSchemaItems(i,a,c,n),c)}catch(i){throw i instanceof ic&&i.schemas.push(r.name),i}}static handleChoiceTypes(e,r,n,i,o){if(e.constructor===mn.Constructed&&r.type===L.Choice&&e.idBlock.tagClass===3)for(let s in r.items){let a=r.items[s];if(a.context===e.idBlock.tagNumber&&a.implicit&&typeof a.type=="function"&&tn.has(a.type)){let c=tn.get(a.type);if(c&&c.type===L.Sequence){let u=new mn.Sequence;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in u.valueBlock){u.valueBlock.value=e.valueBlock.value;let d=this.fromASN(u,a.type,o),l=new n;return l[s]=d,{result:l}}}}}else if(e.constructor===mn.Constructed&&r.type!==L.Choice){let s=new mn.Constructed({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:r.schema.valueBlock.value});for(let a in r.items)delete e[a];return{targetSchema:s}}return null}static handleSequenceTypes(e,r,n,i){if(r.type===L.Sequence){let o=mn.compareSchema({},e,i);if(!o.verified)throw new ic(`Data does not match to ${n.name} ASN1 schema.${o.result.error?` ${o.result.error}`:""}`);return o}else{let o=mn.compareSchema({},e,i);if(!o.verified)throw new ic(`Data does not match to ${n.name} ASN1 schema.${o.result.error?` ${o.result.error}`:""}`);return o}}static processRepeatedField(e,r,n){let i=e.slice(r);if(i.length===1&&i[0].constructor.name==="Sequence"){let o=i[0];o.valueBlock&&o.valueBlock.value&&Array.isArray(o.valueBlock.value)&&(i=o.valueBlock.value)}if(typeof n.type=="number"){let o=nc(n.type);if(!o)throw new Error(`No converter for ASN.1 type ${n.type}`);return i.filter(s=>s&&s.valueBlock).map(s=>{try{return o.fromASN(s)}catch{return}}).filter(s=>s!==void 0)}else return i.filter(o=>o&&o.valueBlock).map(o=>{try{return this.fromASN(o,n.type)}catch{return}}).filter(o=>o!==void 0)}static processPrimitiveField(e,r){let n=nc(r.type);if(!n)throw new Error(`No converter for ASN.1 type ${r.type}`);return n.fromASN(e)}static isOptionalChoiceField(e){return e.optional&&typeof e.type=="function"&&tn.has(e.type)&&tn.get(e.type).type===L.Choice}static processOptionalChoiceField(e,r){try{return{processed:!0,value:this.fromASN(e,r.type)}}catch(n){if(n instanceof ic&&/Wrong values for Choice type/.test(n.message))return{processed:!1};throw n}}static handleArrayTypes(e,r,n,i){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let o=r.itemType;if(typeof o=="number"){let s=nc(o);if(!s)throw new Error(`Cannot get default converter for array item of ${n.name} ASN1 schema`);return n.from(e.valueBlock.value,a=>s.fromASN(a))}else return n.from(e.valueBlock.value,s=>this.fromASN(s,o,i))}static processSchemaItems(e,r,n,i){for(let o in e.items){let s=r.result[o];if(!s)continue;let a=e.items[o],c=a.type,u;typeof c=="number"||Eo(c)?u=this.processPrimitiveSchemaItem(s,a,c,i):u=this.processComplexSchemaItem(s,a,c,i),u&&typeof u=="object"&&"value"in u&&"raw"in u?(n[o]=u.value,n[`${o}Raw`]=u.raw):n[o]=u}}static processPrimitiveSchemaItem(e,r,n,i){let o=r.converter??(Eo(n)?new n:null);if(!o)throw new Error("Converter is empty");return r.repeated?this.processRepeatedPrimitiveItem(e,r,o,i):this.processSinglePrimitiveItem(e,r,n,o,i)}static processRepeatedPrimitiveItem(e,r,n,i){if(r.implicit){let o=r.repeated==="sequence"?mn.Sequence:mn.Set,s=new o;s.valueBlock=e.valueBlock;let a=mn.fromBER(s.toBER(!1),i?.berOptions);if(a.offset===-1)throw new Error(`Cannot parse the child item. ${a.result.error}`);if(!("value"in a.result.valueBlock&&Array.isArray(a.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let c=a.result.valueBlock.value;return Array.from(c,u=>n.fromASN(u))}else return Array.from(e,o=>n.fromASN(o))}static processSinglePrimitiveItem(e,r,n,i,o){let s=e;if(r.implicit){let a;if(Eo(n))a=new n().toSchema("");else{let c=k[n],u=mn[c];if(!u)throw new Error(`Cannot get '${c}' class from asn1js module`);a=new u}a.valueBlock=s.valueBlock,s=mn.fromBER(a.toBER(!1),o?.berOptions).result}return i.fromASN(s)}static processComplexSchemaItem(e,r,n,i){if(r.repeated){if(!Array.isArray(e))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");return Array.from(e,o=>this.fromASN(o,n,i))}else{let o=this.handleImplicitTagging(e,r,n);if(this.isOptionalChoiceField(r))try{return this.fromASN(o,n,i)}catch(s){if(s instanceof ic&&/Wrong values for Choice type/.test(s.message))return;throw s}else{let s=this.fromASN(o,n,i);return r.raw?{value:s,raw:e.valueBeforeDecodeView}:s}}}static handleImplicitTagging(e,r,n){if(r.implicit&&typeof r.context=="number"){let i=tn.get(n);if(i.type===L.Sequence){let o=new mn.Sequence;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in o.valueBlock)return o.valueBlock.value=e.valueBlock.value,o}else if(i.type===L.Set){let o=new mn.Set;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in o.valueBlock)return o.valueBlock.value=e.valueBlock.value,o}}return e}}});var Nn,Bp,c_=N(()=>{Nn=tt(Lu(),1);Zi();z0();vl();Jw();Yw();Bp=class t{static serialize(e){return e instanceof Nn.BaseBlock?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&Eo(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let r=e.constructor,n=tn.get(r);tn.cache(r);let i=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=nc(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${r.name} ASN1 schema`);i=e.map(a=>s.toASN(a))}else i=e.map(s=>this.toAsnItem({type:n.itemType},"[]",r,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&d$(this.serialize(a.defaultValue),this.serialize(c)))continue;let u=t.toAsnItem(a,s,r,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||Eo(a.type))){let d={};d.valueHex=u instanceof Nn.Null?pn(u.valueBeforeDecodeView):u.valueBlock.toBER(),i.push(new Nn.Primitive({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...d}))}else i.push(new Nn.Constructed({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:u.valueBlock.value}));else i.push(new Nn.Constructed({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[u]}));else a.repeated?i=i.concat(u):i.push(u)}let o;switch(n.type){case L.Sequence:o=new Nn.Sequence({value:i});break;case L.Set:o=new Nn.Set({value:i});break;case L.Choice:if(!i[0])throw new Error(`Schema '${r.name}' has wrong data. Choice cannot be empty.`);o=i[0];break}return o}static toAsnItem(e,r,n,i){let o;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${r}' doesn't have converter for type ${k[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(i))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(i,u=>s.toASN(u)),c=e.repeated==="sequence"?Nn.Sequence:Nn.Set;o=new c({value:a})}else o=s.toASN(i)}else if(e.repeated){if(!Array.isArray(i))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(i,c=>this.toASN(c)),a=e.repeated==="sequence"?Nn.Sequence:Nn.Set;o=new a({value:s})}else o=this.toASN(i);return o}}});var Ze,y$=N(()=>{Ze=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let r of e)this.push(r)}}}});var v$,ko,x$=N(()=>{v$=tt(Lu(),1);Zi();a_();c_();ko=class t{static serialize(e){return Bp.serialize(e)}static parse(e,r,n){return Tp.parse(e,r,n)}static toString(e,r){let n=rc(e)?pn(e):t.serialize(e),i=v$.fromBER(n,r?.berOptions);if(i.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${i.result.error}`);return i.result.toString()}}});var S$={};bi(S$,{AsnAnyConverter:()=>q9,AsnArray:()=>Ze,AsnBitStringConverter:()=>G9,AsnBmpStringConverter:()=>X9,AsnBooleanConverter:()=>K9,AsnCharacterStringConverter:()=>s$,AsnChoiceType:()=>f$,AsnConstructedOctetStringConverter:()=>n_,AsnConvert:()=>ko,AsnEnumeratedConverter:()=>V9,AsnGeneralStringConverter:()=>o$,AsnGeneralizedTimeConverter:()=>c$,AsnGraphicStringConverter:()=>n$,AsnIA5StringConverter:()=>r$,AsnIntegerArrayBufferConverter:()=>Ot,AsnIntegerBigIntConverter:()=>cge,AsnIntegerConverter:()=>W9,AsnNullConverter:()=>u$,AsnNumericStringConverter:()=>Q9,AsnObjectIdentifierConverter:()=>z9,AsnOctetStringConverter:()=>xl,AsnParser:()=>Tp,AsnPrintableStringConverter:()=>Z9,AsnProp:()=>x,AsnPropTypes:()=>k,AsnSchemaValidationError:()=>ic,AsnSequenceType:()=>m$,AsnSerializer:()=>Bp,AsnSetType:()=>p$,AsnTeletexStringConverter:()=>e$,AsnType:()=>W,AsnTypeTypes:()=>L,AsnUTCTimeConverter:()=>a$,AsnUniversalStringConverter:()=>Y9,AsnUtf8StringConverter:()=>J9,AsnVideotexStringConverter:()=>t$,AsnVisibleStringConverter:()=>i$,BitString:()=>es,OctetString:()=>rt,defaultConverter:()=>nc});var ae=N(()=>{z0();r_();h$();vl();a_();c_();s_();y$();x$()});var J$=ce((D3e,eI)=>{var b$,w$,I$,E$,k$,R$,A$,C$,P$,_$,T$,B$,D$,Qw,u_,N$,O$,M$,Dp,L$,H$,U$,$$,F$,j$,q$,W$,V$,Zw,G$,z$,K$;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof eI=="object"&&typeof eI.exports=="object"?t(r(e,r(eI.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,s){return n[o]=i?i(o,s):s}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,s){o.__proto__=s}||function(o,s){for(var a in s)Object.prototype.hasOwnProperty.call(s,a)&&(o[a]=s[a])};b$=function(o,s){if(typeof s!="function"&&s!==null)throw new TypeError("Class extends value "+String(s)+" is not a constructor or null");e(o,s);function a(){this.constructor=o}o.prototype=s===null?Object.create(s):(a.prototype=s.prototype,new a)},w$=Object.assign||function(o){for(var s,a=1,c=arguments.length;a<c;a++){s=arguments[a];for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(o[u]=s[u])}return o},I$=function(o,s){var a={};for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&s.indexOf(c)<0&&(a[c]=o[c]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var u=0,c=Object.getOwnPropertySymbols(o);u<c.length;u++)s.indexOf(c[u])<0&&Object.prototype.propertyIsEnumerable.call(o,c[u])&&(a[c[u]]=o[c[u]]);return a},E$=function(o,s,a,c){var u=arguments.length,d=u<3?s:c===null?c=Object.getOwnPropertyDescriptor(s,a):c,l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")d=Reflect.decorate(o,s,a,c);else for(var f=o.length-1;f>=0;f--)(l=o[f])&&(d=(u<3?l(d):u>3?l(s,a,d):l(s,a))||d);return u>3&&d&&Object.defineProperty(s,a,d),d},k$=function(o,s){return function(a,c){s(a,c,o)}},R$=function(o,s,a,c,u,d){function l(z){if(z!==void 0&&typeof z!="function")throw new TypeError("Function expected");return z}for(var f=c.kind,p=f==="getter"?"get":f==="setter"?"set":"value",g=!s&&o?c.static?o:o.prototype:null,v=s||(g?Object.getOwnPropertyDescriptor(g,c.name):{}),b,C=!1,B=a.length-1;B>=0;B--){var _={};for(var F in c)_[F]=F==="access"?{}:c[F];for(var F in c.access)_.access[F]=c.access[F];_.addInitializer=function(z){if(C)throw new TypeError("Cannot add initializers after decoration has completed");d.push(l(z||null))};var he=(0,a[B])(f==="accessor"?{get:v.get,set:v.set}:v[p],_);if(f==="accessor"){if(he===void 0)continue;if(he===null||typeof he!="object")throw new TypeError("Object expected");(b=l(he.get))&&(v.get=b),(b=l(he.set))&&(v.set=b),(b=l(he.init))&&u.unshift(b)}else(b=l(he))&&(f==="field"?u.unshift(b):v[p]=b)}g&&Object.defineProperty(g,c.name,v),C=!0},A$=function(o,s,a){for(var c=arguments.length>2,u=0;u<s.length;u++)a=c?s[u].call(o,a):s[u].call(o);return c?a:void 0},C$=function(o){return typeof o=="symbol"?o:"".concat(o)},P$=function(o,s,a){return typeof s=="symbol"&&(s=s.description?"[".concat(s.description,"]"):""),Object.defineProperty(o,"name",{configurable:!0,value:a?"".concat(a," ",s):s})},_$=function(o,s){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,s)},T$=function(o,s,a,c){function u(d){return d instanceof a?d:new a(function(l){l(d)})}return new(a||(a=Promise))(function(d,l){function f(v){try{g(c.next(v))}catch(b){l(b)}}function p(v){try{g(c.throw(v))}catch(b){l(b)}}function g(v){v.done?d(v.value):u(v.value).then(f,p)}g((c=c.apply(o,s||[])).next())})},B$=function(o,s){var a={label:0,sent:function(){if(d[0]&1)throw d[1];return d[1]},trys:[],ops:[]},c,u,d,l=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return l.next=f(0),l.throw=f(1),l.return=f(2),typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(g){return function(v){return p([g,v])}}function p(g){if(c)throw new TypeError("Generator is already executing.");for(;l&&(l=0,g[0]&&(a=0)),a;)try{if(c=1,u&&(d=g[0]&2?u.return:g[0]?u.throw||((d=u.return)&&d.call(u),0):u.next)&&!(d=d.call(u,g[1])).done)return d;switch(u=0,d&&(g=[g[0]&2,d.value]),g[0]){case 0:case 1:d=g;break;case 4:return a.label++,{value:g[1],done:!1};case 5:a.label++,u=g[1],g=[0];continue;case 7:g=a.ops.pop(),a.trys.pop();continue;default:if(d=a.trys,!(d=d.length>0&&d[d.length-1])&&(g[0]===6||g[0]===2)){a=0;continue}if(g[0]===3&&(!d||g[1]>d[0]&&g[1]<d[3])){a.label=g[1];break}if(g[0]===6&&a.label<d[1]){a.label=d[1],d=g;break}if(d&&a.label<d[2]){a.label=d[2],a.ops.push(g);break}d[2]&&a.ops.pop(),a.trys.pop();continue}g=s.call(o,a)}catch(v){g=[6,v],u=0}finally{c=d=0}if(g[0]&5)throw g[1];return{value:g[0]?g[1]:void 0,done:!0}}},D$=function(o,s){for(var a in o)a!=="default"&&!Object.prototype.hasOwnProperty.call(s,a)&&Zw(s,o,a)},Zw=Object.create?(function(o,s,a,c){c===void 0&&(c=a);var u=Object.getOwnPropertyDescriptor(s,a);(!u||("get"in u?!s.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return s[a]}}),Object.defineProperty(o,c,u)}):(function(o,s,a,c){c===void 0&&(c=a),o[c]=s[a]}),Qw=function(o){var s=typeof Symbol=="function"&&Symbol.iterator,a=s&&o[s],c=0;if(a)return a.call(o);if(o&&typeof o.length=="number")return{next:function(){return o&&c>=o.length&&(o=void 0),{value:o&&o[c++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")},u_=function(o,s){var a=typeof Symbol=="function"&&o[Symbol.iterator];if(!a)return o;var c=a.call(o),u,d=[],l;try{for(;(s===void 0||s-- >0)&&!(u=c.next()).done;)d.push(u.value)}catch(f){l={error:f}}finally{try{u&&!u.done&&(a=c.return)&&a.call(c)}finally{if(l)throw l.error}}return d},N$=function(){for(var o=[],s=0;s<arguments.length;s++)o=o.concat(u_(arguments[s]));return o},O$=function(){for(var o=0,s=0,a=arguments.length;s<a;s++)o+=arguments[s].length;for(var c=Array(o),u=0,s=0;s<a;s++)for(var d=arguments[s],l=0,f=d.length;l<f;l++,u++)c[u]=d[l];return c},M$=function(o,s,a){if(a||arguments.length===2)for(var c=0,u=s.length,d;c<u;c++)(d||!(c in s))&&(d||(d=Array.prototype.slice.call(s,0,c)),d[c]=s[c]);return o.concat(d||Array.prototype.slice.call(s))},Dp=function(o){return this instanceof Dp?(this.v=o,this):new Dp(o)},L$=function(o,s,a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var c=a.apply(o,s||[]),u,d=[];return u=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),f("next"),f("throw"),f("return",l),u[Symbol.asyncIterator]=function(){return this},u;function l(B){return function(_){return Promise.resolve(_).then(B,b)}}function f(B,_){c[B]&&(u[B]=function(F){return new Promise(function(he,z){d.push([B,F,he,z])>1||p(B,F)})},_&&(u[B]=_(u[B])))}function p(B,_){try{g(c[B](_))}catch(F){C(d[0][3],F)}}function g(B){B.value instanceof Dp?Promise.resolve(B.value.v).then(v,b):C(d[0][2],B)}function v(B){p("next",B)}function b(B){p("throw",B)}function C(B,_){B(_),d.shift(),d.length&&p(d[0][0],d[0][1])}},H$=function(o){var s,a;return s={},c("next"),c("throw",function(u){throw u}),c("return"),s[Symbol.iterator]=function(){return this},s;function c(u,d){s[u]=o[u]?function(l){return(a=!a)?{value:Dp(o[u](l)),done:!1}:d?d(l):l}:d}},U$=function(o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var s=o[Symbol.asyncIterator],a;return s?s.call(o):(o=typeof Qw=="function"?Qw(o):o[Symbol.iterator](),a={},c("next"),c("throw"),c("return"),a[Symbol.asyncIterator]=function(){return this},a);function c(d){a[d]=o[d]&&function(l){return new Promise(function(f,p){l=o[d](l),u(f,p,l.done,l.value)})}}function u(d,l,f,p){Promise.resolve(p).then(function(g){d({value:g,done:f})},l)}},$$=function(o,s){return Object.defineProperty?Object.defineProperty(o,"raw",{value:s}):o.raw=s,o};var r=Object.create?(function(o,s){Object.defineProperty(o,"default",{enumerable:!0,value:s})}):function(o,s){o.default=s},n=function(o){return n=Object.getOwnPropertyNames||function(s){var a=[];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[a.length]=c);return a},n(o)};F$=function(o){if(o&&o.__esModule)return o;var s={};if(o!=null)for(var a=n(o),c=0;c<a.length;c++)a[c]!=="default"&&Zw(s,o,a[c]);return r(s,o),s},j$=function(o){return o&&o.__esModule?o:{default:o}},q$=function(o,s,a,c){if(a==="a"&&!c)throw new TypeError("Private accessor was defined without a getter");if(typeof s=="function"?o!==s||!c:!s.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return a==="m"?c:a==="a"?c.call(o):c?c.value:s.get(o)},W$=function(o,s,a,c,u){if(c==="m")throw new TypeError("Private method is not writable");if(c==="a"&&!u)throw new TypeError("Private accessor was defined without a setter");if(typeof s=="function"?o!==s||!u:!s.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return c==="a"?u.call(o,a):u?u.value=a:s.set(o,a),a},V$=function(o,s){if(s===null||typeof s!="object"&&typeof s!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof o=="function"?s===o:o.has(s)},G$=function(o,s,a){if(s!=null){if(typeof s!="object"&&typeof s!="function")throw new TypeError("Object expected.");var c,u;if(a){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=s[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=s[Symbol.dispose],a&&(u=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");u&&(c=function(){try{u.call(this)}catch(d){return Promise.reject(d)}}),o.stack.push({value:s,dispose:c,async:a})}else a&&o.stack.push({async:!0});return s};var i=typeof SuppressedError=="function"?SuppressedError:function(o,s,a){var c=new Error(a);return c.name="SuppressedError",c.error=o,c.suppressed=s,c};z$=function(o){function s(d){o.error=o.hasError?new i(d,o.error,"An error was suppressed during disposal."):d,o.hasError=!0}var a,c=0;function u(){for(;a=o.stack.pop();)try{if(!a.async&&c===1)return c=0,o.stack.push(a),Promise.resolve().then(u);if(a.dispose){var d=a.dispose.call(a.value);if(a.async)return c|=2,Promise.resolve(d).then(u,function(l){return s(l),u()})}else c|=1}catch(l){s(l)}if(c===1)return o.hasError?Promise.reject(o.error):Promise.resolve();if(o.hasError)throw o.error}return u()},K$=function(o,s){return typeof o=="string"&&/^\.\.?\//.test(o)?o.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(a,c,u,d,l){return c?s?".jsx":".js":u&&(!d||!l)?a:u+d+"."+l.toLowerCase()+"js"}):o},t("__extends",b$),t("__assign",w$),t("__rest",I$),t("__decorate",E$),t("__param",k$),t("__esDecorate",R$),t("__runInitializers",A$),t("__propKey",C$),t("__setFunctionName",P$),t("__metadata",_$),t("__awaiter",T$),t("__generator",B$),t("__exportStar",D$),t("__createBinding",Zw),t("__values",Qw),t("__read",u_),t("__spread",N$),t("__spreadArrays",O$),t("__spreadArray",M$),t("__await",Dp),t("__asyncGenerator",L$),t("__asyncDelegator",H$),t("__asyncValues",U$),t("__makeTemplateObject",$$),t("__importStar",F$),t("__importDefault",j$),t("__classPrivateFieldGet",q$),t("__classPrivateFieldSet",W$),t("__classPrivateFieldIn",V$),t("__addDisposableResource",G$),t("__disposeResources",z$),t("__rewriteRelativeImportExtension",K$)})});var X$={};bi(X$,{__addDisposableResource:()=>Lge,__assign:()=>dge,__asyncDelegator:()=>Pge,__asyncGenerator:()=>Cge,__asyncValues:()=>_ge,__await:()=>Age,__awaiter:()=>vge,__classPrivateFieldGet:()=>Nge,__classPrivateFieldIn:()=>Mge,__classPrivateFieldSet:()=>Oge,__createBinding:()=>bge,__decorate:()=>h,__disposeResources:()=>Hge,__esDecorate:()=>pge,__exportStar:()=>Sge,__extends:()=>uge,__generator:()=>xge,__importDefault:()=>Dge,__importStar:()=>Bge,__makeTemplateObject:()=>Tge,__metadata:()=>yge,__param:()=>fge,__propKey:()=>hge,__read:()=>Ige,__rest:()=>lge,__rewriteRelativeImportExtension:()=>Uge,__runInitializers:()=>mge,__setFunctionName:()=>gge,__spread:()=>Ege,__spreadArray:()=>Rge,__spreadArrays:()=>kge,__values:()=>wge,default:()=>$ge});var d_,uge,dge,lge,h,fge,pge,mge,hge,gge,yge,vge,xge,Sge,bge,wge,Ige,Ege,kge,Rge,Age,Cge,Pge,_ge,Tge,Bge,Dge,Nge,Oge,Mge,Lge,Hge,Uge,$ge,fe=N(()=>{d_=tt(J$(),1),{__extends:uge,__assign:dge,__rest:lge,__decorate:h,__param:fge,__esDecorate:pge,__runInitializers:mge,__propKey:hge,__setFunctionName:gge,__metadata:yge,__awaiter:vge,__generator:xge,__exportStar:Sge,__createBinding:bge,__values:wge,__read:Ige,__spread:Ege,__spreadArrays:kge,__spreadArray:Rge,__await:Age,__asyncGenerator:Cge,__asyncDelegator:Pge,__asyncValues:_ge,__makeTemplateObject:Tge,__importStar:Bge,__importDefault:Dge,__classPrivateFieldGet:Nge,__classPrivateFieldSet:Oge,__classPrivateFieldIn:Mge,__addDisposableResource:Lge,__disposeResources:Hge,__rewriteRelativeImportExtension:Uge}=d_.default,$ge=d_.default});var l_=N(()=>{Zi()});var Np={};bi(Np,{decode:()=>p_,encode:()=>f_,format:()=>t7,formats:()=>r7,hex:()=>Qge,is:()=>Z$,normalize:()=>K0,parse:()=>e7});function Wge(t){return t.separators==="none"?[]:!t.separators||t.separators==="common"?qge:t.separators}function Vge(t){if(!t)throw new TypeError("Hex separators must be non-empty strings")}function Gge(t,e,r){for(let n of r)if(t.startsWith(n,e))return n}function zge(t){let e=/[A-F]/.test(t),r=/[a-f]/.test(t);return e&&!r?"upper":"lower"}function Kge(t){let e=/\r\n|\n/.exec(t);if(e)return e[0]===`\r
18
18
  `?`\r
19
19
  `:`
20
20
  `}function Y$(t){return t.replace(/[^0-9a-f]/gi,"")}function Jge(t){let e=t.match(/[0-9A-Fa-f]+|[^0-9A-Fa-f]+/g)??[];if(e.length<3)return;let r=e.filter((s,a)=>a%2===0),n=e.filter((s,a)=>a%2===1),i=n[0];if(!i||n.some(s=>s!==i)||r.some(s=>s.length===0||s.length%2!==0))return;let o=r[0]?.length??0;if(o&&!r.slice(0,-1).some(s=>s.length!==o)&&!((r[r.length-1]?.length??0)>o))return{size:o/2,separator:i}}function Xge(t){let e=t.trim(),r=/^0x/i.test(e)?"0x":"",n=r?e.slice(2):e,i=Kge(n),o=n.split(/\r\n|\n/).filter(u=>u.length>0),s=o[0]?.trim()??"",a=Jge(s),c={case:zge(e),prefix:r};if(a&&(c.group=a),i&&o.length>1){let u=Y$(o[0]??"").length/2;u>0&&o.slice(0,-1).every(d=>Y$(d).length/2===u)&&(c.line={bytesPerLine:u,separator:i})}return c}function Yge(t,e){let r=e.allowPrefix??!0,n=[...Wge(e)].sort((a,c)=>c.length-a.length);for(let a of n)Vge(a);let i=t.trim();if(/^0x/i.test(i)){if(!r)throw new TypeError("Hexadecimal text must not include a 0x prefix");i=i.slice(2)}let o="",s=!1;for(let a=0;a<i.length;){let c=i[a]??"";if(jge.test(c)){o+=c,s=!1,a+=1;continue}let u=Gge(i,a,n);if(!u)throw new TypeError("Input is not valid hexadecimal text");if(e.strict&&(s||o.length===0))throw new TypeError("Hexadecimal text contains misplaced separators");s=!0,a+=u.length}if(e.strict&&s&&o.length>0)throw new TypeError("Hexadecimal text must not end with a separator");if(o.length%2!==0){if(!e.allowOddLength)throw new TypeError("Hexadecimal text must contain an even number of characters");o=`0${o}`}return o.toLowerCase()}function Q$(t,e){if(!e)return t.join("");if(!Number.isInteger(e.size)||e.size<1)throw new RangeError("Hex group size must be a positive integer");let r=[];for(let n=0;n<t.length;n+=e.size)r.push(t.slice(n,n+e.size).join(""));return r.join(e.separator)}function K0(t,e={}){return Yge(t,e)}function Z$(t,e={}){if(typeof t!="string")return!1;try{return K0(t,e),!0}catch{return!1}}function f_(t,e={}){let r=wo(t),n=e.case??"lower",i=Array.from(r,s=>{let a=s.toString(16).padStart(2,"0");return n==="upper"?a.toUpperCase():a}),o="";if(e.line){let s=e.line.bytesPerLine;if(!Number.isInteger(s)||s<1)throw new RangeError("Hex bytesPerLine must be a positive integer");let a=e.line.separator??`
@@ -135,12 +135,12 @@ ${e.join(`
135
135
  `+Object.keys(n).map(i=>`${i}: ${n[i]}`).join(`\r
136
136
  `)+`\r
137
137
  \r
138
- `+r)}function Cf(t,e,r,n,i,o){if(t.listenerCount("wsClientError")){let s=new Error(i);Error.captureStackTrace(s,Cf),t.emit("wsClientError",s,r,e)}else Wx(r,n,i,o)}});var CQ={};bi(CQ,{PerMessageDeflate:()=>IQ.default,Receiver:()=>EQ.default,Sender:()=>kQ.default,WebSocket:()=>mO.default,WebSocketServer:()=>AQ.default,createWebSocketStream:()=>bQ.default,default:()=>TAe,extension:()=>wQ.default,subprotocol:()=>RQ.default});var bQ,wQ,IQ,EQ,kQ,RQ,mO,AQ,TAe,PQ=N(()=>{bQ=tt(fQ(),1),wQ=tt(oR(),1),IQ=tt(wh(),1),EQ=tt(nO(),1),kQ=tt(sO(),1),RQ=tt(fO(),1),mO=tt(uR(),1),AQ=tt(SQ(),1),TAe=mO.default});var ii="[redacted]",e3=new Set(["hunsuBridgeToken","hunsuConnectAccessToken","hunsuConnectRefreshToken","hunsuConnectDeviceCode","token","access_token","refresh_token","authorization","controlToken","bridgeControlToken","code","state"].map(t=>t.toLowerCase())),t3=["hunsuBridgeToken","hunsuConnectAccessToken","hunsuConnectRefreshToken","hunsuConnectDeviceCode","access_token","refresh_token","authorization","controlToken","bridgeControlToken","token","code","state"].join("|"),see=[t3,"apiKey","accessToken","refreshToken","authToken","bridgeAuthToken","controlToken","bridgeControlToken","OPENAI_API_KEY","CODEX_ACCESS_TOKEN"].join("|"),aee=/([?&])([^=&#\s"'<>\\]+)=([^&#\s"'<>\\]*)/giu,cee=new RegExp(`((?:%3f|%26)(?:${t3})(?:%3d|=))((?:(?!%26|%23)[^\\s"'<>\\\\])+)`,"giu"),uee=/("(?:[^"\\]*(?:token|secret|api.?key|authorization|credential|auth\.json|password|cookie)[^"\\]*)"\s*:\s*)("(?:\\.|[^"\\])*"|[^,}\]\s]+)/giu,dee=new RegExp(`(^|[\\s,;])(${see})(\\s*=\\s*)(?:Bearer\\s+)?[^\\s,;&]+`,"gimu");function r3(t){return t.replace(aee,(e,r,n,i)=>{let o=fee(n);return e3.has(o)?`${r}${n}=${a3(i)}`:e})}function $h(t){let e=lee(t);return e!==void 0?e:r3(t).replace(cee,(r,n,i)=>`${n}${a3(i)}`).replace(/sk-[A-Za-z0-9_-]{10,}/gu,ii).replace(/\bhunsu_bridge_[A-Za-z0-9_-]+\b/giu,ii).replace(/\bhunsu_control_[A-Za-z0-9_-]+\b/giu,ii).replace(/(OPENAI_API_KEY|CODEX_ACCESS_TOKEN)(\s*=\s*)(?:"[^"]*"|'[^']*'|\S+)/giu,`$1$2${ii}`).replace(/~\/\.codex\/auth\.json/giu,ii).replace(uee,`$1"${ii}"`).replace(dee,(r,n,i,o)=>`${n}${i}${o}${ii}`).replace(/(Bearer\s+)(?!\[redacted\])[^\s,"'\\]+/giu,`$1${ii}`)}function Xr(t){return HR(t,new WeakSet)}function _s(t){n3(t,new WeakSet)}function HR(t,e){if(typeof t=="string")return $h(t);if(Array.isArray(t)){if(e.has(t))return"[circular]";e.add(t);let n=t.map((i,o)=>s3(t[o-1])?ii:HR(i,e));return e.delete(t),n}if(typeof t!="object"||t===null)return t;if(t instanceof Date)return t.toISOString();if(e.has(t))return"[circular]";e.add(t);let r={};for(let[n,i]of Object.entries(t))r[n]=o3(n,i)?ii:HR(i,e);return e.delete(t),r}function n3(t,e){if(typeof t=="string"){if($h(t)!==t)throw LR();return}if(!(typeof t!="object"||t===null||t instanceof Date)&&!e.has(t)){e.add(t);for(let[r,[n,i]]of Object.entries(t).entries()){if(Array.isArray(t)&&s3(t[r-1])&&i!==ii||o3(n,i)&&i!==ii)throw LR();n3(i,e)}e.delete(t)}}function lee(t){let e=t.trim();if(!(!(e.startsWith("{")&&e.endsWith("}"))&&!(e.startsWith("[")&&e.endsWith("]"))))try{let r=JSON.parse(e);if(typeof r!="object"||r===null)return;let n=Xr(r);return JSON.stringify(r)===JSON.stringify(n)?void 0:JSON.stringify(n)}catch{return}}function fee(t){let e=t.replace(/^amp;/iu,"");try{return decodeURIComponent(e.replace(/\+/gu," ")).toLowerCase()}catch{return e.toLowerCase()}}function i3(t){return/token|secret|api.?key|authorization|credential|auth\.json|password|cookie/iu.test(t)}function o3(t,e){return!(t==="credentialsPresent"&&typeof e=="boolean")&&i3(t)}function s3(t){if(typeof t!="string"||!/^--?[^=]+$/u.test(t))return!1;let e=t.replace(/^--?/u,"").replace(/[-_]/gu,"");return i3(e)||e3.has(e.toLowerCase())}function a3(t){return pee(t)?t:ii}function pee(t){if(t.toLowerCase()===ii)return!0;try{return decodeURIComponent(t).toLowerCase()===ii}catch{return!1}}function LR(){return new Error("Diagnostics contain sensitive data.")}var mee=Object.freeze({production:Object.freeze({webUrl:"https://hunsu.app/studio",connectApiUrl:"https://connect.hunsu.app",connectWsUrl:"wss://connect.hunsu.app/v1/connect/device",connectTicketIssuer:"https://connect.hunsu.app",connectTicketSigningKeyId:"connect-Ea21pgXVRp5WfId1kXKSeyea",connectTicketSigningPublicJwk:Object.freeze({kty:"EC",crv:"P-256",x:"SekGyUfv_HqJlJ35q9uE4cUzM7jWW6V6B7k4_HGy6ck",y:"zY0W0qv5kHQKxF6aynjmy0kGv1XodPwF4MX4yvTW_C8"})}),preview:Object.freeze({webUrl:"https://preview.hunsu.app/studio",connectApiUrl:"https://connect.preview.hunsu.app",connectWsUrl:"wss://connect.preview.hunsu.app/v1/connect/device",connectTicketIssuer:"https://connect.preview.hunsu.app",connectTicketSigningKeyId:"connect-vd_GiPDTK2lPIDS3Y2dDIEck",connectTicketSigningPublicJwk:Object.freeze({kty:"EC",crv:"P-256",x:"DZDAFyOricZ4dOBOhNrNtAS2X_EdqrE2wQxB23raNcc",y:"qLXw7DinTp-5T0i_MdU9jN15Wpnxu0dXh-Owo5ydL1U"})})});function Pn(t){return t==="production"||t==="preview"}function c3(t){return mee[t]}function sS(t){return t==="preview"?"candidate-next":"next"}import{randomBytes as xCe}from"node:crypto";import{mkdir as SCe}from"node:fs/promises";import{isAbsolute as bCe,resolve as wCe}from"node:path";import{homedir as hee}from"node:os";import{join as gee,resolve as l3}from"node:path";var aS="127.0.0.1";var yee="https://hunsu.app/studio",UR={bridgeApi:{name:"bridgeApi",defaultHost:aS,hostEnv:["HUNSU_BRIDGE_HOST","HOST"],defaultPort:19687,portEnv:["HUNSU_BRIDGE_PORT","PORT"],reserved:!1,allowPortZero:!0},studioWeb:{name:"studioWeb",defaultHost:aS,hostEnv:["HUNSU_WEB_HOST"],defaultPort:19688,portEnv:["HUNSU_WEB_PORT"],reserved:!1,allowPortZero:!1},agentPreview:{name:"agentPreview",defaultHost:aS,hostEnv:["HUNSU_AGENT_PREVIEW_HOST"],defaultPort:19673,portEnv:["HUNSU_AGENT_PREVIEW_PORT"],reserved:!0,allowPortZero:!1}};var vee=["read-only","workspace-write","danger-full-access"],xee=["never","on-request","on-failure","untrusted"],See=["user","auto_review"],bee=["deterministic"];function Sn(t){return{ok:!0,value:t}}function _a(t){return{ok:!1,error:t}}function Ta(t,e){return t.ok?Sn(e(t.value)):t}function $o(t,e){return t.ok?e(t.value):t}function Hf(t){if(t.ok)return t.value;throw new Error(t.error.message)}function wee(t,e={}){let r=$R(UR.bridgeApi,t,e.overrides?.bridgeApi);if(!r.ok)return r;let n=$R(UR.studioWeb,t,e.overrides?.studioWeb);if(!n.ok)return n;let i=$R(UR.agentPreview,t,e.overrides?.agentPreview);return i.ok?Sn({bridgeApi:r.value,studioWeb:n.value,agentPreview:i.value}):i}function Iee(t,e){return $o(wee(t,e),r=>kee(r,e.activePortNames))}function f3(t){return Ta(Ree(t,"HUNSU_WEB_URL",yee),e=>({webUrl:e}))}function Rr(){return process.env}function Eee(t){return Ta(Iee(t,{activePortNames:["bridgeApi"]}),e=>({bridgeApi:e.bridgeApi}))}function uS(t,e={}){let r=m3(e.processEnv??t);return $o(Eee(t),({bridgeApi:n})=>$o(Dee(e.roadmapRegistryPath,t,"HUNSU_ROADMAP_REGISTRY_PATH",gee(e.homeDir??hee(),".config","hunsu","roadmaps.json"),e.cwd),i=>$o(jR(e.routeWorktreeRoot,t,"HUNSU_ROUTE_WORKTREE_ROOT",void 0,e.cwd),o=>$o(jR(e.actionWorktreeRoot,t,"HUNSU_ACTION_WORKTREE_ROOT",void 0,e.cwd),s=>$o(cS(t,"HUNSU_BRIDGE_TEST_RUNNER",bee),a=>$o(Fh(t,e.codexAppServer),c=>Ta(Aee(t,e.codexThreadOptions),u=>({bridgeApi:n,processEnv:r,roadmapRegistryPath:i,routeWorktreeRoot:o,actionWorktreeRoot:s,testRunner:a,codexAppServer:c,codexThreadOptions:u}))))))))}function kee(t,e){for(let r=0;r<e.length;r+=1){let n=t[e[r]];if(n.port!==0)for(let i=r+1;i<e.length;i+=1){let o=t[e[i]];if(!(o.port!==n.port||o.port===0)&&Lee(n.host,o.host))return _a({code:"port_conflict",message:`Hunsu port conflict: ${n.name} and ${o.name} both use ${n.host}:${n.port}.`,port:n.port})}}return Sn(t)}function dS(t){return`http://${t.host}:${t.port}`}function Ree(t,e,r){let n=t[e];return Bee(n===void 0||n.trim()===""?r:n,e)}function Fh(t,e={}){let r=e.command??qR(t,["HUNSU_CODEX_APP_SERVER_COMMAND"])?.value??"codex";return r.trim()===""?_a({code:"missing_required_env",env:"HUNSU_CODEX_APP_SERVER_COMMAND",message:"Invalid HUNSU_CODEX_APP_SERVER_COMMAND: expected a non-empty command."}):Ta(Nee(t,e.args),n=>({command:r,args:n,environment:m3(e.environment??t)}))}function Aee(t,e={}){return $o(cS(t,"HUNSU_CODEX_SANDBOX_MODE",vee),r=>$o(cS(t,"HUNSU_CODEX_APPROVAL_POLICY",xee),n=>$o(cS(t,"HUNSU_CODEX_APPROVALS_REVIEWER",See),i=>$o(_ee(t,"HUNSU_CODEX_NETWORK_ACCESS"),o=>Ta(Mee(t,"HUNSU_CODEX_ADDITIONAL_DIRECTORIES"),s=>({...r===void 0?{}:{sandboxMode:r},...n===void 0?{}:{approvalPolicy:n},...i===void 0?{}:{approvalsReviewer:i},...o===void 0?{}:{networkAccessEnabled:o},...s.length===0?{}:{additionalDirectories:s},...e}))))))}function $R(t,e,r){let n=r?.host!==void 0?{value:r.host,source:"override",env:void 0}:qR(e,t.hostEnv)??{value:t.defaultHost,source:"default",env:void 0},i=r?.port!==void 0?Ta(p3(r.port,t,void 0),o=>({value:o,source:"override",env:void 0})):Cee(e,t);return Ta(i,o=>({name:t.name,host:n.value,hostSource:n.source,hostEnv:n.env,port:o.value,portSource:o.source,portEnv:o.env,reserved:t.reserved}))}function Cee(t,e){let r=qR(t,e.portEnv);return r?Ta(p3(r.value,e,r.env),n=>({value:n,source:"env",env:r.env})):Sn({value:e.defaultPort,source:"default"})}function p3(t,e,r){let n=typeof t=="number"?t:Number(t),i=e.allowPortZero?0:1;return!Number.isInteger(n)||n<i||n>65535?_a({code:"invalid_port",env:r,portName:e.name,message:r?`Invalid ${r}: ${t}. Expected an integer port from ${i} to 65535.`:`Invalid ${e.name} port: ${t}. Expected an integer port from ${i} to 65535.`}):Sn(n)}function Pee(t,e){return/^(1|true|yes|on)$/i.test(e)?Sn(!0):/^(0|false|no|off)$/i.test(e)?Sn(!1):_a({code:"invalid_boolean",env:t,message:`Invalid ${t}: ${e}. Expected true, false, 1, 0, yes, no, on, or off.`})}function _ee(t,e){let r=t[e];return r===void 0||r.trim()===""?Sn(void 0):Pee(e,r)}function Tee(t,e,r){return r.includes(e)?Sn(e):_a({code:"invalid_enum",env:t,value:e,allowed:r,message:`Invalid ${t}: ${e}. Expected one of: ${r.join(", ")}.`})}function cS(t,e,r){let n=t[e];return n===void 0||n.trim()===""?Sn(void 0):Tee(e,n,r)}function Bee(t,e){try{let r=new URL(t);if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error("Unsupported protocol");return Sn(r.toString().replace(/\/$/,""))}catch{return _a({code:"invalid_url",env:e,value:t,message:e?`Invalid ${e}: ${t}. Expected an http or https URL.`:`Invalid URL: ${t}. Expected an http or https URL.`})}}function jR(t,e,r,n,i){if(t!==void 0)return FR(t,void 0,i);let o=e[r];return o!==void 0&&o.trim()!==""?FR(o,r,i):n===void 0?Sn(void 0):FR(n,void 0,i)}function Dee(t,e,r,n,i){return Ta(jR(t,e,r,n,i),o=>o??l3(i??".",n))}function FR(t,e,r="."){return t.trim()===""||t.includes("\0")?_a({code:"invalid_path",env:e,path:t,message:e?`Invalid ${e}: expected a non-empty filesystem path.`:"Invalid filesystem path: expected a non-empty path."}):Sn(l3(r,t))}function Nee(t,e){if(e!==void 0)return Sn([...e]);let r=t.HUNSU_CODEX_APP_SERVER_ARGS;return r===void 0||r.trim()===""?Sn(["app-server","--stdio"]):r.trim().startsWith("[")?Oee("HUNSU_CODEX_APP_SERVER_ARGS",r):Sn(r.split(/\s+/).filter(Boolean))}function Oee(t,e){try{let r=JSON.parse(e);if(Array.isArray(r)&&r.every(n=>typeof n=="string"))return Sn(r)}catch{return _a({code:"invalid_json",env:t,value:e,message:`Invalid ${t}: expected a JSON string array.`})}return _a({code:"invalid_json",env:t,value:e,message:`Invalid ${t}: expected a JSON string array.`})}function Mee(t,e){let r=t[e];return Sn(r===void 0||r.trim()===""?[]:r.split(",").map(n=>n.trim()).filter(Boolean))}function m3(t){let e={};for(let[r,n]of Object.entries(t))n!==void 0&&(e[r]=n);return e}function qR(t,e){for(let r of e){let n=t[r];if(n!==void 0&&n.trim()!=="")return{value:n,source:"env",env:r}}}function Lee(t,e){let r=u3(t),n=u3(e);return r===n||d3(r)||d3(n)}function u3(t){let e=t.trim().toLowerCase();return e==="localhost"?aS:e}function d3(t){return t==="0.0.0.0"||t==="::"||t==="[::]"}import{execFile as fce,spawn as pce}from"node:child_process";import{existsSync as Yt,mkdirSync as vo,mkdtempSync as mce,readFileSync as Vs,readdirSync as Xg,realpathSync as hce,renameSync as gce,rmSync as Yg,statSync as Au,writeFileSync as Yo}from"node:fs";import{createHash as ci,randomBytes as yce,timingSafeEqual as vce}from"node:crypto";import{homedir as qs,tmpdir as Jb}from"node:os";import{basename as Qo,dirname as Ai,isAbsolute as Gg,join as at,normalize as FC,relative as jC,resolve as Xn}from"node:path";import{fileURLToPath as xce}from"node:url";import{promisify as Sce}from"node:util";function S(t){return{ok:!0,value:t}}function oe(t){return{ok:!1,error:t}}function Ie(t,e="text"){return typeof t!="string"||t.trim()===""?$f(e,`${e} must be a non-empty string`):S(t)}function lS(t){return fo(t,"title")}function fS(t){return fo(t,"goal")}function h3(t,e="title"){return fo(t,e)}function g3(t,e="acceptanceCriterion"){return fo(t,e)}function y3(t,e="constraint"){return fo(t,e)}function v3(t,e="notes"){return fo(t,e)}function Fo(t,e="summary"){return fo(t,e)}function x3(t,e="evidence"){return fo(t,e)}function jo(t,e="failureReason"){return fo(t,e)}function S3(t,e="risk"){return fo(t,e)}function Hd(t,e="commit"){return fo(t,e)}function cn(t,e="teamName"){return fo(t,e)}function Ba(t,e="number"){return!Number.isInteger(t)||Number(t)<1?$f(e,`${e} must be a positive integer`):S(t)}function b3(t,e="number"){return!Number.isInteger(t)||Number(t)<0?$f(e,`${e} must be a non-negative integer`):S(t)}function uo(t,e="array"){return t.length===0?$f(e,`${e} must include at least one item`):S(t)}function Uf(t,e="array"){return t.length!==1?$f(e,`${e} must include exactly one item`):S(t)}function Vi(t,e){let r=Ie(t,e);return r.ok?/\s/.test(r.value)?$f(e,`${e} must not contain whitespace`):S(r.value):r}function Gi(t){return Vi(t,"requestId")}function lo(t){return Vi(t,"destinationId")}function _n(t){return Vi(t,"moveId")}function qo(t){return Vi(t,"hunsuId")}function jh(t){return Vi(t,"hunsuDraftId")}function dr(t){return Vi(t,"lineId")}function Yr(t){return Vi(t,"nodeId")}function w3(t){return Vi(t,"artifactId")}function I3(t){return Vi(t,"artifactActionId")}function eu(t){return Vi(t,"skillDraftId")}function qh(t){return Vi(t,"agentConversationHash")}function E3(t){return Vi(t,"executeId")}function Ud(t){return Vi(t,"worktreeHash")}function $f(t,e){return oe({type:"PrimitiveValidationError",field:t,message:e})}function fo(t,e){let r=Ie(t,e);return r.ok?S(r.value):r}var lr=class extends Error{constructor(e){super(e),this.name="DomainInvariantError"}};function Ee(t){return oe({type:"DomainWorkflowError",message:t})}function Wh(t){return{type:"DomainWorkflowError",message:t instanceof Error?t.message:String(t)}}function Zt(t){if(t.ok)return t.value;throw new lr(t.error.message)}function Hee(t){return{kind:"direct",provider:{providerId:"codex",model:WR(t.model??"codex-default"),reasoningEffort:t.reasoningEffort??"default",serviceTier:t.serviceTier??"default",experimental:!0}}}function VR(t){let e=t.model??Uee(t.modelSelection),r=t.reasoningEffort??$ee(t.modelSelection),n=t.serviceTier??Fee(t.modelSelection);return{...t,model:e,reasoningEffort:r,serviceTier:n,modelSelection:t.modelSelection??Hee({model:e,reasoningEffort:r,serviceTier:n})}}function k3(t){return t.kind==="direct"?t.provider:void 0}function Uee(t){return t?.kind==="direct"?WR(t.provider.model):WR("codex-default")}function $ee(t){return t?.kind==="direct"?t.provider.reasoningEffort??"default":"default"}function Fee(t){return t?.kind==="direct"?t.provider.serviceTier??"default":"default"}function WR(t){return Zt(Ie(t,"modelSelection.provider.model"))}var pS=["default","minimal","low","medium","high","xhigh"],mS=["default","fast"],R3=["TEAM","DIRECTOR","SYSTEM"],A3=["input","output","context","artifact","final_evidence"],C3=["warn","block"],P3=["majority","unanimous","weighted","coordinator_decides"],_3=["pending","claimed","in_progress","reached","blocked","superseded","canceled"],T3=["initial-execute-team","initial-request","hunsu"],B3=["active","paused","complete","failed","abandoned"],D3=["arrived","accident"],N3=["draft","ready","confirmed","discarded"],O3=["draft","accepted","discarded"],M3=["transcript","command-output","test-log","screenshot","diff-summary","note"],L3=["host","check"],H3=["move","commit","move-or-commit"];var hS="hunsu-template-v1";function Ff(t){return{engine:hS,template:t}}function $d(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return Ee(`${e} must be an object`);let r=t,n=new Set(["engine","template"]),i=Object.keys(r).filter(o=>!n.has(o));return i.length>0?Ee(`${e} has unsupported field: ${i[0]}`):"engine"in r?"template"in r?r.engine!==hS?Ee(`${e}.engine must be ${hS}`):typeof r.template!="string"?Ee(`${e}.template must be a string`):S({engine:hS,template:r.template}):Ee(`${e}.template is required`):Ee(`${e}.engine is required`)}function U3(t,e){let r=$d(t,e);if(!r.ok)throw new lr(r.error.message)}function Vh(t,e){return U3(t,"promptTemplate"),t.template.replace(/\{\{\s*([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[[0-9]+\])*)\s*\}\}/g,(r,n)=>{let i=jee(e,n);if(i==null)throw new lr(`Prompt template value is unavailable: ${n}`);return $3(i)})}function jee(t,e){let r=e.match(/[A-Za-z_$][\w$]*|\[[0-9]+\]/g);if(!r||r.join("").replace(/\]\[/g,"][")==="")return;let n=t;for(let i of r){if(i.startsWith("[")){let o=Number(i.slice(1,-1));if(!Array.isArray(n))return;n=n[o];continue}if(typeof n!="object"||n===null)return;n=n[i]}return n}function $3(t){return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):Array.isArray(t)?t.map($3).join(`
139
- `):typeof t=="object"&&t!==null?JSON.stringify(t):""}var yS="Create a closure-free ExecutionPlan using the available Members.",F3=["Discuss HUNSU changes conversationally and edit only decoded request files under .hunsu-request when a file-backed draft change is needed.","Help the user refine divergent Hunsu changes while preserving the current Execute result as the source of truth."].join(" "),zR={kind:"read_only",network:"disabled"},KR={policy:"never"},qee=["read_only","worktree_write","unrestricted"],Wee=["disabled","enabled"],Vee=["never","on_request"],Gee=["user","auto_review"],zee="root-team";function Gh(t){return Jee(t)}function Fd(t,e="Harness"){let r=Ur(t,e);if(!r.ok)return r;if(typeof r.value.rootTeamId!="string"||r.value.rootTeamId.trim()==="")return Ve(`${e}.rootTeamId must be a non-empty string`);if(!Array.isArray(r.value.executors))return Ve(`${e}.executors must be an array`);if(!Array.isArray(r.value.resources))return Ve(`${e}.resources must be an array`);let n=new Set;for(let[u,d]of r.value.executors.entries()){let l=ute(d,`${e}.executors[${u}]`);if(!l.ok)return l;let f=String(d.id);if(n.has(f))return Ve(`${e}.executors must not include duplicate Executor ${f}`);n.add(f)}if(!r.value.executors.find(u=>{let d=u;return d.id===r.value.rootTeamId&&d.kind==="team"}))return Ve(`${e}.rootTeamId must reference a Team Executor`);let o=new Map,s=new Map;for(let u of r.value.executors){let d=u,l=String(d.id),f=d.kind==="team"?"team":"member";o.set(l,f),f==="team"&&s.set(l,(d.members??[]).map(p=>String(p.executorId)))}for(let[u,d]of r.value.executors.entries()){let l=d;if(l.kind!=="team")continue;let f=l.members;for(let[p,g]of f.entries()){let v=String(g.executorId),b=o.get(v);if(!b)return Ve(`${e}.executors[${u}].members[${p}].executorId references unknown Executor ${g.executorId}`);if(g.visibleProfile.kind!==b)return Ve(`${e}.executors[${u}].members[${p}].visibleProfile.kind must match Executor ${v} kind ${b}`)}}let a=Kee(s);if(a)return Ve(`${e}.executors must not contain cyclic Team Memberships: ${a.join(" -> ")}`);for(let[u,d]of r.value.resources.entries()){let l=gte(d,`${e}.resources[${u}]`);if(!l.ok)return l}let c=r1(r.value.guardrails,`${e}.guardrails`);return c.ok?Array.isArray(r.value.artifactActions)?S(po(r.value)):Ve(`${e}.artifactActions must be an array`):c}function Kee(t){let e=new Set,r=new Set,n=[],i=o=>{if(e.has(o)){let s=n.indexOf(o);return[...n.slice(s),o]}if(!r.has(o)){e.add(o),n.push(o);for(let s of t.get(o)??[]){if(!t.has(s))continue;let a=i(s);if(a)return a}n.pop(),e.delete(o),r.add(o)}};for(let o of t.keys()){let s=i(o);if(s)return s}}function JR(t,e="Member"){let r=Ur(t,e);if(!r.ok)return r;let n=K3(r.value,e);return n.ok?S(wS(r.value)):n}function zh(t,e="Manager"){let r=Ur(t,e);if(!r.ok)return r;let n=cte(r.value,e);return n.ok?S(Ste(r.value)):n}function Jee(t){let e=Ur(t,"Harness");if(!e.ok)return e;let r=ote(e.value);switch(r.kind){case"team_execution_plan":return gS({...r,kind:"team_execution_plan"},"team_execution_plan","maxAttemptCount");case"role_squad":return gS(r,"role_squad","maxRoundCount");case"council_vote":return xte(Ii("council_vote.voteRule",r.voteRule,P3),()=>gS(r,"council_vote","maxRoundCount"));case"court_debate":return gS(r,"court_debate","maxRoundCount");default:return Ve(`Unsupported Harness kind: ${String(r.kind)}`)}}function XR(t){return t.kind==="team_execution_plan"}function vS(t){return XR(t)?S(t):oe({type:"DomainWorkflowError",message:`Harness ${t.kind} is not executable yet`})}function Vn(t="",e=[]){return{kind:"team_execution_plan",maxAttemptCount:Zt(Ba(5,"team_execution_plan.maxAttemptCount")),team:{promptTemplate:Ff(t||yS)},members:[wi("azir","Plan briefly, then implement the focused goal in this repository.",e),wi("galio","Verify the completed work against the focused goal with concrete evidence.",[])]}}function wi(t,e="",r=[],n=zR,i=KR,o=[]){return{id:Zt(Ie(t,"executorId")),promptTemplate:Ff(e),skills:IS(r),plugins:kS(o),model:Zt(Ie("codex-default","member.model")),reasoningEffort:"default",serviceTier:"default",execution:Kh(n),approval:Jh(i)}}function jf(t="manager.hunsu.default",e=F3,r=[],n=[],i){return{id:Zt(Ie(t,"manager.id")),promptTemplate:Ff(e),skills:IS(r),plugins:kS(n),...i?{modelSelection:JSON.parse(JSON.stringify(i))}:{}}}function Ei(t){let e=JSON.parse(JSON.stringify(t));return{...e,guardrails:e.guardrails?.map(r=>({...r})),members:e.members.map(wS)}}function j3(t){let e=JSON.parse(JSON.stringify(t));return{...e,team:{promptTemplate:{...e.team.promptTemplate}},guardrails:e.guardrails?.map(r=>({...r}))}}function q3(t){let e=Ei(t),{members:r,...n}=e;return j3(n)}function Ts(t,e=zee){let r=Xee(e,"rootTeamId"),n=q3(t),i=t.members.map(wS),o=i.map(s=>({executorId:s.id,visibleProfile:Zee(s)}));return{rootTeamId:r,executors:[{kind:"team",id:r,planner:{promptTemplate:{...n.team.promptTemplate},maxAttemptCount:"maxAttemptCount"in n?n.maxAttemptCount:void 0,guardrails:n.guardrails?.map(s=>({...s}))},members:o},...i.map(Qee)],resources:rte(i),guardrails:n.guardrails?.map(s=>({...s}))??[],artifactActions:[]}}function jd(t,e=t.rootTeamId){let r=W3(t,e);if(!r)throw new lr(`Harness does not define Team ${e}`);let n=r.members.map(o=>ete(t,o));return{kind:"team_execution_plan",maxAttemptCount:r.planner.maxAttemptCount??Zt(Ba(5,"team.maxAttemptCount")),guardrails:r.planner.guardrails?.map(o=>({...o})),team:{promptTemplate:{...r.planner.promptTemplate}},members:n}}function tu(t){return jd(t,t.rootTeamId)}function po(t){return{rootTeamId:t.rootTeamId,executors:t.executors.map(QR),resources:t.resources.map(ite),guardrails:t.guardrails.map(e=>({...e})),artifactActions:JSON.parse(JSON.stringify(t.artifactActions))}}function xS(t,e){let r=t.executors.find(n=>n.id===e);return r?QR(r):void 0}function W3(t,e){let r=t.executors.find(n=>n.id===e&&n.kind==="team");return r?QR(r):void 0}function YR(t,e){let r=t.executors.find(n=>n.id===e&&n.kind==="member");return r?G3(r):void 0}function SS(t){let e=VR(t.runtimePolicy);return{id:t.id,promptTemplate:{...t.promptTemplate},skills:t.resources.filter(r=>r.kind==="skill").map(r=>ES(r.skill)),plugins:t.resources.filter(r=>r.kind==="plugin").map(r=>({...r.plugin})),...t.runtimePolicy.modelSelection?{modelSelection:e.modelSelection}:{},model:e.model,reasoningEffort:e.reasoningEffort,serviceTier:e.serviceTier,execution:Kh(e.execution),approval:Jh(e.approval)}}function qf(t,e){return t.members.find(r=>r.id===e)?wS(t.members.find(r=>r.id===e)):void 0}function Xee(t,e){return Zt(Ie(t,e))}function Yee(t){return{...t.modelSelection?{modelSelection:t.modelSelection}:{},model:t.model,reasoningEffort:t.reasoningEffort,serviceTier:t.serviceTier,execution:Kh(t.execution),approval:Jh(t.approval)}}function V3(t){return[...t.skills.map(e=>({kind:"skill",skill:ES(e)})),...(t.plugins??[]).map(e=>({kind:"plugin",plugin:{...e}}))]}function Qee(t){return{kind:"member",id:t.id,promptTemplate:{...t.promptTemplate},resources:V3(t),runtimePolicy:Yee(t)}}function Zee(t){return{kind:"member",label:t.id,summary:Zt(Ie(t.promptTemplate.template||`Member ${t.id}`,"visibleProfile.summary")),capabilities:t.skills.map(e=>e.name)}}function ete(t,e){let r=t.executors.find(n=>n.id===e.executorId);if(!r)throw new lr(`Team Membership references unknown Executor ${e.executorId}`);return r.kind==="member"?SS(r):wi(r.id,tte(e.visibleProfile),[],zR,KR,[])}function tte(t){let e=t.capabilities?.length?`
138
+ `+r)}function Cf(t,e,r,n,i,o){if(t.listenerCount("wsClientError")){let s=new Error(i);Error.captureStackTrace(s,Cf),t.emit("wsClientError",s,r,e)}else Wx(r,n,i,o)}});var CQ={};bi(CQ,{PerMessageDeflate:()=>IQ.default,Receiver:()=>EQ.default,Sender:()=>kQ.default,WebSocket:()=>mO.default,WebSocketServer:()=>AQ.default,createWebSocketStream:()=>bQ.default,default:()=>TAe,extension:()=>wQ.default,subprotocol:()=>RQ.default});var bQ,wQ,IQ,EQ,kQ,RQ,mO,AQ,TAe,PQ=N(()=>{bQ=tt(fQ(),1),wQ=tt(oR(),1),IQ=tt(wh(),1),EQ=tt(nO(),1),kQ=tt(sO(),1),RQ=tt(fO(),1),mO=tt(uR(),1),AQ=tt(SQ(),1),TAe=mO.default});var ii="[redacted]",e4=new Set(["hunsuBridgeToken","hunsuConnectAccessToken","hunsuConnectRefreshToken","hunsuConnectDeviceCode","token","access_token","refresh_token","authorization","controlToken","bridgeControlToken","code","state"].map(t=>t.toLowerCase())),t4=["hunsuBridgeToken","hunsuConnectAccessToken","hunsuConnectRefreshToken","hunsuConnectDeviceCode","access_token","refresh_token","authorization","controlToken","bridgeControlToken","token","code","state"].join("|"),see=[t4,"apiKey","accessToken","refreshToken","authToken","bridgeAuthToken","controlToken","bridgeControlToken","OPENAI_API_KEY","CODEX_ACCESS_TOKEN"].join("|"),aee=/([?&])([^=&#\s"'<>\\]+)=([^&#\s"'<>\\]*)/giu,cee=new RegExp(`((?:%3f|%26)(?:${t4})(?:%3d|=))((?:(?!%26|%23)[^\\s"'<>\\\\])+)`,"giu"),uee=/("(?:[^"\\]*(?:token|secret|api.?key|authorization|credential|auth\.json|password|cookie)[^"\\]*)"\s*:\s*)("(?:\\.|[^"\\])*"|[^,}\]\s]+)/giu,dee=new RegExp(`(^|[\\s,;])(${see})(\\s*=\\s*)(?:Bearer\\s+)?[^\\s,;&]+`,"gimu");function r4(t){return t.replace(aee,(e,r,n,i)=>{let o=fee(n);return e4.has(o)?`${r}${n}=${a4(i)}`:e})}function $h(t){let e=lee(t);return e!==void 0?e:r4(t).replace(cee,(r,n,i)=>`${n}${a4(i)}`).replace(/sk-[A-Za-z0-9_-]{10,}/gu,ii).replace(/\bhunsu_bridge_[A-Za-z0-9_-]+\b/giu,ii).replace(/\bhunsu_control_[A-Za-z0-9_-]+\b/giu,ii).replace(/(OPENAI_API_KEY|CODEX_ACCESS_TOKEN)(\s*=\s*)(?:"[^"]*"|'[^']*'|\S+)/giu,`$1$2${ii}`).replace(/~\/\.codex\/auth\.json/giu,ii).replace(uee,`$1"${ii}"`).replace(dee,(r,n,i,o)=>`${n}${i}${o}${ii}`).replace(/(Bearer\s+)(?!\[redacted\])[^\s,"'\\]+/giu,`$1${ii}`)}function Xr(t){return HR(t,new WeakSet)}function _s(t){n4(t,new WeakSet)}function HR(t,e){if(typeof t=="string")return $h(t);if(Array.isArray(t)){if(e.has(t))return"[circular]";e.add(t);let n=t.map((i,o)=>s4(t[o-1])?ii:HR(i,e));return e.delete(t),n}if(typeof t!="object"||t===null)return t;if(t instanceof Date)return t.toISOString();if(e.has(t))return"[circular]";e.add(t);let r={};for(let[n,i]of Object.entries(t))r[n]=o4(n,i)?ii:HR(i,e);return e.delete(t),r}function n4(t,e){if(typeof t=="string"){if($h(t)!==t)throw LR();return}if(!(typeof t!="object"||t===null||t instanceof Date)&&!e.has(t)){e.add(t);for(let[r,[n,i]]of Object.entries(t).entries()){if(Array.isArray(t)&&s4(t[r-1])&&i!==ii||o4(n,i)&&i!==ii)throw LR();n4(i,e)}e.delete(t)}}function lee(t){let e=t.trim();if(!(!(e.startsWith("{")&&e.endsWith("}"))&&!(e.startsWith("[")&&e.endsWith("]"))))try{let r=JSON.parse(e);if(typeof r!="object"||r===null)return;let n=Xr(r);return JSON.stringify(r)===JSON.stringify(n)?void 0:JSON.stringify(n)}catch{return}}function fee(t){let e=t.replace(/^amp;/iu,"");try{return decodeURIComponent(e.replace(/\+/gu," ")).toLowerCase()}catch{return e.toLowerCase()}}function i4(t){return/token|secret|api.?key|authorization|credential|auth\.json|password|cookie/iu.test(t)}function o4(t,e){return!(t==="credentialsPresent"&&typeof e=="boolean")&&i4(t)}function s4(t){if(typeof t!="string"||!/^--?[^=]+$/u.test(t))return!1;let e=t.replace(/^--?/u,"").replace(/[-_]/gu,"");return i4(e)||e4.has(e.toLowerCase())}function a4(t){return pee(t)?t:ii}function pee(t){if(t.toLowerCase()===ii)return!0;try{return decodeURIComponent(t).toLowerCase()===ii}catch{return!1}}function LR(){return new Error("Diagnostics contain sensitive data.")}var mee=Object.freeze({production:Object.freeze({webUrl:"https://hunsu.app/studio",connectApiUrl:"https://connect.hunsu.app",connectWsUrl:"wss://connect.hunsu.app/v1/connect/device",connectTicketIssuer:"https://connect.hunsu.app",connectTicketSigningKeyId:"connect-Ea21pgXVRp5WfId1kXKSeyea",connectTicketSigningPublicJwk:Object.freeze({kty:"EC",crv:"P-256",x:"SekGyUfv_HqJlJ35q9uE4cUzM7jWW6V6B7k4_HGy6ck",y:"zY0W0qv5kHQKxF6aynjmy0kGv1XodPwF4MX4yvTW_C8"})}),preview:Object.freeze({webUrl:"https://preview.hunsu.app/studio",connectApiUrl:"https://connect.preview.hunsu.app",connectWsUrl:"wss://connect.preview.hunsu.app/v1/connect/device",connectTicketIssuer:"https://connect.preview.hunsu.app",connectTicketSigningKeyId:"connect-vd_GiPDTK2lPIDS3Y2dDIEck",connectTicketSigningPublicJwk:Object.freeze({kty:"EC",crv:"P-256",x:"DZDAFyOricZ4dOBOhNrNtAS2X_EdqrE2wQxB23raNcc",y:"qLXw7DinTp-5T0i_MdU9jN15Wpnxu0dXh-Owo5ydL1U"})})});function Pn(t){return t==="production"||t==="preview"}function c4(t){return mee[t]}function sS(t){return t==="preview"?"candidate-next":"next"}import{randomBytes as xCe}from"node:crypto";import{mkdir as SCe}from"node:fs/promises";import{isAbsolute as bCe,resolve as wCe}from"node:path";import{homedir as hee}from"node:os";import{join as gee,resolve as l4}from"node:path";var aS="127.0.0.1";var yee="https://hunsu.app/studio",UR={bridgeApi:{name:"bridgeApi",defaultHost:aS,hostEnv:["HUNSU_BRIDGE_HOST","HOST"],defaultPort:19687,portEnv:["HUNSU_BRIDGE_PORT","PORT"],reserved:!1,allowPortZero:!0},studioWeb:{name:"studioWeb",defaultHost:aS,hostEnv:["HUNSU_WEB_HOST"],defaultPort:19688,portEnv:["HUNSU_WEB_PORT"],reserved:!1,allowPortZero:!1},agentPreview:{name:"agentPreview",defaultHost:aS,hostEnv:["HUNSU_AGENT_PREVIEW_HOST"],defaultPort:19673,portEnv:["HUNSU_AGENT_PREVIEW_PORT"],reserved:!0,allowPortZero:!1}};var vee=["read-only","workspace-write","danger-full-access"],xee=["never","on-request","on-failure","untrusted"],See=["user","auto_review"],bee=["deterministic"];function Sn(t){return{ok:!0,value:t}}function _a(t){return{ok:!1,error:t}}function Ta(t,e){return t.ok?Sn(e(t.value)):t}function $o(t,e){return t.ok?e(t.value):t}function Hf(t){if(t.ok)return t.value;throw new Error(t.error.message)}function wee(t,e={}){let r=$R(UR.bridgeApi,t,e.overrides?.bridgeApi);if(!r.ok)return r;let n=$R(UR.studioWeb,t,e.overrides?.studioWeb);if(!n.ok)return n;let i=$R(UR.agentPreview,t,e.overrides?.agentPreview);return i.ok?Sn({bridgeApi:r.value,studioWeb:n.value,agentPreview:i.value}):i}function Iee(t,e){return $o(wee(t,e),r=>kee(r,e.activePortNames))}function f4(t){return Ta(Ree(t,"HUNSU_WEB_URL",yee),e=>({webUrl:e}))}function Rr(){return process.env}function Eee(t){return Ta(Iee(t,{activePortNames:["bridgeApi"]}),e=>({bridgeApi:e.bridgeApi}))}function uS(t,e={}){let r=m4(e.processEnv??t);return $o(Eee(t),({bridgeApi:n})=>$o(Dee(e.roadmapRegistryPath,t,"HUNSU_ROADMAP_REGISTRY_PATH",gee(e.homeDir??hee(),".config","hunsu","roadmaps.json"),e.cwd),i=>$o(jR(e.routeWorktreeRoot,t,"HUNSU_ROUTE_WORKTREE_ROOT",void 0,e.cwd),o=>$o(jR(e.actionWorktreeRoot,t,"HUNSU_ACTION_WORKTREE_ROOT",void 0,e.cwd),s=>$o(cS(t,"HUNSU_BRIDGE_TEST_RUNNER",bee),a=>$o(Fh(t,e.codexAppServer),c=>Ta(Aee(t,e.codexThreadOptions),u=>({bridgeApi:n,processEnv:r,roadmapRegistryPath:i,routeWorktreeRoot:o,actionWorktreeRoot:s,testRunner:a,codexAppServer:c,codexThreadOptions:u}))))))))}function kee(t,e){for(let r=0;r<e.length;r+=1){let n=t[e[r]];if(n.port!==0)for(let i=r+1;i<e.length;i+=1){let o=t[e[i]];if(!(o.port!==n.port||o.port===0)&&Lee(n.host,o.host))return _a({code:"port_conflict",message:`Hunsu port conflict: ${n.name} and ${o.name} both use ${n.host}:${n.port}.`,port:n.port})}}return Sn(t)}function dS(t){return`http://${t.host}:${t.port}`}function Ree(t,e,r){let n=t[e];return Bee(n===void 0||n.trim()===""?r:n,e)}function Fh(t,e={}){let r=e.command??qR(t,["HUNSU_CODEX_APP_SERVER_COMMAND"])?.value??"codex";return r.trim()===""?_a({code:"missing_required_env",env:"HUNSU_CODEX_APP_SERVER_COMMAND",message:"Invalid HUNSU_CODEX_APP_SERVER_COMMAND: expected a non-empty command."}):Ta(Nee(t,e.args),n=>({command:r,args:n,environment:m4(e.environment??t)}))}function Aee(t,e={}){return $o(cS(t,"HUNSU_CODEX_SANDBOX_MODE",vee),r=>$o(cS(t,"HUNSU_CODEX_APPROVAL_POLICY",xee),n=>$o(cS(t,"HUNSU_CODEX_APPROVALS_REVIEWER",See),i=>$o(_ee(t,"HUNSU_CODEX_NETWORK_ACCESS"),o=>Ta(Mee(t,"HUNSU_CODEX_ADDITIONAL_DIRECTORIES"),s=>({...r===void 0?{}:{sandboxMode:r},...n===void 0?{}:{approvalPolicy:n},...i===void 0?{}:{approvalsReviewer:i},...o===void 0?{}:{networkAccessEnabled:o},...s.length===0?{}:{additionalDirectories:s},...e}))))))}function $R(t,e,r){let n=r?.host!==void 0?{value:r.host,source:"override",env:void 0}:qR(e,t.hostEnv)??{value:t.defaultHost,source:"default",env:void 0},i=r?.port!==void 0?Ta(p4(r.port,t,void 0),o=>({value:o,source:"override",env:void 0})):Cee(e,t);return Ta(i,o=>({name:t.name,host:n.value,hostSource:n.source,hostEnv:n.env,port:o.value,portSource:o.source,portEnv:o.env,reserved:t.reserved}))}function Cee(t,e){let r=qR(t,e.portEnv);return r?Ta(p4(r.value,e,r.env),n=>({value:n,source:"env",env:r.env})):Sn({value:e.defaultPort,source:"default"})}function p4(t,e,r){let n=typeof t=="number"?t:Number(t),i=e.allowPortZero?0:1;return!Number.isInteger(n)||n<i||n>65535?_a({code:"invalid_port",env:r,portName:e.name,message:r?`Invalid ${r}: ${t}. Expected an integer port from ${i} to 65535.`:`Invalid ${e.name} port: ${t}. Expected an integer port from ${i} to 65535.`}):Sn(n)}function Pee(t,e){return/^(1|true|yes|on)$/i.test(e)?Sn(!0):/^(0|false|no|off)$/i.test(e)?Sn(!1):_a({code:"invalid_boolean",env:t,message:`Invalid ${t}: ${e}. Expected true, false, 1, 0, yes, no, on, or off.`})}function _ee(t,e){let r=t[e];return r===void 0||r.trim()===""?Sn(void 0):Pee(e,r)}function Tee(t,e,r){return r.includes(e)?Sn(e):_a({code:"invalid_enum",env:t,value:e,allowed:r,message:`Invalid ${t}: ${e}. Expected one of: ${r.join(", ")}.`})}function cS(t,e,r){let n=t[e];return n===void 0||n.trim()===""?Sn(void 0):Tee(e,n,r)}function Bee(t,e){try{let r=new URL(t);if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error("Unsupported protocol");return Sn(r.toString().replace(/\/$/,""))}catch{return _a({code:"invalid_url",env:e,value:t,message:e?`Invalid ${e}: ${t}. Expected an http or https URL.`:`Invalid URL: ${t}. Expected an http or https URL.`})}}function jR(t,e,r,n,i){if(t!==void 0)return FR(t,void 0,i);let o=e[r];return o!==void 0&&o.trim()!==""?FR(o,r,i):n===void 0?Sn(void 0):FR(n,void 0,i)}function Dee(t,e,r,n,i){return Ta(jR(t,e,r,n,i),o=>o??l4(i??".",n))}function FR(t,e,r="."){return t.trim()===""||t.includes("\0")?_a({code:"invalid_path",env:e,path:t,message:e?`Invalid ${e}: expected a non-empty filesystem path.`:"Invalid filesystem path: expected a non-empty path."}):Sn(l4(r,t))}function Nee(t,e){if(e!==void 0)return Sn([...e]);let r=t.HUNSU_CODEX_APP_SERVER_ARGS;return r===void 0||r.trim()===""?Sn(["app-server","--stdio"]):r.trim().startsWith("[")?Oee("HUNSU_CODEX_APP_SERVER_ARGS",r):Sn(r.split(/\s+/).filter(Boolean))}function Oee(t,e){try{let r=JSON.parse(e);if(Array.isArray(r)&&r.every(n=>typeof n=="string"))return Sn(r)}catch{return _a({code:"invalid_json",env:t,value:e,message:`Invalid ${t}: expected a JSON string array.`})}return _a({code:"invalid_json",env:t,value:e,message:`Invalid ${t}: expected a JSON string array.`})}function Mee(t,e){let r=t[e];return Sn(r===void 0||r.trim()===""?[]:r.split(",").map(n=>n.trim()).filter(Boolean))}function m4(t){let e={};for(let[r,n]of Object.entries(t))n!==void 0&&(e[r]=n);return e}function qR(t,e){for(let r of e){let n=t[r];if(n!==void 0&&n.trim()!=="")return{value:n,source:"env",env:r}}}function Lee(t,e){let r=u4(t),n=u4(e);return r===n||d4(r)||d4(n)}function u4(t){let e=t.trim().toLowerCase();return e==="localhost"?aS:e}function d4(t){return t==="0.0.0.0"||t==="::"||t==="[::]"}import{execFile as fce,spawn as pce}from"node:child_process";import{existsSync as Yt,mkdirSync as vo,mkdtempSync as mce,readFileSync as Vs,readdirSync as Xg,realpathSync as hce,renameSync as gce,rmSync as Yg,statSync as Au,writeFileSync as Yo}from"node:fs";import{createHash as ci,randomBytes as yce,timingSafeEqual as vce}from"node:crypto";import{homedir as qs,tmpdir as Jb}from"node:os";import{basename as Qo,dirname as Ai,isAbsolute as Gg,join as at,normalize as FC,relative as jC,resolve as Xn}from"node:path";import{fileURLToPath as xce}from"node:url";import{promisify as Sce}from"node:util";function S(t){return{ok:!0,value:t}}function oe(t){return{ok:!1,error:t}}function Ie(t,e="text"){return typeof t!="string"||t.trim()===""?$f(e,`${e} must be a non-empty string`):S(t)}function lS(t){return fo(t,"title")}function fS(t){return fo(t,"goal")}function h4(t,e="title"){return fo(t,e)}function g4(t,e="acceptanceCriterion"){return fo(t,e)}function y4(t,e="constraint"){return fo(t,e)}function v4(t,e="notes"){return fo(t,e)}function Fo(t,e="summary"){return fo(t,e)}function x4(t,e="evidence"){return fo(t,e)}function jo(t,e="failureReason"){return fo(t,e)}function S4(t,e="risk"){return fo(t,e)}function Hd(t,e="commit"){return fo(t,e)}function cn(t,e="teamName"){return fo(t,e)}function Ba(t,e="number"){return!Number.isInteger(t)||Number(t)<1?$f(e,`${e} must be a positive integer`):S(t)}function b4(t,e="number"){return!Number.isInteger(t)||Number(t)<0?$f(e,`${e} must be a non-negative integer`):S(t)}function uo(t,e="array"){return t.length===0?$f(e,`${e} must include at least one item`):S(t)}function Uf(t,e="array"){return t.length!==1?$f(e,`${e} must include exactly one item`):S(t)}function Vi(t,e){let r=Ie(t,e);return r.ok?/\s/.test(r.value)?$f(e,`${e} must not contain whitespace`):S(r.value):r}function Gi(t){return Vi(t,"requestId")}function lo(t){return Vi(t,"destinationId")}function _n(t){return Vi(t,"moveId")}function qo(t){return Vi(t,"hunsuId")}function jh(t){return Vi(t,"hunsuDraftId")}function dr(t){return Vi(t,"lineId")}function Yr(t){return Vi(t,"nodeId")}function w4(t){return Vi(t,"artifactId")}function I4(t){return Vi(t,"artifactActionId")}function eu(t){return Vi(t,"skillDraftId")}function qh(t){return Vi(t,"agentConversationHash")}function E4(t){return Vi(t,"executeId")}function Ud(t){return Vi(t,"worktreeHash")}function $f(t,e){return oe({type:"PrimitiveValidationError",field:t,message:e})}function fo(t,e){let r=Ie(t,e);return r.ok?S(r.value):r}var lr=class extends Error{constructor(e){super(e),this.name="DomainInvariantError"}};function Ee(t){return oe({type:"DomainWorkflowError",message:t})}function Wh(t){return{type:"DomainWorkflowError",message:t instanceof Error?t.message:String(t)}}function Zt(t){if(t.ok)return t.value;throw new lr(t.error.message)}function Hee(t){return{kind:"direct",provider:{providerId:"codex",model:WR(t.model??"codex-default"),reasoningEffort:t.reasoningEffort??"default",serviceTier:t.serviceTier??"default",experimental:!0}}}function VR(t){let e=t.model??Uee(t.modelSelection),r=t.reasoningEffort??$ee(t.modelSelection),n=t.serviceTier??Fee(t.modelSelection);return{...t,model:e,reasoningEffort:r,serviceTier:n,modelSelection:t.modelSelection??Hee({model:e,reasoningEffort:r,serviceTier:n})}}function k4(t){return t.kind==="direct"?t.provider:void 0}function Uee(t){return t?.kind==="direct"?WR(t.provider.model):WR("codex-default")}function $ee(t){return t?.kind==="direct"?t.provider.reasoningEffort??"default":"default"}function Fee(t){return t?.kind==="direct"?t.provider.serviceTier??"default":"default"}function WR(t){return Zt(Ie(t,"modelSelection.provider.model"))}var pS=["default","minimal","low","medium","high","xhigh"],mS=["default","fast"],R4=["TEAM","DIRECTOR","SYSTEM"],A4=["input","output","context","artifact","final_evidence"],C4=["warn","block"],P4=["majority","unanimous","weighted","coordinator_decides"],_4=["pending","claimed","in_progress","reached","blocked","superseded","canceled"],T4=["initial-execute-team","initial-request","hunsu"],B4=["active","paused","complete","failed","abandoned"],D4=["arrived","accident"],N4=["draft","ready","confirmed","discarded"],O4=["draft","accepted","discarded"],M4=["transcript","command-output","test-log","screenshot","diff-summary","note"],L4=["host","check"],H4=["move","commit","move-or-commit"];var hS="hunsu-template-v1";function Ff(t){return{engine:hS,template:t}}function $d(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return Ee(`${e} must be an object`);let r=t,n=new Set(["engine","template"]),i=Object.keys(r).filter(o=>!n.has(o));return i.length>0?Ee(`${e} has unsupported field: ${i[0]}`):"engine"in r?"template"in r?r.engine!==hS?Ee(`${e}.engine must be ${hS}`):typeof r.template!="string"?Ee(`${e}.template must be a string`):S({engine:hS,template:r.template}):Ee(`${e}.template is required`):Ee(`${e}.engine is required`)}function U4(t,e){let r=$d(t,e);if(!r.ok)throw new lr(r.error.message)}function Vh(t,e){return U4(t,"promptTemplate"),t.template.replace(/\{\{\s*([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[[0-9]+\])*)\s*\}\}/g,(r,n)=>{let i=jee(e,n);if(i==null)throw new lr(`Prompt template value is unavailable: ${n}`);return $4(i)})}function jee(t,e){let r=e.match(/[A-Za-z_$][\w$]*|\[[0-9]+\]/g);if(!r||r.join("").replace(/\]\[/g,"][")==="")return;let n=t;for(let i of r){if(i.startsWith("[")){let o=Number(i.slice(1,-1));if(!Array.isArray(n))return;n=n[o];continue}if(typeof n!="object"||n===null)return;n=n[i]}return n}function $4(t){return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):Array.isArray(t)?t.map($4).join(`
139
+ `):typeof t=="object"&&t!==null?JSON.stringify(t):""}var yS="Create a closure-free ExecutionPlan using the available Members.",F4=["Discuss HUNSU changes conversationally and edit only decoded request files under .hunsu-request when a file-backed draft change is needed.","Help the user refine divergent Hunsu changes while preserving the current Execute result as the source of truth."].join(" "),zR={kind:"read_only",network:"disabled"},KR={policy:"never"},qee=["read_only","worktree_write","unrestricted"],Wee=["disabled","enabled"],Vee=["never","on_request"],Gee=["user","auto_review"],zee="root-team";function Gh(t){return Jee(t)}function Fd(t,e="Harness"){let r=Ur(t,e);if(!r.ok)return r;if(typeof r.value.rootTeamId!="string"||r.value.rootTeamId.trim()==="")return Ve(`${e}.rootTeamId must be a non-empty string`);if(!Array.isArray(r.value.executors))return Ve(`${e}.executors must be an array`);if(!Array.isArray(r.value.resources))return Ve(`${e}.resources must be an array`);let n=new Set;for(let[u,d]of r.value.executors.entries()){let l=ute(d,`${e}.executors[${u}]`);if(!l.ok)return l;let f=String(d.id);if(n.has(f))return Ve(`${e}.executors must not include duplicate Executor ${f}`);n.add(f)}if(!r.value.executors.find(u=>{let d=u;return d.id===r.value.rootTeamId&&d.kind==="team"}))return Ve(`${e}.rootTeamId must reference a Team Executor`);let o=new Map,s=new Map;for(let u of r.value.executors){let d=u,l=String(d.id),f=d.kind==="team"?"team":"member";o.set(l,f),f==="team"&&s.set(l,(d.members??[]).map(p=>String(p.executorId)))}for(let[u,d]of r.value.executors.entries()){let l=d;if(l.kind!=="team")continue;let f=l.members;for(let[p,g]of f.entries()){let v=String(g.executorId),b=o.get(v);if(!b)return Ve(`${e}.executors[${u}].members[${p}].executorId references unknown Executor ${g.executorId}`);if(g.visibleProfile.kind!==b)return Ve(`${e}.executors[${u}].members[${p}].visibleProfile.kind must match Executor ${v} kind ${b}`)}}let a=Kee(s);if(a)return Ve(`${e}.executors must not contain cyclic Team Memberships: ${a.join(" -> ")}`);for(let[u,d]of r.value.resources.entries()){let l=gte(d,`${e}.resources[${u}]`);if(!l.ok)return l}let c=r1(r.value.guardrails,`${e}.guardrails`);return c.ok?Array.isArray(r.value.artifactActions)?S(po(r.value)):Ve(`${e}.artifactActions must be an array`):c}function Kee(t){let e=new Set,r=new Set,n=[],i=o=>{if(e.has(o)){let s=n.indexOf(o);return[...n.slice(s),o]}if(!r.has(o)){e.add(o),n.push(o);for(let s of t.get(o)??[]){if(!t.has(s))continue;let a=i(s);if(a)return a}n.pop(),e.delete(o),r.add(o)}};for(let o of t.keys()){let s=i(o);if(s)return s}}function JR(t,e="Member"){let r=Ur(t,e);if(!r.ok)return r;let n=K4(r.value,e);return n.ok?S(wS(r.value)):n}function zh(t,e="Manager"){let r=Ur(t,e);if(!r.ok)return r;let n=cte(r.value,e);return n.ok?S(Ste(r.value)):n}function Jee(t){let e=Ur(t,"Harness");if(!e.ok)return e;let r=ote(e.value);switch(r.kind){case"team_execution_plan":return gS({...r,kind:"team_execution_plan"},"team_execution_plan","maxAttemptCount");case"role_squad":return gS(r,"role_squad","maxRoundCount");case"council_vote":return xte(Ii("council_vote.voteRule",r.voteRule,P4),()=>gS(r,"council_vote","maxRoundCount"));case"court_debate":return gS(r,"court_debate","maxRoundCount");default:return Ve(`Unsupported Harness kind: ${String(r.kind)}`)}}function XR(t){return t.kind==="team_execution_plan"}function vS(t){return XR(t)?S(t):oe({type:"DomainWorkflowError",message:`Harness ${t.kind} is not executable yet`})}function Vn(t="",e=[]){return{kind:"team_execution_plan",maxAttemptCount:Zt(Ba(5,"team_execution_plan.maxAttemptCount")),team:{promptTemplate:Ff(t||yS)},members:[wi("azir","Plan briefly, then implement the focused goal in this repository.",e),wi("galio","Verify the completed work against the focused goal with concrete evidence.",[])]}}function wi(t,e="",r=[],n=zR,i=KR,o=[]){return{id:Zt(Ie(t,"executorId")),promptTemplate:Ff(e),skills:IS(r),plugins:kS(o),model:Zt(Ie("codex-default","member.model")),reasoningEffort:"default",serviceTier:"default",execution:Kh(n),approval:Jh(i)}}function jf(t="manager.hunsu.default",e=F4,r=[],n=[],i){return{id:Zt(Ie(t,"manager.id")),promptTemplate:Ff(e),skills:IS(r),plugins:kS(n),...i?{modelSelection:JSON.parse(JSON.stringify(i))}:{}}}function Ei(t){let e=JSON.parse(JSON.stringify(t));return{...e,guardrails:e.guardrails?.map(r=>({...r})),members:e.members.map(wS)}}function j4(t){let e=JSON.parse(JSON.stringify(t));return{...e,team:{promptTemplate:{...e.team.promptTemplate}},guardrails:e.guardrails?.map(r=>({...r}))}}function q4(t){let e=Ei(t),{members:r,...n}=e;return j4(n)}function Ts(t,e=zee){let r=Xee(e,"rootTeamId"),n=q4(t),i=t.members.map(wS),o=i.map(s=>({executorId:s.id,visibleProfile:Zee(s)}));return{rootTeamId:r,executors:[{kind:"team",id:r,planner:{promptTemplate:{...n.team.promptTemplate},maxAttemptCount:"maxAttemptCount"in n?n.maxAttemptCount:void 0,guardrails:n.guardrails?.map(s=>({...s}))},members:o},...i.map(Qee)],resources:rte(i),guardrails:n.guardrails?.map(s=>({...s}))??[],artifactActions:[]}}function jd(t,e=t.rootTeamId){let r=W4(t,e);if(!r)throw new lr(`Harness does not define Team ${e}`);let n=r.members.map(o=>ete(t,o));return{kind:"team_execution_plan",maxAttemptCount:r.planner.maxAttemptCount??Zt(Ba(5,"team.maxAttemptCount")),guardrails:r.planner.guardrails?.map(o=>({...o})),team:{promptTemplate:{...r.planner.promptTemplate}},members:n}}function tu(t){return jd(t,t.rootTeamId)}function po(t){return{rootTeamId:t.rootTeamId,executors:t.executors.map(QR),resources:t.resources.map(ite),guardrails:t.guardrails.map(e=>({...e})),artifactActions:JSON.parse(JSON.stringify(t.artifactActions))}}function xS(t,e){let r=t.executors.find(n=>n.id===e);return r?QR(r):void 0}function W4(t,e){let r=t.executors.find(n=>n.id===e&&n.kind==="team");return r?QR(r):void 0}function YR(t,e){let r=t.executors.find(n=>n.id===e&&n.kind==="member");return r?G4(r):void 0}function SS(t){let e=VR(t.runtimePolicy);return{id:t.id,promptTemplate:{...t.promptTemplate},skills:t.resources.filter(r=>r.kind==="skill").map(r=>ES(r.skill)),plugins:t.resources.filter(r=>r.kind==="plugin").map(r=>({...r.plugin})),...t.runtimePolicy.modelSelection?{modelSelection:e.modelSelection}:{},model:e.model,reasoningEffort:e.reasoningEffort,serviceTier:e.serviceTier,execution:Kh(e.execution),approval:Jh(e.approval)}}function qf(t,e){return t.members.find(r=>r.id===e)?wS(t.members.find(r=>r.id===e)):void 0}function Xee(t,e){return Zt(Ie(t,e))}function Yee(t){return{...t.modelSelection?{modelSelection:t.modelSelection}:{},model:t.model,reasoningEffort:t.reasoningEffort,serviceTier:t.serviceTier,execution:Kh(t.execution),approval:Jh(t.approval)}}function V4(t){return[...t.skills.map(e=>({kind:"skill",skill:ES(e)})),...(t.plugins??[]).map(e=>({kind:"plugin",plugin:{...e}}))]}function Qee(t){return{kind:"member",id:t.id,promptTemplate:{...t.promptTemplate},resources:V4(t),runtimePolicy:Yee(t)}}function Zee(t){return{kind:"member",label:t.id,summary:Zt(Ie(t.promptTemplate.template||`Member ${t.id}`,"visibleProfile.summary")),capabilities:t.skills.map(e=>e.name)}}function ete(t,e){let r=t.executors.find(n=>n.id===e.executorId);if(!r)throw new lr(`Team Membership references unknown Executor ${e.executorId}`);return r.kind==="member"?SS(r):wi(r.id,tte(e.visibleProfile),[],zR,KR,[])}function tte(t){let e=t.capabilities?.length?`
140
140
  Capabilities:
141
141
  ${t.capabilities.map(r=>`- ${r}`).join(`
142
142
  `)}`:"";return[t.kind==="team"?"Composite Team Executor.":"Member Executor.",t.label?`Label: ${t.label}`:void 0,t.summary?`Summary: ${t.summary}`:void 0,e||void 0].filter(Boolean).join(`
143
- `)}function rte(t){let e=[],r=new Set;for(let n of t)for(let i of V3(n)){let o=nte(n.id,i);r.has(o)||(r.add(o),e.push({id:o,binding:i}))}return e}function nte(t,e){return e.kind==="skill"?`resource.${t}.skill.${e.skill.name}`:e.kind==="plugin"?`resource.${t}.plugin.${e.plugin.id}`:`resource.${t}.package.${e.lock.kind}.${e.lock.key}.${e.lock.version}`}function QR(t){return t.kind==="member"?{...G3(t),packageLock:t.packageLock?{...t.packageLock}:void 0}:{...t,planner:{promptTemplate:{...t.planner.promptTemplate},maxAttemptCount:t.planner.maxAttemptCount,guardrails:t.planner.guardrails?.map(e=>({...e}))},members:t.members.map(e=>({executorId:e.executorId,visibleProfile:{...e.visibleProfile,capabilities:e.visibleProfile.capabilities?[...e.visibleProfile.capabilities]:void 0}})),packageLock:t.packageLock?{...t.packageLock}:void 0}}function G3(t){let e=VR(t.runtimePolicy);return{kind:"member",id:t.id,promptTemplate:{...t.promptTemplate},resources:t.resources.map(z3),runtimePolicy:{...t.runtimePolicy.modelSelection?{modelSelection:e.modelSelection}:{},model:e.model,reasoningEffort:e.reasoningEffort,serviceTier:e.serviceTier,execution:Kh(e.execution),approval:Jh(e.approval)}}}function z3(t){return t.kind==="skill"?{kind:"skill",skill:ES(t.skill)}:t.kind==="plugin"?{kind:"plugin",plugin:{...t.plugin}}:{kind:"package",lock:{...t.lock}}}function ite(t){return{id:t.id,binding:z3(t.binding),packageLock:t.packageLock?{...t.packageLock}:void 0}}function gS(t,e,r){for(let n of[Q3(t[r],`${e}.${r}`),r1(t.guardrails,`${e}.guardrails`),ste(t.team,`${e}.team`),ate(t.members,`${e}.members`,!0)])if(!n.ok)return n;return S(Ei(t))}function ote(t){return t.kind==="team_execution_plan"?{...t,kind:"team_execution_plan"}:t}function ZR(t,e){let r=Ur(t,e);if(!r.ok)return r;if(r.value.kind!=="local-snapshot"&&r.value.kind!=="local-root-installed"&&r.value.kind!=="registry-package"&&r.value.kind!=="skillMeta")return Ve(`${e}.kind must be local-snapshot, local-root-installed, registry-package, or skillMeta`);if(typeof r.value.name!="string"||r.value.name.trim()==="")return Ve(`${e}.name must be a non-empty string`);if(r.value.kind==="skillMeta"){let n=yte(r.value,["agent","kind","name","source"],e);return n.ok?typeof r.value.source!="string"||r.value.source.trim()===""?Ve(`${e}.source must be a non-empty string`):r.value.agent!=="codex"?Ve(`${e}.agent must be codex`):S(void 0):n}if(r.value.kind==="local-root-installed")return r.value.sourcePath!==void 0&&(typeof r.value.sourcePath!="string"||r.value.sourcePath.trim()==="")?Ve(`${e}.sourcePath must be a non-empty string when provided`):S(void 0);if(r.value.kind==="local-snapshot"){for(let n of["sourcePath","contentHash","snapshotRef"])if(typeof r.value[n]!="string"||r.value[n].trim()==="")return Ve(`${e}.${n} must be a non-empty string`);if(r.value.snapshotFiles!==void 0){if(!Array.isArray(r.value.snapshotFiles))return Ve(`${e}.snapshotFiles must be an array`);for(let[n,i]of r.value.snapshotFiles.entries()){let o=Ur(i,`${e}.snapshotFiles[${n}]`);if(!o.ok)return o;if(typeof o.value.path!="string"||o.value.path.trim()==="")return Ve(`${e}.snapshotFiles[${n}].path must be a non-empty string`);if(typeof o.value.text!="string")return Ve(`${e}.snapshotFiles[${n}].text must be a string`)}}return S(void 0)}if(r.value.registryKind!=="apm")return Ve(`${e}.registryKind must be apm`);for(let n of["registry","package","version","integrity","contentHash"])if(typeof r.value[n]!="string"||r.value[n].trim()==="")return Ve(`${e}.${n} must be a non-empty string`);return bte(String(r.value.version))?r.value.snapshotFiles!==void 0?Ve(`${e}.snapshotFiles is not supported for registry-package skills`):S(void 0):Ve(`${e}.version must be an exact semver version`)}function e1(t,e){let r=Ur(t,e);return r.ok?r.value.kind!=="local-root-installed"?Ve(`${e}.kind must be local-root-installed`):typeof r.value.id!="string"||r.value.id.trim()===""?Ve(`${e}.id must be a non-empty string`):S(void 0):r}function ste(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=$d(r.value.promptTemplate,`${e}.promptTemplate`);return n.ok?S(void 0):n}function ate(t,e,r){if(!Array.isArray(t))return Ve(`${e} must be an array`);if(r&&t.length===0)return Ve(`${e} must include at least one Member`);let n=new Set;for(let[i,o]of t.entries()){let s=Ur(o,`${e}[${i}]`);if(!s.ok)return s;let a=K3(s.value,`${e}[${i}]`);if(!a.ok)return a;let c=String(s.value.id);if(n.has(c))return Ve(`${e} must not include duplicate Member ${c}`);n.add(c)}return S(void 0)}function K3(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=$d(t.promptTemplate,`${e}.promptTemplate`);if(!r.ok)return r;if(typeof t.model!="string"||t.model.trim()==="")return Ve(`${e}.model must be a non-empty string`);for(let n of[t1(t.modelSelection,`${e}.modelSelection`,!0),Ii(`${e}.reasoningEffort`,t.reasoningEffort,pS),t.serviceTier===void 0?S(void 0):Ii(`${e}.serviceTier`,t.serviceTier,mS),X3(t.execution,`${e}.execution`),Y3(t.approval,`${e}.approval`)])if(!n.ok)return n;if(!Array.isArray(t.skills))return Ve(`${e}.skills must be an array`);for(let[n,i]of t.skills.entries()){let o=ZR(i,`${e}.skills[${n}]`);if(!o.ok)return o}if(t.plugins!==void 0){if(!Array.isArray(t.plugins))return Ve(`${e}.plugins must be an array`);for(let[n,i]of t.plugins.entries()){let o=e1(i,`${e}.plugins[${n}]`);if(!o.ok)return o}}return S(void 0)}function cte(t,e){let r=vte(t,["id","plugins","promptTemplate","skills"],["modelSelection"],e);if(!r.ok)return r;if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let n=$d(t.promptTemplate,`${e}.promptTemplate`);if(!n.ok)return n;let i=t1(t.modelSelection,`${e}.modelSelection`,!0);if(!i.ok)return i;if(!Array.isArray(t.skills))return Ve(`${e}.skills must be an array`);for(let[o,s]of t.skills.entries()){let a=ZR(s,`${e}.skills[${o}]`);if(!a.ok)return a}if(!Array.isArray(t.plugins))return Ve(`${e}.plugins must be an array`);for(let[o,s]of t.plugins.entries()){let a=e1(s,`${e}.plugins[${o}]`);if(!a.ok)return a}return S(void 0)}function ute(t,e){let r=Ur(t,e);return r.ok?r.value.kind==="team"?dte(r.value,e):r.value.kind==="member"?mte(r.value,e):Ve(`${e}.kind must be team or member`):r}function dte(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=lte(t.planner,`${e}.planner`);if(!r.ok)return r;if(!Array.isArray(t.members))return Ve(`${e}.members must be an array`);let n=new Set;for(let[i,o]of t.members.entries()){let s=fte(o,`${e}.members[${i}]`);if(!s.ok)return s;let a=String(o.executorId);if(n.has(a))return Ve(`${e}.members must not include duplicate Membership ${a}`);n.add(a)}return bS(t.packageLock,`${e}.packageLock`)}function lte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=$d(r.value.promptTemplate,`${e}.promptTemplate`);if(!n.ok)return n;if(r.value.maxAttemptCount!==void 0){let i=Q3(r.value.maxAttemptCount,`${e}.maxAttemptCount`);if(!i.ok)return i}return r1(r.value.guardrails,`${e}.guardrails`)}function fte(t,e){let r=Ur(t,e);return r.ok?typeof r.value.executorId!="string"||r.value.executorId.trim()===""?Ve(`${e}.executorId must be a non-empty string`):pte(r.value.visibleProfile,`${e}.visibleProfile`):r}function pte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.kind`,r.value.kind,["team","member"]);if(!n.ok)return n;for(let i of["label","summary"])if(r.value[i]!==void 0&&(typeof r.value[i]!="string"||String(r.value[i]).trim()===""))return Ve(`${e}.${i} must be a non-empty string when provided`);if(r.value.capabilities!==void 0){if(!Array.isArray(r.value.capabilities))return Ve(`${e}.capabilities must be an array`);for(let[i,o]of r.value.capabilities.entries())if(typeof o!="string"||o.trim()==="")return Ve(`${e}.capabilities[${i}] must be a non-empty string`)}return S(void 0)}function mte(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=$d(t.promptTemplate,`${e}.promptTemplate`);if(!r.ok)return r;if(!Array.isArray(t.resources))return Ve(`${e}.resources must be an array`);for(let[i,o]of t.resources.entries()){let s=J3(o,`${e}.resources[${i}]`);if(!s.ok)return s}let n=hte(t.runtimePolicy,`${e}.runtimePolicy`);return n.ok?bS(t.packageLock,`${e}.packageLock`):n}function hte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=t1(r.value.modelSelection,`${e}.modelSelection`,!0);if(!n.ok)return n;let i=r.value.modelSelection!==void 0;if(r.value.model!==void 0&&(typeof r.value.model!="string"||r.value.model.trim()===""))return Ve(`${e}.model must be a non-empty string when provided`);if(r.value.model===void 0&&!i)return Ve(`${e}.modelSelection or ${e}.model must be provided`);for(let o of[r.value.reasoningEffort===void 0&&i?S(void 0):Ii(`${e}.reasoningEffort`,r.value.reasoningEffort,pS),r.value.serviceTier===void 0?S(void 0):Ii(`${e}.serviceTier`,r.value.serviceTier,mS),X3(r.value.execution,`${e}.execution`),Y3(r.value.approval,`${e}.approval`)])if(!o.ok)return o;return S(void 0)}function t1(t,e,r=!1){if(t===void 0&&r)return S(void 0);let n=Ur(t,e);if(!n.ok)return n;if(n.value.kind==="alias")return GR(n.value.aliasId,`${e}.aliasId`);if(n.value.kind!=="direct")return Ve(`${e}.kind must be direct or alias`);let i=Ur(n.value.provider,`${e}.provider`);if(!i.ok)return i;for(let o of[GR(i.value.providerId,`${e}.provider.providerId`),GR(i.value.model,`${e}.provider.model`),i.value.reasoningEffort===void 0?S(void 0):Ii(`${e}.provider.reasoningEffort`,i.value.reasoningEffort,pS),i.value.serviceTier===void 0?S(void 0):Ii(`${e}.provider.serviceTier`,i.value.serviceTier,mS)])if(!o.ok)return o;if(i.value.experimental!==void 0&&typeof i.value.experimental!="boolean")return Ve(`${e}.provider.experimental must be a boolean when provided`);if(i.value.providerId==="codex"&&i.value.experimental!==!0){if(i.value.model==="gpt-5.5-thinking"&&i.value.reasoningEffort!=="high"&&i.value.reasoningEffort!=="xhigh")return Ve(`${e}.provider.reasoningEffort must be high or xhigh for gpt-5.5-thinking`);if(i.value.model==="gpt-5.5"&&(i.value.reasoningEffort==="minimal"||i.value.reasoningEffort==="xhigh"))return Ve(`${e}.provider.reasoningEffort is not supported for gpt-5.5`)}return S(void 0)}function GR(t,e){return typeof t=="string"&&t.trim()!==""?S(void 0):Ve(`${e} must be a non-empty string`)}function gte(t,e){let r=Ur(t,e);if(!r.ok)return r;if(typeof r.value.id!="string"||r.value.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let n=J3(r.value.binding,`${e}.binding`);return n.ok?bS(r.value.packageLock,`${e}.packageLock`):n}function J3(t,e){let r=Ur(t,e);return r.ok?r.value.kind==="skill"?ZR(r.value.skill,`${e}.skill`):r.value.kind==="plugin"?e1(r.value.plugin,`${e}.plugin`):r.value.kind==="package"?bS(r.value.lock,`${e}.lock`):Ve(`${e}.kind must be skill, plugin, or package`):r}function bS(t,e){if(t===void 0)return S(void 0);let r=Ur(t,e);if(!r.ok)return r;for(let n of["origin","kind","key","version","integrity"])if(typeof r.value[n]!="string"||String(r.value[n]).trim()==="")return Ve(`${e}.${n} must be a non-empty string`);return S(void 0)}function X3(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.kind`,r.value.kind,qee);if(!n.ok)return n;let i=Ii(`${e}.network`,r.value.network,Wee);return i.ok?S(void 0):i}function Y3(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.policy`,r.value.policy,Vee);if(!n.ok)return n;if(r.value.policy==="on_request"){let i=Ii(`${e}.reviewer`,r.value.reviewer,Gee);return i.ok?S(void 0):i}return"reviewer"in r.value?Ve(`${e}.reviewer is only allowed when policy is on_request`):S(void 0)}function r1(t,e){if(t===void 0)return S(void 0);if(!Array.isArray(t))return Ve(`${e} must be an array`);for(let[r,n]of t.entries()){let i=Ur(n,`${e}[${r}]`);if(!i.ok)return i;if(typeof i.value.name!="string"||i.value.name.trim()==="")return Ve(`${e}[${r}].name must be a non-empty string`);let o=Ii(`${e}[${r}].scope`,i.value.scope,A3);if(!o.ok)return o;if(typeof i.value.rule!="string"||i.value.rule.trim()==="")return Ve(`${e}[${r}].rule must be a non-empty string`);let s=Ii(`${e}[${r}].severity`,i.value.severity,C3);if(!s.ok)return s}return S(void 0)}function Ur(t,e){return t&&typeof t=="object"&&!Array.isArray(t)?S(t):Ve(`${e} must be an object`)}function yte(t,e,r){let n=e.filter(o=>!(o in t));if(n.length>0)return Ve(`${r} is missing required keys: ${n.join(", ")}`);let i=Object.keys(t).filter(o=>!e.includes(o));return i.length>0?Ve(`${r} has unsupported keys: ${i.join(", ")}`):S(void 0)}function vte(t,e,r,n){let i=e.filter(a=>!(a in t));if(i.length>0)return Ve(`${n} is missing required keys: ${i.join(", ")}`);let o=[...e,...r],s=Object.keys(t).filter(a=>!o.includes(a));return s.length>0?Ve(`${n} has unsupported keys: ${s.join(", ")}`):S(void 0)}function Q3(t,e){return Number.isInteger(t)&&Number(t)>=1?S(void 0):Ve(`${e} must be a positive integer`)}function Ii(t,e,r){return typeof e=="string"&&r.includes(e)?S(e):Ve(`${t} must be one of: ${r.join(", ")}`)}function xte(t,e){return t.ok?e():t}function Ve(t){return oe({type:"DomainWorkflowError",message:t})}function wS(t){let e={...t,promptTemplate:{...t.promptTemplate},skills:IS(t.skills),plugins:kS(t.plugins??[]),execution:Kh(t.execution),approval:Jh(t.approval)};return t.modelSelection&&(e.modelSelection=JSON.parse(JSON.stringify(t.modelSelection))),e}function Ste(t){let e={...t,promptTemplate:{...t.promptTemplate},skills:IS(t.skills),plugins:kS(t.plugins)};return t.modelSelection&&(e.modelSelection=JSON.parse(JSON.stringify(t.modelSelection))),e}function Kh(t){return{...t}}function Jh(t){return{...t}}function IS(t=[]){return t.map(ES)}function ES(t){return t.kind==="local-snapshot"?{...t,snapshotFiles:t.snapshotFiles?.map(e=>({...e}))}:{...t}}function kS(t=[]){return t.map(e=>({...e}))}function bte(t){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(t)}function Z3(t,e,r,n){let i=r==="initial-execute-team"||r==="initial-request"?"SYSTEM":"DIRECTOR";return{...e,requestId:t,status:"pending",source:r,createdBy:i,updatedBy:i,createdAt:n,updatedAt:n}}function Xh(t,e){return CS(e.claimedBy)?t.status!=="pending"&&t.status!=="blocked"?Gr(`Destination ${t.id} cannot be claimed from status ${t.status}`):S({...AS(t,e),status:"claimed",claimedBy:e.claimedBy}):Gr("Claim Destination requires claimedBy")}function Yh(t,e){return CS(e.claimedBy)?t.status==="blocked"?Gr(`Destination ${t.id} cannot start work from status blocked`):c1(t)?Gr(`Destination ${t.id} cannot start work from status ${t.status}`):S({...AS(t,e),status:"in_progress",claimedBy:e.claimedBy}):Gr("Start Destination work requires claimedBy")}function Qh(t,e){return CS(e.blockedReason)?c1(t)?Gr(`Destination ${t.id} cannot be blocked from status ${t.status}`):S({...AS(t,e),status:"blocked",claimedBy:"claimedBy"in t?t.claimedBy:void 0,blockedReason:e.blockedReason}):Gr("Block Destination requires blockedReason")}function Zh(t,e){return CS(e.reachedByMoveId)?c1(t)?Gr(`Destination ${t.id} cannot be reached from status ${t.status}`):S({...AS(t,e),status:"reached",claimedBy:"claimedBy"in t?t.claimedBy:void 0,reachedByMoveId:e.reachedByMoveId}):Gr("Reach Destination requires reachedByMoveId")}function eg(t){return t.status==="active"?S({...t,status:"paused"}):Gr(`Line ${t.id} cannot be paused from status ${t.status}`)}function tg(t){return t.status==="paused"?S({...t,status:"active"}):Gr(`Line ${t.id} cannot be resumed from status ${t.status}`)}function rg(t){return t.status==="active"||t.status==="paused"?S({...t,status:"complete"}):Gr(`Line ${t.id} cannot be completed from status ${t.status}`)}function ng(t){return t.status==="active"||t.status==="paused"?S({...t,status:"abandoned"}):Gr(`Line ${t.id} cannot be abandoned from status ${t.status}`)}function e4(t){return t.status==="active"?S({...t,status:"failed"}):Gr(`Line ${t.id} cannot fail from status ${t.status}`)}function t4(t){return t.status==="active"?S(t):Gr(`TEAM line ${t.id} cannot continue from status ${t.status}`)}function n1(t){let e=Uf(t.reachedDestinationIds,"reachedDestinationIds");if(!e.ok)return Gr("Arrived MOVE must reach exactly one Destination");let r=uo(t.evidence,"evidence");return r.ok?S({...t,outcome:"arrived",reachedDestinationIds:e.value,evidence:r.value}):Gr("Arrived MOVE requires evidence")}function i1(t){let e=jo(t.failureReason,"failureReason");if(!e.ok)return Gr("Accident MOVE requires failureReason");let r=uo(t.evidence,"evidence");return r.ok?S({...t,outcome:"accident",reachedDestinationIds:[],failureReason:e.value,evidence:r.value}):Gr("Accident MOVE requires evidence")}function o1(t,e){return t.outcome==="accident"?{...t,...e,outcome:"accident",reachedDestinationIds:[],failureReason:t.failureReason}:{...t,...e,outcome:"arrived",reachedDestinationIds:t.reachedDestinationIds}}function RS(t){return t.outcome==="accident"?i1(t):n1({...t,reachedDestinationIds:t.reachedDestinationIds})}function r4(t){return{...t,status:"draft"}}function s1(t,e){return t.status!=="draft"?Gr(`Skill Draft ${t.id} cannot be accepted from status ${t.status}`):S({...t,status:"accepted",acceptedSnapshot:e})}function a1(t){return t.status!=="draft"?Gr(`Skill Draft ${t.id} cannot be discarded from status ${t.status}`):S({...t,status:"discarded"})}function AS(t,e){let{claimedBy:r,reachedByMoveId:n,blockedReason:i,canceledReason:o,supersededByDestinationId:s,...a}=t;return{...a,updatedBy:e.updatedBy,updatedAt:e.updatedAt}}function c1(t){return t.status==="reached"||t.status==="canceled"||t.status==="superseded"}function CS(t){return typeof t=="string"&&t.trim()!==""}function Gr(t){return oe({type:"DomainModelError",message:t})}function Vt(t,e){return t&&typeof t=="object"&&!Array.isArray(t)?S(t):Ee(`${e} must be an object`)}function oi(t,e){return Array.isArray(t)?S(t):Ee(`${e} must be an array`)}function un(t,e,r){return typeof e=="string"&&r.includes(e)?S(e):Ee(`${t} must be one of: ${r.join(", ")}`)}function u1(t,e){return un(e,t,R3)}function wte(t,e){return un(e,t,T3)}function Ite(t,e){return typeof t=="number"&&Number.isFinite(t)?S(t):Ee(`${e} must be a finite number`)}function o4(t,e){return t===void 0?S(void 0):typeof t=="boolean"?S(t):Ee(`${e} must be a boolean`)}function _S(t,e){return Number.isInteger(t)&&Number(t)>=0?S(Number(t)):Ee(`${e} must be a non-negative integer`)}function Bs(t,e){return t===void 0?S(void 0):typeof t=="string"?S(t):Ee(`${e} must be a string`)}function $r(t,e){if(t===void 0)return S(void 0);let r=Ie(t,e);return r.ok?S(r.value):Ee(r.error.message)}function d1(t,e){let r=Ie(t,e);return r.ok?S(r.value):Ee(r.error.message)}function ir(t,e="at"){return Bs(t,e)}function Ete(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(Ie(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function kte(t,e){return t===void 0?S(void 0):Ite(t,e)}function l1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Gi(r.value.id));if(!n.ok)return n;let i=Q(lS(r.value.title));if(!i.ok)return i;let o=Q(fS(r.value.goal));if(!o.ok)return o;let s=u1(r.value.createdBy,`${e}.createdBy`);if(!s.ok)return s;let a=Bs(r.value.createdAt,`${e}.createdAt`);return a.ok?S({id:n.value,title:i.value,goal:o.value,createdBy:s.value,createdAt:a.value}):a}function TS(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(lo(r.value.id));if(!n.ok)return n;let i=Q(h3(r.value.title,`${e}.title`));if(!i.ok)return i;let o=Rte(r.value.acceptanceCriteria,`${e}.acceptanceCriteria`);if(!o.ok)return o;let s=Ate(r.value.constraints,`${e}.constraints`);if(!s.ok)return s;let a=kte(r.value.priority,`${e}.priority`);if(!a.ok)return a;let c=r.value.notes===void 0?S(void 0):Q(v3(r.value.notes,`${e}.notes`));return c.ok?S({id:n.value,title:i.value,acceptanceCriteria:o.value,constraints:s.value,priority:a.value,notes:c.value}):c}function BS(t,e,r=!0){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=TS(n.value[s],`${e}[${s}]`);if(!a.ok)return a;i.push(a.value)}let o=HS(i.map(s=>s.id),e,"DestinationId");return o.ok?S(i):o}function Rte(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(g3(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Ate(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(y3(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Cte(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=TS(r.value,e);if(!n.ok)return n;let i=Q(Gi(r.value.requestId));if(!i.ok)return i;let o=wte(r.value.source,`${e}.source`);if(!o.ok)return o;let s=u1(r.value.createdBy,`${e}.createdBy`);if(!s.ok)return s;let a=u1(r.value.updatedBy,`${e}.updatedBy`);if(!a.ok)return a;let c=un(`${e}.status`,r.value.status,_3);if(!c.ok)return c;let u=Bs(r.value.createdAt,`${e}.createdAt`);if(!u.ok)return u;let d=Bs(r.value.updatedAt,`${e}.updatedAt`);if(!d.ok)return d;let l={...n.value,requestId:i.value,source:o.value,createdBy:s.value,updatedBy:a.value,createdAt:u.value,updatedAt:d.value};switch(c.value){case"pending":return Vte(r.value,e,["claimedBy","reachedByMoveId","blockedReason","canceledReason","supersededByDestinationId"],l);case"claimed":case"in_progress":{let f=Q(Ie(r.value.claimedBy,`${e}.claimedBy`));if(!f.ok)return f;let p=Wf(r.value,e,["reachedByMoveId","blockedReason","canceledReason","supersededByDestinationId"]);return p.ok?S({...l,status:c.value,claimedBy:f.value}):p}case"reached":{let f=Q(_n(r.value.reachedByMoveId));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["blockedReason","canceledReason","supersededByDestinationId"]);return g.ok?S({...l,status:"reached",reachedByMoveId:f.value,claimedBy:p.value}):g}case"blocked":{let f=Q(jo(r.value.blockedReason,`${e}.blockedReason`));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","canceledReason","supersededByDestinationId"]);return g.ok?S({...l,status:"blocked",blockedReason:f.value,claimedBy:p.value}):g}case"superseded":{let f=Q(lo(r.value.supersededByDestinationId));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","blockedReason","canceledReason"]);return g.ok?S({...l,status:"superseded",supersededByDestinationId:f.value,claimedBy:p.value}):g}case"canceled":{let f=Q(jo(r.value.canceledReason,`${e}.canceledReason`));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","blockedReason","supersededByDestinationId"]);return g.ok?S({...l,status:"canceled",canceledReason:f.value,claimedBy:p.value}):g}}}function s4(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Cte(r.value[i],`${e}[${i}]`);if(!o.ok)return o;n.push(o.value)}return S(n)}function PS(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(lo(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"DestinationId");return o.ok?S(i):o}function Pte(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(_n(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"MoveId");return o.ok?S(i):o}function _te(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(Yr(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"NodeId");return o.ok?r?Q(uo(i,e)):S(i):o}function DS(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let o=Q(uo(n.value,e));if(!o.ok)return o}let i=[];for(let o=0;o<n.value.length;o+=1){let s=Q(x3(n.value[o],`${e}[${o}]`));if(!s.ok)return s;i.push(s.value)}return S(i)}function NS(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(S3(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Tte(t,e){return t===void 0?S(void 0):NS(t,e)}function a4(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"destination":{let n=Q(lo(r.value.id));return n.ok?S({type:"destination",id:n.value}):n}case"move":{let n=Q(_n(r.value.id));return n.ok?S({type:"move",id:n.value}):n}case"line":{let n=Q(dr(r.value.id));return n.ok?S({type:"line",id:n.value}):n}case"node":{let n=Q(Yr(r.value.id));return n.ok?S({type:"node",id:n.value}):n}default:return Ee(`${e}.type must be destination, move, line, or node`)}}function ru(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=un(`${e}.provider`,r.value.provider,["codex","local"]);if(!n.ok)return n;let i=Q(qh(r.value.conversationHash));if(!i.ok)return i;let o=$r(r.value.threadId,`${e}.threadId`);if(!o.ok)return o;let s=Q(Ie(r.value.contextHash,`${e}.contextHash`));if(!s.ok)return s;let a=r.value.worktreeHash===void 0?S(void 0):Q(Ud(r.value.worktreeHash));if(!a.ok)return a;let c=Q(Ie(r.value.startedAt,`${e}.startedAt`));if(!c.ok)return c;let u=$r(r.value.endedAt,`${e}.endedAt`);if(!u.ok)return u;let d={conversationHash:i.value,contextHash:s.value,worktreeHash:a.value,startedAt:c.value};return n.value==="local"?o.value!==void 0?Ee(`${e}.threadId is only valid for codex conversations`):u.value===void 0?S({provider:"local",...d}):S({provider:"local",...d,endedAt:u.value}):u.value===void 0?S({provider:"codex",...d,threadId:o.value}):S({provider:"codex",...d,threadId:o.value,endedAt:u.value})}function OS(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ud(r.value.worktreeHash));if(!n.ok)return n;let i=Q(Ie(r.value.path,`${e}.path`));if(!i.ok)return i;let o=Q(Ie(r.value.branch,`${e}.branch`));if(!o.ok)return o;let s=Q(Ie(r.value.baseRef,`${e}.baseRef`));if(!s.ok)return s;let a=Q(Ie(r.value.createdAt,`${e}.createdAt`));if(!a.ok)return a;let c=$r(r.value.removedAt,`${e}.removedAt`);if(!c.ok)return c;let u={worktreeHash:n.value,path:i.value,branch:o.value,baseRef:s.value,createdAt:a.value};return c.value===void 0?S(u):S({...u,removedAt:c.value})}function f1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=un(`${e}.kind`,r.value.kind,["local-snapshot","local-root-installed","registry-package","skillMeta"]);if(!n.ok)return n;let i=Q(Ie(r.value.name,`${e}.name`));if(!i.ok)return i;if(n.value==="skillMeta"){let l=Q(Ie(r.value.source,`${e}.source`));if(!l.ok)return l;let f=un(`${e}.agent`,r.value.agent,["codex"]);return f.ok?S({kind:"skillMeta",name:i.value,source:l.value,agent:f.value}):f}if(n.value==="local-root-installed"){let l=$r(r.value.sourcePath,`${e}.sourcePath`);return l.ok?S({kind:"local-root-installed",name:i.value,sourcePath:l.value}):l}if(n.value==="local-snapshot"){let l=Q(Ie(r.value.sourcePath,`${e}.sourcePath`));if(!l.ok)return l;let f=Q(Ie(r.value.contentHash,`${e}.contentHash`));if(!f.ok)return f;let p=Q(Ie(r.value.snapshotRef,`${e}.snapshotRef`));if(!p.ok)return p;let g=r.value.snapshotFiles===void 0?S(void 0):Lte(r.value.snapshotFiles,`${e}.snapshotFiles`);return g.ok?S({kind:"local-snapshot",name:i.value,sourcePath:l.value,contentHash:f.value,snapshotRef:p.value,snapshotFiles:g.value}):g}let o=un(`${e}.registryKind`,r.value.registryKind,["apm"]);if(!o.ok)return o;let s=Q(Ie(r.value.registry,`${e}.registry`));if(!s.ok)return s;let a=Q(Ie(r.value.package,`${e}.package`));if(!a.ok)return a;let c=Q(Ie(r.value.version,`${e}.version`));if(!c.ok)return c;if(!Hte(String(c.value)))return Ee(`${e}.version must be an exact semver version`);let u=Q(Ie(r.value.integrity,`${e}.integrity`));if(!u.ok)return u;let d=Q(Ie(r.value.contentHash,`${e}.contentHash`));return d.ok?r.value.snapshotFiles!==void 0?Ee(`${e}.snapshotFiles is not supported for registry-package skills`):S({kind:"registry-package",registryKind:o.value,name:i.value,registry:s.value,package:a.value,version:c.value,integrity:u.value,contentHash:d.value}):d}function nu(t,e,r){if(t===void 0)return S(void 0);let n=Vt(t,e);if(!n.ok)return n;let i=Q(Ie(n.value.origin,`${e}.origin`));if(!i.ok)return i;let o=un(`${e}.kind`,n.value.kind,["team","member","manager","skill"]);if(!o.ok)return o;if(r&&!r.includes(o.value))return Ee(`${e}.kind must be ${r.join(" or ")}`);let s=Q(Ie(n.value.key,`${e}.key`));if(!s.ok)return s;let a=Q(Ie(n.value.version,`${e}.version`));if(!a.ok)return a;let c=Q(Ie(n.value.integrity,`${e}.integrity`));return c.ok?S({origin:i.value,kind:o.value,key:s.value,version:a.value,integrity:c.value}):c}function c4(t,e){if(t===void 0)return S([]);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.executorId,`${e}[${i}].executorId`));if(!s.ok)return s;let a=nu(o.value.lock,`${e}[${i}].lock`,["member"]);if(!a.ok)return a;if(!a.value)return Ee(`${e}[${i}].lock is required`);n.push({executorId:s.value,lock:a.value})}return S(n)}function u4(t,e){if(t===void 0)return S([]);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.name,`${e}[${i}].name`));if(!s.ok)return s;let a=nu(o.value.lock,`${e}[${i}].lock`,["skill"]);if(!a.ok)return a;if(!a.value)return Ee(`${e}[${i}].lock is required`);n.push({name:s.value,lock:a.value})}return S(n)}function MS(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ie(r.value.name,`${e}.name`));if(!n.ok)return n;let i=Q(Ie(r.value.url,`${e}.url`));if(!i.ok)return i;let o=un(`${e}.transport`,r.value.transport,["http","ssh"]);if(!o.ok)return o;let s=$r(r.value.identity,`${e}.identity`);return s.ok?S({name:n.value,url:i.value,transport:o.value,identity:s.value}):s}function ig(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(w3(r.value.id));if(!n.ok)return n;let i=Ute(r.value.owner,`${e}.owner`);if(!i.ok)return i;let o=un(`${e}.kind`,r.value.kind,M3);if(!o.ok)return o;let s=$r(r.value.path,`${e}.path`);if(!s.ok)return s;let a=$r(r.value.text,`${e}.text`);return a.ok?s.value===void 0&&a.value===void 0?Ee(`${e} must include path, text, or both`):s.value!==void 0&&a.value!==void 0?S({id:n.value,owner:i.value,kind:o.value,path:s.value,text:a.value}):s.value!==void 0?S({id:n.value,owner:i.value,kind:o.value,path:s.value}):S({id:n.value,owner:i.value,kind:o.value,text:a.value}):a}function d4(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(I3(r.value.id));if(!n.ok)return n;let i=Q(Ie(r.value.title,`${e}.title`));if(!i.ok)return i;let o=un(`${e}.kind`,r.value.kind,L3);if(!o.ok)return o;let s=un(`${e}.sourceScope`,r.value.sourceScope,H3);if(!s.ok)return s;let a=$te(r.value.env,`${e}.env`);if(!a.ok)return a;let c=Fte(r.value.runner,`${e}.runner`);if(!c.ok)return c;let u=jte(r.value.aliases,`${e}.aliases`);if(!u.ok)return u;let d=Bte(a.value,u.value,`${e}.env`);if(!d.ok)return d;let l=qte(r.value.evidence,`${e}.evidence`);if(!l.ok)return l;let f=_S(r.value.displayOrder,`${e}.displayOrder`);return f.ok?o.value==="check"&&c.value.type!=="command"?Ee(`${e}.runner.type must be command for check actions`):S({id:n.value,title:i.value,kind:o.value,sourceScope:s.value,env:a.value,runner:c.value,aliases:u.value,evidence:l.value,displayOrder:f.value}):f}function Bte(t,e,r){let n=new Set(Object.keys(e??{}));for(let[i,o]of Object.entries(t??{})){if("alias"in o&&!n.has(String(o.alias)))return Ee(`${r}.${i}.alias references unknown alias: ${o.alias}`);if("fromAliasUrl"in o&&!n.has(String(o.fromAliasUrl)))return Ee(`${r}.${i}.fromAliasUrl references unknown alias: ${o.fromAliasUrl}`)}return S(void 0)}function p1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(dr(r.value.id));if(!n.ok)return n;let i=Q(Gi(r.value.requestId));if(!i.ok)return i;let o=r.value.teamName===void 0?S(void 0):Q(cn(r.value.teamName,`${e}.teamName`));if(!o.ok)return o;let s=un(`${e}.status`,r.value.status,B3);if(!s.ok)return s;let a=Pte(r.value.moveIds,`${e}.moveIds`,!1);if(!a.ok)return a;let c=Q(Yr(r.value.rootNodeId));if(!c.ok)return c;let u=Q(Yr(r.value.currentNodeId));if(!u.ok)return u;let d=_te(r.value.nodeIds,`${e}.nodeIds`,!0);if(!d.ok)return d;let l=y4(r.value.parentLineId);if(!l.ok)return l;let f=og(r.value.forkedFromMoveId);if(!f.ok)return f;if(f.value!==void 0&&l.value===void 0)return Ee(`${e}.parentLineId is required when forkedFromMoveId is present`);let p={id:n.value,requestId:i.value,teamName:o.value,moveIds:a.value,rootNodeId:c.value,currentNodeId:u.value,nodeIds:d.value};if(l.value!==void 0){let v={...p,parentLineId:l.value,forkedFromMoveId:f.value};return i4(v,s.value)}return i4(p,s.value)}function l4(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(eu(r.value.id));if(!n.ok)return n;let i=Q(Ie(r.value.name,`${e}.name`));if(!i.ok)return i;let o=$r(r.value.sourcePath,`${e}.sourcePath`);if(!o.ok)return o;let s=Q(Ie(r.value.draftPath,`${e}.draftPath`));if(!s.ok)return s;let a=Mte(r.value.createdFromNodeId);if(!a.ok)return a;let c=Bs(r.value.createdAt,`${e}.createdAt`);if(!c.ok)return c;let u=un(`${e}.status`,r.value.status,O3);if(!u.ok)return u;let d={id:n.value,name:i.value,sourcePath:o.value,draftPath:s.value,createdFromNodeId:a.value,createdAt:c.value};switch(u.value){case"accepted":{let l=f1(r.value.acceptedSnapshot,`${e}.acceptedSnapshot`);return l.ok?S({...d,status:"accepted",acceptedSnapshot:l.value}):l}case"draft":return r.value.acceptedSnapshot!==void 0?Ee(`${e}.acceptedSnapshot is only valid for accepted Skill Drafts`):S({...d,status:"draft"});case"discarded":return r.value.acceptedSnapshot!==void 0?Ee(`${e}.acceptedSnapshot is only valid for accepted Skill Drafts`):S({...d,status:"discarded"})}}function f4(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(jh(n.value.id));if(!i.ok)return i;let o=Q(dr(n.value.sourceLineId));if(!o.ok)return o;let s=Q(Yr(n.value.sourceNodeId));if(!s.ok)return s;let a=og(n.value.sourceMoveId);if(!a.ok)return a;let c=a4(n.value.target,`${e}.target`);if(!c.ok)return c;let u=Q(cn(n.value.newTeamName,`${e}.newTeamName`));if(!u.ok)return u;let d=Q(Fo(n.value.summary,`${e}.summary`));if(!d.ok)return d;let l=m1(n.value.teamSnapshot,`${e}.teamSnapshot`,r);if(!l.ok)return l;let f=h4(n.value.changedFiles,`${e}.changedFiles`);if(!f.ok)return f;let p=Bs(n.value.createdAt,`${e}.createdAt`);if(!p.ok)return p;let g=Bs(n.value.updatedAt,`${e}.updatedAt`);if(!g.ok)return g;let v=un(`${e}.status`,n.value.status,N3);if(!v.ok)return v;let b={id:i.value,sourceLineId:o.value,sourceNodeId:s.value,sourceMoveId:a.value,target:c.value,newTeamName:u.value,summary:d.value,teamSnapshot:l.value,changedFiles:f.value,createdAt:p.value,updatedAt:g.value};switch(v.value){case"ready":{let B=Q(qo(n.value.hunsuId));if(!B.ok)return B;let _=Q(dr(n.value.newLineId));if(!_.ok)return _;if(n.value.conversationRef===void 0)return Ee(`${e}.conversationRef is required for ready HUNSU Drafts`);let F=ru(n.value.conversationRef,`${e}.conversationRef`);return F.ok?F.value?S({...b,status:"ready",hunsuId:B.value,newLineId:_.value,conversationRef:F.value}):Ee(`${e}.conversationRef is required for ready HUNSU Drafts`):F}case"confirmed":{let B=Q(qo(n.value.hunsuId));if(!B.ok)return B;let _=Q(dr(n.value.newLineId));if(!_.ok)return _;if(n.value.conversationRef===void 0)return Ee(`${e}.conversationRef is required for confirmed HUNSU Drafts`);let F=ru(n.value.conversationRef,`${e}.conversationRef`);return F.ok?F.value?S({...b,status:"confirmed",hunsuId:B.value,newLineId:_.value,conversationRef:F.value}):Ee(`${e}.conversationRef is required for confirmed HUNSU Drafts`):F}case"draft":return n.value.hunsuId!==void 0||n.value.newLineId!==void 0||n.value.conversationRef!==void 0?Ee(`${e} draft status cannot carry hunsuId, newLineId, or conversationRef`):S({...b,status:"draft"});case"discarded":if(n.value.hunsuId!==void 0||n.value.newLineId!==void 0)return Ee(`${e} discarded status cannot carry hunsuId or newLineId`);if(n.value.conversationRef===void 0)return S({...b,status:"discarded"});let C=ru(n.value.conversationRef,`${e}.conversationRef`);return C.ok?S({...b,status:"discarded",conversationRef:C.value}):C}}function p4(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(_n(n.value.id));if(!i.ok)return i;let o=Q(dr(n.value.lineId));if(!o.ok)return o;let s=Q(Yr(n.value.fromNodeId));if(!s.ok)return s;let a=Q(Yr(n.value.toNodeId));if(!a.ok)return a;let c=n.value.teamName===void 0?S(void 0):Q(cn(n.value.teamName,`${e}.teamName`));if(!c.ok)return c;let u=n.value.ordinal===void 0?S(void 0):_S(n.value.ordinal,`${e}.ordinal`);if(!u.ok)return u;let d=n.value.snapshot===void 0?S(void 0):m1(n.value.snapshot,`${e}.snapshot`,r);if(!d.ok)return d;let l=Ote(n.value.sourceHunsuId);if(!l.ok)return l;let f=LS(n.value.executeId);if(!f.ok)return f;let p=ru(n.value.conversationRef,`${e}.conversationRef`);if(!p.ok)return p;let g=OS(n.value.worktree,`${e}.worktree`);if(!g.ok)return g;let v=Q(Fo(n.value.summary,`${e}.summary`));if(!v.ok)return v;let b=Q(Hd(n.value.commit,`${e}.commit`));if(!b.ok)return b;let C=DS(n.value.evidence,`${e}.evidence`,!0);if(!C.ok)return C;let B=Tte(n.value.risks,`${e}.risks`);if(!B.ok)return B;let _=un(`${e}.recordedBy`,n.value.recordedBy,["SYSTEM"]);if(!_.ok)return _;let F=Bs(n.value.recordedAt,`${e}.recordedAt`);if(!F.ok)return F;let he=un(`${e}.outcome`,n.value.outcome,D3);if(!he.ok)return he;let z={id:i.value,lineId:o.value,fromNodeId:s.value,toNodeId:a.value,teamName:c.value,ordinal:u.value,snapshot:d.value,sourceHunsuId:l.value,executeId:f.value,conversationRef:p.value,worktree:g.value,summary:v.value,commit:b.value,evidence:C.value,risks:B.value,recordedBy:_.value,recordedAt:F.value};if(he.value==="arrived"){let R=PS(n.value.reachedDestinationIds,`${e}.reachedDestinationIds`,!0);if(!R.ok)return R;let V=Q(Uf(R.value,`${e}.reachedDestinationIds`));return V.ok?n.value.failureReason!==void 0?Ee(`${e}.failureReason is only valid for accident MOVEs`):S({...z,outcome:"arrived",reachedDestinationIds:V.value}):V}let Ae=PS(n.value.reachedDestinationIds,`${e}.reachedDestinationIds`,!1);if(!Ae.ok)return Ae;if(Ae.value.length!==0)return Ee(`${e}.reachedDestinationIds must be empty for accident MOVEs`);let de=Q(jo(n.value.failureReason,`${e}.failureReason`));return de.ok?S({...z,outcome:"accident",reachedDestinationIds:[],failureReason:de.value}):de}function m4(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(qo(n.value.id));if(!i.ok)return i;let o=Nte(n.value.hunsuDraftId);if(!o.ok)return o;let s=ru(n.value.conversationRef,`${e}.conversationRef`);if(!s.ok)return s;let a=Q(dr(n.value.lineId));if(!a.ok)return a;let c=Q(Yr(n.value.fromNodeId));if(!c.ok)return c;let u=Q(Yr(n.value.toNodeId));if(!u.ok)return u;let d=a4(n.value.target,`${e}.target`);if(!d.ok)return d;let l=Q(Fo(n.value.summary,`${e}.summary`));if(!l.ok)return l;let f=n.value.newLineId===void 0?S(void 0):Q(dr(n.value.newLineId));if(!f.ok)return f;let p=og(n.value.sourceMoveId);if(!p.ok)return p;let g=n.value.newTeamName===void 0?S(void 0):Q(cn(n.value.newTeamName,`${e}.newTeamName`));if(!g.ok)return g;let v=m1(n.value.teamSnapshot,`${e}.teamSnapshot`,r);if(!v.ok)return v;let b=h4(n.value.changedFiles,`${e}.changedFiles`);if(!b.ok)return b;let C=un(`${e}.recordedBy`,n.value.recordedBy,["DIRECTOR"]);if(!C.ok)return C;let B=Bs(n.value.recordedAt,`${e}.recordedAt`);return B.ok?S({id:i.value,hunsuDraftId:o.value,conversationRef:s.value,lineId:a.value,fromNodeId:c.value,toNodeId:u.value,target:d.value,summary:l.value,newLineId:f.value,sourceMoveId:p.value,newTeamName:g.value,teamSnapshot:v.value,changedFiles:b.value,recordedBy:C.value,recordedAt:B.value}):B}function h4(t,e){let r=oi(t,e);if(!r.ok)return r;if(r.value.length===0)return Ee(`${e} must contain at least one changed file`);let n=[];for(let i=0;i<r.value.length;i+=1){let o=Dte(r.value[i],`${e}[${i}]`);if(!o.ok)return o;n.push(o.value)}return S(n)}function Dte(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ie(r.value.path,`${e}.path`));if(!n.ok)return n;let i=un(`${e}.kind`,r.value.kind,["added","updated","removed"]);if(!i.ok)return i;let o=Q(Fo(r.value.summary,`${e}.summary`));return o.ok?S({path:n.value,kind:i.value,summary:o.value}):o}function g4(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(Yr(n.value.id));if(!i.ok)return i;let o=Q(Gi(n.value.requestId));if(!o.ok)return o;let s=y4(n.value.lineId);if(!s.ok)return s;let a=n.value.teamName===void 0?S(void 0):Q(cn(n.value.teamName,`${e}.teamName`));if(!a.ok)return a;let c=_S(n.value.ordinal,`${e}.ordinal`);if(!c.ok)return c;let u=s4(n.value.destinations,`${e}.destinations`);if(!u.ok)return u;let d=r(n.value.harness);if(!d.ok)return d;let l=v4(n.value.harnessGraph,d.value,`${e}.harnessGraph`);if(!l.ok)return l;let f=nu(n.value.harnessLock,`${e}.harnessLock`,["team"]);if(!f.ok)return f;let p=c4(n.value.executorPackageBindings,`${e}.executorPackageBindings`);if(!p.ok)return p;let g=u4(n.value.resourcePackageBindings,`${e}.resourcePackageBindings`);if(!g.ok)return g;let v=sg(n.value.artifactActions??[],`${e}.artifactActions`);if(!v.ok)return v;let b=Wte(n.value.source,`${e}.source`);if(!b.ok)return b;let C=Bs(n.value.createdAt,`${e}.createdAt`);return C.ok?S({id:i.value,requestId:o.value,lineId:s.value,teamName:a.value,ordinal:c.value,destinations:u.value,harness:d.value,harnessGraph:l.value,harnessLock:f.value,executorPackageBindings:p.value,resourcePackageBindings:g.value,artifactActions:v.value,source:b.value,createdAt:C.value}):C}function Nte(t){return t===void 0?S(void 0):Q(jh(t))}function Ote(t){return t===void 0?S(void 0):Q(qo(t))}function og(t){return t===void 0?S(void 0):Q(_n(t))}function y4(t){return t===void 0?S(void 0):Q(dr(t))}function Mte(t){return t===void 0?S(void 0):Q(Yr(t))}function LS(t){return t===void 0?S(void 0):Q(E3(t))}function m1(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(cn(n.value.teamName,`${e}.teamName`));if(!i.ok)return i;let o=_S(n.value.moveOrdinal,`${e}.moveOrdinal`);if(!o.ok)return o;let s=s4(n.value.destinations,`${e}.destinations`);if(!s.ok)return s;let a=r(n.value.harness);if(!a.ok)return a;let c=v4(n.value.harnessGraph,a.value,`${e}.harnessGraph`);if(!c.ok)return c;let u=nu(n.value.harnessLock,`${e}.harnessLock`,["team"]);if(!u.ok)return u;let d=c4(n.value.executorPackageBindings,`${e}.executorPackageBindings`);if(!d.ok)return d;let l=u4(n.value.resourcePackageBindings,`${e}.resourcePackageBindings`);if(!l.ok)return l;let f=sg(n.value.artifactActions??[],`${e}.artifactActions`);return f.ok?S({teamName:i.value,moveOrdinal:o.value,destinations:s.value,harness:a.value,harnessGraph:c.value,harnessLock:u.value,executorPackageBindings:d.value,resourcePackageBindings:l.value,artifactActions:f.value}):f}function v4(t,e,r){return t===void 0?S(Ts(e)):Fd(t,r)}function sg(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=d4(r.value[i],`${e}[${i}]`);if(!o.ok)return o;if(n.some(s=>s.id===o.value.id))return Ee(`${e} contains duplicate ArtifactActionId: ${o.value.id}`);n.push(o.value)}return S(n)}function Lte(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.path,`${e}[${i}].path`));if(!s.ok)return s;let a=o.value.text;if(typeof a!="string")return Ee(`${e}[${i}].text must be a string`);n.push({path:s.value,text:a})}return S(n)}function Hte(t){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(t)}function Ute(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"move":{let n=Q(_n(r.value.id));return n.ok?S({type:"move",id:n.value}):n}case"hunsu":{let n=Q(qo(r.value.id));return n.ok?S({type:"hunsu",id:n.value}):n}case"line":{let n=Q(dr(r.value.id));return n.ok?S({type:"line",id:n.value}):n}default:return Ee(`${e}.type must be move, hunsu, or line`)}}function $te(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n={};for(let[i,o]of Object.entries(r.value)){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(i))return Ee(`${e}.${i} must be a valid environment variable name`);let s=Vt(o,`${e}.${i}`);if(!s.ok)return s;if(["default","value","required","alias","fromAliasUrl"].filter(c=>c in s.value).length!==1)return Ee(`${e}.${i} must declare exactly one of default, value, required, alias, or fromAliasUrl`);if("default"in s.value){let c=n4(s.value.default,`${e}.${i}.default`);if(!c.ok)return c;n[i]={default:c.value}}else if("value"in s.value){let c=n4(s.value.value,`${e}.${i}.value`);if(!c.ok)return c;n[i]={value:c.value}}else if("alias"in s.value){let c=Q(Ie(s.value.alias,`${e}.${i}.alias`));if(!c.ok)return c;n[i]={alias:c.value}}else if("fromAliasUrl"in s.value){let c=Q(Ie(s.value.fromAliasUrl,`${e}.${i}.fromAliasUrl`));if(!c.ok)return c;n[i]={fromAliasUrl:c.value}}else{if(s.value.required!==!0)return Ee(`${e}.${i}.required must be true`);let c=o4(s.value.secret,`${e}.${i}.secret`);if(!c.ok)return c;n[i]={required:!0,secret:c.value}}}return S(n)}function Fte(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"docker_compose":{let n=Q(Ie(r.value.file,`${e}.file`));if(!n.ok)return n;let i=$r(r.value.projectName,`${e}.projectName`);return i.ok?S({type:"docker_compose",file:n.value,projectName:i.value}):i}case"command":{let n=Q(Ie(r.value.command,`${e}.command`));if(!n.ok)return n;let i=$r(r.value.stopCommand,`${e}.stopCommand`);return i.ok?S({type:"command",command:n.value,stopCommand:i.value}):i}default:return Ee(`${e}.type must be docker_compose or command`)}}function jte(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n={};for(let[i,o]of Object.entries(r.value)){if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return Ee(`${e}.${i} must start with a letter and contain only letters, numbers, "_" or "-"`);let s=Vt(o,`${e}.${i}`);if(!s.ok)return s;let a="target"in s.value,c="service"in s.value,u="containerPort"in s.value;if(a&&(c||u||"healthPath"in s.value))return Ee(`${e}.${i} must not mix target with docker service fields`);if(a){let p=Q(Ie(s.value.target,`${e}.${i}.target`));if(!p.ok)return p;n[i]={target:p.value};continue}if(!c||!u)return Ee(`${e}.${i} must declare either target or both service and containerPort`);let d=Q(Ie(s.value.service,`${e}.${i}.service`));if(!d.ok)return d;let l=Q(Ba(s.value.containerPort,`${e}.${i}.containerPort`));if(!l.ok)return l;let f=$r(s.value.healthPath,`${e}.${i}.healthPath`);if(!f.ok)return f;n[i]={service:d.value,containerPort:l.value,healthPath:f.value}}return S(n)}function qte(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=Ete(r.value.paths,`${e}.paths`);if(!n.ok)return n;let i=o4(r.value.attach,`${e}.attach`);return i.ok?S({attach:i.value,paths:n.value}):i}function n4(t,e){return typeof t=="string"||typeof t=="number"||typeof t=="boolean"?S(t):Ee(`${e} must be a string, number, or boolean`)}function HS(t,e,r){let n=new Set;for(let i of t){if(n.has(i))return Ee(`${e} contains duplicate ${r}: ${i}`);n.add(i)}return S(void 0)}function Wte(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"initial-execute-team":case"request":{let n=Q(Gi(r.value.requestId));return n.ok?S({type:r.value.type,requestId:n.value}):n}case"move":{let n=Q(_n(r.value.moveId));if(!n.ok)return n;let i=Q(Yr(r.value.fromNodeId));return i.ok?S({type:"move",moveId:n.value,fromNodeId:i.value}):i}case"hunsu":{let n=Q(qo(r.value.hunsuId));if(!n.ok)return n;let i=Q(Yr(r.value.fromNodeId));return i.ok?S({type:"hunsu",hunsuId:n.value,fromNodeId:i.value}):i}default:return Ee(`${e}.type must be a supported node source type`)}}function i4(t,e){switch(e){case"active":return S({...t,status:"active"});case"paused":return S({...t,status:"paused"});case"complete":return S({...t,status:"complete"});case"failed":return S({...t,status:"failed"});case"abandoned":return S({...t,status:"abandoned"})}}function Vte(t,e,r,n){let i=Wf(t,e,r);return i.ok?S({...n,status:"pending"}):i}function Wf(t,e,r){let n=r.find(i=>t[i]!==void 0);return n?Ee(`${e}.${n} is not valid for this lifecycle status`):S(void 0)}function Q(t){return t.ok?S(t.value):Ee(t.error.message)}function x4(t,e){let r=Vt(t,"Command");if(!r.ok)return r;switch(r.value.type){case"RegisterHunsuOrigin":{let n=MS(r.value.origin,"origin");if(!n.ok)return n;let i=$r(r.value.actor,"actor");if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"RegisterHunsuOrigin",origin:n.value,actor:i.value,at:o.value}):o}case"CreateInitialTeam":{let n=Ut(Gi(r.value.requestId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=Ut(lS(r.value.title));if(!o.ok)return o;let s=Ut(fS(r.value.goal));if(!s.ok)return s;let a=BS(r.value.destinations,"destinations");if(!a.ok)return a;let c=r.value.harness===void 0?S(void 0):e(r.value.harness);if(!c.ok)return c;let u=nu(r.value.harnessLock,"harnessLock",["team"]);if(!u.ok)return u;let d=r.value.teamName===void 0?S(void 0):Ut(cn(r.value.teamName));if(!d.ok)return d;let l=$r(r.value.actor,"actor");if(!l.ok)return l;let f=ir(r.value.at);return f.ok?S({type:"CreateInitialTeam",requestId:n.value,lineId:i.value,title:o.value,goal:s.value,destinations:a.value,harness:c.value,harnessLock:u.value,teamName:d.value,actor:l.value,at:f.value}):f}case"StartLine":{let n=Ut(Gi(r.value.requestId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=r.value.teamName===void 0?S(void 0):Ut(cn(r.value.teamName));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"StartLine",lineId:i.value,requestId:n.value,teamName:o.value,at:s.value}):s}case"PauseLine":case"ResumeLine":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=ir(r.value.at);return i.ok?S({type:r.value.type,lineId:n.value,at:i.value}):i}case"AcceptLine":case"RejectLine":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=$r(r.value.reason,"reason");if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:r.value.type,lineId:n.value,reason:i.value,at:o.value}):o}case"ClaimDestination":case"StartDestinationWork":{let n=Ut(lo(r.value.destinationId));if(!n.ok)return n;let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:r.value.type,destinationId:n.value,actor:i.value,at:o.value}):o}case"ReportDestinationBlocked":{let n=Ut(lo(r.value.destinationId));if(!n.ok)return n;let i=Ut(jo(r.value.reason,"reason"));if(!i.ok)return i;let o=Ut(Ie(r.value.actor,"actor"));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"ReportDestinationBlocked",destinationId:n.value,reason:i.value,actor:o.value,at:s.value}):s}case"RecordMove":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=Ut(_n(r.value.moveId));if(!i.ok)return i;let o=Ut(Fo(r.value.summary));if(!o.ok)return o;let s=Ut(Hd(r.value.commit,"commit"));if(!s.ok)return s;let a=PS(r.value.reachedDestinationIds,"reachedDestinationIds",!0);if(!a.ok)return a;let c=Ut(Uf(a.value,"reachedDestinationIds"));if(!c.ok)return c;let u=DS(r.value.evidence,"evidence",!0);if(!u.ok)return u;let d=r.value.risks===void 0?S(void 0):NS(r.value.risks,"risks");if(!d.ok)return d;let l=LS(r.value.executeId);if(!l.ok)return l;let f=ru(r.value.conversationRef,"conversationRef");if(!f.ok)return f;let p=OS(r.value.worktree,"worktree");if(!p.ok)return p;let g=Ut(Ie(r.value.actor,"actor"));if(!g.ok)return g;let v=ir(r.value.at);return v.ok?S({type:"RecordMove",lineId:n.value,moveId:i.value,summary:o.value,commit:s.value,reachedDestinationIds:c.value,evidence:u.value,risks:d.value,executeId:l.value,conversationRef:f.value,worktree:p.value,actor:g.value,at:v.value}):v}case"RecordAccident":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=Ut(_n(r.value.moveId));if(!i.ok)return i;let o=Ut(Fo(r.value.summary));if(!o.ok)return o;let s=Ut(Hd(r.value.commit,"commit"));if(!s.ok)return s;let a=DS(r.value.evidence,"evidence",!0);if(!a.ok)return a;let c=Ut(jo(r.value.failureReason));if(!c.ok)return c;let u=r.value.risks===void 0?S(void 0):NS(r.value.risks,"risks");if(!u.ok)return u;let d=LS(r.value.executeId);if(!d.ok)return d;let l=ru(r.value.conversationRef,"conversationRef");if(!l.ok)return l;let f=OS(r.value.worktree,"worktree");if(!f.ok)return f;let p=Ut(Ie(r.value.actor,"actor"));if(!p.ok)return p;let g=ir(r.value.at);return g.ok?S({type:"RecordAccident",lineId:n.value,moveId:i.value,summary:o.value,commit:s.value,evidence:a.value,failureReason:c.value,risks:u.value,executeId:d.value,conversationRef:l.value,worktree:f.value,actor:p.value,at:g.value}):g}case"AttachMoveEvidence":{let n=Ut(_n(r.value.moveId));if(!n.ok)return n;let i=ig(r.value.artifact,"artifact");if(!i.ok)return i;let o=Ut(Ie(r.value.actor,"actor"));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"AttachMoveEvidence",moveId:n.value,artifact:i.value,actor:o.value,at:s.value}):s}case"ConfirmHunsuDraft":{let n=f4(r.value.draft,"draft",e);if(!n.ok)return n;if(n.value.status!=="ready")return Ee(`HUNSU Draft ${n.value.id} cannot be confirmed from status ${n.value.status}`);let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"ConfirmHunsuDraft",draft:n.value,actor:i.value,at:o.value}):o}case"CreateSkillDraft":{let n=Ut(eu(r.value.draftId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=Ut(Ie(r.value.name,"name"));if(!o.ok)return o;let s=Ut(Ie(r.value.draftPath,"draftPath"));if(!s.ok)return s;let a=$r(r.value.sourcePath,"sourcePath");if(!a.ok)return a;let c=Ut(Ie(r.value.actor,"actor"));if(!c.ok)return c;let u=ir(r.value.at);return u.ok?S({type:"CreateSkillDraft",draftId:n.value,lineId:i.value,name:o.value,draftPath:s.value,sourcePath:a.value,actor:c.value,at:u.value}):u}case"DiscardSkillDraft":{let n=Ut(eu(r.value.draftId));if(!n.ok)return n;let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"DiscardSkillDraft",draftId:n.value,actor:i.value,at:o.value}):o}case"RecordArtifact":{let n=ig(r.value.artifact,"artifact");if(!n.ok)return n;let i=ir(r.value.at);return i.ok?S({type:"RecordArtifact",artifact:n.value,at:i.value}):i}default:return Ee(`Unsupported command type: ${String(r.value.type)}`)}}function Ut(t){return t.ok?S(t.value):Ee(t.error.message)}function S4(t,e){let r=Vt(t,"DomainEvent");if(!r.ok)return r;switch(r.value.type){case"HunsuOriginRegistered":{let n=MS(r.value.origin,"event.origin");if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"HunsuOriginRegistered",origin:n.value,at:i.value}):i}case"InitialTeamCreated":{let n=l1(r.value.request,"event.request");if(!n.ok)return n;let i=p1(r.value.line,"event.line");if(!i.ok)return i;let o=BS(r.value.destinations,"event.destinations");if(!o.ok)return o;let s=r.value.harness===void 0?S(void 0):e(r.value.harness);if(!s.ok)return s;let a=nu(r.value.harnessLock,"event.harnessLock",["team"]);if(!a.ok)return a;let c=ir(r.value.at,"event.at");return c.ok?S({type:"InitialTeamCreated",request:n.value,line:i.value,destinations:o.value,harness:s.value,harnessLock:a.value,at:c.value}):c}case"RequestCreated":{let n=l1(r.value.request,"event.request");return n.ok?S({type:"RequestCreated",request:n.value}):n}case"DestinationDeclared":{let n=Gn(Gi(r.value.requestId));if(!n.ok)return n;let i=TS(r.value.destination,"event.destination");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"DestinationDeclared",requestId:n.value,destination:i.value,at:o.value}):o}case"HarnessSeeded":{let n=Gn(Gi(r.value.requestId));if(!n.ok)return n;let i=e(r.value.harness);if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"HarnessSeeded",requestId:n.value,harness:i.value,at:o.value}):o}case"LineStarted":{let n=p1(r.value.line,"event.line");return n.ok?S({type:"LineStarted",line:n.value}):n}case"SkillDraftCreated":{let n=l4(r.value.draft,"event.draft");return n.ok?S({type:"SkillDraftCreated",draft:n.value}):n}case"SkillDraftAccepted":{let n=Gn(eu(r.value.draftId));if(!n.ok)return n;let i=f1(r.value.skill,"event.skill");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"SkillDraftAccepted",draftId:n.value,skill:i.value,at:o.value}):o}case"SkillDraftDiscarded":{let n=Gn(eu(r.value.draftId));if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"SkillDraftDiscarded",draftId:n.value,at:i.value}):i}case"NodeCreated":{let n=g4(r.value.node,"event.node",e);return n.ok?S({type:"NodeCreated",node:n.value}):n}case"LinePaused":case"LineResumed":{let n=Gn(dr(r.value.lineId));if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:r.value.type,lineId:n.value,at:i.value}):i}case"LineAccepted":case"LineRejected":{let n=Gn(dr(r.value.lineId));if(!n.ok)return n;let i=$r(r.value.reason,"event.reason");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:r.value.type,lineId:n.value,reason:i.value,at:o.value}):o}case"DestinationClaimed":case"DestinationWorkStarted":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=d1(r.value.actor,"event.actor");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:r.value.type,destinationId:n.value,actor:i.value,at:o.value}):o}case"DestinationBlocked":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=Gn(jo(r.value.reason,"event.reason"));if(!i.ok)return i;let o=d1(r.value.actor,"event.actor");if(!o.ok)return o;let s=ir(r.value.at,"event.at");return s.ok?S({type:"DestinationBlocked",destinationId:n.value,reason:i.value,actor:o.value,at:s.value}):s}case"MoveRecorded":{let n=p4(r.value.move,"event.move",e);return n.ok?S({type:"MoveRecorded",move:n.value}):n}case"DestinationReached":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=Gn(_n(r.value.moveId));if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"DestinationReached",destinationId:n.value,moveId:i.value,at:o.value}):o}case"HunsuRecorded":{let n=m4(r.value.hunsu,"event.hunsu",e);return n.ok?S({type:"HunsuRecorded",hunsu:n.value}):n}case"LineForkedByHunsu":{let n=Gn(qo(r.value.hunsuId));if(!n.ok)return n;let i=Gn(dr(r.value.fromLineId));if(!i.ok)return i;let o=Gn(dr(r.value.newLineId));if(!o.ok)return o;let s=r.value.newTeamName??r.value.newTeamName,a=s===void 0?S(void 0):Gn(cn(s,(s===r.value.newTeamName,"event.newTeamName")));if(!a.ok)return a;let c=og(r.value.fromMoveId);if(!c.ok)return c;let u=Gn(Gi(r.value.requestId));if(!u.ok)return u;let d=ir(r.value.at,"event.at");return d.ok?S({type:"LineForkedByHunsu",hunsuId:n.value,fromLineId:i.value,newLineId:o.value,newTeamName:a.value,fromMoveId:c.value,requestId:u.value,at:d.value}):d}case"ArtifactRecorded":{let n=ig(r.value.artifact,"event.artifact");if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"ArtifactRecorded",artifact:n.value,at:i.value}):i}default:return Ee(`Unsupported Hunsu domain event type: ${String(r.value.type)}`)}}function Gn(t){return t.ok?S(t.value):Ee(t.error.message)}var h1=["T1","Gen.G","Hanwha Life Esports","KT Rolster","Dplus KIA","DRX","Nongshim RedForce","BNK FearX","DN Freecs","OKSavingsBank BRION","Bilibili Gaming","JD Gaming","Top Esports","Anyone's Legend","Ninjas in Pyjamas","Weibo Gaming","Invictus Gaming","Team WE","LNG Esports","TT Gaming","LGD Gaming","EDward Gaming","Ultra Prime","Oh My God","Cloud9","Team Liquid","FlyQuest","Shopify Rebellion","100 Thieves","Dignitas","LYON","Sentinels","G2 Esports","Fnatic","Karmine Corp","Team Vitality","Team Heretics","GIANTX","Movistar KOI","SK Gaming","Natus Vincere","Rogue"];function zr(t,e){return t.some(r=>r.id===e.id)?t.map(r=>r.id===e.id?e:r):[...t,e]}function g1(t){return Array.from(new Set(t))}function Ds(t){return Zt(Yr(`${t}:root`))}function US(t){let e=t.nodes.reduce((r,n)=>{let i=n.id.match(/^N(\d+)$/i);return i?Math.max(r,Number(i[1])):r},0);return Zt(Yr(`N${String(e+1).padStart(4,"0")}`))}function Ns(t){let e=new Set(t.lines.map(n=>n.teamName).filter(n=>!!n)),r=h1.find(n=>!e.has(n));return r?Zt(cn(r)):Zt(cn(`${h1[t.lines.length%h1.length]}-${t.lines.length+1}`))}function b4(t,e){if(!t.requests.some(r=>r.id===e))throw new lr(`Unknown request: ${e}`)}function zn(t,e){let r=t.lines.find(n=>n.id===e);if(!r)throw new lr(`Unknown line: ${e}`);return r}function y1(t){if(t.status!=="active")throw new lr(`TEAM line ${t.id} cannot continue from status ${t.status}`)}function qd(t,e){let r=t.nodes.find(n=>n.id===e);if(!r)throw new lr(`Unknown node: ${e}`);return r}function $S(t,e){return qd(t,Ds(e))}function FS(t,e){return qd(t,e.currentNodeId)}function v1(t,e){let r=t.moves.find(n=>n.id===e);if(!r)throw new lr(`Unknown MOVE: ${e}`);return r}function w4(t,e){let r=t.skillDrafts.find(n=>n.id===e);if(!r)throw new lr(`Unknown Skill Draft: ${e}`);return r}function jS(t,e){let r=t.destinations.find(n=>n.id===e);if(!r)throw new lr(`Unknown Destination: ${e}`);return r}function Gte(t,e){let r=t.destinations.find(n=>n.id===e);if(!r)throw new lr(`Unknown Destination in node ${t.id}: ${e}`);return r}function I4(t,e){let r=jS(t,e);if(r.status!=="pending"&&r.status!=="blocked")throw new lr(`Destination ${e} cannot be claimed from status ${r.status}`);return r}function E4(t,e){let r=jS(t,e);if(R4(r))throw new lr(`Destination ${e} cannot be blocked from status ${r.status}`);return r}function k4(t,e){let r=Gte(t,e);if(R4(r))throw new lr(`Destination ${e} cannot be reached from status ${r.status}`);return r}function R4(t){return t.status==="reached"||t.status==="canceled"||t.status==="superseded"}function ag(t,e){if(t.length===0)throw new lr(e)}function A4(t,e){if(t.length!==1)throw new lr(e)}function C4(t,e){if(t.trim()==="")throw new lr(e)}function iu(){return{origins:[],requests:[],destinations:[],nodes:[],edges:[],lines:[],moves:[],hunsus:[],skillDrafts:[],artifacts:[],artifactActions:[],futureConstraints:[]}}function _4(t){return zi(t.reduce((e,r)=>b1(e,r),iu()))}function ou(t){let e=T4(t);if(!e.ok)return e;try{return S(_4(t))}catch(r){return oe(Wh(r))}}function T4(t){let e={requestIds:new Set,destinationIds:new Set,lineIds:new Set,moveIds:new Set,hunsuIds:new Set,skillDraftIds:new Set,artifactIds:new Set},r=iu();for(let n=0;n<t.length;n+=1){let i=t[n],o=Kte(i,n,e);if(!o.ok)return o;let s=Jte(i,n,r);if(!s.ok)return s;try{r=b1(r,i)}catch(c){return oe(Wh(c))}let a=sre(r,n);if(!a.ok)return a}return S(t)}function b1(t,e){switch(e.type){case"HunsuOriginRegistered":return{...t,origins:zte(t.origins,e.origin)};case"InitialTeamCreated":return cre(t,e);case"RequestCreated":return zi({...t,requests:zr(t.requests,e.request)});case"DestinationDeclared":return ure(t,e.requestId,e.destination,e.at);case"HarnessSeeded":return dre(t,e.requestId,e.harness,e.at);case"LineStarted":return zi({...t,lines:zr(t.lines,D4(t,e.line))});case"SkillDraftCreated":return{...t,skillDrafts:zr(t.skillDrafts,e.draft)};case"SkillDraftAccepted":return{...t,skillDrafts:t.skillDrafts.map(r=>r.id===e.draftId?Zt(s1(r,{...e.skill})):r)};case"SkillDraftDiscarded":return{...t,skillDrafts:t.skillDrafts.map(r=>r.id===e.draftId?Zt(a1(r)):r)};case"NodeCreated":return zi({...t,nodes:zr(t.nodes,e.node)});case"LinePaused":return cg(t,e.lineId,eg);case"LineResumed":return cg(t,e.lineId,tg);case"LineAccepted":return cg(t,e.lineId,rg);case"LineRejected":return cg(t,e.lineId,ng);case"DestinationClaimed":return S1(t,e.destinationId,r=>Xh(r,{claimedBy:e.actor,updatedBy:"TEAM",updatedAt:e.at}));case"DestinationWorkStarted":return S1(t,e.destinationId,r=>Yh(r,{claimedBy:e.actor,updatedBy:"TEAM",updatedAt:e.at}));case"DestinationBlocked":return S1(t,e.destinationId,r=>Qh(r,{blockedReason:e.reason,updatedBy:"TEAM",updatedAt:e.at}));case"MoveRecorded":return lre(t,e.move);case"DestinationReached":return t;case"HunsuRecorded":return fre(t,e.hunsu);case"LineForkedByHunsu":return pre(t,e);case"ArtifactRecorded":return{...t,artifacts:zr(t.artifacts,e.artifact)}}}function zte(t,e){return t.some(r=>r.name===e.name)?t.map(r=>r.name===e.name?{...e}:{...r}):[...t.map(r=>({...r})),{...e}]}function Kte(t,e,r){switch(t.type){case"InitialTeamCreated":{let n=Wo(r.requestIds,"RequestId",t.request.id,e);if(!n.ok)return n;let i=Wo(r.lineIds,"LineId",t.line.id,e);return i.ok?are(r.destinationIds,t.destinations,e):i}case"RequestCreated":return Wo(r.requestIds,"RequestId",t.request.id,e);case"DestinationDeclared":return Wo(r.destinationIds,"DestinationId",t.destination.id,e);case"LineStarted":return Wo(r.lineIds,"LineId",t.line.id,e);case"SkillDraftCreated":return Wo(r.skillDraftIds,"SkillDraftId",t.draft.id,e);case"MoveRecorded":return Wo(r.moveIds,"MoveId",t.move.id,e);case"HunsuRecorded":return Wo(r.hunsuIds,"HunsuId",t.hunsu.id,e);case"LineForkedByHunsu":return Wo(r.lineIds,"LineId",t.newLineId,e);case"ArtifactRecorded":return Wo(r.artifactIds,"ArtifactId",t.artifact.id,e);case"HunsuOriginRegistered":case"HarnessSeeded":case"SkillDraftAccepted":case"SkillDraftDiscarded":case"NodeCreated":case"LinePaused":case"LineResumed":case"LineAccepted":case"LineRejected":case"DestinationClaimed":case"DestinationWorkStarted":case"DestinationBlocked":case"DestinationReached":return S(void 0)}}function Jte(t,e,r){switch(t.type){case"InitialTeamCreated":return Xte(t,e);case"DestinationDeclared":return r.requests.some(n=>n.id===t.requestId)?S(void 0):Le(e,`Unknown request: ${t.requestId}`);case"HarnessSeeded":return r.nodes.some(n=>n.id===Ds(t.requestId))?S(void 0):Le(e,`Unknown root node for request: ${t.requestId}`);case"LineStarted":return Yte(r,t.line,e);case"SkillDraftAccepted":return P4(r,t.draftId,e,n=>s1(n,t.skill));case"SkillDraftDiscarded":return P4(r,t.draftId,e,a1);case"NodeCreated":return Qte(r,t.node,e);case"LinePaused":return qS(r,t.lineId,e,eg);case"LineResumed":return qS(r,t.lineId,e,tg);case"LineAccepted":return qS(r,t.lineId,e,rg);case"LineRejected":return qS(r,t.lineId,e,ng);case"DestinationClaimed":return x1(r,t.destinationId,e,n=>Xh(n,{claimedBy:t.actor,updatedBy:"TEAM",updatedAt:t.at}));case"DestinationWorkStarted":return x1(r,t.destinationId,e,n=>Yh(n,{claimedBy:t.actor,updatedBy:"TEAM",updatedAt:t.at}));case"DestinationBlocked":return x1(r,t.destinationId,e,n=>Qh(n,{blockedReason:t.reason,updatedBy:"TEAM",updatedAt:t.at}));case"MoveRecorded":return Zte(r,t.move,e);case"HunsuRecorded":return ere(r,t.hunsu,e);case"LineForkedByHunsu":return ire(r,t,e);case"ArtifactRecorded":return ore(r,t.artifact,e);case"DestinationReached":return Le(e,"DestinationReached is a legacy no-op event and cannot be projected");case"HunsuOriginRegistered":case"RequestCreated":case"SkillDraftCreated":return S(void 0)}}function Xte(t,e){return t.line.requestId!==t.request.id?Le(e,`Initial line ${t.line.id} request ${t.line.requestId} does not match request ${t.request.id}`):t.line.status!=="active"?Le(e,`Initial line ${t.line.id} cannot start from status ${t.line.status}`):t.line.rootNodeId!==t.line.currentNodeId?Le(e,`Initial line ${t.line.id} currentNodeId must start at rootNodeId`):t.line.nodeIds.includes(t.line.rootNodeId)?t.line.moveIds.length!==0?Le(e,`Initial line ${t.line.id} cannot start with MOVEs`):"parentLineId"in t.line||"forkedFromMoveId"in t.line?Le(e,`Initial line ${t.line.id} cannot carry fork metadata`):S(void 0):Le(e,`Initial line ${t.line.id} nodeIds must include rootNodeId ${t.line.rootNodeId}`)}function Yte(t,e,r){if(!t.requests.some(i=>i.id===e.requestId))return Le(r,`Unknown request: ${e.requestId}`);if(e.status!=="active")return Le(r,`Line ${e.id} cannot start from status ${e.status}`);let n=t.nodes.find(i=>i.id===Ds(e.requestId));return n?e.rootNodeId!==n.id||e.currentNodeId!==n.id||!e.nodeIds.includes(n.id)?Le(r,`Line ${e.id} must start at request root node ${n.id}`):e.moveIds.length!==0?Le(r,`Line ${e.id} cannot start with MOVEs`):"parentLineId"in e||"forkedFromMoveId"in e?Le(r,`LineStarted ${e.id} cannot carry fork metadata`):S(void 0):Le(r,`Unknown root node for request: ${e.requestId}`)}function P4(t,e,r,n){let i=t.skillDrafts.find(o=>o.id===e);return i?WS(r,n(i)):Le(r,`Unknown Skill Draft: ${e}`)}function Qte(t,e,r){if(e.lineId){let i=t.lines.find(o=>o.id===e.lineId);if(!i)return Le(r,`Unknown line: ${e.lineId}`);if(i.requestId!==e.requestId)return Le(r,`Node ${e.id} request ${e.requestId} does not match line ${i.id} request ${i.requestId}`)}let n=e.source;switch(n.type){case"initial-execute-team":case"request":return t.requests.some(i=>i.id===n.requestId)?S(void 0):Le(r,`Unknown request: ${n.requestId}`);case"move":{let i=t.moves.find(o=>o.id===n.moveId);return i?i.toNodeId===e.id&&i.fromNodeId===n.fromNodeId?S(void 0):Le(r,`Node ${e.id} does not match MOVE ${i.id} topology`):Le(r,`Unknown MOVE: ${n.moveId}`)}case"hunsu":{let i=t.hunsus.find(o=>o.id===n.hunsuId);return i?i.toNodeId===e.id&&i.fromNodeId===n.fromNodeId?S(void 0):Le(r,`Node ${e.id} does not match HUNSU ${i.id} topology`):Le(r,`Unknown HUNSU: ${n.hunsuId}`)}}}function qS(t,e,r,n){let i=t.lines.find(o=>o.id===e);return i?WS(r,n(i)):Le(r,`Unknown line: ${e}`)}function x1(t,e,r,n){let i=new Set(t.lines.map(s=>s.currentNodeId)),o=t.nodes.filter(s=>i.has(s.id)).flatMap(s=>s.destinations.filter(a=>a.id===e));if(o.length===0)return Le(r,`Unknown Destination in active route nodes: ${e}`);for(let s of o){let a=WS(r,n(s));if(!a.ok)return a}return S(void 0)}function Zte(t,e,r){let n=t.lines.find(s=>s.id===e.lineId);if(!n)return Le(r,`Unknown line: ${e.lineId}`);if(n.status!=="active")return Le(r,`TEAM line ${n.id} cannot continue from status ${n.status}`);let i=t.nodes.find(s=>s.id===e.fromNodeId);if(!i)return Le(r,`Unknown node: ${e.fromNodeId}`);if(i.id!==n.currentNodeId||i.requestId!==n.requestId)return Le(r,`MOVE ${e.id} source node ${i.id} does not match current node for line ${n.id}`);if(e.toNodeId===e.fromNodeId)return Le(r,`MOVE ${e.id} cannot be a self-loop`);if(t.nodes.some(s=>s.id===e.toNodeId))return Le(r,`MOVE ${e.id} target node already exists: ${e.toNodeId}`);let o=RS(e);if(!o.ok)return Le(r,o.error.message);for(let s of e.reachedDestinationIds){let a=nre(i,s,r);if(!a.ok)return a;let c=WS(r,Zh(a.value,{reachedByMoveId:e.id,updatedBy:"TEAM",updatedAt:e.recordedAt}));if(!c.ok)return c}return S(void 0)}function ere(t,e,r){let n=t.lines.find(s=>s.id===e.lineId);if(!n)return Le(r,`Unknown line: ${e.lineId}`);let i=t.nodes.find(s=>s.id===e.fromNodeId);if(!i)return Le(r,`Unknown node: ${e.fromNodeId}`);if(i.requestId!==n.requestId||!n.nodeIds.includes(i.id))return Le(r,`Node ${i.id} does not belong to line ${n.id}`);if(e.toNodeId===e.fromNodeId)return Le(r,`HUNSU ${e.id} cannot be a self-loop`);if(t.nodes.some(s=>s.id===e.toNodeId))return Le(r,`HUNSU ${e.id} target node already exists: ${e.toNodeId}`);let o=tre(t,e,n,i,r);return o.ok?rre(t,e,i,r):o}function tre(t,e,r,n,i){switch(e.target.type){case"line":{let o=t.lines.find(s=>s.id===e.target.id);return o?o.id===e.lineId?S(void 0):Le(i,`HUNSU target line ${o.id} does not match event line ${e.lineId}`):Le(i,`Unknown line: ${e.target.id}`)}case"node":{let o=t.nodes.find(s=>s.id===e.target.id);return o?o.requestId===r.requestId&&r.nodeIds.includes(o.id)?S(void 0):Le(i,`Node ${o.id} does not belong to line ${r.id}`):Le(i,`Unknown node: ${e.target.id}`)}case"move":{let o=B4(t,r,e.target.id,i);return o.ok?S(void 0):o}case"destination":return n.destinations.some(o=>o.id===e.target.id)?S(void 0):Le(i,`Unknown Destination in node ${n.id}: ${e.target.id}`)}return Le(i,`Unsupported HUNSU target: ${JSON.stringify(e.target)}`)}function rre(t,e,r,n){if(e.changedFiles.length===0)return Le(n,`HUNSU ${e.id} must include changed runtime files`);let i=new Set;for(let c of e.changedFiles){let u=String(c.path);if(!u.startsWith(".hunsu-request/"))return Le(n,`HUNSU changed file must be under .hunsu-request: ${u}`);if(i.has(u))return Le(n,`Duplicate HUNSU changed file: ${u}`);i.add(u)}if(e.teamSnapshot.moveOrdinal!==r.ordinal)return Le(n,`HUNSU ${e.id} Team snapshot ordinal ${e.teamSnapshot.moveOrdinal} does not match source node ordinal ${r.ordinal}`);let o=new Set(r.destinations.map(c=>String(c.id))),s=new Set(t.destinations.map(c=>String(c.id))),a=new Set;for(let c of e.teamSnapshot.destinations){let u=String(c.id);if(a.has(u))return Le(n,`Duplicate DestinationId in HUNSU Team snapshot: ${u}`);if(a.add(u),c.requestId!==r.requestId)return Le(n,`Destination ${c.id} request ${c.requestId} does not match source request ${r.requestId}`);if(!o.has(u)&&s.has(u))return Le(n,`Duplicate DestinationId in HUNSU Team snapshot: ${u}`)}return S(void 0)}function nre(t,e,r){let n=t.destinations.find(i=>i.id===e);return n?S(n):Le(r,`Unknown Destination in node ${t.id}: ${e}`)}function B4(t,e,r,n){let i=t.moves.find(o=>o.id===r);return i?i.lineId===e.id||e.moveIds.includes(i.id)?S(i):Le(n,`MOVE ${i.id} does not belong to line ${e.id}`):Le(n,`Unknown MOVE: ${r}`)}function ire(t,e,r){let n=t.lines.find(o=>o.id===e.fromLineId);if(!n)return Le(r,`Unknown line: ${e.fromLineId}`);if(e.requestId!==n.requestId)return Le(r,`LineForkedByHunsu request ${e.requestId} does not match parent line ${n.id}`);let i=t.hunsus.find(o=>o.id===e.hunsuId);if(!i)return Le(r,`Unknown HUNSU: ${e.hunsuId}`);if(i.lineId!==e.fromLineId)return Le(r,`HUNSU ${i.id} does not belong to parent line ${e.fromLineId}`);if(i.newLineId!==e.newLineId)return Le(r,`Line fork ${e.newLineId} does not match HUNSU recorded new line ${i.newLineId}`);if(i.sourceMoveId!==e.fromMoveId)return Le(r,`Line fork ${e.newLineId} fromMoveId does not match HUNSU source move`);if(i.newTeamName!==e.newTeamName)return Le(r,`Line fork ${e.newLineId} Team name does not match HUNSU record`);if(e.fromMoveId){let o=B4(t,n,e.fromMoveId,r);if(!o.ok)return o;if(o.value.toNodeId!==i.fromNodeId)return Le(r,`Line fork source MOVE ${o.value.id} does not end at HUNSU source node ${i.fromNodeId}`)}return t.nodes.some(o=>o.id===i.toNodeId)?S(void 0):Le(r,`Unknown HUNSU target node: ${i.toNodeId}`)}function ore(t,e,r){switch(e.owner.type){case"move":return t.moves.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown MOVE: ${e.owner.id}`);case"hunsu":return t.hunsus.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown HUNSU: ${e.owner.id}`);case"line":return t.lines.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown line: ${e.owner.id}`)}}function sre(t,e){for(let r of t.edges){if(!t.nodes.find(o=>o.id===r.fromNodeId))return Le(e,`Edge ${r.id} references missing fromNode ${r.fromNodeId}`);if(!t.nodes.find(o=>o.id===r.toNodeId))return Le(e,`Edge ${r.id} references missing toNode ${r.toNodeId}`);switch(r.type){case"move":{let o=t.moves.find(s=>s.id===r.moveId);if(!o)return Le(e,`MOVE edge ${r.id} references missing MOVE ${r.moveId}`);if(o.lineId!==r.lineId||o.fromNodeId!==r.fromNodeId||o.toNodeId!==r.toNodeId||o.id!==r.id)return Le(e,`MOVE edge ${r.id} does not match MOVE ${o.id}`);break}case"hunsu":{let o=t.hunsus.find(s=>s.id===r.hunsuId);if(!o)return Le(e,`HUNSU edge ${r.id} references missing HUNSU ${r.hunsuId}`);if(o.lineId!==r.lineId||o.fromNodeId!==r.fromNodeId||o.toNodeId!==r.toNodeId||o.id!==r.id)return Le(e,`HUNSU edge ${r.id} does not match HUNSU ${o.id}`);break}}}return S(void 0)}function WS(t,e){return e.ok?S(void 0):Le(t,e.error.message)}function Le(t,e){return Ee(`Invalid event stream at event ${t}: ${e}`)}function are(t,e,r){for(let n of e){let i=Wo(t,"DestinationId",n.id,r);if(!i.ok)return i}return S(void 0)}function Wo(t,e,r,n){return t.has(r)?Ee(`Duplicate ${e} in event stream at event ${n}: ${r}`):(t.add(r),S(void 0))}function cre(t,e){let r=e.destinations.map(s=>M4(e.request.id,s,"initial-execute-team",e.at)),n=Ei(e.harness??Vn()),i={id:e.line.rootNodeId,requestId:e.request.id,lineId:e.line.id,teamName:e.line.teamName,ordinal:0,destinations:r,harness:n,harnessGraph:Ts(n),harnessLock:e.harnessLock?{...e.harnessLock}:void 0,executorPackageBindings:[],resourcePackageBindings:[],artifactActions:[],source:{type:"initial-execute-team",requestId:e.request.id},createdAt:e.at??e.request.createdAt},o=D4({...t,requests:zr(t.requests,e.request),nodes:zr(t.nodes,i)},{...e.line,rootNodeId:i.id,currentNodeId:e.line.currentNodeId,nodeIds:e.line.nodeIds});return zi({...t,requests:zr(t.requests,e.request),nodes:zr(t.nodes,i),lines:zr(t.lines,o)})}function ure(t,e,r,n){let i=M4(e,r,"initial-request",n),o=t.nodes.find(a=>a.id===Ds(e)),s=o?{...o,destinations:zr(o.destinations,i)}:{id:Ds(e),requestId:e,ordinal:0,destinations:[i],harness:Vn(),harnessGraph:Ts(Vn()),artifactActions:[],source:{type:"request",requestId:e},createdAt:n};return zi({...t,nodes:zr(t.nodes,s)})}function dre(t,e,r,n){let i=$S(t,e);return zi({...t,nodes:zr(t.nodes,{...i,harness:Ei(r),harnessGraph:Ts(r),createdAt:i.createdAt??n})})}function lre(t,e){let r=zn(t,e.lineId),n=qd(t,e.fromNodeId),i=e.toNodeId,o=Zt(RS(o1(e,{fromNodeId:n.id,toNodeId:i,teamName:e.teamName??r.teamName??n.teamName??Ns(t),ordinal:e.ordinal??n.ordinal+1}))),s=t.nodes.find(l=>l.id===i)??mre(n,o,i),a=Zt(RS(o1(o,{snapshot:o.snapshot??yre(s)}))),c={id:a.id,type:"move",lineId:a.lineId,fromNodeId:n.id,toNodeId:i,moveId:a.id},u={...t,nodes:zr(t.nodes,s),moves:zr(t.moves,a),edges:zr(t.edges,c)},d=L4(xre(u,a),a.lineId,i);return zi(a.outcome==="accident"?cg(d,a.lineId,e4):d)}function fre(t,e){zn(t,e.lineId);let r=qd(t,e.fromNodeId),n=e.toNodeId,i={...e,fromNodeId:r.id,toNodeId:n},o=t.nodes.find(c=>c.id===n)??hre(r,i,n),s={id:i.id,type:"hunsu",lineId:i.lineId,fromNodeId:r.id,toNodeId:n,hunsuId:i.id},a={...t,nodes:zr(t.nodes,o),hunsus:zr(t.hunsus,i),edges:zr(t.edges,s)};return i.newLineId?zi(a):zi(L4(a,i.lineId,n))}function pre(t,e){let r=zn(t,e.fromLineId),n=t.hunsus.find(c=>c.id===e.hunsuId),i=e.fromMoveId?t.moves.find(c=>c.id===e.fromMoveId):void 0,o=n?.toNodeId??i?.toNodeId??r.currentNodeId,s=e.fromMoveId?r.moveIds.indexOf(e.fromMoveId):-1,a=s>=0?r.moveIds.slice(0,s+1):[];return zi({...t,lines:zr(t.lines,{id:e.newLineId,requestId:e.requestId,teamName:e.newTeamName??Ns(t),status:"active",moveIds:a,rootNodeId:r.rootNodeId,currentNodeId:o,nodeIds:[o],parentLineId:e.fromLineId,forkedFromMoveId:e.fromMoveId})})}function D4(t,e){return{...e,teamName:e.teamName??Ns(t)}}function mre(t,e,r){let n=new Set(e.reachedDestinationIds);return{id:r,requestId:t.requestId,lineId:e.lineId,teamName:e.teamName??t.teamName,ordinal:e.ordinal??t.ordinal+1,destinations:t.destinations.map(i=>n.has(i.id)?Zt(Zh(i,{reachedByMoveId:e.id,updatedBy:"TEAM",updatedAt:e.recordedAt})):{...i}),harness:Ei(t.harness),harnessGraph:po(t.harnessGraph),harnessLock:t.harnessLock?{...t.harnessLock}:void 0,executorPackageBindings:t.executorPackageBindings?.map(i=>({executorId:i.executorId,lock:{...i.lock}})),resourcePackageBindings:t.resourcePackageBindings?.map(i=>({name:i.name,lock:{...i.lock}})),artifactActions:w1(t.artifactActions),source:{type:"move",moveId:e.id,fromNodeId:t.id},createdAt:e.recordedAt}}function hre(t,e,r){let n=e.teamSnapshot;return{id:r,requestId:t.requestId,lineId:e.newLineId??e.lineId,teamName:n.teamName,ordinal:n.moveOrdinal,destinations:n.destinations.map(i=>({...i})),harness:Ei(n.harness),harnessGraph:po(n.harnessGraph),harnessLock:n.harnessLock?{...n.harnessLock}:void 0,executorPackageBindings:n.executorPackageBindings?.map(i=>({executorId:i.executorId,lock:{...i.lock}})),resourcePackageBindings:n.resourcePackageBindings?.map(i=>({name:i.name,lock:{...i.lock}})),artifactActions:w1(n.artifactActions),source:{type:"hunsu",hunsuId:e.id,fromNodeId:t.id},createdAt:e.recordedAt}}function w1(t){return O4((t??[]).map(N4))}function N4(t){return{...t,env:t.env?Object.fromEntries(Object.entries(t.env).map(([e,r])=>[e,{...r}])):void 0,runner:{...t.runner},aliases:t.aliases?Object.fromEntries(Object.entries(t.aliases).map(([e,r])=>[e,{...r}])):void 0,evidence:t.evidence?{...t.evidence,paths:t.evidence.paths?.slice()}:void 0}}function O4(t){return t.slice().sort((e,r)=>e.displayOrder-r.displayOrder||String(e.id).localeCompare(String(r.id)))}function gre(t){let e=new Set,r=[];for(let n of t)e.has(n.id)||(e.add(n.id),r.push(N4(n)));return r}function yre(t){return{teamName:t.teamName??Zt(cn("Team")),moveOrdinal:t.ordinal,destinations:t.destinations.map(e=>({...e})),harness:Ei(t.harness),harnessGraph:po(t.harnessGraph),harnessLock:t.harnessLock?{...t.harnessLock}:void 0,executorPackageBindings:t.executorPackageBindings?.map(e=>({executorId:e.executorId,lock:{...e.lock}})),resourcePackageBindings:t.resourcePackageBindings?.map(e=>({name:e.name,lock:{...e.lock}})),artifactActions:w1(t.artifactActions)}}function M4(t,e,r,n){return Z3(t,e,r,n)}function vre(t,e,r){return t.map(n=>n.id===e?Zt(r(n)):{...n})}function S1(t,e,r){let n=new Set(t.lines.map(o=>o.currentNodeId)),i=t.nodes.map(o=>!n.has(o.id)||!o.destinations.some(s=>s.id===e)?o:{...o,destinations:vre(o.destinations,e,r)});return zi({...t,nodes:i})}function cg(t,e,r){return zn(t,e),zi({...t,lines:t.lines.map(n=>n.id===e?Zt(r(n)):n)})}function xre(t,e){return zn(t,e.lineId),{...t,lines:t.lines.map(r=>r.id===e.lineId?{...r,moveIds:g1([...r.moveIds,e.id])}:r)}}function L4(t,e,r){return zn(t,e),{...t,lines:t.lines.map(n=>n.id===e?{...n,currentNodeId:r,nodeIds:Zt(uo(g1([...n.nodeIds,r]),"nodeIds"))}:n)}}function zi(t){let e=t.requests.flatMap(i=>{let o=Sre(t,i.id);return o?[o]:[]}),r=e.flatMap(i=>i.destinations),n=e.flatMap(i=>i.artifactActions);return{...t,destinations:r.map(i=>({...i})),artifactActions:O4(gre(n))}}function Sre(t,e){let r=t.lines.filter(i=>i.requestId===e&&i.status!=="abandoned"),n=r.findLast(i=>i.status==="active")??r.at(-1);return n?t.nodes.find(i=>i.id===n.currentNodeId):t.nodes.find(i=>i.id===Ds(e))}function bre(t,e=iu()){let r=Ire(t);if(!r.ok)return r;let n=Ere(r.value,e);if(!n.ok)return n;try{return S(wre(n.value,e))}catch(i){return oe(Wh(i))}}function wre(t,e=iu()){switch(t.type){case"RegisterHunsuOrigin":return[{type:"HunsuOriginRegistered",origin:{...t.origin},at:t.at}];case"CreateInitialTeam":{ag(t.destinations,"CreateInitialTeam requires at least one Destination");let r=t.harness?Ei(t.harness):Vn(),n=Ds(t.requestId);return[{type:"InitialTeamCreated",request:{id:t.requestId,title:t.title,goal:t.goal,createdBy:"SYSTEM",createdAt:t.at},line:{id:t.lineId,requestId:t.requestId,teamName:t.teamName??Ns(e),status:"active",moveIds:[],rootNodeId:n,currentNodeId:n,nodeIds:[n]},destinations:t.destinations,harness:r,harnessLock:t.harnessLock,at:t.at}]}case"StartLine":{b4(e,t.requestId);let r=$S(e,t.requestId),n=t.teamName??Ns(e);return[{type:"LineStarted",line:{id:t.lineId,requestId:t.requestId,teamName:n,status:"active",moveIds:[],rootNodeId:r.id,currentNodeId:r.id,nodeIds:[r.id]}}]}case"PauseLine":return zn(e,t.lineId),[{type:"LinePaused",lineId:t.lineId,at:t.at}];case"ResumeLine":return zn(e,t.lineId),[{type:"LineResumed",lineId:t.lineId,at:t.at}];case"AcceptLine":return zn(e,t.lineId),[{type:"LineAccepted",lineId:t.lineId,reason:t.reason,at:t.at}];case"RejectLine":return zn(e,t.lineId),[{type:"LineRejected",lineId:t.lineId,reason:t.reason,at:t.at}];case"ClaimDestination":return I4(e,t.destinationId),[{type:"DestinationClaimed",destinationId:t.destinationId,actor:t.actor,at:t.at}];case"StartDestinationWork":return jS(e,t.destinationId),[{type:"DestinationWorkStarted",destinationId:t.destinationId,actor:t.actor,at:t.at}];case"ReportDestinationBlocked":return E4(e,t.destinationId),[{type:"DestinationBlocked",destinationId:t.destinationId,reason:t.reason,actor:t.actor,at:t.at}];case"RecordMove":{let r=zn(e,t.lineId);y1(r);let n=FS(e,r);A4(t.reachedDestinationIds,"MOVE must reach exactly one Destination");for(let s of t.reachedDestinationIds)k4(n,s);let i=US(e);return[{type:"MoveRecorded",move:Zt(n1({id:t.moveId,lineId:t.lineId,fromNodeId:n.id,toNodeId:i,executeId:t.executeId,conversationRef:t.conversationRef,worktree:t.worktree,summary:t.summary,commit:t.commit,reachedDestinationIds:t.reachedDestinationIds,evidence:t.evidence,risks:t.risks,recordedBy:"SYSTEM",recordedAt:t.at}))}]}case"RecordAccident":{let r=zn(e,t.lineId);y1(r);let n=FS(e,r);ag(t.evidence,"A ACCIDENT must include evidence"),C4(t.failureReason,"A ACCIDENT must include a failure reason");let i=US(e);return[{type:"MoveRecorded",move:Zt(i1({id:t.moveId,lineId:t.lineId,fromNodeId:n.id,toNodeId:i,executeId:t.executeId,conversationRef:t.conversationRef,worktree:t.worktree,failureReason:t.failureReason,summary:t.summary,commit:t.commit,evidence:t.evidence,risks:t.risks,recordedBy:"SYSTEM",recordedAt:t.at}))}]}case"AttachMoveEvidence":return v1(e,t.moveId),[{type:"ArtifactRecorded",artifact:t.artifact,at:t.at}];case"ConfirmHunsuDraft":{let r=t.draft,n=zn(e,r.sourceLineId),i=qd(e,r.sourceNodeId);if(i.requestId!==n.requestId)throw new lr(`Node ${i.id} does not belong to line ${n.id}`);return r.sourceMoveId&&v1(e,r.sourceMoveId),ag(r.changedFiles,"A confirmed HUNSU Draft must include at least one changed runtime file"),[Rre(r.hunsuId,r.sourceLineId,i.id,US(e),r.target,r.summary,r.teamSnapshot,r.changedFiles,t.at,{hunsuDraftId:r.id,conversationRef:r.conversationRef,newLineId:r.newLineId,sourceMoveId:r.sourceMoveId,newTeamName:r.newTeamName}),{type:"LineForkedByHunsu",hunsuId:r.hunsuId,fromLineId:r.sourceLineId,newLineId:r.newLineId,newTeamName:r.newTeamName,fromMoveId:r.sourceMoveId,requestId:i.requestId,at:t.at}]}case"CreateSkillDraft":{let r=zn(e,t.lineId),n=FS(e,r);return[{type:"SkillDraftCreated",draft:r4({id:t.draftId,name:t.name,sourcePath:t.sourcePath,draftPath:t.draftPath,createdFromNodeId:n.id,createdAt:t.at})}]}case"DiscardSkillDraft":{let r=w4(e,t.draftId);if(r.status!=="draft")throw new lr(`Skill Draft ${t.draftId} cannot be discarded from status ${r.status}`);return[{type:"SkillDraftDiscarded",draftId:t.draftId,at:t.at}]}case"RecordArtifact":return[{type:"ArtifactRecorded",artifact:t.artifact,at:t.at}]}}function ug(t,e){let r=ou(t);if(!r.ok)return r;let n=r.value,i=bre(e,n);return i.ok?S([...t,...i.value]):i}function Ire(t){return x4(t,Gh)}function VS(t){return S4(t,Gh)}function Ere(t,e){let r=kre(t,e);if(!r.ok)return r;switch(t.type){case"RegisterHunsuOrigin":case"CreateInitialTeam":return S(t);case"RecordArtifact":return si([Kre(e,t.artifact)],t);case"StartLine":return si([Nre(e,t.requestId),$re(e,t.requestId)],t);case"PauseLine":return si([Mre(e,t.lineId)],t);case"ResumeLine":return si([Lre(e,t.lineId)],t);case"AcceptLine":return si([Hre(e,t.lineId)],t);case"RejectLine":return si([Ure(e,t.lineId)],t);case"ClaimDestination":return si([qre(e,t.destinationId)],t);case"StartDestinationWork":return si([jre(e,t.destinationId)],t);case"ReportDestinationBlocked":return si([Wre(e,t.destinationId)],t);case"RecordMove":return si([H4(e,t.lineId),E1(e,t.lineId),...Gre(e,t.lineId,t.moveId,t.reachedDestinationIds)],t);case"RecordAccident":return si([H4(e,t.lineId),E1(e,t.lineId)],t);case"AttachMoveEvidence":return si([U4(e,t.moveId),Jre(t.artifact,t.moveId)],t);case"ConfirmHunsuDraft":return si([$4(e,t.draft.sourceNodeId,t.draft.sourceLineId),Xre(e,t.draft.sourceLineId,t.draft.target),...t.draft.sourceMoveId?[F4(e,t.draft.sourceMoveId,t.draft.sourceLineId)]:[]],t);case"CreateSkillDraft":return si([E1(e,t.lineId)],t);case"DiscardSkillDraft":return si([Yre(e,t.draftId,"discarded")],t)}}function kre(t,e){switch(t.type){case"CreateInitialTeam":{let r=Are(e,t.requestId);if(!r.ok)return r;let n=I1(e,t.lineId);return n.ok?Bre(e,t.destinations.map(i=>i.id)):n}case"StartLine":return I1(e,t.lineId);case"RecordMove":case"RecordAccident":return Cre(e,t.moveId);case"AttachMoveEvidence":case"RecordArtifact":return Tre(e,t.artifact.id);case"CreateSkillDraft":return _re(e,t.draftId);case"ConfirmHunsuDraft":{let r=Pre(e,t.draft.hunsuId);return r.ok?I1(e,t.draft.newLineId):r}case"RegisterHunsuOrigin":case"PauseLine":case"ResumeLine":case"AcceptLine":case"RejectLine":case"ClaimDestination":case"StartDestinationWork":case"ReportDestinationBlocked":case"DiscardSkillDraft":return S(void 0)}}function si(t,e){let r=t.find(n=>!n.ok);return r&&!r.ok?oe(r.error):S(e)}function Rre(t,e,r,n,i,o,s,a,c,u={}){return ag(a,"A HUNSU must include at least one changed runtime file"),{type:"HunsuRecorded",hunsu:{id:t,...u,lineId:e,fromNodeId:r,toNodeId:n,target:i,summary:o,teamSnapshot:s,changedFiles:a,recordedBy:"DIRECTOR",recordedAt:c}}}function Da(t,e){return e.ok?S(t):Ee(e.error.message)}function Are(t,e){return t.requests.some(r=>r.id===e)?Ee(`Duplicate RequestId: ${e}`):S(void 0)}function I1(t,e){return t.lines.some(r=>r.id===e)?Ee(`Duplicate LineId: ${e}`):S(void 0)}function Cre(t,e){return t.moves.some(r=>r.id===e)?Ee(`Duplicate MoveId: ${e}`):S(void 0)}function Pre(t,e){return t.hunsus.some(r=>r.id===e)?Ee(`Duplicate HunsuId: ${e}`):S(void 0)}function _re(t,e){return t.skillDrafts.some(r=>r.id===e)?Ee(`Duplicate SkillDraftId: ${e}`):S(void 0)}function Tre(t,e){return t.artifacts.some(r=>r.id===e)?Ee(`Duplicate ArtifactId: ${e}`):S(void 0)}function Bre(t,e){let r=new Set,n=Dre(t);for(let i of e){if(r.has(i))return Ee(`Duplicate DestinationId in command: ${i}`);if(n.has(i))return Ee(`Duplicate DestinationId: ${i}`);r.add(i)}return S(void 0)}function Dre(t){return new Set([...t.destinations.map(e=>e.id),...t.nodes.flatMap(e=>e.destinations.map(r=>r.id))])}function Nre(t,e){return t.requests.some(r=>r.id===e)?S(void 0):Ee(`Unknown request: ${e}`)}function Ore(t,e){return Vo(t,e)}function Mre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,eg(r.value)):r}function Lre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,tg(r.value)):r}function Hre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,rg(r.value)):r}function Ure(t,e){let r=Vo(t,e);return r.ok?Da(r.value,ng(r.value)):r}function $re(t,e){return k1(t,Ds(e))}function U4(t,e){return j4(t,e)}function Fre(t,e){return Qre(t,e)}function jre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Yh(r.value,{claimedBy:"validation",updatedBy:"TEAM"})):r}function E1(t,e){return R1(t,e)}function H4(t,e){let r=Vo(t,e);return r.ok?Da(r.value,t4(r.value)):r}function qre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Xh(r.value,{claimedBy:"validation",updatedBy:"TEAM"})):r}function Wre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Qh(r.value,{blockedReason:"validation",updatedBy:"TEAM"})):r}function Vre(t,e,r){let n=R1(t,e);return n.ok?q4(n.value,r):n}function Gre(t,e,r,n){let i=R1(t,e);return i.ok?n.length!==1?[Ee("MOVE must reach exactly one Destination")]:n.map(o=>zre(i.value,o,r)):[i]}function zre(t,e,r){let n=q4(t,e);return n.ok?Da(n.value,Zh(n.value,{reachedByMoveId:r,updatedBy:"TEAM"})):n}function Kre(t,e){switch(e.owner.type){case"move":return U4(t,e.owner.id);case"hunsu":return Fre(t,e.owner.id);case"line":return Ore(t,e.owner.id)}}function Jre(t,e){return t.owner.type!=="move"||t.owner.id!==e?Ee(`AttachMoveEvidence artifact owner must be move ${e}`):S(void 0)}function $4(t,e,r){let n=Vo(t,r);if(!n.ok)return n;let i=k1(t,e);return i.ok?n.value.nodeIds.includes(i.value.id)?i:Ee(`Node ${i.value.id} does not belong to line ${n.value.id}`):i}function F4(t,e,r){let n=Vo(t,r);if(!n.ok)return n;let i=j4(t,e);return i.ok&&i.value.lineId!==n.value.id&&!n.value.moveIds.includes(i.value.id)?Ee(`MOVE ${i.value.id} does not belong to line ${n.value.id}`):i}function Xre(t,e,r){switch(r.type){case"line":{let n=Vo(t,e);if(!n.ok)return n;let i=Vo(t,r.id);return i.ok?i.value.id===n.value.id?S(n.value):Ee(`HUNSU target line ${i.value.id} does not match command line ${n.value.id}`):i}case"node":return $4(t,r.id,e);case"move":return F4(t,r.id,e);case"destination":return Vre(t,e,r.id)}}function Yre(t,e,r){let n=Zre(t,e);return n.ok?n.value.status!=="draft"?Ee(`Skill Draft ${e} cannot be ${r} from status ${n.value.status}`):S(n.value):n}function Vo(t,e){let r=t.lines.find(n=>n.id===e);return r?S(r):Ee(`Unknown line: ${e}`)}function k1(t,e){let r=t.nodes.find(n=>n.id===e);return r?S(r):Ee(`Unknown node: ${e}`)}function R1(t,e){let r=Vo(t,e);return r.ok?k1(t,r.value.currentNodeId):r}function j4(t,e){let r=t.moves.find(n=>n.id===e);return r?S(r):Ee(`Unknown MOVE: ${e}`)}function Qre(t,e){let r=t.hunsus.find(n=>n.id===e);return r?S(r):Ee(`Unknown HUNSU: ${e}`)}function Zre(t,e){let r=t.skillDrafts.find(n=>n.id===e);return r?S(r):Ee(`Unknown Skill Draft: ${e}`)}function A1(t,e){let r=t.destinations.find(n=>n.id===e);return r?S(r):Ee(`Unknown Destination: ${e}`)}function q4(t,e){let r=t.destinations.find(n=>n.id===e);return r?S(r):Ee(`Unknown Destination in node ${t.id}: ${e}`)}var V4="hunsu.connect.enrollment.v1";var Gf="hunsu.connect.signal-frame.v1",G4="hunsu.connect.control-frame.v1";function z4(t){return!ene(t)||!tne(t,["schema","sessionId","sequence","iv","ciphertext"])?Vf("$signal","Connect signal frame has unknown or missing fields."):t.schema!==Gf?Vf("schema","Connect signal frame schema is not supported."):typeof t.sessionId!="string"||!/^cs_[A-Za-z0-9_-]{20,125}$/u.test(t.sessionId)?Vf("sessionId","Connect session ID is invalid."):!Number.isSafeInteger(t.sequence)||Number(t.sequence)<1?Vf("sequence","Connect signal sequence must be a positive safe integer starting at 1."):W4(t.iv,12,12)?W4(t.ciphertext,16,65536)?{ok:!0,value:{schema:Gf,sessionId:t.sessionId,sequence:Number(t.sequence),iv:t.iv,ciphertext:t.ciphertext}}:Vf("ciphertext","Connect signal ciphertext must contain 16-65536 bytes of base64url data."):Vf("iv","Connect signal IV must be exactly 12 bytes of base64url data.")}function Vf(t,e){return{ok:!1,error:{code:"INVALID_CONNECT_WIRE",field:t,message:e}}}function ene(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function tne(t,e){let r=Object.keys(t);return r.length===e.length&&r.every(n=>e.includes(n))}function W4(t,e,r){if(typeof t!="string"||!/^[A-Za-z0-9_-]+$/u.test(t)||t.length%4===1)return!1;let i=Math.floor(t.length*3/4);return i>=e&&i<=r}var Oa="hunsu-peer-v1",P1="hunsu.control.v1",_1="hunsu.stream.v1",K4="stun:stun.cloudflare.com:3478",J4=12*6e4,dg=64*1024,STe=32*1024,X4=32,rne=["health","bridge.status","connection.status","provider.inventory","modelAlias.validate","modelAlias.resolve","roadmap.registry.list","roadmap.registry.remove","roadmap.open","roadmap.port.inspect","roadmap.port.apply","roadmap.create","roadmap.board","roadmap.worktree","roadmap.skills","roadmap.commands","execute.start","execute.pause","execute.resume","execute.stop","execute.completeMove","execute.status","artifactAction.list","artifactAction.runs","artifactAction.start","artifactAction.stop","moveFile.tree","moveFile.blob","moveFile.diff","hunsuDraft.list","hunsuDraft.start","hunsuDraft.get","hunsuDraft.message","hunsuDraft.diffArtifact.create","hunsuDraft.diffArtifact.get","hunsuDraft.approve","hunsuDraft.discard","line.accept","line.reject","agentSession.list","agentSession.get","agentSession.events","live.events"];var Wd=256,nne=1024,ine=64*1024,one=2*1024,sne=new Set(["projectPath","repositoryPath","repositoryRoot","worktreePath","runtimePath","cwd"]);function Y4(t){let e=["remote.access"];return(t==="execute.start"||t==="execute.pause"||t==="execute.resume"||t==="execute.stop"||t==="execute.completeMove")&&e.push("execute.start"),(t==="artifactAction.start"||t==="artifactAction.stop")&&e.push("artifactAction.run"),(t==="artifactAction.list"||t==="artifactAction.runs"||t==="artifactAction.start"||t==="artifactAction.stop")&&e.push("env.read","hostAlias.expose"),e}function Q4(t){let e=zS(t,"$signalPlaintext");if(!e.ok)return e;if(e.value.type==="peer.offer"||e.value.type==="peer.answer"){let r=Na(e.value,["type","sdp"],"$signalPlaintext");if(!r.ok)return r;let n=ki(e.value.sdp,"sdp",ine,!1);return n.ok?S({type:e.value.type,sdp:n.value}):n}if(e.value.type==="peer.ice"){let r=Na(e.value,["type","candidate","sdpMid","sdpMLineIndex","usernameFragment"],"$signalPlaintext");if(!r.ok)return r;let n=ki(e.value.candidate,"candidate",one),i=C1(e.value.sdpMid,"sdpMid",64),o=C1(e.value.usernameFragment,"usernameFragment",256);return n.ok?i.ok?o.ok?e.value.sdpMLineIndex!==void 0&&(!Number.isInteger(e.value.sdpMLineIndex)||Number(e.value.sdpMLineIndex)<0||Number(e.value.sdpMLineIndex)>8)?Tn("sdpMLineIndex","ICE media line index is invalid."):S({type:"peer.ice",candidate:n.value,...i.value?{sdpMid:i.value}:{},...e.value.sdpMLineIndex===void 0?{}:{sdpMLineIndex:Number(e.value.sdpMLineIndex)},...o.value?{usernameFragment:o.value}:{}}):o:i:n}if(e.value.type==="peer.close"){let r=Na(e.value,["type","reason"],"$signalPlaintext");return r.ok?e.value.reason==="complete"||e.value.reason==="canceled"||e.value.reason==="expired"||e.value.reason==="failed"?S({type:"peer.close",reason:e.value.reason}):Tn("reason","Peer close reason is invalid."):r}return Tn("type","Peer signaling message type is not supported.")}function Z4(t){let e=zS(t,"$hello");if(!e.ok)return e;let r=Na(e.value,["type","protocolVersion","sessionId","ticket","browserAgreementPublicJwk","browserNonce"],"$hello");if(!r.ok)return r;if(e.value.type!=="peer.client-hello"||e.value.protocolVersion!==Oa)return Tn("type","Peer client hello version is not supported.");let n=ki(e.value.sessionId,"sessionId",Wd),i=ki(e.value.ticket,"ticket",8192),o=cne(e.value.browserAgreementPublicJwk,"browserAgreementPublicJwk"),s=GS(e.value.browserNonce,"browserNonce",24,64);return n.ok?i.ok?o.ok?s.ok?S({type:"peer.client-hello",protocolVersion:Oa,sessionId:n.value,ticket:i.value,browserAgreementPublicJwk:o.value,browserNonce:s.value}):s:o:i:n}function e8(t){let e=t8(t,"$message",new WeakSet);if(!e.ok)return e;let r=zS(t,"$message");if(!r.ok)return r;let n=ki(r.value.type,"type",64),i=ki(r.value.sessionId,"sessionId",Wd);if(!n.ok)return n;if(!i.ok)return i;if(n.value==="session.confirm"){let o=Na(r.value,["type","sessionId","transcriptHash"],"$message");if(!o.ok)return o;let s=GS(r.value.transcriptHash,"transcriptHash",32,32);return s.ok?S({type:"session.confirm",sessionId:i.value,transcriptHash:s.value}):s}if(n.value==="command.request"){let o=Na(r.value,["type","sessionId","requestId","workspaceId","deadline","command","payload"],"$message");if(!o.ok)return o;let s=ki(r.value.requestId,"requestId",Wd),a=ki(r.value.workspaceId,"workspaceId",Wd),c=une(r.value.deadline,"deadline");return s.ok?a.ok?c.ok?ane(r.value.command)?S({type:"command.request",sessionId:i.value,requestId:s.value,workspaceId:a.value,deadline:c.value,command:r.value.command,...r.value.payload===void 0?{}:{payload:r.value.payload}}):Tn("command","Remote command name is not supported."):c:a:s}if(n.value==="stream.cancel"){let o=Na(r.value,["type","sessionId","requestId","streamId","workspaceId","reason"],"$message");if(!o.ok)return o;let s=ki(r.value.requestId,"requestId",Wd),a=ki(r.value.streamId,"streamId",Wd),c=ki(r.value.workspaceId,"workspaceId",Wd),u=C1(r.value.reason,"reason",nne);return s.ok?a.ok?c.ok?u.ok?S({type:"stream.cancel",sessionId:i.value,requestId:s.value,streamId:a.value,workspaceId:c.value,...u.value?{reason:u.value}:{}}):u:c:a:s}if(n.value==="session.close"){let o=Na(r.value,["type","sessionId","reason"],"$message");return o.ok?r.value.reason==="lease_expired"||r.value.reason==="replaced"||r.value.reason==="canceled"||r.value.reason==="protocol_error"?S({type:"session.close",sessionId:i.value,reason:r.value.reason}):Tn("reason","Session close reason is invalid."):o}return Tn("type","Inbound remote control message is not supported.")}function ane(t){return typeof t=="string"&&rne.includes(t)}function cne(t,e){let r=zS(t,e);if(!r.ok)return r;let n=Na(r.value,["kty","crv","x","y","key_ops","ext"],e);if(!n.ok)return n;if(r.value.kty!=="EC"||r.value.crv!=="P-256"||r.value.d!==void 0)return Tn(e,"Peer public key must be a public P-256 EC key.");let i=GS(r.value.x,`${e}.x`,32,32),o=GS(r.value.y,`${e}.y`,32,32);return i.ok?o.ok?S({kty:"EC",crv:"P-256",x:i.value,y:o.value,ext:!0}):o:i}function t8(t,e,r){if(typeof t!="object"||t===null)return S(!0);if(r.has(t))return Tn(e,"Remote peer message must not be cyclic.");r.add(t);for(let[n,i]of Object.entries(t)){if(sne.has(n))return Tn(`${e}.${n}`,"Remote peer messages cannot contain canonical local paths.");let o=t8(i,`${e}.${n}`,r);if(!o.ok)return o}return r.delete(t),S(!0)}function zS(t,e){return typeof t=="object"&&t!==null&&!Array.isArray(t)?S(t):Tn(e,"Value must be an object.")}function ki(t,e,r,n=!0){if(typeof t!="string")return Tn(e,"Value must be a string.");let i=n?t.trim():t;return i&&i.length<=r&&!/[\u0000\u000b\u000c\u007f]/u.test(i)?S(i):Tn(e,`Value must contain 1-${r} allowed characters.`)}function C1(t,e,r){return t===void 0?S(void 0):ki(t,e,r)}function une(t,e){let r=ki(t,e,64);return r.ok&&Number.isFinite(Date.parse(r.value))?r:Tn(e,"Value must be an ISO timestamp.")}function GS(t,e,r,n){let i=Math.ceil(n*4/3),o=ki(t,e,i);if(!o.ok)return o;if(!/^[A-Za-z0-9_-]+$/u.test(o.value)||o.value.length%4===1)return Tn(e,"Value must be unpadded base64url.");let s=Math.floor(o.value.length*3/4);return s>=r&&s<=n?S(o.value):Tn(e,"Decoded value has an invalid size.")}function Na(t,e,r){let n=new Set(e),i=Object.keys(t).find(o=>!n.has(o));return i?Tn(`${r}.${i}`,"Field is not allowed."):S(!0)}function Tn(t,e){return oe({code:"INVALID_REMOTE_PEER_WIRE",field:t,message:e})}import{delimiter as dne,dirname as lne,join as fne,resolve as pne}from"node:path";import{fileURLToPath as mne}from"node:url";import{spawn as hne}from"node:child_process";import{createInterface as gne}from"node:readline";import{Buffer as yne}from"node:buffer";var u8=yS,vne={type:"object",properties:{executorId:{type:"string"},goal:{type:"string"}},required:["executorId","goal"],additionalProperties:!1},xne={type:["object","null"],properties:{executorId:{type:"string"},prompt:{type:"string"}},required:["executorId","prompt"],additionalProperties:!1},Sne={type:["string","array"],items:{type:"string"}},bne={type:"object",properties:{kind:{type:"string",enum:["goal"]},stage:{type:"string",enum:["needs_evaluation"]},id:{type:"string"},assignee:vne,evaluator:xne,remainingAttempts:{type:"integer",minimum:0},requires:Sne},required:["kind","stage","id","assignee","evaluator","remainingAttempts","requires"],additionalProperties:!1},r8={type:"object",properties:{kind:{type:"string",enum:["queue"]},id:{type:"string"},items:{type:"array",items:bne}},required:["kind","id","items"],additionalProperties:!1},d8={type:"object",properties:{type:{type:"string",enum:["pass","fail"]},summary:{type:"string"},reason:{type:"string"},feedback:{type:"string"},nextGoal:{type:"string"},evidence:{type:"array",items:{type:"string"}}},required:["type","summary","reason","feedback","nextGoal","evidence"],additionalProperties:!1},wne={sandboxMode:"workspace-write",approvalPolicy:"never",approvalsReviewer:"user",networkAccessEnabled:!1},T1=class{subscribers=new Map;push(e){let r=this.subscribers.get(e.runId);if(r)for(let n of r)n.closed||(n.queue.push(e),n.resolve?.(),n.resolve=void 0)}close(e){let r=this.subscribers.get(e);if(r)for(let n of r)n.closed=!0,n.resolve?.(),n.resolve=void 0}async*events(e){let r={queue:[],closed:!1},n=this.subscribers.get(e);n||(n=new Set,this.subscribers.set(e,n)),n.add(r);try{for(;;){let i=r.queue.shift();if(i){yield i;continue}if(r.closed)return;await new Promise(o=>{r.resolve=o})}}finally{n.delete(r),n.size===0&&this.subscribers.delete(e)}}},lg=class extends Error{code;data;constructor(e,r,n){super(r),this.code=e,this.data=n}},B1=class{child;stdout;messageHandlers=new Set;errorHandlers=new Set;closeHandlers=new Set;constructor(e){this.child=hne(e.command,e.args,{cwd:e.cwd,env:Kne(e.environment)}),this.stdout=gne({input:this.child.stdout}),this.stdout.on("line",r=>this.handleLine(r)),this.child.stderr.on("data",()=>{}),this.child.once("error",r=>this.emitError(r)),this.child.once("close",()=>this.emitClose())}send(e){if(this.child.stdin.destroyed||!this.child.stdin.writable)throw new Error("Codex app-server stdin is closed");this.child.stdin.write(`${JSON.stringify(e)}
143
+ `)}function rte(t){let e=[],r=new Set;for(let n of t)for(let i of V4(n)){let o=nte(n.id,i);r.has(o)||(r.add(o),e.push({id:o,binding:i}))}return e}function nte(t,e){return e.kind==="skill"?`resource.${t}.skill.${e.skill.name}`:e.kind==="plugin"?`resource.${t}.plugin.${e.plugin.id}`:`resource.${t}.package.${e.lock.kind}.${e.lock.key}.${e.lock.version}`}function QR(t){return t.kind==="member"?{...G4(t),packageLock:t.packageLock?{...t.packageLock}:void 0}:{...t,planner:{promptTemplate:{...t.planner.promptTemplate},maxAttemptCount:t.planner.maxAttemptCount,guardrails:t.planner.guardrails?.map(e=>({...e}))},members:t.members.map(e=>({executorId:e.executorId,visibleProfile:{...e.visibleProfile,capabilities:e.visibleProfile.capabilities?[...e.visibleProfile.capabilities]:void 0}})),packageLock:t.packageLock?{...t.packageLock}:void 0}}function G4(t){let e=VR(t.runtimePolicy);return{kind:"member",id:t.id,promptTemplate:{...t.promptTemplate},resources:t.resources.map(z4),runtimePolicy:{...t.runtimePolicy.modelSelection?{modelSelection:e.modelSelection}:{},model:e.model,reasoningEffort:e.reasoningEffort,serviceTier:e.serviceTier,execution:Kh(e.execution),approval:Jh(e.approval)}}}function z4(t){return t.kind==="skill"?{kind:"skill",skill:ES(t.skill)}:t.kind==="plugin"?{kind:"plugin",plugin:{...t.plugin}}:{kind:"package",lock:{...t.lock}}}function ite(t){return{id:t.id,binding:z4(t.binding),packageLock:t.packageLock?{...t.packageLock}:void 0}}function gS(t,e,r){for(let n of[Q4(t[r],`${e}.${r}`),r1(t.guardrails,`${e}.guardrails`),ste(t.team,`${e}.team`),ate(t.members,`${e}.members`,!0)])if(!n.ok)return n;return S(Ei(t))}function ote(t){return t.kind==="team_execution_plan"?{...t,kind:"team_execution_plan"}:t}function ZR(t,e){let r=Ur(t,e);if(!r.ok)return r;if(r.value.kind!=="local-snapshot"&&r.value.kind!=="local-root-installed"&&r.value.kind!=="registry-package"&&r.value.kind!=="skillMeta")return Ve(`${e}.kind must be local-snapshot, local-root-installed, registry-package, or skillMeta`);if(typeof r.value.name!="string"||r.value.name.trim()==="")return Ve(`${e}.name must be a non-empty string`);if(r.value.kind==="skillMeta"){let n=yte(r.value,["agent","kind","name","source"],e);return n.ok?typeof r.value.source!="string"||r.value.source.trim()===""?Ve(`${e}.source must be a non-empty string`):r.value.agent!=="codex"?Ve(`${e}.agent must be codex`):S(void 0):n}if(r.value.kind==="local-root-installed")return r.value.sourcePath!==void 0&&(typeof r.value.sourcePath!="string"||r.value.sourcePath.trim()==="")?Ve(`${e}.sourcePath must be a non-empty string when provided`):S(void 0);if(r.value.kind==="local-snapshot"){for(let n of["sourcePath","contentHash","snapshotRef"])if(typeof r.value[n]!="string"||r.value[n].trim()==="")return Ve(`${e}.${n} must be a non-empty string`);if(r.value.snapshotFiles!==void 0){if(!Array.isArray(r.value.snapshotFiles))return Ve(`${e}.snapshotFiles must be an array`);for(let[n,i]of r.value.snapshotFiles.entries()){let o=Ur(i,`${e}.snapshotFiles[${n}]`);if(!o.ok)return o;if(typeof o.value.path!="string"||o.value.path.trim()==="")return Ve(`${e}.snapshotFiles[${n}].path must be a non-empty string`);if(typeof o.value.text!="string")return Ve(`${e}.snapshotFiles[${n}].text must be a string`)}}return S(void 0)}if(r.value.registryKind!=="apm")return Ve(`${e}.registryKind must be apm`);for(let n of["registry","package","version","integrity","contentHash"])if(typeof r.value[n]!="string"||r.value[n].trim()==="")return Ve(`${e}.${n} must be a non-empty string`);return bte(String(r.value.version))?r.value.snapshotFiles!==void 0?Ve(`${e}.snapshotFiles is not supported for registry-package skills`):S(void 0):Ve(`${e}.version must be an exact semver version`)}function e1(t,e){let r=Ur(t,e);return r.ok?r.value.kind!=="local-root-installed"?Ve(`${e}.kind must be local-root-installed`):typeof r.value.id!="string"||r.value.id.trim()===""?Ve(`${e}.id must be a non-empty string`):S(void 0):r}function ste(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=$d(r.value.promptTemplate,`${e}.promptTemplate`);return n.ok?S(void 0):n}function ate(t,e,r){if(!Array.isArray(t))return Ve(`${e} must be an array`);if(r&&t.length===0)return Ve(`${e} must include at least one Member`);let n=new Set;for(let[i,o]of t.entries()){let s=Ur(o,`${e}[${i}]`);if(!s.ok)return s;let a=K4(s.value,`${e}[${i}]`);if(!a.ok)return a;let c=String(s.value.id);if(n.has(c))return Ve(`${e} must not include duplicate Member ${c}`);n.add(c)}return S(void 0)}function K4(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=$d(t.promptTemplate,`${e}.promptTemplate`);if(!r.ok)return r;if(typeof t.model!="string"||t.model.trim()==="")return Ve(`${e}.model must be a non-empty string`);for(let n of[t1(t.modelSelection,`${e}.modelSelection`,!0),Ii(`${e}.reasoningEffort`,t.reasoningEffort,pS),t.serviceTier===void 0?S(void 0):Ii(`${e}.serviceTier`,t.serviceTier,mS),X4(t.execution,`${e}.execution`),Y4(t.approval,`${e}.approval`)])if(!n.ok)return n;if(!Array.isArray(t.skills))return Ve(`${e}.skills must be an array`);for(let[n,i]of t.skills.entries()){let o=ZR(i,`${e}.skills[${n}]`);if(!o.ok)return o}if(t.plugins!==void 0){if(!Array.isArray(t.plugins))return Ve(`${e}.plugins must be an array`);for(let[n,i]of t.plugins.entries()){let o=e1(i,`${e}.plugins[${n}]`);if(!o.ok)return o}}return S(void 0)}function cte(t,e){let r=vte(t,["id","plugins","promptTemplate","skills"],["modelSelection"],e);if(!r.ok)return r;if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let n=$d(t.promptTemplate,`${e}.promptTemplate`);if(!n.ok)return n;let i=t1(t.modelSelection,`${e}.modelSelection`,!0);if(!i.ok)return i;if(!Array.isArray(t.skills))return Ve(`${e}.skills must be an array`);for(let[o,s]of t.skills.entries()){let a=ZR(s,`${e}.skills[${o}]`);if(!a.ok)return a}if(!Array.isArray(t.plugins))return Ve(`${e}.plugins must be an array`);for(let[o,s]of t.plugins.entries()){let a=e1(s,`${e}.plugins[${o}]`);if(!a.ok)return a}return S(void 0)}function ute(t,e){let r=Ur(t,e);return r.ok?r.value.kind==="team"?dte(r.value,e):r.value.kind==="member"?mte(r.value,e):Ve(`${e}.kind must be team or member`):r}function dte(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=lte(t.planner,`${e}.planner`);if(!r.ok)return r;if(!Array.isArray(t.members))return Ve(`${e}.members must be an array`);let n=new Set;for(let[i,o]of t.members.entries()){let s=fte(o,`${e}.members[${i}]`);if(!s.ok)return s;let a=String(o.executorId);if(n.has(a))return Ve(`${e}.members must not include duplicate Membership ${a}`);n.add(a)}return bS(t.packageLock,`${e}.packageLock`)}function lte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=$d(r.value.promptTemplate,`${e}.promptTemplate`);if(!n.ok)return n;if(r.value.maxAttemptCount!==void 0){let i=Q4(r.value.maxAttemptCount,`${e}.maxAttemptCount`);if(!i.ok)return i}return r1(r.value.guardrails,`${e}.guardrails`)}function fte(t,e){let r=Ur(t,e);return r.ok?typeof r.value.executorId!="string"||r.value.executorId.trim()===""?Ve(`${e}.executorId must be a non-empty string`):pte(r.value.visibleProfile,`${e}.visibleProfile`):r}function pte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.kind`,r.value.kind,["team","member"]);if(!n.ok)return n;for(let i of["label","summary"])if(r.value[i]!==void 0&&(typeof r.value[i]!="string"||String(r.value[i]).trim()===""))return Ve(`${e}.${i} must be a non-empty string when provided`);if(r.value.capabilities!==void 0){if(!Array.isArray(r.value.capabilities))return Ve(`${e}.capabilities must be an array`);for(let[i,o]of r.value.capabilities.entries())if(typeof o!="string"||o.trim()==="")return Ve(`${e}.capabilities[${i}] must be a non-empty string`)}return S(void 0)}function mte(t,e){if(typeof t.id!="string"||t.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let r=$d(t.promptTemplate,`${e}.promptTemplate`);if(!r.ok)return r;if(!Array.isArray(t.resources))return Ve(`${e}.resources must be an array`);for(let[i,o]of t.resources.entries()){let s=J4(o,`${e}.resources[${i}]`);if(!s.ok)return s}let n=hte(t.runtimePolicy,`${e}.runtimePolicy`);return n.ok?bS(t.packageLock,`${e}.packageLock`):n}function hte(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=t1(r.value.modelSelection,`${e}.modelSelection`,!0);if(!n.ok)return n;let i=r.value.modelSelection!==void 0;if(r.value.model!==void 0&&(typeof r.value.model!="string"||r.value.model.trim()===""))return Ve(`${e}.model must be a non-empty string when provided`);if(r.value.model===void 0&&!i)return Ve(`${e}.modelSelection or ${e}.model must be provided`);for(let o of[r.value.reasoningEffort===void 0&&i?S(void 0):Ii(`${e}.reasoningEffort`,r.value.reasoningEffort,pS),r.value.serviceTier===void 0?S(void 0):Ii(`${e}.serviceTier`,r.value.serviceTier,mS),X4(r.value.execution,`${e}.execution`),Y4(r.value.approval,`${e}.approval`)])if(!o.ok)return o;return S(void 0)}function t1(t,e,r=!1){if(t===void 0&&r)return S(void 0);let n=Ur(t,e);if(!n.ok)return n;if(n.value.kind==="alias")return GR(n.value.aliasId,`${e}.aliasId`);if(n.value.kind!=="direct")return Ve(`${e}.kind must be direct or alias`);let i=Ur(n.value.provider,`${e}.provider`);if(!i.ok)return i;for(let o of[GR(i.value.providerId,`${e}.provider.providerId`),GR(i.value.model,`${e}.provider.model`),i.value.reasoningEffort===void 0?S(void 0):Ii(`${e}.provider.reasoningEffort`,i.value.reasoningEffort,pS),i.value.serviceTier===void 0?S(void 0):Ii(`${e}.provider.serviceTier`,i.value.serviceTier,mS)])if(!o.ok)return o;if(i.value.experimental!==void 0&&typeof i.value.experimental!="boolean")return Ve(`${e}.provider.experimental must be a boolean when provided`);if(i.value.providerId==="codex"&&i.value.experimental!==!0){if(i.value.model==="gpt-5.5-thinking"&&i.value.reasoningEffort!=="high"&&i.value.reasoningEffort!=="xhigh")return Ve(`${e}.provider.reasoningEffort must be high or xhigh for gpt-5.5-thinking`);if(i.value.model==="gpt-5.5"&&(i.value.reasoningEffort==="minimal"||i.value.reasoningEffort==="xhigh"))return Ve(`${e}.provider.reasoningEffort is not supported for gpt-5.5`)}return S(void 0)}function GR(t,e){return typeof t=="string"&&t.trim()!==""?S(void 0):Ve(`${e} must be a non-empty string`)}function gte(t,e){let r=Ur(t,e);if(!r.ok)return r;if(typeof r.value.id!="string"||r.value.id.trim()==="")return Ve(`${e}.id must be a non-empty string`);let n=J4(r.value.binding,`${e}.binding`);return n.ok?bS(r.value.packageLock,`${e}.packageLock`):n}function J4(t,e){let r=Ur(t,e);return r.ok?r.value.kind==="skill"?ZR(r.value.skill,`${e}.skill`):r.value.kind==="plugin"?e1(r.value.plugin,`${e}.plugin`):r.value.kind==="package"?bS(r.value.lock,`${e}.lock`):Ve(`${e}.kind must be skill, plugin, or package`):r}function bS(t,e){if(t===void 0)return S(void 0);let r=Ur(t,e);if(!r.ok)return r;for(let n of["origin","kind","key","version","integrity"])if(typeof r.value[n]!="string"||String(r.value[n]).trim()==="")return Ve(`${e}.${n} must be a non-empty string`);return S(void 0)}function X4(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.kind`,r.value.kind,qee);if(!n.ok)return n;let i=Ii(`${e}.network`,r.value.network,Wee);return i.ok?S(void 0):i}function Y4(t,e){let r=Ur(t,e);if(!r.ok)return r;let n=Ii(`${e}.policy`,r.value.policy,Vee);if(!n.ok)return n;if(r.value.policy==="on_request"){let i=Ii(`${e}.reviewer`,r.value.reviewer,Gee);return i.ok?S(void 0):i}return"reviewer"in r.value?Ve(`${e}.reviewer is only allowed when policy is on_request`):S(void 0)}function r1(t,e){if(t===void 0)return S(void 0);if(!Array.isArray(t))return Ve(`${e} must be an array`);for(let[r,n]of t.entries()){let i=Ur(n,`${e}[${r}]`);if(!i.ok)return i;if(typeof i.value.name!="string"||i.value.name.trim()==="")return Ve(`${e}[${r}].name must be a non-empty string`);let o=Ii(`${e}[${r}].scope`,i.value.scope,A4);if(!o.ok)return o;if(typeof i.value.rule!="string"||i.value.rule.trim()==="")return Ve(`${e}[${r}].rule must be a non-empty string`);let s=Ii(`${e}[${r}].severity`,i.value.severity,C4);if(!s.ok)return s}return S(void 0)}function Ur(t,e){return t&&typeof t=="object"&&!Array.isArray(t)?S(t):Ve(`${e} must be an object`)}function yte(t,e,r){let n=e.filter(o=>!(o in t));if(n.length>0)return Ve(`${r} is missing required keys: ${n.join(", ")}`);let i=Object.keys(t).filter(o=>!e.includes(o));return i.length>0?Ve(`${r} has unsupported keys: ${i.join(", ")}`):S(void 0)}function vte(t,e,r,n){let i=e.filter(a=>!(a in t));if(i.length>0)return Ve(`${n} is missing required keys: ${i.join(", ")}`);let o=[...e,...r],s=Object.keys(t).filter(a=>!o.includes(a));return s.length>0?Ve(`${n} has unsupported keys: ${s.join(", ")}`):S(void 0)}function Q4(t,e){return Number.isInteger(t)&&Number(t)>=1?S(void 0):Ve(`${e} must be a positive integer`)}function Ii(t,e,r){return typeof e=="string"&&r.includes(e)?S(e):Ve(`${t} must be one of: ${r.join(", ")}`)}function xte(t,e){return t.ok?e():t}function Ve(t){return oe({type:"DomainWorkflowError",message:t})}function wS(t){let e={...t,promptTemplate:{...t.promptTemplate},skills:IS(t.skills),plugins:kS(t.plugins??[]),execution:Kh(t.execution),approval:Jh(t.approval)};return t.modelSelection&&(e.modelSelection=JSON.parse(JSON.stringify(t.modelSelection))),e}function Ste(t){let e={...t,promptTemplate:{...t.promptTemplate},skills:IS(t.skills),plugins:kS(t.plugins)};return t.modelSelection&&(e.modelSelection=JSON.parse(JSON.stringify(t.modelSelection))),e}function Kh(t){return{...t}}function Jh(t){return{...t}}function IS(t=[]){return t.map(ES)}function ES(t){return t.kind==="local-snapshot"?{...t,snapshotFiles:t.snapshotFiles?.map(e=>({...e}))}:{...t}}function kS(t=[]){return t.map(e=>({...e}))}function bte(t){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(t)}function Z4(t,e,r,n){let i=r==="initial-execute-team"||r==="initial-request"?"SYSTEM":"DIRECTOR";return{...e,requestId:t,status:"pending",source:r,createdBy:i,updatedBy:i,createdAt:n,updatedAt:n}}function Xh(t,e){return CS(e.claimedBy)?t.status!=="pending"&&t.status!=="blocked"?Gr(`Destination ${t.id} cannot be claimed from status ${t.status}`):S({...AS(t,e),status:"claimed",claimedBy:e.claimedBy}):Gr("Claim Destination requires claimedBy")}function Yh(t,e){return CS(e.claimedBy)?t.status==="blocked"?Gr(`Destination ${t.id} cannot start work from status blocked`):c1(t)?Gr(`Destination ${t.id} cannot start work from status ${t.status}`):S({...AS(t,e),status:"in_progress",claimedBy:e.claimedBy}):Gr("Start Destination work requires claimedBy")}function Qh(t,e){return CS(e.blockedReason)?c1(t)?Gr(`Destination ${t.id} cannot be blocked from status ${t.status}`):S({...AS(t,e),status:"blocked",claimedBy:"claimedBy"in t?t.claimedBy:void 0,blockedReason:e.blockedReason}):Gr("Block Destination requires blockedReason")}function Zh(t,e){return CS(e.reachedByMoveId)?c1(t)?Gr(`Destination ${t.id} cannot be reached from status ${t.status}`):S({...AS(t,e),status:"reached",claimedBy:"claimedBy"in t?t.claimedBy:void 0,reachedByMoveId:e.reachedByMoveId}):Gr("Reach Destination requires reachedByMoveId")}function eg(t){return t.status==="active"?S({...t,status:"paused"}):Gr(`Line ${t.id} cannot be paused from status ${t.status}`)}function tg(t){return t.status==="paused"?S({...t,status:"active"}):Gr(`Line ${t.id} cannot be resumed from status ${t.status}`)}function rg(t){return t.status==="active"||t.status==="paused"?S({...t,status:"complete"}):Gr(`Line ${t.id} cannot be completed from status ${t.status}`)}function ng(t){return t.status==="active"||t.status==="paused"?S({...t,status:"abandoned"}):Gr(`Line ${t.id} cannot be abandoned from status ${t.status}`)}function e3(t){return t.status==="active"?S({...t,status:"failed"}):Gr(`Line ${t.id} cannot fail from status ${t.status}`)}function t3(t){return t.status==="active"?S(t):Gr(`TEAM line ${t.id} cannot continue from status ${t.status}`)}function n1(t){let e=Uf(t.reachedDestinationIds,"reachedDestinationIds");if(!e.ok)return Gr("Arrived MOVE must reach exactly one Destination");let r=uo(t.evidence,"evidence");return r.ok?S({...t,outcome:"arrived",reachedDestinationIds:e.value,evidence:r.value}):Gr("Arrived MOVE requires evidence")}function i1(t){let e=jo(t.failureReason,"failureReason");if(!e.ok)return Gr("Accident MOVE requires failureReason");let r=uo(t.evidence,"evidence");return r.ok?S({...t,outcome:"accident",reachedDestinationIds:[],failureReason:e.value,evidence:r.value}):Gr("Accident MOVE requires evidence")}function o1(t,e){return t.outcome==="accident"?{...t,...e,outcome:"accident",reachedDestinationIds:[],failureReason:t.failureReason}:{...t,...e,outcome:"arrived",reachedDestinationIds:t.reachedDestinationIds}}function RS(t){return t.outcome==="accident"?i1(t):n1({...t,reachedDestinationIds:t.reachedDestinationIds})}function r3(t){return{...t,status:"draft"}}function s1(t,e){return t.status!=="draft"?Gr(`Skill Draft ${t.id} cannot be accepted from status ${t.status}`):S({...t,status:"accepted",acceptedSnapshot:e})}function a1(t){return t.status!=="draft"?Gr(`Skill Draft ${t.id} cannot be discarded from status ${t.status}`):S({...t,status:"discarded"})}function AS(t,e){let{claimedBy:r,reachedByMoveId:n,blockedReason:i,canceledReason:o,supersededByDestinationId:s,...a}=t;return{...a,updatedBy:e.updatedBy,updatedAt:e.updatedAt}}function c1(t){return t.status==="reached"||t.status==="canceled"||t.status==="superseded"}function CS(t){return typeof t=="string"&&t.trim()!==""}function Gr(t){return oe({type:"DomainModelError",message:t})}function Vt(t,e){return t&&typeof t=="object"&&!Array.isArray(t)?S(t):Ee(`${e} must be an object`)}function oi(t,e){return Array.isArray(t)?S(t):Ee(`${e} must be an array`)}function un(t,e,r){return typeof e=="string"&&r.includes(e)?S(e):Ee(`${t} must be one of: ${r.join(", ")}`)}function u1(t,e){return un(e,t,R4)}function wte(t,e){return un(e,t,T4)}function Ite(t,e){return typeof t=="number"&&Number.isFinite(t)?S(t):Ee(`${e} must be a finite number`)}function o3(t,e){return t===void 0?S(void 0):typeof t=="boolean"?S(t):Ee(`${e} must be a boolean`)}function _S(t,e){return Number.isInteger(t)&&Number(t)>=0?S(Number(t)):Ee(`${e} must be a non-negative integer`)}function Bs(t,e){return t===void 0?S(void 0):typeof t=="string"?S(t):Ee(`${e} must be a string`)}function $r(t,e){if(t===void 0)return S(void 0);let r=Ie(t,e);return r.ok?S(r.value):Ee(r.error.message)}function d1(t,e){let r=Ie(t,e);return r.ok?S(r.value):Ee(r.error.message)}function ir(t,e="at"){return Bs(t,e)}function Ete(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(Ie(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function kte(t,e){return t===void 0?S(void 0):Ite(t,e)}function l1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Gi(r.value.id));if(!n.ok)return n;let i=Q(lS(r.value.title));if(!i.ok)return i;let o=Q(fS(r.value.goal));if(!o.ok)return o;let s=u1(r.value.createdBy,`${e}.createdBy`);if(!s.ok)return s;let a=Bs(r.value.createdAt,`${e}.createdAt`);return a.ok?S({id:n.value,title:i.value,goal:o.value,createdBy:s.value,createdAt:a.value}):a}function TS(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(lo(r.value.id));if(!n.ok)return n;let i=Q(h4(r.value.title,`${e}.title`));if(!i.ok)return i;let o=Rte(r.value.acceptanceCriteria,`${e}.acceptanceCriteria`);if(!o.ok)return o;let s=Ate(r.value.constraints,`${e}.constraints`);if(!s.ok)return s;let a=kte(r.value.priority,`${e}.priority`);if(!a.ok)return a;let c=r.value.notes===void 0?S(void 0):Q(v4(r.value.notes,`${e}.notes`));return c.ok?S({id:n.value,title:i.value,acceptanceCriteria:o.value,constraints:s.value,priority:a.value,notes:c.value}):c}function BS(t,e,r=!0){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=TS(n.value[s],`${e}[${s}]`);if(!a.ok)return a;i.push(a.value)}let o=HS(i.map(s=>s.id),e,"DestinationId");return o.ok?S(i):o}function Rte(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(g4(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Ate(t,e){if(t===void 0)return S(void 0);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(y4(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Cte(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=TS(r.value,e);if(!n.ok)return n;let i=Q(Gi(r.value.requestId));if(!i.ok)return i;let o=wte(r.value.source,`${e}.source`);if(!o.ok)return o;let s=u1(r.value.createdBy,`${e}.createdBy`);if(!s.ok)return s;let a=u1(r.value.updatedBy,`${e}.updatedBy`);if(!a.ok)return a;let c=un(`${e}.status`,r.value.status,_4);if(!c.ok)return c;let u=Bs(r.value.createdAt,`${e}.createdAt`);if(!u.ok)return u;let d=Bs(r.value.updatedAt,`${e}.updatedAt`);if(!d.ok)return d;let l={...n.value,requestId:i.value,source:o.value,createdBy:s.value,updatedBy:a.value,createdAt:u.value,updatedAt:d.value};switch(c.value){case"pending":return Vte(r.value,e,["claimedBy","reachedByMoveId","blockedReason","canceledReason","supersededByDestinationId"],l);case"claimed":case"in_progress":{let f=Q(Ie(r.value.claimedBy,`${e}.claimedBy`));if(!f.ok)return f;let p=Wf(r.value,e,["reachedByMoveId","blockedReason","canceledReason","supersededByDestinationId"]);return p.ok?S({...l,status:c.value,claimedBy:f.value}):p}case"reached":{let f=Q(_n(r.value.reachedByMoveId));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["blockedReason","canceledReason","supersededByDestinationId"]);return g.ok?S({...l,status:"reached",reachedByMoveId:f.value,claimedBy:p.value}):g}case"blocked":{let f=Q(jo(r.value.blockedReason,`${e}.blockedReason`));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","canceledReason","supersededByDestinationId"]);return g.ok?S({...l,status:"blocked",blockedReason:f.value,claimedBy:p.value}):g}case"superseded":{let f=Q(lo(r.value.supersededByDestinationId));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","blockedReason","canceledReason"]);return g.ok?S({...l,status:"superseded",supersededByDestinationId:f.value,claimedBy:p.value}):g}case"canceled":{let f=Q(jo(r.value.canceledReason,`${e}.canceledReason`));if(!f.ok)return f;let p=$r(r.value.claimedBy,`${e}.claimedBy`);if(!p.ok)return p;let g=Wf(r.value,e,["reachedByMoveId","blockedReason","supersededByDestinationId"]);return g.ok?S({...l,status:"canceled",canceledReason:f.value,claimedBy:p.value}):g}}}function s3(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Cte(r.value[i],`${e}[${i}]`);if(!o.ok)return o;n.push(o.value)}return S(n)}function PS(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(lo(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"DestinationId");return o.ok?S(i):o}function Pte(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(_n(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"MoveId");return o.ok?S(i):o}function _te(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let s=Q(uo(n.value,e));if(!s.ok)return s}let i=[];for(let s=0;s<n.value.length;s+=1){let a=Q(Yr(n.value[s]));if(!a.ok)return a;i.push(a.value)}let o=HS(i,e,"NodeId");return o.ok?r?Q(uo(i,e)):S(i):o}function DS(t,e,r){let n=oi(t,e);if(!n.ok)return n;if(r){let o=Q(uo(n.value,e));if(!o.ok)return o}let i=[];for(let o=0;o<n.value.length;o+=1){let s=Q(x4(n.value[o],`${e}[${o}]`));if(!s.ok)return s;i.push(s.value)}return S(i)}function NS(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Q(S4(r.value[i],`${e}[${i}]`));if(!o.ok)return o;n.push(o.value)}return S(n)}function Tte(t,e){return t===void 0?S(void 0):NS(t,e)}function a3(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"destination":{let n=Q(lo(r.value.id));return n.ok?S({type:"destination",id:n.value}):n}case"move":{let n=Q(_n(r.value.id));return n.ok?S({type:"move",id:n.value}):n}case"line":{let n=Q(dr(r.value.id));return n.ok?S({type:"line",id:n.value}):n}case"node":{let n=Q(Yr(r.value.id));return n.ok?S({type:"node",id:n.value}):n}default:return Ee(`${e}.type must be destination, move, line, or node`)}}function ru(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=un(`${e}.provider`,r.value.provider,["codex","local"]);if(!n.ok)return n;let i=Q(qh(r.value.conversationHash));if(!i.ok)return i;let o=$r(r.value.threadId,`${e}.threadId`);if(!o.ok)return o;let s=Q(Ie(r.value.contextHash,`${e}.contextHash`));if(!s.ok)return s;let a=r.value.worktreeHash===void 0?S(void 0):Q(Ud(r.value.worktreeHash));if(!a.ok)return a;let c=Q(Ie(r.value.startedAt,`${e}.startedAt`));if(!c.ok)return c;let u=$r(r.value.endedAt,`${e}.endedAt`);if(!u.ok)return u;let d={conversationHash:i.value,contextHash:s.value,worktreeHash:a.value,startedAt:c.value};return n.value==="local"?o.value!==void 0?Ee(`${e}.threadId is only valid for codex conversations`):u.value===void 0?S({provider:"local",...d}):S({provider:"local",...d,endedAt:u.value}):u.value===void 0?S({provider:"codex",...d,threadId:o.value}):S({provider:"codex",...d,threadId:o.value,endedAt:u.value})}function OS(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ud(r.value.worktreeHash));if(!n.ok)return n;let i=Q(Ie(r.value.path,`${e}.path`));if(!i.ok)return i;let o=Q(Ie(r.value.branch,`${e}.branch`));if(!o.ok)return o;let s=Q(Ie(r.value.baseRef,`${e}.baseRef`));if(!s.ok)return s;let a=Q(Ie(r.value.createdAt,`${e}.createdAt`));if(!a.ok)return a;let c=$r(r.value.removedAt,`${e}.removedAt`);if(!c.ok)return c;let u={worktreeHash:n.value,path:i.value,branch:o.value,baseRef:s.value,createdAt:a.value};return c.value===void 0?S(u):S({...u,removedAt:c.value})}function f1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=un(`${e}.kind`,r.value.kind,["local-snapshot","local-root-installed","registry-package","skillMeta"]);if(!n.ok)return n;let i=Q(Ie(r.value.name,`${e}.name`));if(!i.ok)return i;if(n.value==="skillMeta"){let l=Q(Ie(r.value.source,`${e}.source`));if(!l.ok)return l;let f=un(`${e}.agent`,r.value.agent,["codex"]);return f.ok?S({kind:"skillMeta",name:i.value,source:l.value,agent:f.value}):f}if(n.value==="local-root-installed"){let l=$r(r.value.sourcePath,`${e}.sourcePath`);return l.ok?S({kind:"local-root-installed",name:i.value,sourcePath:l.value}):l}if(n.value==="local-snapshot"){let l=Q(Ie(r.value.sourcePath,`${e}.sourcePath`));if(!l.ok)return l;let f=Q(Ie(r.value.contentHash,`${e}.contentHash`));if(!f.ok)return f;let p=Q(Ie(r.value.snapshotRef,`${e}.snapshotRef`));if(!p.ok)return p;let g=r.value.snapshotFiles===void 0?S(void 0):Lte(r.value.snapshotFiles,`${e}.snapshotFiles`);return g.ok?S({kind:"local-snapshot",name:i.value,sourcePath:l.value,contentHash:f.value,snapshotRef:p.value,snapshotFiles:g.value}):g}let o=un(`${e}.registryKind`,r.value.registryKind,["apm"]);if(!o.ok)return o;let s=Q(Ie(r.value.registry,`${e}.registry`));if(!s.ok)return s;let a=Q(Ie(r.value.package,`${e}.package`));if(!a.ok)return a;let c=Q(Ie(r.value.version,`${e}.version`));if(!c.ok)return c;if(!Hte(String(c.value)))return Ee(`${e}.version must be an exact semver version`);let u=Q(Ie(r.value.integrity,`${e}.integrity`));if(!u.ok)return u;let d=Q(Ie(r.value.contentHash,`${e}.contentHash`));return d.ok?r.value.snapshotFiles!==void 0?Ee(`${e}.snapshotFiles is not supported for registry-package skills`):S({kind:"registry-package",registryKind:o.value,name:i.value,registry:s.value,package:a.value,version:c.value,integrity:u.value,contentHash:d.value}):d}function nu(t,e,r){if(t===void 0)return S(void 0);let n=Vt(t,e);if(!n.ok)return n;let i=Q(Ie(n.value.origin,`${e}.origin`));if(!i.ok)return i;let o=un(`${e}.kind`,n.value.kind,["team","member","manager","skill"]);if(!o.ok)return o;if(r&&!r.includes(o.value))return Ee(`${e}.kind must be ${r.join(" or ")}`);let s=Q(Ie(n.value.key,`${e}.key`));if(!s.ok)return s;let a=Q(Ie(n.value.version,`${e}.version`));if(!a.ok)return a;let c=Q(Ie(n.value.integrity,`${e}.integrity`));return c.ok?S({origin:i.value,kind:o.value,key:s.value,version:a.value,integrity:c.value}):c}function c3(t,e){if(t===void 0)return S([]);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.executorId,`${e}[${i}].executorId`));if(!s.ok)return s;let a=nu(o.value.lock,`${e}[${i}].lock`,["member"]);if(!a.ok)return a;if(!a.value)return Ee(`${e}[${i}].lock is required`);n.push({executorId:s.value,lock:a.value})}return S(n)}function u3(t,e){if(t===void 0)return S([]);let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.name,`${e}[${i}].name`));if(!s.ok)return s;let a=nu(o.value.lock,`${e}[${i}].lock`,["skill"]);if(!a.ok)return a;if(!a.value)return Ee(`${e}[${i}].lock is required`);n.push({name:s.value,lock:a.value})}return S(n)}function MS(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ie(r.value.name,`${e}.name`));if(!n.ok)return n;let i=Q(Ie(r.value.url,`${e}.url`));if(!i.ok)return i;let o=un(`${e}.transport`,r.value.transport,["http","ssh"]);if(!o.ok)return o;let s=$r(r.value.identity,`${e}.identity`);return s.ok?S({name:n.value,url:i.value,transport:o.value,identity:s.value}):s}function ig(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(w4(r.value.id));if(!n.ok)return n;let i=Ute(r.value.owner,`${e}.owner`);if(!i.ok)return i;let o=un(`${e}.kind`,r.value.kind,M4);if(!o.ok)return o;let s=$r(r.value.path,`${e}.path`);if(!s.ok)return s;let a=$r(r.value.text,`${e}.text`);return a.ok?s.value===void 0&&a.value===void 0?Ee(`${e} must include path, text, or both`):s.value!==void 0&&a.value!==void 0?S({id:n.value,owner:i.value,kind:o.value,path:s.value,text:a.value}):s.value!==void 0?S({id:n.value,owner:i.value,kind:o.value,path:s.value}):S({id:n.value,owner:i.value,kind:o.value,text:a.value}):a}function d3(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(I4(r.value.id));if(!n.ok)return n;let i=Q(Ie(r.value.title,`${e}.title`));if(!i.ok)return i;let o=un(`${e}.kind`,r.value.kind,L4);if(!o.ok)return o;let s=un(`${e}.sourceScope`,r.value.sourceScope,H4);if(!s.ok)return s;let a=$te(r.value.env,`${e}.env`);if(!a.ok)return a;let c=Fte(r.value.runner,`${e}.runner`);if(!c.ok)return c;let u=jte(r.value.aliases,`${e}.aliases`);if(!u.ok)return u;let d=Bte(a.value,u.value,`${e}.env`);if(!d.ok)return d;let l=qte(r.value.evidence,`${e}.evidence`);if(!l.ok)return l;let f=_S(r.value.displayOrder,`${e}.displayOrder`);return f.ok?o.value==="check"&&c.value.type!=="command"?Ee(`${e}.runner.type must be command for check actions`):S({id:n.value,title:i.value,kind:o.value,sourceScope:s.value,env:a.value,runner:c.value,aliases:u.value,evidence:l.value,displayOrder:f.value}):f}function Bte(t,e,r){let n=new Set(Object.keys(e??{}));for(let[i,o]of Object.entries(t??{})){if("alias"in o&&!n.has(String(o.alias)))return Ee(`${r}.${i}.alias references unknown alias: ${o.alias}`);if("fromAliasUrl"in o&&!n.has(String(o.fromAliasUrl)))return Ee(`${r}.${i}.fromAliasUrl references unknown alias: ${o.fromAliasUrl}`)}return S(void 0)}function p1(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(dr(r.value.id));if(!n.ok)return n;let i=Q(Gi(r.value.requestId));if(!i.ok)return i;let o=r.value.teamName===void 0?S(void 0):Q(cn(r.value.teamName,`${e}.teamName`));if(!o.ok)return o;let s=un(`${e}.status`,r.value.status,B4);if(!s.ok)return s;let a=Pte(r.value.moveIds,`${e}.moveIds`,!1);if(!a.ok)return a;let c=Q(Yr(r.value.rootNodeId));if(!c.ok)return c;let u=Q(Yr(r.value.currentNodeId));if(!u.ok)return u;let d=_te(r.value.nodeIds,`${e}.nodeIds`,!0);if(!d.ok)return d;let l=y3(r.value.parentLineId);if(!l.ok)return l;let f=og(r.value.forkedFromMoveId);if(!f.ok)return f;if(f.value!==void 0&&l.value===void 0)return Ee(`${e}.parentLineId is required when forkedFromMoveId is present`);let p={id:n.value,requestId:i.value,teamName:o.value,moveIds:a.value,rootNodeId:c.value,currentNodeId:u.value,nodeIds:d.value};if(l.value!==void 0){let v={...p,parentLineId:l.value,forkedFromMoveId:f.value};return i3(v,s.value)}return i3(p,s.value)}function l3(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(eu(r.value.id));if(!n.ok)return n;let i=Q(Ie(r.value.name,`${e}.name`));if(!i.ok)return i;let o=$r(r.value.sourcePath,`${e}.sourcePath`);if(!o.ok)return o;let s=Q(Ie(r.value.draftPath,`${e}.draftPath`));if(!s.ok)return s;let a=Mte(r.value.createdFromNodeId);if(!a.ok)return a;let c=Bs(r.value.createdAt,`${e}.createdAt`);if(!c.ok)return c;let u=un(`${e}.status`,r.value.status,O4);if(!u.ok)return u;let d={id:n.value,name:i.value,sourcePath:o.value,draftPath:s.value,createdFromNodeId:a.value,createdAt:c.value};switch(u.value){case"accepted":{let l=f1(r.value.acceptedSnapshot,`${e}.acceptedSnapshot`);return l.ok?S({...d,status:"accepted",acceptedSnapshot:l.value}):l}case"draft":return r.value.acceptedSnapshot!==void 0?Ee(`${e}.acceptedSnapshot is only valid for accepted Skill Drafts`):S({...d,status:"draft"});case"discarded":return r.value.acceptedSnapshot!==void 0?Ee(`${e}.acceptedSnapshot is only valid for accepted Skill Drafts`):S({...d,status:"discarded"})}}function f3(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(jh(n.value.id));if(!i.ok)return i;let o=Q(dr(n.value.sourceLineId));if(!o.ok)return o;let s=Q(Yr(n.value.sourceNodeId));if(!s.ok)return s;let a=og(n.value.sourceMoveId);if(!a.ok)return a;let c=a3(n.value.target,`${e}.target`);if(!c.ok)return c;let u=Q(cn(n.value.newTeamName,`${e}.newTeamName`));if(!u.ok)return u;let d=Q(Fo(n.value.summary,`${e}.summary`));if(!d.ok)return d;let l=m1(n.value.teamSnapshot,`${e}.teamSnapshot`,r);if(!l.ok)return l;let f=h3(n.value.changedFiles,`${e}.changedFiles`);if(!f.ok)return f;let p=Bs(n.value.createdAt,`${e}.createdAt`);if(!p.ok)return p;let g=Bs(n.value.updatedAt,`${e}.updatedAt`);if(!g.ok)return g;let v=un(`${e}.status`,n.value.status,N4);if(!v.ok)return v;let b={id:i.value,sourceLineId:o.value,sourceNodeId:s.value,sourceMoveId:a.value,target:c.value,newTeamName:u.value,summary:d.value,teamSnapshot:l.value,changedFiles:f.value,createdAt:p.value,updatedAt:g.value};switch(v.value){case"ready":{let B=Q(qo(n.value.hunsuId));if(!B.ok)return B;let _=Q(dr(n.value.newLineId));if(!_.ok)return _;if(n.value.conversationRef===void 0)return Ee(`${e}.conversationRef is required for ready HUNSU Drafts`);let F=ru(n.value.conversationRef,`${e}.conversationRef`);return F.ok?F.value?S({...b,status:"ready",hunsuId:B.value,newLineId:_.value,conversationRef:F.value}):Ee(`${e}.conversationRef is required for ready HUNSU Drafts`):F}case"confirmed":{let B=Q(qo(n.value.hunsuId));if(!B.ok)return B;let _=Q(dr(n.value.newLineId));if(!_.ok)return _;if(n.value.conversationRef===void 0)return Ee(`${e}.conversationRef is required for confirmed HUNSU Drafts`);let F=ru(n.value.conversationRef,`${e}.conversationRef`);return F.ok?F.value?S({...b,status:"confirmed",hunsuId:B.value,newLineId:_.value,conversationRef:F.value}):Ee(`${e}.conversationRef is required for confirmed HUNSU Drafts`):F}case"draft":return n.value.hunsuId!==void 0||n.value.newLineId!==void 0||n.value.conversationRef!==void 0?Ee(`${e} draft status cannot carry hunsuId, newLineId, or conversationRef`):S({...b,status:"draft"});case"discarded":if(n.value.hunsuId!==void 0||n.value.newLineId!==void 0)return Ee(`${e} discarded status cannot carry hunsuId or newLineId`);if(n.value.conversationRef===void 0)return S({...b,status:"discarded"});let C=ru(n.value.conversationRef,`${e}.conversationRef`);return C.ok?S({...b,status:"discarded",conversationRef:C.value}):C}}function p3(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(_n(n.value.id));if(!i.ok)return i;let o=Q(dr(n.value.lineId));if(!o.ok)return o;let s=Q(Yr(n.value.fromNodeId));if(!s.ok)return s;let a=Q(Yr(n.value.toNodeId));if(!a.ok)return a;let c=n.value.teamName===void 0?S(void 0):Q(cn(n.value.teamName,`${e}.teamName`));if(!c.ok)return c;let u=n.value.ordinal===void 0?S(void 0):_S(n.value.ordinal,`${e}.ordinal`);if(!u.ok)return u;let d=n.value.snapshot===void 0?S(void 0):m1(n.value.snapshot,`${e}.snapshot`,r);if(!d.ok)return d;let l=Ote(n.value.sourceHunsuId);if(!l.ok)return l;let f=LS(n.value.executeId);if(!f.ok)return f;let p=ru(n.value.conversationRef,`${e}.conversationRef`);if(!p.ok)return p;let g=OS(n.value.worktree,`${e}.worktree`);if(!g.ok)return g;let v=Q(Fo(n.value.summary,`${e}.summary`));if(!v.ok)return v;let b=Q(Hd(n.value.commit,`${e}.commit`));if(!b.ok)return b;let C=DS(n.value.evidence,`${e}.evidence`,!0);if(!C.ok)return C;let B=Tte(n.value.risks,`${e}.risks`);if(!B.ok)return B;let _=un(`${e}.recordedBy`,n.value.recordedBy,["SYSTEM"]);if(!_.ok)return _;let F=Bs(n.value.recordedAt,`${e}.recordedAt`);if(!F.ok)return F;let he=un(`${e}.outcome`,n.value.outcome,D4);if(!he.ok)return he;let z={id:i.value,lineId:o.value,fromNodeId:s.value,toNodeId:a.value,teamName:c.value,ordinal:u.value,snapshot:d.value,sourceHunsuId:l.value,executeId:f.value,conversationRef:p.value,worktree:g.value,summary:v.value,commit:b.value,evidence:C.value,risks:B.value,recordedBy:_.value,recordedAt:F.value};if(he.value==="arrived"){let R=PS(n.value.reachedDestinationIds,`${e}.reachedDestinationIds`,!0);if(!R.ok)return R;let V=Q(Uf(R.value,`${e}.reachedDestinationIds`));return V.ok?n.value.failureReason!==void 0?Ee(`${e}.failureReason is only valid for accident MOVEs`):S({...z,outcome:"arrived",reachedDestinationIds:V.value}):V}let Ae=PS(n.value.reachedDestinationIds,`${e}.reachedDestinationIds`,!1);if(!Ae.ok)return Ae;if(Ae.value.length!==0)return Ee(`${e}.reachedDestinationIds must be empty for accident MOVEs`);let de=Q(jo(n.value.failureReason,`${e}.failureReason`));return de.ok?S({...z,outcome:"accident",reachedDestinationIds:[],failureReason:de.value}):de}function m3(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(qo(n.value.id));if(!i.ok)return i;let o=Nte(n.value.hunsuDraftId);if(!o.ok)return o;let s=ru(n.value.conversationRef,`${e}.conversationRef`);if(!s.ok)return s;let a=Q(dr(n.value.lineId));if(!a.ok)return a;let c=Q(Yr(n.value.fromNodeId));if(!c.ok)return c;let u=Q(Yr(n.value.toNodeId));if(!u.ok)return u;let d=a3(n.value.target,`${e}.target`);if(!d.ok)return d;let l=Q(Fo(n.value.summary,`${e}.summary`));if(!l.ok)return l;let f=n.value.newLineId===void 0?S(void 0):Q(dr(n.value.newLineId));if(!f.ok)return f;let p=og(n.value.sourceMoveId);if(!p.ok)return p;let g=n.value.newTeamName===void 0?S(void 0):Q(cn(n.value.newTeamName,`${e}.newTeamName`));if(!g.ok)return g;let v=m1(n.value.teamSnapshot,`${e}.teamSnapshot`,r);if(!v.ok)return v;let b=h3(n.value.changedFiles,`${e}.changedFiles`);if(!b.ok)return b;let C=un(`${e}.recordedBy`,n.value.recordedBy,["DIRECTOR"]);if(!C.ok)return C;let B=Bs(n.value.recordedAt,`${e}.recordedAt`);return B.ok?S({id:i.value,hunsuDraftId:o.value,conversationRef:s.value,lineId:a.value,fromNodeId:c.value,toNodeId:u.value,target:d.value,summary:l.value,newLineId:f.value,sourceMoveId:p.value,newTeamName:g.value,teamSnapshot:v.value,changedFiles:b.value,recordedBy:C.value,recordedAt:B.value}):B}function h3(t,e){let r=oi(t,e);if(!r.ok)return r;if(r.value.length===0)return Ee(`${e} must contain at least one changed file`);let n=[];for(let i=0;i<r.value.length;i+=1){let o=Dte(r.value[i],`${e}[${i}]`);if(!o.ok)return o;n.push(o.value)}return S(n)}function Dte(t,e){let r=Vt(t,e);if(!r.ok)return r;let n=Q(Ie(r.value.path,`${e}.path`));if(!n.ok)return n;let i=un(`${e}.kind`,r.value.kind,["added","updated","removed"]);if(!i.ok)return i;let o=Q(Fo(r.value.summary,`${e}.summary`));return o.ok?S({path:n.value,kind:i.value,summary:o.value}):o}function g3(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(Yr(n.value.id));if(!i.ok)return i;let o=Q(Gi(n.value.requestId));if(!o.ok)return o;let s=y3(n.value.lineId);if(!s.ok)return s;let a=n.value.teamName===void 0?S(void 0):Q(cn(n.value.teamName,`${e}.teamName`));if(!a.ok)return a;let c=_S(n.value.ordinal,`${e}.ordinal`);if(!c.ok)return c;let u=s3(n.value.destinations,`${e}.destinations`);if(!u.ok)return u;let d=r(n.value.harness);if(!d.ok)return d;let l=v3(n.value.harnessGraph,d.value,`${e}.harnessGraph`);if(!l.ok)return l;let f=nu(n.value.harnessLock,`${e}.harnessLock`,["team"]);if(!f.ok)return f;let p=c3(n.value.executorPackageBindings,`${e}.executorPackageBindings`);if(!p.ok)return p;let g=u3(n.value.resourcePackageBindings,`${e}.resourcePackageBindings`);if(!g.ok)return g;let v=sg(n.value.artifactActions??[],`${e}.artifactActions`);if(!v.ok)return v;let b=Wte(n.value.source,`${e}.source`);if(!b.ok)return b;let C=Bs(n.value.createdAt,`${e}.createdAt`);return C.ok?S({id:i.value,requestId:o.value,lineId:s.value,teamName:a.value,ordinal:c.value,destinations:u.value,harness:d.value,harnessGraph:l.value,harnessLock:f.value,executorPackageBindings:p.value,resourcePackageBindings:g.value,artifactActions:v.value,source:b.value,createdAt:C.value}):C}function Nte(t){return t===void 0?S(void 0):Q(jh(t))}function Ote(t){return t===void 0?S(void 0):Q(qo(t))}function og(t){return t===void 0?S(void 0):Q(_n(t))}function y3(t){return t===void 0?S(void 0):Q(dr(t))}function Mte(t){return t===void 0?S(void 0):Q(Yr(t))}function LS(t){return t===void 0?S(void 0):Q(E4(t))}function m1(t,e,r){let n=Vt(t,e);if(!n.ok)return n;let i=Q(cn(n.value.teamName,`${e}.teamName`));if(!i.ok)return i;let o=_S(n.value.moveOrdinal,`${e}.moveOrdinal`);if(!o.ok)return o;let s=s3(n.value.destinations,`${e}.destinations`);if(!s.ok)return s;let a=r(n.value.harness);if(!a.ok)return a;let c=v3(n.value.harnessGraph,a.value,`${e}.harnessGraph`);if(!c.ok)return c;let u=nu(n.value.harnessLock,`${e}.harnessLock`,["team"]);if(!u.ok)return u;let d=c3(n.value.executorPackageBindings,`${e}.executorPackageBindings`);if(!d.ok)return d;let l=u3(n.value.resourcePackageBindings,`${e}.resourcePackageBindings`);if(!l.ok)return l;let f=sg(n.value.artifactActions??[],`${e}.artifactActions`);return f.ok?S({teamName:i.value,moveOrdinal:o.value,destinations:s.value,harness:a.value,harnessGraph:c.value,harnessLock:u.value,executorPackageBindings:d.value,resourcePackageBindings:l.value,artifactActions:f.value}):f}function v3(t,e,r){return t===void 0?S(Ts(e)):Fd(t,r)}function sg(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=d3(r.value[i],`${e}[${i}]`);if(!o.ok)return o;if(n.some(s=>s.id===o.value.id))return Ee(`${e} contains duplicate ArtifactActionId: ${o.value.id}`);n.push(o.value)}return S(n)}function Lte(t,e){let r=oi(t,e);if(!r.ok)return r;let n=[];for(let i=0;i<r.value.length;i+=1){let o=Vt(r.value[i],`${e}[${i}]`);if(!o.ok)return o;let s=Q(Ie(o.value.path,`${e}[${i}].path`));if(!s.ok)return s;let a=o.value.text;if(typeof a!="string")return Ee(`${e}[${i}].text must be a string`);n.push({path:s.value,text:a})}return S(n)}function Hte(t){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(t)}function Ute(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"move":{let n=Q(_n(r.value.id));return n.ok?S({type:"move",id:n.value}):n}case"hunsu":{let n=Q(qo(r.value.id));return n.ok?S({type:"hunsu",id:n.value}):n}case"line":{let n=Q(dr(r.value.id));return n.ok?S({type:"line",id:n.value}):n}default:return Ee(`${e}.type must be move, hunsu, or line`)}}function $te(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n={};for(let[i,o]of Object.entries(r.value)){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(i))return Ee(`${e}.${i} must be a valid environment variable name`);let s=Vt(o,`${e}.${i}`);if(!s.ok)return s;if(["default","value","required","alias","fromAliasUrl"].filter(c=>c in s.value).length!==1)return Ee(`${e}.${i} must declare exactly one of default, value, required, alias, or fromAliasUrl`);if("default"in s.value){let c=n3(s.value.default,`${e}.${i}.default`);if(!c.ok)return c;n[i]={default:c.value}}else if("value"in s.value){let c=n3(s.value.value,`${e}.${i}.value`);if(!c.ok)return c;n[i]={value:c.value}}else if("alias"in s.value){let c=Q(Ie(s.value.alias,`${e}.${i}.alias`));if(!c.ok)return c;n[i]={alias:c.value}}else if("fromAliasUrl"in s.value){let c=Q(Ie(s.value.fromAliasUrl,`${e}.${i}.fromAliasUrl`));if(!c.ok)return c;n[i]={fromAliasUrl:c.value}}else{if(s.value.required!==!0)return Ee(`${e}.${i}.required must be true`);let c=o3(s.value.secret,`${e}.${i}.secret`);if(!c.ok)return c;n[i]={required:!0,secret:c.value}}}return S(n)}function Fte(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"docker_compose":{let n=Q(Ie(r.value.file,`${e}.file`));if(!n.ok)return n;let i=$r(r.value.projectName,`${e}.projectName`);return i.ok?S({type:"docker_compose",file:n.value,projectName:i.value}):i}case"command":{let n=Q(Ie(r.value.command,`${e}.command`));if(!n.ok)return n;let i=$r(r.value.stopCommand,`${e}.stopCommand`);return i.ok?S({type:"command",command:n.value,stopCommand:i.value}):i}default:return Ee(`${e}.type must be docker_compose or command`)}}function jte(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n={};for(let[i,o]of Object.entries(r.value)){if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return Ee(`${e}.${i} must start with a letter and contain only letters, numbers, "_" or "-"`);let s=Vt(o,`${e}.${i}`);if(!s.ok)return s;let a="target"in s.value,c="service"in s.value,u="containerPort"in s.value;if(a&&(c||u||"healthPath"in s.value))return Ee(`${e}.${i} must not mix target with docker service fields`);if(a){let p=Q(Ie(s.value.target,`${e}.${i}.target`));if(!p.ok)return p;n[i]={target:p.value};continue}if(!c||!u)return Ee(`${e}.${i} must declare either target or both service and containerPort`);let d=Q(Ie(s.value.service,`${e}.${i}.service`));if(!d.ok)return d;let l=Q(Ba(s.value.containerPort,`${e}.${i}.containerPort`));if(!l.ok)return l;let f=$r(s.value.healthPath,`${e}.${i}.healthPath`);if(!f.ok)return f;n[i]={service:d.value,containerPort:l.value,healthPath:f.value}}return S(n)}function qte(t,e){if(t===void 0)return S(void 0);let r=Vt(t,e);if(!r.ok)return r;let n=Ete(r.value.paths,`${e}.paths`);if(!n.ok)return n;let i=o3(r.value.attach,`${e}.attach`);return i.ok?S({attach:i.value,paths:n.value}):i}function n3(t,e){return typeof t=="string"||typeof t=="number"||typeof t=="boolean"?S(t):Ee(`${e} must be a string, number, or boolean`)}function HS(t,e,r){let n=new Set;for(let i of t){if(n.has(i))return Ee(`${e} contains duplicate ${r}: ${i}`);n.add(i)}return S(void 0)}function Wte(t,e){let r=Vt(t,e);if(!r.ok)return r;switch(r.value.type){case"initial-execute-team":case"request":{let n=Q(Gi(r.value.requestId));return n.ok?S({type:r.value.type,requestId:n.value}):n}case"move":{let n=Q(_n(r.value.moveId));if(!n.ok)return n;let i=Q(Yr(r.value.fromNodeId));return i.ok?S({type:"move",moveId:n.value,fromNodeId:i.value}):i}case"hunsu":{let n=Q(qo(r.value.hunsuId));if(!n.ok)return n;let i=Q(Yr(r.value.fromNodeId));return i.ok?S({type:"hunsu",hunsuId:n.value,fromNodeId:i.value}):i}default:return Ee(`${e}.type must be a supported node source type`)}}function i3(t,e){switch(e){case"active":return S({...t,status:"active"});case"paused":return S({...t,status:"paused"});case"complete":return S({...t,status:"complete"});case"failed":return S({...t,status:"failed"});case"abandoned":return S({...t,status:"abandoned"})}}function Vte(t,e,r,n){let i=Wf(t,e,r);return i.ok?S({...n,status:"pending"}):i}function Wf(t,e,r){let n=r.find(i=>t[i]!==void 0);return n?Ee(`${e}.${n} is not valid for this lifecycle status`):S(void 0)}function Q(t){return t.ok?S(t.value):Ee(t.error.message)}function x3(t,e){let r=Vt(t,"Command");if(!r.ok)return r;switch(r.value.type){case"RegisterHunsuOrigin":{let n=MS(r.value.origin,"origin");if(!n.ok)return n;let i=$r(r.value.actor,"actor");if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"RegisterHunsuOrigin",origin:n.value,actor:i.value,at:o.value}):o}case"CreateInitialTeam":{let n=Ut(Gi(r.value.requestId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=Ut(lS(r.value.title));if(!o.ok)return o;let s=Ut(fS(r.value.goal));if(!s.ok)return s;let a=BS(r.value.destinations,"destinations");if(!a.ok)return a;let c=r.value.harness===void 0?S(void 0):e(r.value.harness);if(!c.ok)return c;let u=nu(r.value.harnessLock,"harnessLock",["team"]);if(!u.ok)return u;let d=r.value.teamName===void 0?S(void 0):Ut(cn(r.value.teamName));if(!d.ok)return d;let l=$r(r.value.actor,"actor");if(!l.ok)return l;let f=ir(r.value.at);return f.ok?S({type:"CreateInitialTeam",requestId:n.value,lineId:i.value,title:o.value,goal:s.value,destinations:a.value,harness:c.value,harnessLock:u.value,teamName:d.value,actor:l.value,at:f.value}):f}case"StartLine":{let n=Ut(Gi(r.value.requestId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=r.value.teamName===void 0?S(void 0):Ut(cn(r.value.teamName));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"StartLine",lineId:i.value,requestId:n.value,teamName:o.value,at:s.value}):s}case"PauseLine":case"ResumeLine":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=ir(r.value.at);return i.ok?S({type:r.value.type,lineId:n.value,at:i.value}):i}case"AcceptLine":case"RejectLine":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=$r(r.value.reason,"reason");if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:r.value.type,lineId:n.value,reason:i.value,at:o.value}):o}case"ClaimDestination":case"StartDestinationWork":{let n=Ut(lo(r.value.destinationId));if(!n.ok)return n;let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:r.value.type,destinationId:n.value,actor:i.value,at:o.value}):o}case"ReportDestinationBlocked":{let n=Ut(lo(r.value.destinationId));if(!n.ok)return n;let i=Ut(jo(r.value.reason,"reason"));if(!i.ok)return i;let o=Ut(Ie(r.value.actor,"actor"));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"ReportDestinationBlocked",destinationId:n.value,reason:i.value,actor:o.value,at:s.value}):s}case"RecordMove":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=Ut(_n(r.value.moveId));if(!i.ok)return i;let o=Ut(Fo(r.value.summary));if(!o.ok)return o;let s=Ut(Hd(r.value.commit,"commit"));if(!s.ok)return s;let a=PS(r.value.reachedDestinationIds,"reachedDestinationIds",!0);if(!a.ok)return a;let c=Ut(Uf(a.value,"reachedDestinationIds"));if(!c.ok)return c;let u=DS(r.value.evidence,"evidence",!0);if(!u.ok)return u;let d=r.value.risks===void 0?S(void 0):NS(r.value.risks,"risks");if(!d.ok)return d;let l=LS(r.value.executeId);if(!l.ok)return l;let f=ru(r.value.conversationRef,"conversationRef");if(!f.ok)return f;let p=OS(r.value.worktree,"worktree");if(!p.ok)return p;let g=Ut(Ie(r.value.actor,"actor"));if(!g.ok)return g;let v=ir(r.value.at);return v.ok?S({type:"RecordMove",lineId:n.value,moveId:i.value,summary:o.value,commit:s.value,reachedDestinationIds:c.value,evidence:u.value,risks:d.value,executeId:l.value,conversationRef:f.value,worktree:p.value,actor:g.value,at:v.value}):v}case"RecordAccident":{let n=Ut(dr(r.value.lineId));if(!n.ok)return n;let i=Ut(_n(r.value.moveId));if(!i.ok)return i;let o=Ut(Fo(r.value.summary));if(!o.ok)return o;let s=Ut(Hd(r.value.commit,"commit"));if(!s.ok)return s;let a=DS(r.value.evidence,"evidence",!0);if(!a.ok)return a;let c=Ut(jo(r.value.failureReason));if(!c.ok)return c;let u=r.value.risks===void 0?S(void 0):NS(r.value.risks,"risks");if(!u.ok)return u;let d=LS(r.value.executeId);if(!d.ok)return d;let l=ru(r.value.conversationRef,"conversationRef");if(!l.ok)return l;let f=OS(r.value.worktree,"worktree");if(!f.ok)return f;let p=Ut(Ie(r.value.actor,"actor"));if(!p.ok)return p;let g=ir(r.value.at);return g.ok?S({type:"RecordAccident",lineId:n.value,moveId:i.value,summary:o.value,commit:s.value,evidence:a.value,failureReason:c.value,risks:u.value,executeId:d.value,conversationRef:l.value,worktree:f.value,actor:p.value,at:g.value}):g}case"AttachMoveEvidence":{let n=Ut(_n(r.value.moveId));if(!n.ok)return n;let i=ig(r.value.artifact,"artifact");if(!i.ok)return i;let o=Ut(Ie(r.value.actor,"actor"));if(!o.ok)return o;let s=ir(r.value.at);return s.ok?S({type:"AttachMoveEvidence",moveId:n.value,artifact:i.value,actor:o.value,at:s.value}):s}case"ConfirmHunsuDraft":{let n=f3(r.value.draft,"draft",e);if(!n.ok)return n;if(n.value.status!=="ready")return Ee(`HUNSU Draft ${n.value.id} cannot be confirmed from status ${n.value.status}`);let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"ConfirmHunsuDraft",draft:n.value,actor:i.value,at:o.value}):o}case"CreateSkillDraft":{let n=Ut(eu(r.value.draftId));if(!n.ok)return n;let i=Ut(dr(r.value.lineId));if(!i.ok)return i;let o=Ut(Ie(r.value.name,"name"));if(!o.ok)return o;let s=Ut(Ie(r.value.draftPath,"draftPath"));if(!s.ok)return s;let a=$r(r.value.sourcePath,"sourcePath");if(!a.ok)return a;let c=Ut(Ie(r.value.actor,"actor"));if(!c.ok)return c;let u=ir(r.value.at);return u.ok?S({type:"CreateSkillDraft",draftId:n.value,lineId:i.value,name:o.value,draftPath:s.value,sourcePath:a.value,actor:c.value,at:u.value}):u}case"DiscardSkillDraft":{let n=Ut(eu(r.value.draftId));if(!n.ok)return n;let i=Ut(Ie(r.value.actor,"actor"));if(!i.ok)return i;let o=ir(r.value.at);return o.ok?S({type:"DiscardSkillDraft",draftId:n.value,actor:i.value,at:o.value}):o}case"RecordArtifact":{let n=ig(r.value.artifact,"artifact");if(!n.ok)return n;let i=ir(r.value.at);return i.ok?S({type:"RecordArtifact",artifact:n.value,at:i.value}):i}default:return Ee(`Unsupported command type: ${String(r.value.type)}`)}}function Ut(t){return t.ok?S(t.value):Ee(t.error.message)}function S3(t,e){let r=Vt(t,"DomainEvent");if(!r.ok)return r;switch(r.value.type){case"HunsuOriginRegistered":{let n=MS(r.value.origin,"event.origin");if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"HunsuOriginRegistered",origin:n.value,at:i.value}):i}case"InitialTeamCreated":{let n=l1(r.value.request,"event.request");if(!n.ok)return n;let i=p1(r.value.line,"event.line");if(!i.ok)return i;let o=BS(r.value.destinations,"event.destinations");if(!o.ok)return o;let s=r.value.harness===void 0?S(void 0):e(r.value.harness);if(!s.ok)return s;let a=nu(r.value.harnessLock,"event.harnessLock",["team"]);if(!a.ok)return a;let c=ir(r.value.at,"event.at");return c.ok?S({type:"InitialTeamCreated",request:n.value,line:i.value,destinations:o.value,harness:s.value,harnessLock:a.value,at:c.value}):c}case"RequestCreated":{let n=l1(r.value.request,"event.request");return n.ok?S({type:"RequestCreated",request:n.value}):n}case"DestinationDeclared":{let n=Gn(Gi(r.value.requestId));if(!n.ok)return n;let i=TS(r.value.destination,"event.destination");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"DestinationDeclared",requestId:n.value,destination:i.value,at:o.value}):o}case"HarnessSeeded":{let n=Gn(Gi(r.value.requestId));if(!n.ok)return n;let i=e(r.value.harness);if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"HarnessSeeded",requestId:n.value,harness:i.value,at:o.value}):o}case"LineStarted":{let n=p1(r.value.line,"event.line");return n.ok?S({type:"LineStarted",line:n.value}):n}case"SkillDraftCreated":{let n=l3(r.value.draft,"event.draft");return n.ok?S({type:"SkillDraftCreated",draft:n.value}):n}case"SkillDraftAccepted":{let n=Gn(eu(r.value.draftId));if(!n.ok)return n;let i=f1(r.value.skill,"event.skill");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"SkillDraftAccepted",draftId:n.value,skill:i.value,at:o.value}):o}case"SkillDraftDiscarded":{let n=Gn(eu(r.value.draftId));if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"SkillDraftDiscarded",draftId:n.value,at:i.value}):i}case"NodeCreated":{let n=g3(r.value.node,"event.node",e);return n.ok?S({type:"NodeCreated",node:n.value}):n}case"LinePaused":case"LineResumed":{let n=Gn(dr(r.value.lineId));if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:r.value.type,lineId:n.value,at:i.value}):i}case"LineAccepted":case"LineRejected":{let n=Gn(dr(r.value.lineId));if(!n.ok)return n;let i=$r(r.value.reason,"event.reason");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:r.value.type,lineId:n.value,reason:i.value,at:o.value}):o}case"DestinationClaimed":case"DestinationWorkStarted":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=d1(r.value.actor,"event.actor");if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:r.value.type,destinationId:n.value,actor:i.value,at:o.value}):o}case"DestinationBlocked":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=Gn(jo(r.value.reason,"event.reason"));if(!i.ok)return i;let o=d1(r.value.actor,"event.actor");if(!o.ok)return o;let s=ir(r.value.at,"event.at");return s.ok?S({type:"DestinationBlocked",destinationId:n.value,reason:i.value,actor:o.value,at:s.value}):s}case"MoveRecorded":{let n=p3(r.value.move,"event.move",e);return n.ok?S({type:"MoveRecorded",move:n.value}):n}case"DestinationReached":{let n=Gn(lo(r.value.destinationId));if(!n.ok)return n;let i=Gn(_n(r.value.moveId));if(!i.ok)return i;let o=ir(r.value.at,"event.at");return o.ok?S({type:"DestinationReached",destinationId:n.value,moveId:i.value,at:o.value}):o}case"HunsuRecorded":{let n=m3(r.value.hunsu,"event.hunsu",e);return n.ok?S({type:"HunsuRecorded",hunsu:n.value}):n}case"LineForkedByHunsu":{let n=Gn(qo(r.value.hunsuId));if(!n.ok)return n;let i=Gn(dr(r.value.fromLineId));if(!i.ok)return i;let o=Gn(dr(r.value.newLineId));if(!o.ok)return o;let s=r.value.newTeamName??r.value.newTeamName,a=s===void 0?S(void 0):Gn(cn(s,(s===r.value.newTeamName,"event.newTeamName")));if(!a.ok)return a;let c=og(r.value.fromMoveId);if(!c.ok)return c;let u=Gn(Gi(r.value.requestId));if(!u.ok)return u;let d=ir(r.value.at,"event.at");return d.ok?S({type:"LineForkedByHunsu",hunsuId:n.value,fromLineId:i.value,newLineId:o.value,newTeamName:a.value,fromMoveId:c.value,requestId:u.value,at:d.value}):d}case"ArtifactRecorded":{let n=ig(r.value.artifact,"event.artifact");if(!n.ok)return n;let i=ir(r.value.at,"event.at");return i.ok?S({type:"ArtifactRecorded",artifact:n.value,at:i.value}):i}default:return Ee(`Unsupported Hunsu domain event type: ${String(r.value.type)}`)}}function Gn(t){return t.ok?S(t.value):Ee(t.error.message)}var h1=["T1","Gen.G","Hanwha Life Esports","KT Rolster","Dplus KIA","DRX","Nongshim RedForce","BNK FearX","DN Freecs","OKSavingsBank BRION","Bilibili Gaming","JD Gaming","Top Esports","Anyone's Legend","Ninjas in Pyjamas","Weibo Gaming","Invictus Gaming","Team WE","LNG Esports","TT Gaming","LGD Gaming","EDward Gaming","Ultra Prime","Oh My God","Cloud9","Team Liquid","FlyQuest","Shopify Rebellion","100 Thieves","Dignitas","LYON","Sentinels","G2 Esports","Fnatic","Karmine Corp","Team Vitality","Team Heretics","GIANTX","Movistar KOI","SK Gaming","Natus Vincere","Rogue"];function zr(t,e){return t.some(r=>r.id===e.id)?t.map(r=>r.id===e.id?e:r):[...t,e]}function g1(t){return Array.from(new Set(t))}function Ds(t){return Zt(Yr(`${t}:root`))}function US(t){let e=t.nodes.reduce((r,n)=>{let i=n.id.match(/^N(\d+)$/i);return i?Math.max(r,Number(i[1])):r},0);return Zt(Yr(`N${String(e+1).padStart(4,"0")}`))}function Ns(t){let e=new Set(t.lines.map(n=>n.teamName).filter(n=>!!n)),r=h1.find(n=>!e.has(n));return r?Zt(cn(r)):Zt(cn(`${h1[t.lines.length%h1.length]}-${t.lines.length+1}`))}function b3(t,e){if(!t.requests.some(r=>r.id===e))throw new lr(`Unknown request: ${e}`)}function zn(t,e){let r=t.lines.find(n=>n.id===e);if(!r)throw new lr(`Unknown line: ${e}`);return r}function y1(t){if(t.status!=="active")throw new lr(`TEAM line ${t.id} cannot continue from status ${t.status}`)}function qd(t,e){let r=t.nodes.find(n=>n.id===e);if(!r)throw new lr(`Unknown node: ${e}`);return r}function $S(t,e){return qd(t,Ds(e))}function FS(t,e){return qd(t,e.currentNodeId)}function v1(t,e){let r=t.moves.find(n=>n.id===e);if(!r)throw new lr(`Unknown MOVE: ${e}`);return r}function w3(t,e){let r=t.skillDrafts.find(n=>n.id===e);if(!r)throw new lr(`Unknown Skill Draft: ${e}`);return r}function jS(t,e){let r=t.destinations.find(n=>n.id===e);if(!r)throw new lr(`Unknown Destination: ${e}`);return r}function Gte(t,e){let r=t.destinations.find(n=>n.id===e);if(!r)throw new lr(`Unknown Destination in node ${t.id}: ${e}`);return r}function I3(t,e){let r=jS(t,e);if(r.status!=="pending"&&r.status!=="blocked")throw new lr(`Destination ${e} cannot be claimed from status ${r.status}`);return r}function E3(t,e){let r=jS(t,e);if(R3(r))throw new lr(`Destination ${e} cannot be blocked from status ${r.status}`);return r}function k3(t,e){let r=Gte(t,e);if(R3(r))throw new lr(`Destination ${e} cannot be reached from status ${r.status}`);return r}function R3(t){return t.status==="reached"||t.status==="canceled"||t.status==="superseded"}function ag(t,e){if(t.length===0)throw new lr(e)}function A3(t,e){if(t.length!==1)throw new lr(e)}function C3(t,e){if(t.trim()==="")throw new lr(e)}function iu(){return{origins:[],requests:[],destinations:[],nodes:[],edges:[],lines:[],moves:[],hunsus:[],skillDrafts:[],artifacts:[],artifactActions:[],futureConstraints:[]}}function _3(t){return zi(t.reduce((e,r)=>b1(e,r),iu()))}function ou(t){let e=T3(t);if(!e.ok)return e;try{return S(_3(t))}catch(r){return oe(Wh(r))}}function T3(t){let e={requestIds:new Set,destinationIds:new Set,lineIds:new Set,moveIds:new Set,hunsuIds:new Set,skillDraftIds:new Set,artifactIds:new Set},r=iu();for(let n=0;n<t.length;n+=1){let i=t[n],o=Kte(i,n,e);if(!o.ok)return o;let s=Jte(i,n,r);if(!s.ok)return s;try{r=b1(r,i)}catch(c){return oe(Wh(c))}let a=sre(r,n);if(!a.ok)return a}return S(t)}function b1(t,e){switch(e.type){case"HunsuOriginRegistered":return{...t,origins:zte(t.origins,e.origin)};case"InitialTeamCreated":return cre(t,e);case"RequestCreated":return zi({...t,requests:zr(t.requests,e.request)});case"DestinationDeclared":return ure(t,e.requestId,e.destination,e.at);case"HarnessSeeded":return dre(t,e.requestId,e.harness,e.at);case"LineStarted":return zi({...t,lines:zr(t.lines,D3(t,e.line))});case"SkillDraftCreated":return{...t,skillDrafts:zr(t.skillDrafts,e.draft)};case"SkillDraftAccepted":return{...t,skillDrafts:t.skillDrafts.map(r=>r.id===e.draftId?Zt(s1(r,{...e.skill})):r)};case"SkillDraftDiscarded":return{...t,skillDrafts:t.skillDrafts.map(r=>r.id===e.draftId?Zt(a1(r)):r)};case"NodeCreated":return zi({...t,nodes:zr(t.nodes,e.node)});case"LinePaused":return cg(t,e.lineId,eg);case"LineResumed":return cg(t,e.lineId,tg);case"LineAccepted":return cg(t,e.lineId,rg);case"LineRejected":return cg(t,e.lineId,ng);case"DestinationClaimed":return S1(t,e.destinationId,r=>Xh(r,{claimedBy:e.actor,updatedBy:"TEAM",updatedAt:e.at}));case"DestinationWorkStarted":return S1(t,e.destinationId,r=>Yh(r,{claimedBy:e.actor,updatedBy:"TEAM",updatedAt:e.at}));case"DestinationBlocked":return S1(t,e.destinationId,r=>Qh(r,{blockedReason:e.reason,updatedBy:"TEAM",updatedAt:e.at}));case"MoveRecorded":return lre(t,e.move);case"DestinationReached":return t;case"HunsuRecorded":return fre(t,e.hunsu);case"LineForkedByHunsu":return pre(t,e);case"ArtifactRecorded":return{...t,artifacts:zr(t.artifacts,e.artifact)}}}function zte(t,e){return t.some(r=>r.name===e.name)?t.map(r=>r.name===e.name?{...e}:{...r}):[...t.map(r=>({...r})),{...e}]}function Kte(t,e,r){switch(t.type){case"InitialTeamCreated":{let n=Wo(r.requestIds,"RequestId",t.request.id,e);if(!n.ok)return n;let i=Wo(r.lineIds,"LineId",t.line.id,e);return i.ok?are(r.destinationIds,t.destinations,e):i}case"RequestCreated":return Wo(r.requestIds,"RequestId",t.request.id,e);case"DestinationDeclared":return Wo(r.destinationIds,"DestinationId",t.destination.id,e);case"LineStarted":return Wo(r.lineIds,"LineId",t.line.id,e);case"SkillDraftCreated":return Wo(r.skillDraftIds,"SkillDraftId",t.draft.id,e);case"MoveRecorded":return Wo(r.moveIds,"MoveId",t.move.id,e);case"HunsuRecorded":return Wo(r.hunsuIds,"HunsuId",t.hunsu.id,e);case"LineForkedByHunsu":return Wo(r.lineIds,"LineId",t.newLineId,e);case"ArtifactRecorded":return Wo(r.artifactIds,"ArtifactId",t.artifact.id,e);case"HunsuOriginRegistered":case"HarnessSeeded":case"SkillDraftAccepted":case"SkillDraftDiscarded":case"NodeCreated":case"LinePaused":case"LineResumed":case"LineAccepted":case"LineRejected":case"DestinationClaimed":case"DestinationWorkStarted":case"DestinationBlocked":case"DestinationReached":return S(void 0)}}function Jte(t,e,r){switch(t.type){case"InitialTeamCreated":return Xte(t,e);case"DestinationDeclared":return r.requests.some(n=>n.id===t.requestId)?S(void 0):Le(e,`Unknown request: ${t.requestId}`);case"HarnessSeeded":return r.nodes.some(n=>n.id===Ds(t.requestId))?S(void 0):Le(e,`Unknown root node for request: ${t.requestId}`);case"LineStarted":return Yte(r,t.line,e);case"SkillDraftAccepted":return P3(r,t.draftId,e,n=>s1(n,t.skill));case"SkillDraftDiscarded":return P3(r,t.draftId,e,a1);case"NodeCreated":return Qte(r,t.node,e);case"LinePaused":return qS(r,t.lineId,e,eg);case"LineResumed":return qS(r,t.lineId,e,tg);case"LineAccepted":return qS(r,t.lineId,e,rg);case"LineRejected":return qS(r,t.lineId,e,ng);case"DestinationClaimed":return x1(r,t.destinationId,e,n=>Xh(n,{claimedBy:t.actor,updatedBy:"TEAM",updatedAt:t.at}));case"DestinationWorkStarted":return x1(r,t.destinationId,e,n=>Yh(n,{claimedBy:t.actor,updatedBy:"TEAM",updatedAt:t.at}));case"DestinationBlocked":return x1(r,t.destinationId,e,n=>Qh(n,{blockedReason:t.reason,updatedBy:"TEAM",updatedAt:t.at}));case"MoveRecorded":return Zte(r,t.move,e);case"HunsuRecorded":return ere(r,t.hunsu,e);case"LineForkedByHunsu":return ire(r,t,e);case"ArtifactRecorded":return ore(r,t.artifact,e);case"DestinationReached":return Le(e,"DestinationReached is a legacy no-op event and cannot be projected");case"HunsuOriginRegistered":case"RequestCreated":case"SkillDraftCreated":return S(void 0)}}function Xte(t,e){return t.line.requestId!==t.request.id?Le(e,`Initial line ${t.line.id} request ${t.line.requestId} does not match request ${t.request.id}`):t.line.status!=="active"?Le(e,`Initial line ${t.line.id} cannot start from status ${t.line.status}`):t.line.rootNodeId!==t.line.currentNodeId?Le(e,`Initial line ${t.line.id} currentNodeId must start at rootNodeId`):t.line.nodeIds.includes(t.line.rootNodeId)?t.line.moveIds.length!==0?Le(e,`Initial line ${t.line.id} cannot start with MOVEs`):"parentLineId"in t.line||"forkedFromMoveId"in t.line?Le(e,`Initial line ${t.line.id} cannot carry fork metadata`):S(void 0):Le(e,`Initial line ${t.line.id} nodeIds must include rootNodeId ${t.line.rootNodeId}`)}function Yte(t,e,r){if(!t.requests.some(i=>i.id===e.requestId))return Le(r,`Unknown request: ${e.requestId}`);if(e.status!=="active")return Le(r,`Line ${e.id} cannot start from status ${e.status}`);let n=t.nodes.find(i=>i.id===Ds(e.requestId));return n?e.rootNodeId!==n.id||e.currentNodeId!==n.id||!e.nodeIds.includes(n.id)?Le(r,`Line ${e.id} must start at request root node ${n.id}`):e.moveIds.length!==0?Le(r,`Line ${e.id} cannot start with MOVEs`):"parentLineId"in e||"forkedFromMoveId"in e?Le(r,`LineStarted ${e.id} cannot carry fork metadata`):S(void 0):Le(r,`Unknown root node for request: ${e.requestId}`)}function P3(t,e,r,n){let i=t.skillDrafts.find(o=>o.id===e);return i?WS(r,n(i)):Le(r,`Unknown Skill Draft: ${e}`)}function Qte(t,e,r){if(e.lineId){let i=t.lines.find(o=>o.id===e.lineId);if(!i)return Le(r,`Unknown line: ${e.lineId}`);if(i.requestId!==e.requestId)return Le(r,`Node ${e.id} request ${e.requestId} does not match line ${i.id} request ${i.requestId}`)}let n=e.source;switch(n.type){case"initial-execute-team":case"request":return t.requests.some(i=>i.id===n.requestId)?S(void 0):Le(r,`Unknown request: ${n.requestId}`);case"move":{let i=t.moves.find(o=>o.id===n.moveId);return i?i.toNodeId===e.id&&i.fromNodeId===n.fromNodeId?S(void 0):Le(r,`Node ${e.id} does not match MOVE ${i.id} topology`):Le(r,`Unknown MOVE: ${n.moveId}`)}case"hunsu":{let i=t.hunsus.find(o=>o.id===n.hunsuId);return i?i.toNodeId===e.id&&i.fromNodeId===n.fromNodeId?S(void 0):Le(r,`Node ${e.id} does not match HUNSU ${i.id} topology`):Le(r,`Unknown HUNSU: ${n.hunsuId}`)}}}function qS(t,e,r,n){let i=t.lines.find(o=>o.id===e);return i?WS(r,n(i)):Le(r,`Unknown line: ${e}`)}function x1(t,e,r,n){let i=new Set(t.lines.map(s=>s.currentNodeId)),o=t.nodes.filter(s=>i.has(s.id)).flatMap(s=>s.destinations.filter(a=>a.id===e));if(o.length===0)return Le(r,`Unknown Destination in active route nodes: ${e}`);for(let s of o){let a=WS(r,n(s));if(!a.ok)return a}return S(void 0)}function Zte(t,e,r){let n=t.lines.find(s=>s.id===e.lineId);if(!n)return Le(r,`Unknown line: ${e.lineId}`);if(n.status!=="active")return Le(r,`TEAM line ${n.id} cannot continue from status ${n.status}`);let i=t.nodes.find(s=>s.id===e.fromNodeId);if(!i)return Le(r,`Unknown node: ${e.fromNodeId}`);if(i.id!==n.currentNodeId||i.requestId!==n.requestId)return Le(r,`MOVE ${e.id} source node ${i.id} does not match current node for line ${n.id}`);if(e.toNodeId===e.fromNodeId)return Le(r,`MOVE ${e.id} cannot be a self-loop`);if(t.nodes.some(s=>s.id===e.toNodeId))return Le(r,`MOVE ${e.id} target node already exists: ${e.toNodeId}`);let o=RS(e);if(!o.ok)return Le(r,o.error.message);for(let s of e.reachedDestinationIds){let a=nre(i,s,r);if(!a.ok)return a;let c=WS(r,Zh(a.value,{reachedByMoveId:e.id,updatedBy:"TEAM",updatedAt:e.recordedAt}));if(!c.ok)return c}return S(void 0)}function ere(t,e,r){let n=t.lines.find(s=>s.id===e.lineId);if(!n)return Le(r,`Unknown line: ${e.lineId}`);let i=t.nodes.find(s=>s.id===e.fromNodeId);if(!i)return Le(r,`Unknown node: ${e.fromNodeId}`);if(i.requestId!==n.requestId||!n.nodeIds.includes(i.id))return Le(r,`Node ${i.id} does not belong to line ${n.id}`);if(e.toNodeId===e.fromNodeId)return Le(r,`HUNSU ${e.id} cannot be a self-loop`);if(t.nodes.some(s=>s.id===e.toNodeId))return Le(r,`HUNSU ${e.id} target node already exists: ${e.toNodeId}`);let o=tre(t,e,n,i,r);return o.ok?rre(t,e,i,r):o}function tre(t,e,r,n,i){switch(e.target.type){case"line":{let o=t.lines.find(s=>s.id===e.target.id);return o?o.id===e.lineId?S(void 0):Le(i,`HUNSU target line ${o.id} does not match event line ${e.lineId}`):Le(i,`Unknown line: ${e.target.id}`)}case"node":{let o=t.nodes.find(s=>s.id===e.target.id);return o?o.requestId===r.requestId&&r.nodeIds.includes(o.id)?S(void 0):Le(i,`Node ${o.id} does not belong to line ${r.id}`):Le(i,`Unknown node: ${e.target.id}`)}case"move":{let o=B3(t,r,e.target.id,i);return o.ok?S(void 0):o}case"destination":return n.destinations.some(o=>o.id===e.target.id)?S(void 0):Le(i,`Unknown Destination in node ${n.id}: ${e.target.id}`)}return Le(i,`Unsupported HUNSU target: ${JSON.stringify(e.target)}`)}function rre(t,e,r,n){if(e.changedFiles.length===0)return Le(n,`HUNSU ${e.id} must include changed runtime files`);let i=new Set;for(let c of e.changedFiles){let u=String(c.path);if(!u.startsWith(".hunsu-request/"))return Le(n,`HUNSU changed file must be under .hunsu-request: ${u}`);if(i.has(u))return Le(n,`Duplicate HUNSU changed file: ${u}`);i.add(u)}if(e.teamSnapshot.moveOrdinal!==r.ordinal)return Le(n,`HUNSU ${e.id} Team snapshot ordinal ${e.teamSnapshot.moveOrdinal} does not match source node ordinal ${r.ordinal}`);let o=new Set(r.destinations.map(c=>String(c.id))),s=new Set(t.destinations.map(c=>String(c.id))),a=new Set;for(let c of e.teamSnapshot.destinations){let u=String(c.id);if(a.has(u))return Le(n,`Duplicate DestinationId in HUNSU Team snapshot: ${u}`);if(a.add(u),c.requestId!==r.requestId)return Le(n,`Destination ${c.id} request ${c.requestId} does not match source request ${r.requestId}`);if(!o.has(u)&&s.has(u))return Le(n,`Duplicate DestinationId in HUNSU Team snapshot: ${u}`)}return S(void 0)}function nre(t,e,r){let n=t.destinations.find(i=>i.id===e);return n?S(n):Le(r,`Unknown Destination in node ${t.id}: ${e}`)}function B3(t,e,r,n){let i=t.moves.find(o=>o.id===r);return i?i.lineId===e.id||e.moveIds.includes(i.id)?S(i):Le(n,`MOVE ${i.id} does not belong to line ${e.id}`):Le(n,`Unknown MOVE: ${r}`)}function ire(t,e,r){let n=t.lines.find(o=>o.id===e.fromLineId);if(!n)return Le(r,`Unknown line: ${e.fromLineId}`);if(e.requestId!==n.requestId)return Le(r,`LineForkedByHunsu request ${e.requestId} does not match parent line ${n.id}`);let i=t.hunsus.find(o=>o.id===e.hunsuId);if(!i)return Le(r,`Unknown HUNSU: ${e.hunsuId}`);if(i.lineId!==e.fromLineId)return Le(r,`HUNSU ${i.id} does not belong to parent line ${e.fromLineId}`);if(i.newLineId!==e.newLineId)return Le(r,`Line fork ${e.newLineId} does not match HUNSU recorded new line ${i.newLineId}`);if(i.sourceMoveId!==e.fromMoveId)return Le(r,`Line fork ${e.newLineId} fromMoveId does not match HUNSU source move`);if(i.newTeamName!==e.newTeamName)return Le(r,`Line fork ${e.newLineId} Team name does not match HUNSU record`);if(e.fromMoveId){let o=B3(t,n,e.fromMoveId,r);if(!o.ok)return o;if(o.value.toNodeId!==i.fromNodeId)return Le(r,`Line fork source MOVE ${o.value.id} does not end at HUNSU source node ${i.fromNodeId}`)}return t.nodes.some(o=>o.id===i.toNodeId)?S(void 0):Le(r,`Unknown HUNSU target node: ${i.toNodeId}`)}function ore(t,e,r){switch(e.owner.type){case"move":return t.moves.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown MOVE: ${e.owner.id}`);case"hunsu":return t.hunsus.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown HUNSU: ${e.owner.id}`);case"line":return t.lines.some(n=>n.id===e.owner.id)?S(void 0):Le(r,`Unknown line: ${e.owner.id}`)}}function sre(t,e){for(let r of t.edges){if(!t.nodes.find(o=>o.id===r.fromNodeId))return Le(e,`Edge ${r.id} references missing fromNode ${r.fromNodeId}`);if(!t.nodes.find(o=>o.id===r.toNodeId))return Le(e,`Edge ${r.id} references missing toNode ${r.toNodeId}`);switch(r.type){case"move":{let o=t.moves.find(s=>s.id===r.moveId);if(!o)return Le(e,`MOVE edge ${r.id} references missing MOVE ${r.moveId}`);if(o.lineId!==r.lineId||o.fromNodeId!==r.fromNodeId||o.toNodeId!==r.toNodeId||o.id!==r.id)return Le(e,`MOVE edge ${r.id} does not match MOVE ${o.id}`);break}case"hunsu":{let o=t.hunsus.find(s=>s.id===r.hunsuId);if(!o)return Le(e,`HUNSU edge ${r.id} references missing HUNSU ${r.hunsuId}`);if(o.lineId!==r.lineId||o.fromNodeId!==r.fromNodeId||o.toNodeId!==r.toNodeId||o.id!==r.id)return Le(e,`HUNSU edge ${r.id} does not match HUNSU ${o.id}`);break}}}return S(void 0)}function WS(t,e){return e.ok?S(void 0):Le(t,e.error.message)}function Le(t,e){return Ee(`Invalid event stream at event ${t}: ${e}`)}function are(t,e,r){for(let n of e){let i=Wo(t,"DestinationId",n.id,r);if(!i.ok)return i}return S(void 0)}function Wo(t,e,r,n){return t.has(r)?Ee(`Duplicate ${e} in event stream at event ${n}: ${r}`):(t.add(r),S(void 0))}function cre(t,e){let r=e.destinations.map(s=>M3(e.request.id,s,"initial-execute-team",e.at)),n=Ei(e.harness??Vn()),i={id:e.line.rootNodeId,requestId:e.request.id,lineId:e.line.id,teamName:e.line.teamName,ordinal:0,destinations:r,harness:n,harnessGraph:Ts(n),harnessLock:e.harnessLock?{...e.harnessLock}:void 0,executorPackageBindings:[],resourcePackageBindings:[],artifactActions:[],source:{type:"initial-execute-team",requestId:e.request.id},createdAt:e.at??e.request.createdAt},o=D3({...t,requests:zr(t.requests,e.request),nodes:zr(t.nodes,i)},{...e.line,rootNodeId:i.id,currentNodeId:e.line.currentNodeId,nodeIds:e.line.nodeIds});return zi({...t,requests:zr(t.requests,e.request),nodes:zr(t.nodes,i),lines:zr(t.lines,o)})}function ure(t,e,r,n){let i=M3(e,r,"initial-request",n),o=t.nodes.find(a=>a.id===Ds(e)),s=o?{...o,destinations:zr(o.destinations,i)}:{id:Ds(e),requestId:e,ordinal:0,destinations:[i],harness:Vn(),harnessGraph:Ts(Vn()),artifactActions:[],source:{type:"request",requestId:e},createdAt:n};return zi({...t,nodes:zr(t.nodes,s)})}function dre(t,e,r,n){let i=$S(t,e);return zi({...t,nodes:zr(t.nodes,{...i,harness:Ei(r),harnessGraph:Ts(r),createdAt:i.createdAt??n})})}function lre(t,e){let r=zn(t,e.lineId),n=qd(t,e.fromNodeId),i=e.toNodeId,o=Zt(RS(o1(e,{fromNodeId:n.id,toNodeId:i,teamName:e.teamName??r.teamName??n.teamName??Ns(t),ordinal:e.ordinal??n.ordinal+1}))),s=t.nodes.find(l=>l.id===i)??mre(n,o,i),a=Zt(RS(o1(o,{snapshot:o.snapshot??yre(s)}))),c={id:a.id,type:"move",lineId:a.lineId,fromNodeId:n.id,toNodeId:i,moveId:a.id},u={...t,nodes:zr(t.nodes,s),moves:zr(t.moves,a),edges:zr(t.edges,c)},d=L3(xre(u,a),a.lineId,i);return zi(a.outcome==="accident"?cg(d,a.lineId,e3):d)}function fre(t,e){zn(t,e.lineId);let r=qd(t,e.fromNodeId),n=e.toNodeId,i={...e,fromNodeId:r.id,toNodeId:n},o=t.nodes.find(c=>c.id===n)??hre(r,i,n),s={id:i.id,type:"hunsu",lineId:i.lineId,fromNodeId:r.id,toNodeId:n,hunsuId:i.id},a={...t,nodes:zr(t.nodes,o),hunsus:zr(t.hunsus,i),edges:zr(t.edges,s)};return i.newLineId?zi(a):zi(L3(a,i.lineId,n))}function pre(t,e){let r=zn(t,e.fromLineId),n=t.hunsus.find(c=>c.id===e.hunsuId),i=e.fromMoveId?t.moves.find(c=>c.id===e.fromMoveId):void 0,o=n?.toNodeId??i?.toNodeId??r.currentNodeId,s=e.fromMoveId?r.moveIds.indexOf(e.fromMoveId):-1,a=s>=0?r.moveIds.slice(0,s+1):[];return zi({...t,lines:zr(t.lines,{id:e.newLineId,requestId:e.requestId,teamName:e.newTeamName??Ns(t),status:"active",moveIds:a,rootNodeId:r.rootNodeId,currentNodeId:o,nodeIds:[o],parentLineId:e.fromLineId,forkedFromMoveId:e.fromMoveId})})}function D3(t,e){return{...e,teamName:e.teamName??Ns(t)}}function mre(t,e,r){let n=new Set(e.reachedDestinationIds);return{id:r,requestId:t.requestId,lineId:e.lineId,teamName:e.teamName??t.teamName,ordinal:e.ordinal??t.ordinal+1,destinations:t.destinations.map(i=>n.has(i.id)?Zt(Zh(i,{reachedByMoveId:e.id,updatedBy:"TEAM",updatedAt:e.recordedAt})):{...i}),harness:Ei(t.harness),harnessGraph:po(t.harnessGraph),harnessLock:t.harnessLock?{...t.harnessLock}:void 0,executorPackageBindings:t.executorPackageBindings?.map(i=>({executorId:i.executorId,lock:{...i.lock}})),resourcePackageBindings:t.resourcePackageBindings?.map(i=>({name:i.name,lock:{...i.lock}})),artifactActions:w1(t.artifactActions),source:{type:"move",moveId:e.id,fromNodeId:t.id},createdAt:e.recordedAt}}function hre(t,e,r){let n=e.teamSnapshot;return{id:r,requestId:t.requestId,lineId:e.newLineId??e.lineId,teamName:n.teamName,ordinal:n.moveOrdinal,destinations:n.destinations.map(i=>({...i})),harness:Ei(n.harness),harnessGraph:po(n.harnessGraph),harnessLock:n.harnessLock?{...n.harnessLock}:void 0,executorPackageBindings:n.executorPackageBindings?.map(i=>({executorId:i.executorId,lock:{...i.lock}})),resourcePackageBindings:n.resourcePackageBindings?.map(i=>({name:i.name,lock:{...i.lock}})),artifactActions:w1(n.artifactActions),source:{type:"hunsu",hunsuId:e.id,fromNodeId:t.id},createdAt:e.recordedAt}}function w1(t){return O3((t??[]).map(N3))}function N3(t){return{...t,env:t.env?Object.fromEntries(Object.entries(t.env).map(([e,r])=>[e,{...r}])):void 0,runner:{...t.runner},aliases:t.aliases?Object.fromEntries(Object.entries(t.aliases).map(([e,r])=>[e,{...r}])):void 0,evidence:t.evidence?{...t.evidence,paths:t.evidence.paths?.slice()}:void 0}}function O3(t){return t.slice().sort((e,r)=>e.displayOrder-r.displayOrder||String(e.id).localeCompare(String(r.id)))}function gre(t){let e=new Set,r=[];for(let n of t)e.has(n.id)||(e.add(n.id),r.push(N3(n)));return r}function yre(t){return{teamName:t.teamName??Zt(cn("Team")),moveOrdinal:t.ordinal,destinations:t.destinations.map(e=>({...e})),harness:Ei(t.harness),harnessGraph:po(t.harnessGraph),harnessLock:t.harnessLock?{...t.harnessLock}:void 0,executorPackageBindings:t.executorPackageBindings?.map(e=>({executorId:e.executorId,lock:{...e.lock}})),resourcePackageBindings:t.resourcePackageBindings?.map(e=>({name:e.name,lock:{...e.lock}})),artifactActions:w1(t.artifactActions)}}function M3(t,e,r,n){return Z4(t,e,r,n)}function vre(t,e,r){return t.map(n=>n.id===e?Zt(r(n)):{...n})}function S1(t,e,r){let n=new Set(t.lines.map(o=>o.currentNodeId)),i=t.nodes.map(o=>!n.has(o.id)||!o.destinations.some(s=>s.id===e)?o:{...o,destinations:vre(o.destinations,e,r)});return zi({...t,nodes:i})}function cg(t,e,r){return zn(t,e),zi({...t,lines:t.lines.map(n=>n.id===e?Zt(r(n)):n)})}function xre(t,e){return zn(t,e.lineId),{...t,lines:t.lines.map(r=>r.id===e.lineId?{...r,moveIds:g1([...r.moveIds,e.id])}:r)}}function L3(t,e,r){return zn(t,e),{...t,lines:t.lines.map(n=>n.id===e?{...n,currentNodeId:r,nodeIds:Zt(uo(g1([...n.nodeIds,r]),"nodeIds"))}:n)}}function zi(t){let e=t.requests.flatMap(i=>{let o=Sre(t,i.id);return o?[o]:[]}),r=e.flatMap(i=>i.destinations),n=e.flatMap(i=>i.artifactActions);return{...t,destinations:r.map(i=>({...i})),artifactActions:O3(gre(n))}}function Sre(t,e){let r=t.lines.filter(i=>i.requestId===e&&i.status!=="abandoned"),n=r.findLast(i=>i.status==="active")??r.at(-1);return n?t.nodes.find(i=>i.id===n.currentNodeId):t.nodes.find(i=>i.id===Ds(e))}function bre(t,e=iu()){let r=Ire(t);if(!r.ok)return r;let n=Ere(r.value,e);if(!n.ok)return n;try{return S(wre(n.value,e))}catch(i){return oe(Wh(i))}}function wre(t,e=iu()){switch(t.type){case"RegisterHunsuOrigin":return[{type:"HunsuOriginRegistered",origin:{...t.origin},at:t.at}];case"CreateInitialTeam":{ag(t.destinations,"CreateInitialTeam requires at least one Destination");let r=t.harness?Ei(t.harness):Vn(),n=Ds(t.requestId);return[{type:"InitialTeamCreated",request:{id:t.requestId,title:t.title,goal:t.goal,createdBy:"SYSTEM",createdAt:t.at},line:{id:t.lineId,requestId:t.requestId,teamName:t.teamName??Ns(e),status:"active",moveIds:[],rootNodeId:n,currentNodeId:n,nodeIds:[n]},destinations:t.destinations,harness:r,harnessLock:t.harnessLock,at:t.at}]}case"StartLine":{b3(e,t.requestId);let r=$S(e,t.requestId),n=t.teamName??Ns(e);return[{type:"LineStarted",line:{id:t.lineId,requestId:t.requestId,teamName:n,status:"active",moveIds:[],rootNodeId:r.id,currentNodeId:r.id,nodeIds:[r.id]}}]}case"PauseLine":return zn(e,t.lineId),[{type:"LinePaused",lineId:t.lineId,at:t.at}];case"ResumeLine":return zn(e,t.lineId),[{type:"LineResumed",lineId:t.lineId,at:t.at}];case"AcceptLine":return zn(e,t.lineId),[{type:"LineAccepted",lineId:t.lineId,reason:t.reason,at:t.at}];case"RejectLine":return zn(e,t.lineId),[{type:"LineRejected",lineId:t.lineId,reason:t.reason,at:t.at}];case"ClaimDestination":return I3(e,t.destinationId),[{type:"DestinationClaimed",destinationId:t.destinationId,actor:t.actor,at:t.at}];case"StartDestinationWork":return jS(e,t.destinationId),[{type:"DestinationWorkStarted",destinationId:t.destinationId,actor:t.actor,at:t.at}];case"ReportDestinationBlocked":return E3(e,t.destinationId),[{type:"DestinationBlocked",destinationId:t.destinationId,reason:t.reason,actor:t.actor,at:t.at}];case"RecordMove":{let r=zn(e,t.lineId);y1(r);let n=FS(e,r);A3(t.reachedDestinationIds,"MOVE must reach exactly one Destination");for(let s of t.reachedDestinationIds)k3(n,s);let i=US(e);return[{type:"MoveRecorded",move:Zt(n1({id:t.moveId,lineId:t.lineId,fromNodeId:n.id,toNodeId:i,executeId:t.executeId,conversationRef:t.conversationRef,worktree:t.worktree,summary:t.summary,commit:t.commit,reachedDestinationIds:t.reachedDestinationIds,evidence:t.evidence,risks:t.risks,recordedBy:"SYSTEM",recordedAt:t.at}))}]}case"RecordAccident":{let r=zn(e,t.lineId);y1(r);let n=FS(e,r);ag(t.evidence,"A ACCIDENT must include evidence"),C3(t.failureReason,"A ACCIDENT must include a failure reason");let i=US(e);return[{type:"MoveRecorded",move:Zt(i1({id:t.moveId,lineId:t.lineId,fromNodeId:n.id,toNodeId:i,executeId:t.executeId,conversationRef:t.conversationRef,worktree:t.worktree,failureReason:t.failureReason,summary:t.summary,commit:t.commit,evidence:t.evidence,risks:t.risks,recordedBy:"SYSTEM",recordedAt:t.at}))}]}case"AttachMoveEvidence":return v1(e,t.moveId),[{type:"ArtifactRecorded",artifact:t.artifact,at:t.at}];case"ConfirmHunsuDraft":{let r=t.draft,n=zn(e,r.sourceLineId),i=qd(e,r.sourceNodeId);if(i.requestId!==n.requestId)throw new lr(`Node ${i.id} does not belong to line ${n.id}`);return r.sourceMoveId&&v1(e,r.sourceMoveId),ag(r.changedFiles,"A confirmed HUNSU Draft must include at least one changed runtime file"),[Rre(r.hunsuId,r.sourceLineId,i.id,US(e),r.target,r.summary,r.teamSnapshot,r.changedFiles,t.at,{hunsuDraftId:r.id,conversationRef:r.conversationRef,newLineId:r.newLineId,sourceMoveId:r.sourceMoveId,newTeamName:r.newTeamName}),{type:"LineForkedByHunsu",hunsuId:r.hunsuId,fromLineId:r.sourceLineId,newLineId:r.newLineId,newTeamName:r.newTeamName,fromMoveId:r.sourceMoveId,requestId:i.requestId,at:t.at}]}case"CreateSkillDraft":{let r=zn(e,t.lineId),n=FS(e,r);return[{type:"SkillDraftCreated",draft:r3({id:t.draftId,name:t.name,sourcePath:t.sourcePath,draftPath:t.draftPath,createdFromNodeId:n.id,createdAt:t.at})}]}case"DiscardSkillDraft":{let r=w3(e,t.draftId);if(r.status!=="draft")throw new lr(`Skill Draft ${t.draftId} cannot be discarded from status ${r.status}`);return[{type:"SkillDraftDiscarded",draftId:t.draftId,at:t.at}]}case"RecordArtifact":return[{type:"ArtifactRecorded",artifact:t.artifact,at:t.at}]}}function ug(t,e){let r=ou(t);if(!r.ok)return r;let n=r.value,i=bre(e,n);return i.ok?S([...t,...i.value]):i}function Ire(t){return x3(t,Gh)}function VS(t){return S3(t,Gh)}function Ere(t,e){let r=kre(t,e);if(!r.ok)return r;switch(t.type){case"RegisterHunsuOrigin":case"CreateInitialTeam":return S(t);case"RecordArtifact":return si([Kre(e,t.artifact)],t);case"StartLine":return si([Nre(e,t.requestId),$re(e,t.requestId)],t);case"PauseLine":return si([Mre(e,t.lineId)],t);case"ResumeLine":return si([Lre(e,t.lineId)],t);case"AcceptLine":return si([Hre(e,t.lineId)],t);case"RejectLine":return si([Ure(e,t.lineId)],t);case"ClaimDestination":return si([qre(e,t.destinationId)],t);case"StartDestinationWork":return si([jre(e,t.destinationId)],t);case"ReportDestinationBlocked":return si([Wre(e,t.destinationId)],t);case"RecordMove":return si([H3(e,t.lineId),E1(e,t.lineId),...Gre(e,t.lineId,t.moveId,t.reachedDestinationIds)],t);case"RecordAccident":return si([H3(e,t.lineId),E1(e,t.lineId)],t);case"AttachMoveEvidence":return si([U3(e,t.moveId),Jre(t.artifact,t.moveId)],t);case"ConfirmHunsuDraft":return si([$3(e,t.draft.sourceNodeId,t.draft.sourceLineId),Xre(e,t.draft.sourceLineId,t.draft.target),...t.draft.sourceMoveId?[F3(e,t.draft.sourceMoveId,t.draft.sourceLineId)]:[]],t);case"CreateSkillDraft":return si([E1(e,t.lineId)],t);case"DiscardSkillDraft":return si([Yre(e,t.draftId,"discarded")],t)}}function kre(t,e){switch(t.type){case"CreateInitialTeam":{let r=Are(e,t.requestId);if(!r.ok)return r;let n=I1(e,t.lineId);return n.ok?Bre(e,t.destinations.map(i=>i.id)):n}case"StartLine":return I1(e,t.lineId);case"RecordMove":case"RecordAccident":return Cre(e,t.moveId);case"AttachMoveEvidence":case"RecordArtifact":return Tre(e,t.artifact.id);case"CreateSkillDraft":return _re(e,t.draftId);case"ConfirmHunsuDraft":{let r=Pre(e,t.draft.hunsuId);return r.ok?I1(e,t.draft.newLineId):r}case"RegisterHunsuOrigin":case"PauseLine":case"ResumeLine":case"AcceptLine":case"RejectLine":case"ClaimDestination":case"StartDestinationWork":case"ReportDestinationBlocked":case"DiscardSkillDraft":return S(void 0)}}function si(t,e){let r=t.find(n=>!n.ok);return r&&!r.ok?oe(r.error):S(e)}function Rre(t,e,r,n,i,o,s,a,c,u={}){return ag(a,"A HUNSU must include at least one changed runtime file"),{type:"HunsuRecorded",hunsu:{id:t,...u,lineId:e,fromNodeId:r,toNodeId:n,target:i,summary:o,teamSnapshot:s,changedFiles:a,recordedBy:"DIRECTOR",recordedAt:c}}}function Da(t,e){return e.ok?S(t):Ee(e.error.message)}function Are(t,e){return t.requests.some(r=>r.id===e)?Ee(`Duplicate RequestId: ${e}`):S(void 0)}function I1(t,e){return t.lines.some(r=>r.id===e)?Ee(`Duplicate LineId: ${e}`):S(void 0)}function Cre(t,e){return t.moves.some(r=>r.id===e)?Ee(`Duplicate MoveId: ${e}`):S(void 0)}function Pre(t,e){return t.hunsus.some(r=>r.id===e)?Ee(`Duplicate HunsuId: ${e}`):S(void 0)}function _re(t,e){return t.skillDrafts.some(r=>r.id===e)?Ee(`Duplicate SkillDraftId: ${e}`):S(void 0)}function Tre(t,e){return t.artifacts.some(r=>r.id===e)?Ee(`Duplicate ArtifactId: ${e}`):S(void 0)}function Bre(t,e){let r=new Set,n=Dre(t);for(let i of e){if(r.has(i))return Ee(`Duplicate DestinationId in command: ${i}`);if(n.has(i))return Ee(`Duplicate DestinationId: ${i}`);r.add(i)}return S(void 0)}function Dre(t){return new Set([...t.destinations.map(e=>e.id),...t.nodes.flatMap(e=>e.destinations.map(r=>r.id))])}function Nre(t,e){return t.requests.some(r=>r.id===e)?S(void 0):Ee(`Unknown request: ${e}`)}function Ore(t,e){return Vo(t,e)}function Mre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,eg(r.value)):r}function Lre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,tg(r.value)):r}function Hre(t,e){let r=Vo(t,e);return r.ok?Da(r.value,rg(r.value)):r}function Ure(t,e){let r=Vo(t,e);return r.ok?Da(r.value,ng(r.value)):r}function $re(t,e){return k1(t,Ds(e))}function U3(t,e){return j3(t,e)}function Fre(t,e){return Qre(t,e)}function jre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Yh(r.value,{claimedBy:"validation",updatedBy:"TEAM"})):r}function E1(t,e){return R1(t,e)}function H3(t,e){let r=Vo(t,e);return r.ok?Da(r.value,t3(r.value)):r}function qre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Xh(r.value,{claimedBy:"validation",updatedBy:"TEAM"})):r}function Wre(t,e){let r=A1(t,e);return r.ok?Da(r.value,Qh(r.value,{blockedReason:"validation",updatedBy:"TEAM"})):r}function Vre(t,e,r){let n=R1(t,e);return n.ok?q3(n.value,r):n}function Gre(t,e,r,n){let i=R1(t,e);return i.ok?n.length!==1?[Ee("MOVE must reach exactly one Destination")]:n.map(o=>zre(i.value,o,r)):[i]}function zre(t,e,r){let n=q3(t,e);return n.ok?Da(n.value,Zh(n.value,{reachedByMoveId:r,updatedBy:"TEAM"})):n}function Kre(t,e){switch(e.owner.type){case"move":return U3(t,e.owner.id);case"hunsu":return Fre(t,e.owner.id);case"line":return Ore(t,e.owner.id)}}function Jre(t,e){return t.owner.type!=="move"||t.owner.id!==e?Ee(`AttachMoveEvidence artifact owner must be move ${e}`):S(void 0)}function $3(t,e,r){let n=Vo(t,r);if(!n.ok)return n;let i=k1(t,e);return i.ok?n.value.nodeIds.includes(i.value.id)?i:Ee(`Node ${i.value.id} does not belong to line ${n.value.id}`):i}function F3(t,e,r){let n=Vo(t,r);if(!n.ok)return n;let i=j3(t,e);return i.ok&&i.value.lineId!==n.value.id&&!n.value.moveIds.includes(i.value.id)?Ee(`MOVE ${i.value.id} does not belong to line ${n.value.id}`):i}function Xre(t,e,r){switch(r.type){case"line":{let n=Vo(t,e);if(!n.ok)return n;let i=Vo(t,r.id);return i.ok?i.value.id===n.value.id?S(n.value):Ee(`HUNSU target line ${i.value.id} does not match command line ${n.value.id}`):i}case"node":return $3(t,r.id,e);case"move":return F3(t,r.id,e);case"destination":return Vre(t,e,r.id)}}function Yre(t,e,r){let n=Zre(t,e);return n.ok?n.value.status!=="draft"?Ee(`Skill Draft ${e} cannot be ${r} from status ${n.value.status}`):S(n.value):n}function Vo(t,e){let r=t.lines.find(n=>n.id===e);return r?S(r):Ee(`Unknown line: ${e}`)}function k1(t,e){let r=t.nodes.find(n=>n.id===e);return r?S(r):Ee(`Unknown node: ${e}`)}function R1(t,e){let r=Vo(t,e);return r.ok?k1(t,r.value.currentNodeId):r}function j3(t,e){let r=t.moves.find(n=>n.id===e);return r?S(r):Ee(`Unknown MOVE: ${e}`)}function Qre(t,e){let r=t.hunsus.find(n=>n.id===e);return r?S(r):Ee(`Unknown HUNSU: ${e}`)}function Zre(t,e){let r=t.skillDrafts.find(n=>n.id===e);return r?S(r):Ee(`Unknown Skill Draft: ${e}`)}function A1(t,e){let r=t.destinations.find(n=>n.id===e);return r?S(r):Ee(`Unknown Destination: ${e}`)}function q3(t,e){let r=t.destinations.find(n=>n.id===e);return r?S(r):Ee(`Unknown Destination in node ${t.id}: ${e}`)}var V3="hunsu.connect.enrollment.v1";var Gf="hunsu.connect.signal-frame.v1",G3="hunsu.connect.control-frame.v1";function z3(t){return!ene(t)||!tne(t,["schema","sessionId","sequence","iv","ciphertext"])?Vf("$signal","Connect signal frame has unknown or missing fields."):t.schema!==Gf?Vf("schema","Connect signal frame schema is not supported."):typeof t.sessionId!="string"||!/^cs_[A-Za-z0-9_-]{20,125}$/u.test(t.sessionId)?Vf("sessionId","Connect session ID is invalid."):!Number.isSafeInteger(t.sequence)||Number(t.sequence)<1?Vf("sequence","Connect signal sequence must be a positive safe integer starting at 1."):W3(t.iv,12,12)?W3(t.ciphertext,16,65536)?{ok:!0,value:{schema:Gf,sessionId:t.sessionId,sequence:Number(t.sequence),iv:t.iv,ciphertext:t.ciphertext}}:Vf("ciphertext","Connect signal ciphertext must contain 16-65536 bytes of base64url data."):Vf("iv","Connect signal IV must be exactly 12 bytes of base64url data.")}function Vf(t,e){return{ok:!1,error:{code:"INVALID_CONNECT_WIRE",field:t,message:e}}}function ene(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function tne(t,e){let r=Object.keys(t);return r.length===e.length&&r.every(n=>e.includes(n))}function W3(t,e,r){if(typeof t!="string"||!/^[A-Za-z0-9_-]+$/u.test(t)||t.length%4===1)return!1;let i=Math.floor(t.length*3/4);return i>=e&&i<=r}var Oa="hunsu-peer-v1",P1="hunsu.control.v1",_1="hunsu.stream.v1",K3="stun:stun.cloudflare.com:3478",J3=12*6e4,dg=64*1024,STe=32*1024,X3=32,rne=["health","bridge.status","connection.status","provider.inventory","modelAlias.validate","modelAlias.resolve","roadmap.registry.list","roadmap.registry.remove","roadmap.open","roadmap.port.inspect","roadmap.port.apply","roadmap.create","roadmap.board","roadmap.worktree","roadmap.skills","roadmap.commands","execute.start","execute.pause","execute.resume","execute.stop","execute.completeMove","execute.status","artifactAction.list","artifactAction.runs","artifactAction.start","artifactAction.stop","moveFile.tree","moveFile.blob","moveFile.diff","hunsuDraft.list","hunsuDraft.start","hunsuDraft.get","hunsuDraft.message","hunsuDraft.diffArtifact.create","hunsuDraft.diffArtifact.get","hunsuDraft.approve","hunsuDraft.discard","line.accept","line.reject","agentSession.list","agentSession.get","agentSession.events","live.events"];var Wd=256,nne=1024,ine=64*1024,one=2*1024,sne=new Set(["projectPath","repositoryPath","repositoryRoot","worktreePath","runtimePath","cwd"]);function Y3(t){let e=["remote.access"];return(t==="execute.start"||t==="execute.pause"||t==="execute.resume"||t==="execute.stop"||t==="execute.completeMove")&&e.push("execute.start"),(t==="artifactAction.start"||t==="artifactAction.stop")&&e.push("artifactAction.run"),(t==="artifactAction.list"||t==="artifactAction.runs"||t==="artifactAction.start"||t==="artifactAction.stop")&&e.push("env.read","hostAlias.expose"),e}function Q3(t){let e=zS(t,"$signalPlaintext");if(!e.ok)return e;if(e.value.type==="peer.offer"||e.value.type==="peer.answer"){let r=Na(e.value,["type","sdp"],"$signalPlaintext");if(!r.ok)return r;let n=ki(e.value.sdp,"sdp",ine,!1);return n.ok?S({type:e.value.type,sdp:n.value}):n}if(e.value.type==="peer.ice"){let r=Na(e.value,["type","candidate","sdpMid","sdpMLineIndex","usernameFragment"],"$signalPlaintext");if(!r.ok)return r;let n=ki(e.value.candidate,"candidate",one),i=C1(e.value.sdpMid,"sdpMid",64),o=C1(e.value.usernameFragment,"usernameFragment",256);return n.ok?i.ok?o.ok?e.value.sdpMLineIndex!==void 0&&(!Number.isInteger(e.value.sdpMLineIndex)||Number(e.value.sdpMLineIndex)<0||Number(e.value.sdpMLineIndex)>8)?Tn("sdpMLineIndex","ICE media line index is invalid."):S({type:"peer.ice",candidate:n.value,...i.value?{sdpMid:i.value}:{},...e.value.sdpMLineIndex===void 0?{}:{sdpMLineIndex:Number(e.value.sdpMLineIndex)},...o.value?{usernameFragment:o.value}:{}}):o:i:n}if(e.value.type==="peer.close"){let r=Na(e.value,["type","reason"],"$signalPlaintext");return r.ok?e.value.reason==="complete"||e.value.reason==="canceled"||e.value.reason==="expired"||e.value.reason==="failed"?S({type:"peer.close",reason:e.value.reason}):Tn("reason","Peer close reason is invalid."):r}return Tn("type","Peer signaling message type is not supported.")}function Z3(t){let e=zS(t,"$hello");if(!e.ok)return e;let r=Na(e.value,["type","protocolVersion","sessionId","ticket","browserAgreementPublicJwk","browserNonce"],"$hello");if(!r.ok)return r;if(e.value.type!=="peer.client-hello"||e.value.protocolVersion!==Oa)return Tn("type","Peer client hello version is not supported.");let n=ki(e.value.sessionId,"sessionId",Wd),i=ki(e.value.ticket,"ticket",8192),o=cne(e.value.browserAgreementPublicJwk,"browserAgreementPublicJwk"),s=GS(e.value.browserNonce,"browserNonce",24,64);return n.ok?i.ok?o.ok?s.ok?S({type:"peer.client-hello",protocolVersion:Oa,sessionId:n.value,ticket:i.value,browserAgreementPublicJwk:o.value,browserNonce:s.value}):s:o:i:n}function e8(t){let e=t8(t,"$message",new WeakSet);if(!e.ok)return e;let r=zS(t,"$message");if(!r.ok)return r;let n=ki(r.value.type,"type",64),i=ki(r.value.sessionId,"sessionId",Wd);if(!n.ok)return n;if(!i.ok)return i;if(n.value==="session.confirm"){let o=Na(r.value,["type","sessionId","transcriptHash"],"$message");if(!o.ok)return o;let s=GS(r.value.transcriptHash,"transcriptHash",32,32);return s.ok?S({type:"session.confirm",sessionId:i.value,transcriptHash:s.value}):s}if(n.value==="command.request"){let o=Na(r.value,["type","sessionId","requestId","workspaceId","deadline","command","payload"],"$message");if(!o.ok)return o;let s=ki(r.value.requestId,"requestId",Wd),a=ki(r.value.workspaceId,"workspaceId",Wd),c=une(r.value.deadline,"deadline");return s.ok?a.ok?c.ok?ane(r.value.command)?S({type:"command.request",sessionId:i.value,requestId:s.value,workspaceId:a.value,deadline:c.value,command:r.value.command,...r.value.payload===void 0?{}:{payload:r.value.payload}}):Tn("command","Remote command name is not supported."):c:a:s}if(n.value==="stream.cancel"){let o=Na(r.value,["type","sessionId","requestId","streamId","workspaceId","reason"],"$message");if(!o.ok)return o;let s=ki(r.value.requestId,"requestId",Wd),a=ki(r.value.streamId,"streamId",Wd),c=ki(r.value.workspaceId,"workspaceId",Wd),u=C1(r.value.reason,"reason",nne);return s.ok?a.ok?c.ok?u.ok?S({type:"stream.cancel",sessionId:i.value,requestId:s.value,streamId:a.value,workspaceId:c.value,...u.value?{reason:u.value}:{}}):u:c:a:s}if(n.value==="session.close"){let o=Na(r.value,["type","sessionId","reason"],"$message");return o.ok?r.value.reason==="lease_expired"||r.value.reason==="replaced"||r.value.reason==="canceled"||r.value.reason==="protocol_error"?S({type:"session.close",sessionId:i.value,reason:r.value.reason}):Tn("reason","Session close reason is invalid."):o}return Tn("type","Inbound remote control message is not supported.")}function ane(t){return typeof t=="string"&&rne.includes(t)}function cne(t,e){let r=zS(t,e);if(!r.ok)return r;let n=Na(r.value,["kty","crv","x","y","key_ops","ext"],e);if(!n.ok)return n;if(r.value.kty!=="EC"||r.value.crv!=="P-256"||r.value.d!==void 0)return Tn(e,"Peer public key must be a public P-256 EC key.");let i=GS(r.value.x,`${e}.x`,32,32),o=GS(r.value.y,`${e}.y`,32,32);return i.ok?o.ok?S({kty:"EC",crv:"P-256",x:i.value,y:o.value,ext:!0}):o:i}function t8(t,e,r){if(typeof t!="object"||t===null)return S(!0);if(r.has(t))return Tn(e,"Remote peer message must not be cyclic.");r.add(t);for(let[n,i]of Object.entries(t)){if(sne.has(n))return Tn(`${e}.${n}`,"Remote peer messages cannot contain canonical local paths.");let o=t8(i,`${e}.${n}`,r);if(!o.ok)return o}return r.delete(t),S(!0)}function zS(t,e){return typeof t=="object"&&t!==null&&!Array.isArray(t)?S(t):Tn(e,"Value must be an object.")}function ki(t,e,r,n=!0){if(typeof t!="string")return Tn(e,"Value must be a string.");let i=n?t.trim():t;return i&&i.length<=r&&!/[\u0000\u000b\u000c\u007f]/u.test(i)?S(i):Tn(e,`Value must contain 1-${r} allowed characters.`)}function C1(t,e,r){return t===void 0?S(void 0):ki(t,e,r)}function une(t,e){let r=ki(t,e,64);return r.ok&&Number.isFinite(Date.parse(r.value))?r:Tn(e,"Value must be an ISO timestamp.")}function GS(t,e,r,n){let i=Math.ceil(n*4/3),o=ki(t,e,i);if(!o.ok)return o;if(!/^[A-Za-z0-9_-]+$/u.test(o.value)||o.value.length%4===1)return Tn(e,"Value must be unpadded base64url.");let s=Math.floor(o.value.length*3/4);return s>=r&&s<=n?S(o.value):Tn(e,"Decoded value has an invalid size.")}function Na(t,e,r){let n=new Set(e),i=Object.keys(t).find(o=>!n.has(o));return i?Tn(`${r}.${i}`,"Field is not allowed."):S(!0)}function Tn(t,e){return oe({code:"INVALID_REMOTE_PEER_WIRE",field:t,message:e})}import{delimiter as dne,dirname as lne,join as fne,resolve as pne}from"node:path";import{fileURLToPath as mne}from"node:url";import{spawn as hne}from"node:child_process";import{createInterface as gne}from"node:readline";import{Buffer as yne}from"node:buffer";var u8=yS,vne={type:"object",properties:{executorId:{type:"string"},goal:{type:"string"}},required:["executorId","goal"],additionalProperties:!1},xne={type:["object","null"],properties:{executorId:{type:"string"},prompt:{type:"string"}},required:["executorId","prompt"],additionalProperties:!1},Sne={type:["string","array"],items:{type:"string"}},bne={type:"object",properties:{kind:{type:"string",enum:["goal"]},stage:{type:"string",enum:["needs_evaluation"]},id:{type:"string"},assignee:vne,evaluator:xne,remainingAttempts:{type:"integer",minimum:0},requires:Sne},required:["kind","stage","id","assignee","evaluator","remainingAttempts","requires"],additionalProperties:!1},r8={type:"object",properties:{kind:{type:"string",enum:["queue"]},id:{type:"string"},items:{type:"array",items:bne}},required:["kind","id","items"],additionalProperties:!1},d8={type:"object",properties:{type:{type:"string",enum:["pass","fail"]},summary:{type:"string"},reason:{type:"string"},feedback:{type:"string"},nextGoal:{type:"string"},evidence:{type:"array",items:{type:"string"}}},required:["type","summary","reason","feedback","nextGoal","evidence"],additionalProperties:!1},wne={sandboxMode:"workspace-write",approvalPolicy:"never",approvalsReviewer:"user",networkAccessEnabled:!1},T1=class{subscribers=new Map;push(e){let r=this.subscribers.get(e.runId);if(r)for(let n of r)n.closed||(n.queue.push(e),n.resolve?.(),n.resolve=void 0)}close(e){let r=this.subscribers.get(e);if(r)for(let n of r)n.closed=!0,n.resolve?.(),n.resolve=void 0}async*events(e){let r={queue:[],closed:!1},n=this.subscribers.get(e);n||(n=new Set,this.subscribers.set(e,n)),n.add(r);try{for(;;){let i=r.queue.shift();if(i){yield i;continue}if(r.closed)return;await new Promise(o=>{r.resolve=o})}}finally{n.delete(r),n.size===0&&this.subscribers.delete(e)}}},lg=class extends Error{code;data;constructor(e,r,n){super(r),this.code=e,this.data=n}},B1=class{child;stdout;messageHandlers=new Set;errorHandlers=new Set;closeHandlers=new Set;constructor(e){this.child=hne(e.command,e.args,{cwd:e.cwd,env:Kne(e.environment)}),this.stdout=gne({input:this.child.stdout}),this.stdout.on("line",r=>this.handleLine(r)),this.child.stderr.on("data",()=>{}),this.child.once("error",r=>this.emitError(r)),this.child.once("close",()=>this.emitClose())}send(e){if(this.child.stdin.destroyed||!this.child.stdin.writable)throw new Error("Codex app-server stdin is closed");this.child.stdin.write(`${JSON.stringify(e)}
144
144
  `)}close(){this.stdout.close(),this.child.killed||this.child.kill("SIGTERM")}onMessage(e){return this.messageHandlers.add(e),()=>this.messageHandlers.delete(e)}onError(e){return this.errorHandlers.add(e),()=>this.errorHandlers.delete(e)}onClose(e){return this.closeHandlers.add(e),()=>this.closeHandlers.delete(e)}handleLine(e){if(e.trim())try{let r=JSON.parse(e);for(let n of this.messageHandlers)n(r)}catch(r){this.emitError(new Error(`Invalid Codex app-server JSON-RPC message: ${r instanceof Error?r.message:String(r)}`))}}emitError(e){for(let r of this.errorHandlers)r(e)}emitClose(){for(let e of this.closeHandlers)e()}},D1=class{requestTimeoutMs;transportFactory;clientInfo;serverRequestHandler;transport;startPromise;initialized;nextId=1;pending=new Map;notificationHandlers=new Set;constructor(e={}){let r=e.environment??{},n=e.command??"codex",i=e.args??["app-server","--stdio"];this.requestTimeoutMs=e.requestTimeoutMs??6e4,this.clientInfo=e.clientInfo??{name:"hunsu-studio",title:"Hunsu Studio",version:"0.1.0"},this.transportFactory=e.transportFactory??(()=>new B1({command:n,args:i,environment:r,cwd:e.cwd})),this.serverRequestHandler=e.handleServerRequest??l8}setServerRequestHandler(e){this.serverRequestHandler=e}async initialize(){return await this.ensureStarted(),this.initialized}async request(e,r,n={}){return await this.ensureStarted(),this.requestRaw(e,r,n.timeoutMs)}notify(e,r){this.transport?.send(r===void 0?{method:e}:{method:e,params:r})}onNotification(e){return this.notificationHandlers.add(e),()=>this.notificationHandlers.delete(e)}close(){this.disposeTransport(new Error("Codex app-server client closed"),!0)}async ensureStarted(){if(!(this.transport&&this.initialized)){if(this.startPromise)return this.startPromise;this.startPromise=this.start();try{await this.startPromise}finally{this.startPromise=void 0}}}async start(){let e=this.transportFactory();this.transport=e,e.onMessage(r=>this.handleMessage(r)),e.onError(r=>this.disposeTransport(r,!0)),e.onClose(()=>{this.disposeTransport(new Error("Codex app-server process exited"),!1)}),this.initialized=await this.requestRaw("initialize",{clientInfo:this.clientInfo,capabilities:null},this.requestTimeoutMs),this.notify("initialized")}requestRaw(e,r,n=this.requestTimeoutMs){let i=this.transport;if(!i)throw new Error("Codex app-server transport is not started");let o=`hunsu-${this.nextId++}`;return new Promise((s,a)=>{let c=setTimeout(()=>{this.pending.delete(o);let u=new Error(`Codex app-server request timed out: ${e}`);a(u),this.disposeTransport(u,!0)},n);this.pending.set(o,{method:e,resolve:s,reject:a,timer:c});try{i.send(r===void 0?{id:o,method:e}:{id:o,method:e,params:r})}catch(u){clearTimeout(c),this.pending.delete(o),a(u instanceof Error?u:new Error(String(u)))}})}handleMessage(e){if(e.id!==void 0&&(e.result!==void 0||e.error!==void 0)&&!e.method){this.handleResponse(e);return}if(e.id!==void 0&&typeof e.method=="string"){this.handleServerRequest(e);return}if(typeof e.method=="string")for(let r of this.notificationHandlers)r(e)}handleResponse(e){let r=this.pending.get(e.id);if(r){if(clearTimeout(r.timer),this.pending.delete(e.id),e.error){r.reject(new Error(`Codex app-server ${r.method} failed: ${e.error.message}`));return}r.resolve(e.result)}}async handleServerRequest(e){try{let r=await this.serverRequestHandler(e);this.transport?.send({id:e.id,result:r})}catch(r){let n=r instanceof lg?r:new lg(-32603,r instanceof Error?r.message:String(r));this.transport?.send({id:e.id,error:{code:n.code,message:n.message,data:n.data}})}}rejectPending(e){for(let[r,n]of this.pending)clearTimeout(n.timer),n.reject(e),this.pending.delete(r)}disposeTransport(e,r){let n=this.transport;this.transport=void 0,this.initialized=void 0,this.rejectPending(e),r&&n?.close()}},N1=class{eventBus=new T1;client;threadOptions;activeByRunId=new Map;activeByThreadId=new Map;activeByTurnId=new Map;constructor(e={}){this.threadOptions={...wne,...e.threadOptions},this.client=e.client??new D1({...e.clientOptions,environment:e.clientOptions?.environment??e.environment??{}}),this.client.setServerRequestHandler(r=>this.handleServerRequest(r)),this.client.onNotification(r=>this.handleNotification(r))}async runTeamPlanning(e){let r=a8(e);return this.executeTurn(e,r,s8(e),void 0,!0,r8)}async runMemberPath(e){let r=v8(e,e.memberPath.executorId);return this.executeTurn(e,r,Mne(e),void 0,!1,e.outputSchema)}async runMoveFinalizer(e){let r=Gne();return this.executeTurn(e,r,Lne(e),void 0,!0)}async runHunsuDraftTurn(e){let r=c8(e.manager);return this.executeTurn(e,r,Hne(e),e.providerThreadId,!1,void 0,{reusePreparedThread:!0})}async prepareHunsuDraftSession(e){let r=c8(e.manager),n=await this.prepareThread(e,r,e.providerThreadId,!1);return{runId:e.runId,provider:"codex",providerThreadId:n}}async resumeRun(e){let r=a8(e);return this.executeTurn(e,r,s8(e),e.providerThreadId,!0,r8)}async pauseRun(e){this.eventBus.push({type:"runner.status.changed",runId:e,phase:"waiting",headline:"Pause requested",detail:"Codex app-server will stop after the current turn boundary."})}async stopRun(e){let r=this.activeByRunId.get(e);if(this.eventBus.push({type:"runner.status.changed",runId:e,phase:"waiting",headline:"Stop requested"}),r?.threadId&&r.turnId){try{await this.client.request("turn/interrupt",{threadId:r.threadId,turnId:r.turnId},{timeoutMs:1e4})}catch(n){this.eventBus.push({type:"runner.error",runId:e,error:`Codex app-server interrupt failed: ${n instanceof Error?n.message:String(n)}`})}r.completed=!0,r.reject(new Error("Codex turn interrupted by Studio"));return}if(r){r.completed=!0,this.client.close(),r.reject(new Error("Codex turn interrupted by Studio before app-server returned a turn id"));return}this.eventBus.close(e)}async providerStatus(){try{let r={backend:"app-server",available:!0,initialized:await this.client.initialize()};try{r.account=await this.client.request("account/read",{refreshToken:!1})}catch(i){r.accountError=i instanceof Error?i.message:String(i)}try{r.rateLimits=await this.client.request("account/rateLimits/read")}catch(i){r.rateLimitsError=i instanceof Error?i.message:String(i)}let n=[r.accountError,r.rateLimitsError].filter(Boolean);return n.length>0&&(r.error=n.join("; ")),r}catch(e){return{backend:"app-server",available:!1,error:e instanceof Error?e.message:String(e)}}}events(e){return this.eventBus.events(e)}async executeTurn(e,r,n,i,o=!1,s,a={}){let c=a.reusePreparedThread===!0&&i!==void 0&&!s;try{let u=c?i:await this.prepareThread(e,r,i,o,s);c&&this.eventBus.push({type:"runner.status.changed",runId:e.runId,phase:"working",headline:"Prepared thread reused",detail:u,providerThreadId:u});try{return await this.startTurn(e,r,u,n,o,s)}catch(d){if(!c)throw d;let l=d instanceof Error?d.message:String(d);this.eventBus.push({type:"runner.status.changed",runId:e.runId,phase:"working",headline:"Prepared thread reuse failed",detail:l,providerThreadId:i});let f=await this.prepareThread(e,r,i,o,s);return await this.startTurn(e,r,f,n,o,s)}}catch(u){let d=u instanceof Error?u.message:String(u);throw this.eventBus.push({type:"runner.error",runId:e.runId,error:d}),u}finally{this.eventBus.close(e.runId)}}async startTurn(e,r,n,i,o,s){let a;try{return await new Promise((c,u)=>{a={runId:e.runId,threadId:n,rawEvents:[],activeCommandExecutionIds:new Set,backgroundTerminalCleanupRequested:!1,finalEmitted:!1,completed:!1,resolve:c,reject:u},this.trackActiveTurn(a),this.client.request("turn/start",this.turnStartParamsFor(e,r,n,i,o,s),{timeoutMs:6e4}).then(d=>{let l=La(d,"turn");if(!a||a.completed)return;let f=ft(l,"id");f&&this.setActiveTurnId(a,f),l&&ft(l,"status")!=="inProgress"&&this.completeActiveTurn(a,l)}).catch(d=>{a?.completed||u(d instanceof Error?d:new Error(String(d)))})})}finally{a&&this.untrackActiveTurn(a)}}async prepareThread(e,r,n,i,o){let s=n?await this.client.request("thread/resume",this.threadResumeParamsFor(e,r,n,i)):await this.client.request("thread/start",this.threadStartParamsFor(e,r,i)),a=KS(s,["thread","id"])??n;if(!a)throw new Error("Codex app-server did not return a thread id");return this.eventBus.push({type:"runner.status.changed",runId:e.runId,phase:"working",headline:"Thread ready",detail:a,providerThreadId:a}),o?(await this.client.request("thread/goal/clear",{threadId:a},{timeoutMs:6e4}),this.eventBus.push({type:"runner.status.changed",runId:e.runId,phase:"working",headline:"Provider goal cleared",providerThreadId:a})):(await this.client.request("thread/goal/set",this.threadGoalSetParamsFor(e,r,a),{timeoutMs:6e4}),this.eventBus.push({type:"runner.status.changed",runId:e.runId,phase:"working",headline:"Provider goal set",providerThreadId:a})),a}threadStartParamsFor(e,r,n){let i=this.effectiveThreadOptions(e,r,n);return{cwd:e.repositoryPath,approvalPolicy:i.approvalPolicy,approvalsReviewer:i.approvalsReviewer??"user",sandbox:i.sandboxMode,model:i.model??null,serviceTier:i.serviceTier==="fast"?"fast":null,ephemeral:!1,threadSource:"user"}}threadResumeParamsFor(e,r,n,i){let o=this.effectiveThreadOptions(e,r,i);return{threadId:n,cwd:e.repositoryPath,approvalPolicy:o.approvalPolicy,approvalsReviewer:o.approvalsReviewer??"user",sandbox:o.sandboxMode,model:o.model??null,serviceTier:o.serviceTier==="fast"?"fast":null}}threadGoalSetParamsFor(e,r,n){return{threadId:n,objective:Une(e,r)}}turnStartParamsFor(e,r,n,i,o,s){let a=this.effectiveThreadOptions(e,r,o);return{threadId:n,input:[{type:"text",text:i,text_elements:[]}],cwd:e.repositoryPath,approvalPolicy:a.approvalPolicy,approvalsReviewer:a.approvalsReviewer??"user",sandboxPolicy:Ine(e.repositoryPath,a,o),model:a.model??null,serviceTier:a.serviceTier==="fast"?"fast":null,effort:a.modelReasoningEffort??null,outputSchema:s??null}}effectiveThreadOptions(e,r,n){let i=zne(r),o={...this.threadOptions,...e.codexThreadOptions,...i,...x8(e.resolvedModelSelection)};return n&&(o.networkAccessEnabled=e.codexThreadOptions?.networkAccessEnabled??this.threadOptions.networkAccessEnabled??i.networkAccessEnabled,o.sandboxMode="read-only",o.approvalPolicy="never",o.approvalsReviewer="user"),o}handleNotification(e){let r=n8(e,this.activeByThreadId,this.activeByTurnId);if(!r)return;r.rawEvents.push(i8(e));let n=Ki(e.params)?e.params:{},i=ft(n,"turnId")??KS(n,["turn","id"]);this.eventBus.push({type:"runner.appServer.message",runId:r.runId,direction:"server-notification",providerThreadId:r.threadId,providerTurnId:i??r.turnId,method:e.method,message:e}),i&&i!==r.turnId&&this.setActiveTurnId(r,i),(e.method==="item/started"||e.method==="item/completed")&&this.trackCommandExecutionItem(r,e.method,La(n,"item"));let o=Ene({runId:r.runId,providerThreadId:r.threadId,providerTurnId:i??r.turnId},e);for(let s of o)switch(s.kind){case"setTurnId":this.setActiveTurnId(r,s.turnId);break;case"usage":r.usage=s.usage;break;case"teamEvent":this.eventBus.push(s.event);break;case"finalResponse":r.finalResponse=s.finalResponse,this.requestBackgroundTerminalCleanupIfNeeded(r);break;case"completeTurn":this.completeActiveTurn(r,s.turn);break}}trackCommandExecutionItem(e,r,n){if(ft(n,"type")!=="commandExecution")return;let i=fg(n);if(!i)return;let o=ft(n,"status");if(r==="item/completed"||o==="completed"||o==="failed"||o==="declined"){e.activeCommandExecutionIds.delete(i);return}e.activeCommandExecutionIds.add(i)}requestBackgroundTerminalCleanupIfNeeded(e){e.backgroundTerminalCleanupRequested||e.activeCommandExecutionIds.size===0||(e.backgroundTerminalCleanupRequested=!0,this.client.request("thread/backgroundTerminals/clean",{threadId:e.threadId},{timeoutMs:1e4}).catch(()=>{}))}completeActiveTurn(e,r){if(e.completed)return;e.completed=!0;let n=ft(r,"id")??e.turnId;n&&this.setActiveTurnId(e,n);let i=ft(r,"status");if(i==="failed"){let s=La(r,"error"),a=ft(s,"message")??"Codex app-server turn failed";this.eventBus.push({type:"runner.error",runId:e.runId,error:a}),e.reject(new Error(a));return}if(i==="interrupted"){e.reject(new Error("Codex app-server turn interrupted"));return}let o=e.finalResponse??Dne(r);o&&!e.finalEmitted&&(e.finalEmitted=!0,this.eventBus.push({type:"runner.final",runId:e.runId,finalResponse:o})),e.resolve({runId:e.runId,provider:"codex",providerThreadId:e.threadId,providerTurnId:e.turnId,finalResponse:o,rawResult:{rawEvents:e.rawEvents,finalResponse:o,usage:e.usage,turn:r}})}trackActiveTurn(e){this.activeByRunId.set(e.runId,e),this.activeByThreadId.set(e.threadId,e),e.turnId&&this.activeByTurnId.set(e.turnId,e)}setActiveTurnId(e,r){e.turnId&&e.turnId!==r&&this.activeByTurnId.delete(e.turnId),e.turnId=r,this.activeByTurnId.set(r,e)}untrackActiveTurn(e){this.activeByRunId.delete(e.runId),this.activeByThreadId.delete(e.threadId),e.turnId&&this.activeByTurnId.delete(e.turnId)}async handleServerRequest(e){let r=Ki(e.params)?e.params:{},n=n8(e,this.activeByThreadId,this.activeByTurnId);n?.rawEvents.push(i8(e));let i=n?.runId;i&&this.eventBus.push({type:"runner.appServer.message",runId:i,direction:"server-request",providerThreadId:n?.threadId,providerTurnId:n?.turnId,method:e.method,message:e});let o=Ane(e.method,r);return i&&o&&this.eventBus.push({type:"runner.status.changed",runId:i,phase:"waiting",headline:"Approval requested",detail:o,providerThreadId:n?.threadId,providerTurnId:n?.turnId}),e.method==="item/permissions/requestApproval"&&(n?.threadId&&n.turnId&&this.client.request("turn/interrupt",{threadId:n.threadId,turnId:n.turnId},{timeoutMs:1e4}).catch(()=>{}),i&&this.eventBus.push({type:"runner.error",runId:i,error:"Codex app-server requested additional permissions; Hunsu declined and interrupted the turn."}),n&&!n.completed&&(n.completed=!0,n.reject(new Error("Codex app-server requested additional permissions; Hunsu declined and interrupted the turn.")))),l8(e)}};function Vd(t={}){return new N1(t)}function l8(t){switch(t.method){case"item/commandExecution/requestApproval":return{decision:"decline"};case"item/fileChange/requestApproval":return{decision:"decline"};case"execCommandApproval":case"applyPatchApproval":return{decision:"denied"};case"item/permissions/requestApproval":return{permissions:{},scope:"turn",strictAutoReview:!0};default:throw new lg(-32601,`Unsupported Codex app-server request: ${t.method??"unknown"}`)}}function Ine(t,e,r){let n=e.networkAccessEnabled===!0;return r||e.sandboxMode==="read-only"?{type:"readOnly",networkAccess:n}:e.sandboxMode==="danger-full-access"?{type:"dangerFullAccess",networkAccess:n}:{type:"workspaceWrite",writableRoots:[t],networkAccess:n,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}}function n8(t,e,r){let n=Ki(t.params)?t.params:{},i=ft(n,"turnId")??KS(n,["turn","id"]);if(i){let s=r.get(i);if(s)return s}let o=ft(n,"threadId")??KS(n,["thread","id"]);return o?e.get(o):void 0}function i8(t){return{source:"codex.app-server",message:t}}function Ene(t,e){let r=Ki(e.params)?e.params:{};switch(e.method){case"turn/started":{let n=La(r,"turn"),i=ft(n,"id")??ft(r,"turnId")??t.providerTurnId??"turn";return[...i?[{kind:"setTurnId",turnId:i}]:[],{kind:"teamEvent",event:{type:"runner.turn.started",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:i,turn:n,startedAtMs:Ha(r,"startedAtMs")}},{kind:"teamEvent",event:{type:"runner.status.changed",runId:t.runId,phase:"working",headline:"Working",detail:i,providerThreadId:t.providerThreadId,providerTurnId:i}}]}case"turn/completed":{let n=La(r,"turn"),i=ft(n,"id")??ft(r,"turnId")??t.providerTurnId;return[{kind:"teamEvent",event:{type:"runner.turn.completed",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:i,turn:n,completedAtMs:Ha(r,"completedAtMs")}},{kind:"completeTurn",turn:n}]}case"thread/tokenUsage/updated":{let n=kne(r);return[{kind:"usage",usage:n},{kind:"teamEvent",event:{type:"runner.status.changed",runId:t.runId,phase:"working",headline:"Working",detail:Rne(n),providerThreadId:t.providerThreadId,providerTurnId:t.providerTurnId}}]}case"item/started":case"item/completed":return Cne(t,e.method,La(r,"item"));case"item/agentMessage/delta":case"item/agentMessage/textDelta":case"item/agentMessage/outputDelta":case"item/assistantMessage/delta":case"item/assistantMessage/textDelta":case"item/assistantMessage/outputDelta":{let n=o8(r);if(!n)return[];let i=fg(r)??"agentMessage",o=ft(r,"turnId")??t.providerTurnId;return[{kind:"teamEvent",event:{type:"runner.item.delta",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:o,itemId:i,deltaKind:"agentMessage",delta:n}}]}case"item/commandExecution/outputDelta":case"item/fileChange/outputDelta":case"item/plan/delta":case"item/reasoning/textDelta":case"item/reasoning/summaryTextDelta":{let n=o8(r);if(!n)return[];let i=Pne(e.method),o=fg(r)??i,s=ft(r,"turnId")??t.providerTurnId;return[{kind:"teamEvent",event:{type:"runner.item.delta",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:s,itemId:o,deltaKind:i,delta:n,contentIndex:Ha(r,"contentIndex")}}]}case"turn/plan/updated":{let n=ft(r,"explanation");return[{kind:"teamEvent",event:{type:"runner.status.changed",runId:t.runId,phase:"thinking",headline:"Planning",detail:n?zf(n,500):"Codex plan updated.",providerThreadId:t.providerThreadId,providerTurnId:t.providerTurnId}}]}case"error":{let n=La(r,"error");return[{kind:"teamEvent",event:{type:"runner.error",runId:t.runId,error:ft(n,"message")??"Codex app-server error"}}]}default:return[]}}function kne(t){let e=La(t,"tokenUsage"),r=La(e,"last");if(r)return{input_tokens:Ha(r,"inputTokens")??0,cached_input_tokens:Ha(r,"cachedInputTokens")??0,output_tokens:Ha(r,"outputTokens")??0,reasoning_output_tokens:Ha(r,"reasoningOutputTokens")??0}}function Rne(t){return t?`Codex turn usage. Input ${t.input_tokens}, output ${t.output_tokens}, reasoning ${t.reasoning_output_tokens}.`:"Codex app-server usage updated."}function Ane(t,e){switch(t){case"item/commandExecution/requestApproval":return`Codex app-server requested command approval; Hunsu declined: ${ft(e,"command")??"unknown command"}`;case"item/fileChange/requestApproval":return`Codex app-server requested file-change approval; Hunsu declined${ft(e,"grantRoot")?` for ${ft(e,"grantRoot")}`:""}.`;case"item/permissions/requestApproval":return"Codex app-server requested additional permissions; Hunsu declined.";case"execCommandApproval":return`Codex app-server requested command approval; Hunsu declined: ${e.command?.join(" ")??"unknown command"}`;case"applyPatchApproval":return"Codex app-server requested patch approval; Hunsu declined.";default:return}}function Cne(t,e,r){let n=e==="item/started"?"started":"completed",i=_ne(r);if(!i)return[];let o=i.id??fg(r)??i.type,s={kind:"teamEvent",event:n==="started"?{type:"runner.item.started",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:t.providerTurnId,itemId:o,item:i}:{type:"runner.item.completed",runId:t.runId,providerThreadId:t.providerThreadId,providerTurnId:t.providerTurnId,itemId:o,item:i}};switch(i.type){case"agentMessage":{let a=i.text;return n!=="completed"||!a?[s]:[s,{kind:"finalResponse",finalResponse:a}]}case"reasoning":return[s];case"plan":return[s];case"commandExecution":return[s];case"fileChange":return[s];case"mcpToolCall":return[s];case"webSearch":return[s];default:return[s]}}function Pne(t){switch(t){case"item/agentMessage/delta":case"item/agentMessage/textDelta":case"item/agentMessage/outputDelta":case"item/assistantMessage/delta":case"item/assistantMessage/textDelta":case"item/assistantMessage/outputDelta":return"agentMessage";case"item/plan/delta":return"plan";case"item/reasoning/textDelta":return"reasoningText";case"item/reasoning/summaryTextDelta":return"reasoningSummary";case"item/fileChange/outputDelta":return"fileChangeOutput";default:return"commandOutput"}}function _ne(t){let e=ft(t,"type");if(!t||!e)return;let r={id:fg(t),type:e,raw:t},n=ft(t,"text");if(n!==void 0)r.text=n;else{let b=Tne(t);b!==void 0&&(r.text=b)}let i=O1(t.summary);i.length>0&&(r.summary=i);let o=O1(t.content);o.length>0&&(r.content=o);let s=ft(t,"command");s!==void 0&&(r.command=s);let a=ft(t,"cwd");a!==void 0&&(r.cwd=a);let c=ft(t,"status");c!==void 0&&(r.status=c);let u=Bne(t);u.length>0&&(r.commandActions=u);let d=ft(t,"aggregatedOutput");d!==void 0&&(r.aggregatedOutput=d);let l=Ha(t,"exitCode");l!==void 0&&(r.exitCode=l);let f=Ha(t,"durationMs");f!==void 0&&(r.durationMs=f),"changes"in t&&(r.changes=t.changes);let p=ft(t,"server");p!==void 0&&(r.server=p);let g=ft(t,"tool");g!==void 0&&(r.tool=g);let v=ft(t,"query");return v!==void 0&&(r.query=v),r}function Tne(t){let e=O1(t.content);if(e.length!==0)return e.join(`
145
145
 
146
146
  `)}function O1(t){return Array.isArray(t)?t.flatMap(e=>{if(typeof e=="string")return e?[e]:[];if(!Ki(e))return[];let r=ft(e,"text")??ft(e,"content")??ft(e,"summary");return r?[r]:[]}):[]}function Bne(t){let e=t.commandActions;return Array.isArray(e)?e.flatMap(r=>{if(!Ki(r))return[];let n=ft(r,"type");switch(n){case"read":return[{type:n,command:ft(r,"command"),name:ft(r,"name"),path:ft(r,"path")}];case"listFiles":return[{type:n,command:ft(r,"command"),path:ft(r,"path")}];case"search":return[{type:n,command:ft(r,"command"),query:ft(r,"query"),path:ft(r,"path")}];case"unknown":return[{type:n,command:ft(r,"command")}];default:return[]}}):[]}function Dne(t){let e=Array.isArray(t?.items)?t.items:[];for(let r of[...e].reverse())if(Ki(r)&&r.type==="agentMessage"&&typeof r.text=="string")return r.text}function fg(t){if(Ki(t))return ft(t,"itemId")??ft(t,"id")}function La(t,e){if(!Ki(t))return;let r=t[e];return Ki(r)?r:void 0}function ft(t,e){if(!Ki(t))return;let r=t[e];return typeof r=="string"?r:void 0}function o8(t){let e=ft(t,"delta");if(e!==void 0)return e;let r=ft(t,"deltaBase64");if(r)try{return yne.from(r,r.includes("-")||r.includes("_")?"base64url":"base64").toString("utf8")}catch{return}}function Ha(t,e){if(!Ki(t))return;let r=t[e];return typeof r=="number"?r:void 0}function KS(t,e){let r=t;for(let n of e){if(!Ki(r))return;r=r[n]}return typeof r=="string"?r:void 0}function Ki(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function s8(t){let e=JS(t);return["<role>"," <purpose>"," Plan a closure-free executable ExecutionPlan."," </purpose>",""," <instructions>",Ma(f8(t,e),4)," </instructions>","</role>","","<goal>",Ma(g8(t),2),"</goal>","","<member_profiles>",Fne(e.members),"</member_profiles>","","<rules>"," Return one structured ExecutionPlan object with root kind queue."," Put each executable step in the queue items array as kind goal with stage needs_evaluation."," Use each goal item to delegate to one assignee Executor and optionally one evaluator Executor."," A goal assignee must name executorId and a standalone goal."," A goal evaluator, when present, must name executorId and a prompt that can return pass or fail with type, summary, reason, feedback, nextGoal, and evidence.",` Set remainingAttempts to ${One(t.maxAttemptCount)||Nne(e)} for each goal unless a smaller bound is clearly enough.`," Set requires to PrevMove unless this goal intentionally depends on earlier Path ids.","</rules>"].join(`
@@ -179,7 +179,7 @@ ${r}`:void 0].filter(n=>n!==void 0).join(`
179
179
  `):"- none"].filter(e=>e!==void 0).join(`
180
180
  `)}function Vne(t){return t.length===0?"No prior draft conversation.":t.map(e=>`${e.role==="draft-agent"?"Draft Agent":e.role==="user"?"User":"System"}: ${zf(e.text,1200)}`).join(`
181
181
 
182
- `)}function a8(t){let e=JS(t);return wi("team",f8(t,e),[])}function Gne(){return wi("move-finalizer","Write a precise final MOVE commit message from the completed Execute diff and evidence.",[])}function c8(t=jf()){return{...wi(String(t.id),t.promptTemplate.template,t.skills),promptTemplate:{...t.promptTemplate},plugins:t.plugins.map(r=>({...r})),...t.modelSelection?{modelSelection:JSON.parse(JSON.stringify(t.modelSelection))}:{},execution:{kind:"worktree_write",network:"enabled"},approval:{policy:"never"}}}function v8(t,e){if(t.harnessGraph){let i=YR(t.harnessGraph,e);if(!i)throw new Error(`Harness does not define required Member ${e}`);return SS(i)}let r=JS(t),n=qf(r,e);if(!n)throw new Error(`Harness ${r.kind} does not define required Member ${e}`);return n}function JS(t){return t.harnessGraph?jd(t.harnessGraph,t.teamScopeId??t.harnessGraph.rootTeamId):t.harness??Vn()}function zne(t){let e={approvalPolicy:t.approval.policy==="on_request"?"on-request":"never",approvalsReviewer:t.approval.policy==="on_request"?t.approval.reviewer:"user",networkAccessEnabled:t.execution.network==="enabled"};switch(t.execution.kind){case"read_only":e.sandboxMode="read-only";break;case"worktree_write":e.sandboxMode="workspace-write";break;case"unrestricted":e.sandboxMode="danger-full-access";break}let r=t.modelSelection?k3(t.modelSelection):void 0;return r?{...e,...x8(r)}:(t.modelSelection||(t.model&&t.model!=="codex-default"&&(e.model=t.model),t.reasoningEffort&&t.reasoningEffort!=="default"&&(e.modelReasoningEffort=t.reasoningEffort),e.serviceTier=t.serviceTier??"default"),e)}function x8(t){return!t||t.providerId!=="codex"?{}:{model:t.model==="codex-default"?void 0:t.model,modelReasoningEffort:t.reasoningEffort&&t.reasoningEffort!=="default"?t.reasoningEffort:void 0,serviceTier:t.serviceTier??"default"}}function S8(t){return"memberPath"in t}function M1(t){return"draftSessionId"in t&&"sourceSnapshot"in t&&"userMessage"in t}function b8(t){return"draftSessionId"in t&&"sourceSnapshot"in t}function Kne(t){let e={};for(let[i,o]of Object.entries(t))o!==void 0&&(e[i]=o);let r=pne(lne(mne(import.meta.url)),"../../.."),n=fne(r,"node_modules",".bin");return e.PATH=[n,t.PATH].filter(Boolean).join(dne),e}function zf(t,e=4e3){return t.length<=e?t:`${t.slice(0,e-1)}...`}var su=class extends Error{constructor(e){super(e),this.name="HunsuError"}};var Tr=class extends su{command;stderr;constructor(e,r){super(`Git command failed: git ${e.join(" ")}${r?`
182
+ `)}function a8(t){let e=JS(t);return wi("team",f8(t,e),[])}function Gne(){return wi("move-finalizer","Write a precise final MOVE commit message from the completed Execute diff and evidence.",[])}function c8(t=jf()){return{...wi(String(t.id),t.promptTemplate.template,t.skills),promptTemplate:{...t.promptTemplate},plugins:t.plugins.map(r=>({...r})),...t.modelSelection?{modelSelection:JSON.parse(JSON.stringify(t.modelSelection))}:{},execution:{kind:"worktree_write",network:"enabled"},approval:{policy:"never"}}}function v8(t,e){if(t.harnessGraph){let i=YR(t.harnessGraph,e);if(!i)throw new Error(`Harness does not define required Member ${e}`);return SS(i)}let r=JS(t),n=qf(r,e);if(!n)throw new Error(`Harness ${r.kind} does not define required Member ${e}`);return n}function JS(t){return t.harnessGraph?jd(t.harnessGraph,t.teamScopeId??t.harnessGraph.rootTeamId):t.harness??Vn()}function zne(t){let e={approvalPolicy:t.approval.policy==="on_request"?"on-request":"never",approvalsReviewer:t.approval.policy==="on_request"?t.approval.reviewer:"user",networkAccessEnabled:t.execution.network==="enabled"};switch(t.execution.kind){case"read_only":e.sandboxMode="read-only";break;case"worktree_write":e.sandboxMode="workspace-write";break;case"unrestricted":e.sandboxMode="danger-full-access";break}let r=t.modelSelection?k4(t.modelSelection):void 0;return r?{...e,...x8(r)}:(t.modelSelection||(t.model&&t.model!=="codex-default"&&(e.model=t.model),t.reasoningEffort&&t.reasoningEffort!=="default"&&(e.modelReasoningEffort=t.reasoningEffort),e.serviceTier=t.serviceTier??"default"),e)}function x8(t){return!t||t.providerId!=="codex"?{}:{model:t.model==="codex-default"?void 0:t.model,modelReasoningEffort:t.reasoningEffort&&t.reasoningEffort!=="default"?t.reasoningEffort:void 0,serviceTier:t.serviceTier??"default"}}function S8(t){return"memberPath"in t}function M1(t){return"draftSessionId"in t&&"sourceSnapshot"in t&&"userMessage"in t}function b8(t){return"draftSessionId"in t&&"sourceSnapshot"in t}function Kne(t){let e={};for(let[i,o]of Object.entries(t))o!==void 0&&(e[i]=o);let r=pne(lne(mne(import.meta.url)),"../../.."),n=fne(r,"node_modules",".bin");return e.PATH=[n,t.PATH].filter(Boolean).join(dne),e}function zf(t,e=4e3){return t.length<=e?t:`${t.slice(0,e-1)}...`}var su=class extends Error{constructor(e){super(e),this.name="HunsuError"}};var Tr=class extends su{command;stderr;constructor(e,r){super(`Git command failed: git ${e.join(" ")}${r?`
183
183
  ${r}`:""}`),this.name="GitError",this.command=e,this.stderr=r}};function H1(t){let e=[];for(let[r,n]of Object.entries(t))n!==void 0&&e.push(`${r}: ${String(n)}`);return e.join(`
184
184
  `)}function w8(t,e="commitSha"){return typeof t=="string"&&/^[0-9a-f]{40}$/i.test(t)?S(t):E8(e,"must be a 40-character Git commit SHA")}function Xne(t,e="runtimeChecksum"){return typeof t=="string"&&/^[0-9a-f]{64}$/i.test(t)?S(t):E8(e,"must be a SHA-256 hex checksum")}function Kr(t,e="commitSha"){return I8(w8(t,e))}function Kf(t,e="runtimeChecksum"){return I8(Xne(t,e))}function I8(t){if(t.ok)return t.value;throw new su(`${t.error.field} ${t.error.message}`)}function E8(t,e){return oe({type:"CorePrimitiveError",field:t,message:e})}import{createHash as aie}from"node:crypto";import{gzipSync as cie,gunzipSync as uie}from"node:zlib";import{existsSync as yg,mkdirSync as die,readFileSync as G1,rmSync as A8,writeFileSync as lie}from"node:fs";import{dirname as fie,join as cu}from"node:path";import{mkdirSync as Yne,mkdtempSync as Qne,rmSync as U1,writeFileSync as $1}from"node:fs";import{isAbsolute as Zne,join as mg}from"node:path";import{spawnSync as eie}from"node:child_process";var tie="",rie=64*1024*1024,E2e=["%H","%h","%P","%D","%an","%aI","%s","%B"].join(tie);function ke(t,e={}){let r=eie("git",t,{cwd:e.cwd,input:e.input,encoding:"utf8",maxBuffer:rie,env:e.env});if(r.status!==0)throw new Tr(t,r.stderr.trim());return r.stdout}function jt(t=process.cwd()){return ke(["rev-parse","--show-toplevel"],{cwd:t}).trim()}function nie(t,e={}){let r=e.cwd??process.cwd(),n=j1(r,"hunsu-move-"),i=mg(n,"message.txt");try{return $1(i,t,"utf8"),ke(["commit","-F",i],{cwd:r}),{commitSha:Kr(ke(["rev-parse","HEAD"],{cwd:r}).trim()),message:t}}finally{U1(n,{recursive:!0,force:!0})}}function k8(t,e={}){let r=e.cwd??process.cwd();if(!ke(["status","--porcelain=v1"],{cwd:r}).trim())throw new su("Cannot create MOVE commit without worktree changes");return ke(["add","--all"],{cwd:r}),nie(t,{cwd:r})}function iie(t){let e=t.finalizerMessage.trim();if(!e)throw new su("MOVE finalizer returned an empty commit message");let r=H1({"Hunsu-Event":"move","Hunsu-Run":t.runId,"Hunsu-Move":t.moveId,"Hunsu-Goal":t.goal,"Hunsu-Role":"move-finalizer","Hunsu-Actor":t.actor??"agent:codex","Hunsu-Status":"complete"});return`${e}
185
185
 
@@ -201,7 +201,7 @@ ${n}
201
201
  `),s=n.slice(i+2).trim();if(o[0]!==r)return Bn(`Invalid Hunsu runtime header in ${e}`);let a=new Map(o.slice(1).map(l=>{let f=l.indexOf(":");return f===-1?[l.trim(),""]:[l.slice(0,f).trim(),l.slice(f+1).trim()]}));if(a.get("encoding")!==C8)return Bn(`Unsupported Hunsu runtime encoding in ${e}: ${a.get("encoding")??"missing"}`);let c=a.get("checksum")?.replace(/^sha256:/,"");if(!c)return Bn(`Missing Hunsu runtime checksum in ${e}`);let u;try{u=uie(Buffer.from(s,"base64url")).toString("utf8")}catch(l){return Bn(`Invalid Hunsu runtime payload in ${e}: ${l instanceof Error?l.message:String(l)}`)}let d=wg(u);if(d!==c)return Bn(`Hunsu runtime checksum mismatch in ${e}`);try{return S({value:JSON.parse(u),checksum:Kf(d)})}catch(l){return Bn(`Invalid Hunsu runtime JSON in ${e}: ${l instanceof Error?l.message:String(l)}`)}}function jie(t){let e=jt(t),r=cu(e,W1);if(!yg(r))return;let n=bg(H8(G1(r,"utf8"),r));return{state:n,checksum:U8(n)}}function qie(t,e){let r=jt(t);try{let n=ke(["show",`${e}:${W1}`],{cwd:r}),i=bg(H8(n,`${e}:${W1}`));return{state:i,checksum:U8(i)}}catch(n){if(n instanceof Tr)return;throw n}}function H8(t,e){let r=ib(t,e,pie);if(!r.ok)return r;let n=r.value.value;if(!n||typeof n!="object")return Bn(`Invalid legacy Hunsu runtime state JSON in ${e}: expected object`);let i=n;if(i.version!==1||!Array.isArray(i.events))return Bn(`Invalid legacy Hunsu runtime state in ${e}`);let o=[];for(let[s,a]of i.events.entries()){let c=VS(a);if(!c.ok)return Bn(`Invalid legacy Hunsu runtime state event ${s} in ${e}: ${c.error.message}`);o.push(c.value)}return S({version:1,events:o,...typeof i.updatedAt=="string"?{updatedAt:i.updatedAt}:{}})}function U8(t){return Kf(wg(`${JSON.stringify(t)}
202
202
  `))}function Bn(t){return oe({type:"DomainStoreError",message:t})}function gg(t,e,r){let n=cu(t,e,r);try{return S(JSON.parse(G1(n,"utf8")))}catch(i){return Bn(`Cannot read ${e}/${r}: ${i instanceof Error?i.message:String(i)}`)}}function Gd(t){return JSON.parse(JSON.stringify(t))}function YS(t){return JSON.stringify(V1(t))}function V1(t){return Array.isArray(t)?t.map(V1):t&&typeof t=="object"?Object.fromEntries(Object.entries(t).sort(([e],[r])=>e.localeCompare(r)).map(([e,r])=>[e,V1(r)])):t}function bg(t){if(t.ok)return t.value;throw new Error(t.error.message)}function Wie(t){try{return Kr(ke(["rev-parse","--verify","HEAD^{commit}"],{cwd:t}).trim())}catch(e){if(e instanceof Tr)return;throw e}}function Vie(t){return t instanceof Error?"code"in t&&t.code==="ENOENT":!1}function wg(t){return aie("sha256").update(t).digest("hex")}function Gie(t){let[e,r,n]=t.split(gie);return{ref:e,object:r,objectType:n,ordinal:zie(e)}}function zie(t){let r=t.slice(t.lastIndexOf("/")+1).match(/^E(\d+)(?:-|$)/);return r?Number.parseInt(r[1],10):Number.MAX_SAFE_INTEGER}import{existsSync as Os,readFileSync as j8,readdirSync as Kie,statSync as Jie,writeFileSync as Xie}from"node:fs";import{basename as Yie,join as Ua,resolve as Qie}from"node:path";var Zie="Port Git Project",eoe="Make this project ready for Hunsu-managed MOVEs and Artifact Actions.";function oA(t=process.cwd()){let e=Qie(t),r=[],n=e,i=!1;try{n=jt(e),i=!0}catch{r.push("Not a Git repository. Hunsu Port expects an existing Git project.")}let o=noe(n),s=o?.scripts??{},a=roe(n,o),c=$8(n,/^Dockerfile(?:\.|$)/),u=$8(n,/^(?:docker-)?compose(?:\.[^.]+)?\.ya?ml$/),d=i&&q8(n),l=toe(n),f=ioe(n,s),p=[];return!o&&i&&r.push("No package.json found. Port can still create Roadmap state, but Artifact Actions may need a later Hunsu setup."),i&&!d&&r.push("Hunsu runtime state is missing. Port apply will create Initial Team state."),{root:n,isGitRepository:i,isHunsuRoadmap:d,packageManager:a,packageScripts:s,docker:{dockerfiles:c,composeFiles:u},artifactActions:l,env:f,recommendedFiles:p,issues:r}}function sA(t={}){let e=oA(t.cwd);if(!e.isGitRepository)throw new Error("Hunsu Port requires an existing Git repository");let r=t.title?.trim()||Yie(e.root)||Zie,n=t.goal?.trim()||eoe,i=t.destinations&&t.destinations.length>0?t.destinations:[{id:"destination_001",title:"Establish artifact-action-ready product execution",priority:100}],o=e.isHunsuRoadmap?[]:[{type:"CreateInitialTeam",requestId:F8("req",r),lineId:`run/${F8("req",r)}`,title:r,goal:n,destinations:i,harness:t.harness}];return{root:e.root,title:r,goal:n,destinations:i,inspection:e,files:[],commands:o}}function aA(t={}){let e=sA(t),r=[];for(let i of e.files){let o=Ua(e.root,i.path);Os(o)||(Xie(o,i.content,"utf8"),r.push(i.path))}let n=e.commands.length>0?xg(e.commands,{cwd:e.root,commitMessage:`hunsu: port ${e.title}`}):{acceptedEvents:[],board:Dn(e.root).board};return{root:e.root,plan:e,writtenFiles:r,acceptedEvents:n.acceptedEvents,board:n.board}}function toe(t){if(!q8(t))return{configured:!1,count:0,issues:[]};let e=Dn(t).board;return{configured:e.artifactActions.length>0,count:e.artifactActions.length,issues:[]}}function roe(t,e){if(Os(Ua(t,"pnpm-lock.yaml"))||e?.packageManager?.startsWith("pnpm@"))return"pnpm";if(Os(Ua(t,"yarn.lock"))||e?.packageManager?.startsWith("yarn@"))return"yarn";if(Os(Ua(t,"bun.lockb"))||Os(Ua(t,"bun.lock"))||e?.packageManager?.startsWith("bun@"))return"bun";if(Os(Ua(t,"package-lock.json"))||e)return"npm"}function noe(t){let e=Ua(t,"package.json");if(Os(e))return JSON.parse(j8(e,"utf8"))}function $8(t,e){return!Os(t)||!Jie(t).isDirectory()?[]:Kie(t).filter(r=>e.test(r)).sort()}function q8(t){try{return Sg(t)||tA(t).length>0||ke(["for-each-ref","--count=1","--format=%(refname)","refs/hunsu"],{cwd:t}).trim().length>0}catch(e){if(e instanceof Tr)return!1;throw e}}function ioe(t,e){let r=[".env",".env.local",".env.development",".env.example"].filter(i=>Os(Ua(t,i))),n=Object.entries(e).filter(([,i])=>/\b(?:3000|5173|8080|4187)\b|localhost|127\.0\.0\.1/.test(i)).map(([i])=>`package.json scripts.${i}`);for(let i of["vite.config.ts","vite.config.js","next.config.js","next.config.mjs"]){let o=Ua(t,i);if(!Os(o))continue;let s=j8(o,"utf8");/\b(?:3000|5173|8080|4187)\b|localhost|127\.0\.0\.1/.test(s)&&n.push(i)}return{files:r,hardcodedHints:n}}function F8(t,e){let r=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48);return`${t}_${r||"project"}`}import{createHash as ooe}from"node:crypto";import{spawnSync as soe}from"node:child_process";import{existsSync as cb,mkdirSync as W8,readFileSync as aoe,readdirSync as coe,rmSync as V8,writeFileSync as uoe}from"node:fs";import{tmpdir as doe}from"node:os";import{basename as loe,join as ob,resolve as dA}from"node:path";function G8(t=process.cwd(),e){let r=jt(t),n=Dn(r);if(e){let i=n.board.moves.find(s=>s.id===e);if(!i)throw new Error(`No MOVE found for Artifact Action source: ${e}`);let o=n.board.nodes.find(s=>s.id===i.toNodeId);return ab(i.snapshot?.artifactActions??o?.artifactActions??[])}return ab(n.board.artifactActions)}function lA(t){let e=jt(t.cwd??process.cwd()),r=foe(e,t),n=r.actions.find(d=>d.id===t.actionId);if(!n)throw new Error(`Unknown Artifact Action for selected source: ${t.actionId}`);poe(n,r.source);let i=t.now??new Date().toISOString(),o=xoe(n.id,r.source,i),s=t.baseActionPath??voe(t.roadmapId,o),a=n.kind==="host"?hoe(n,s):void 0,c=fA(n,t.env,t.ambientEnv),u={runId:o,actionId:n.id,roadmapId:t.roadmapId,action:uA(n),source:r.source,status:"queued",env:moe(n,c),aliases:a,createdAt:i,updatedAt:i};return{action:uA(n),run:u,commands:X8(e,n,u,c)}}function z8(t,e={}){let r=jt(t.cwd??process.cwd()),n=lA(t),i=t.now??new Date().toISOString(),o=yoe(r,n.run.runId,n.run.source.commit,i,t.worktreeRoot),s=t.processEnv??e.processEnv,a=e.runner??((l,f,p)=>r5(l,f,{...p,processEnv:s})),c={...n.run,status:(n.action.kind==="host","running"),sourceWorktree:o,updatedAt:i},u=fA(n.action,t.env,t.ambientEnv),d=X8(r,n.action,c,u);try{if(n.action.runner.type==="docker_compose")Ig(a,d[0]),Ig(a,d[1]),c.aliases=goe(r,c,a,u),c.status="running";else{let l=Ig(a,d[0]);if(c.exitCode=l.status,c.stdout=l.stdout,c.stderr=l.stderr,c.status=n.action.kind==="host"?"running":"succeeded",n.action.kind==="check"){let f=sb(r,o.path);c.sourceWorktree={...o,removedAt:f}}}c.updatedAt=new Date().toISOString()}catch(l){c.status="failed",c.updatedAt=new Date().toISOString(),c.error=l instanceof Error?l.message:String(l);let f=sb(r,o.path);c.sourceWorktree={...o,removedAt:f}}if(e.store!==!1&&Q8(r,c),c.status==="failed")throw new Error(c.error??`Artifact Action ${c.runId} failed`);return c}function K8(t=process.cwd()){let e=jt(t),r=pA(e);return cb(r)?coe(r).filter(n=>n.endsWith(".json")).map(n=>Eg(e,n.slice(0,-5))).sort((n,i)=>i.updatedAt.localeCompare(n.updatedAt)):[]}function Eg(t,e){let r=jt(t),n=Z8(r,e);if(!cb(n))throw new Error(`Unknown Artifact Action Run: ${e}`);return JSON.parse(aoe(n,"utf8"))}function J8(t,e,r={}){let n=jt(t),i=Eg(n,e),o=r.runner??((u,d,l)=>r5(u,d,{...l,processEnv:r.processEnv})),s=fA(i.action,i.env,r.processEnv);i.action.runner.type==="docker_compose"?Ig(o,cA(n,i,["down"],s)):i.action.runner.stopCommand&&Ig(o,Y8(n,i,i.action.runner.stopCommand,s));let a=i.sourceWorktree?.path?sb(n,i.sourceWorktree.path):void 0,c={...i,sourceWorktree:i.sourceWorktree?{...i.sourceWorktree,removedAt:a}:void 0,status:"stopped",stoppedAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return r.store!==!1&&Q8(n,c),c}function foe(t,e){if(e.moveId&&e.commit)throw new Error("Artifact Action source accepts either moveId or commit, not both");let r=Dn(t);if(e.moveId){let i=r.board.moves.find(s=>s.id===e.moveId);if(!i)throw new Error(`No MOVE found for Artifact Action source: ${e.moveId}`);let o=r.board.nodes.find(s=>s.id===i.toNodeId);return{source:{moveId:i.id,commit:ke(["rev-parse","--verify",`${i.commit}^{commit}`],{cwd:t}).trim(),ref:i.commit},actions:ab(i.snapshot?.artifactActions??o?.artifactActions??[])}}let n=e.commit??"HEAD";return{source:{commit:ke(["rev-parse","--verify",`${n}^{commit}`],{cwd:t}).trim(),ref:n},actions:ab(r.board.artifactActions)}}function poe(t,e){if(t.sourceScope==="move"&&!e.moveId)throw new Error(`Artifact Action ${t.id} can only run against a MOVE source`);if(t.sourceScope==="commit"&&e.moveId)throw new Error(`Artifact Action ${t.id} can only run against a commit source`)}function fA(t,e={},r={}){let n={},i=new Set;for(let[o,s]of Object.entries(t.env??{}))if(i.add(o),"default"in s)n[o]=e[o]??String(s.default);else if("value"in s)n[o]=e[o]??String(s.value);else if("alias"in s){let a=t.aliases?.[s.alias];if(!a)throw new Error(`Artifact Action env ${o} references unknown alias: ${s.alias}`);n[o]=String(a.containerPort??a.target??"")}else if("fromAliasUrl"in s){let a=t.aliases?.[s.fromAliasUrl];if(!a)throw new Error(`Artifact Action env ${o} references unknown alias: ${s.fromAliasUrl}`);n[o]=a.service&&a.containerPort?`http://${a.service}:${a.containerPort}`:String(a.target??"")}else if(s.required){let a=e[o]??r[o];if(!a)throw new Error(`Artifact Action env ${o} is required but not set`);n[o]=a}for(let[o,s]of Object.entries(e))i.has(o)||(n[o]=s);return n}function moe(t,e){let r={};for(let[n,i]of Object.entries(e)){let o=t.env?.[n];r[n]=o&&"required"in o&&o.secret?"<secret>":i}return r}function X8(t,e,r,n){return e.runner.type==="docker_compose"?[cA(t,r,["build"],n),cA(t,r,["up","-d"],n)]:[Y8(t,r,e.runner.command,n)]}function cA(t,e,r,n){if(e.action.runner.type!=="docker_compose")throw new Error(`Artifact Action ${e.actionId} does not use docker compose`);let i=e.source.commit.slice(0,12),o=e5(t5(e.action.runner.projectName??`hunsu-${e.actionId}-${i}`,{actionId:e.actionId,runId:e.runId,commit:e.source.commit,shortCommit:i,moveId:e.source.moveId??""}));return{command:"docker",args:["compose","-f",dA(e.sourceWorktree?.path??t,e.action.runner.file),"-p",o,...r],cwd:e.sourceWorktree?.path??t,env:n}}function Y8(t,e,r,n){return{command:"sh",args:["-lc",r],cwd:e.sourceWorktree?.path??t,env:n}}function Ig(t,e){let r=t(e.command,e.args,{cwd:e.cwd,env:e.env});if(r.status!==0)throw new Error(`${e.command} ${e.args.join(" ")} failed
203
203
  ${r.stderr||r.stdout}`);return r}function hoe(t,e){if(t.aliases)return Object.fromEntries(Object.entries(t.aliases).map(([r,n])=>[r,{alias:r,service:n.service,containerPort:n.containerPort,healthPath:n.healthPath,target:n.target,internalUrl:n.service&&n.containerPort?`http://${n.service}:${n.containerPort}`:n.target,externalPath:`${e}/${encodeURIComponent(r)}/`}]))}function goe(t,e,r,n){if(!e.aliases||e.action.runner.type!=="docker_compose")return e.aliases;let i=e.action.runner;return Object.fromEntries(Object.entries(e.aliases).map(([o,s])=>{if(!s.service||!s.containerPort)return[o,s];let a=r("docker",["compose","-f",dA(e.sourceWorktree?.path??t,i.file),"-p",e5(t5(i.projectName??`hunsu-${e.actionId}-${e.source.commit.slice(0,12)}`,{actionId:e.actionId,runId:e.runId,commit:e.source.commit,shortCommit:e.source.commit.slice(0,12),moveId:e.source.moveId??""})),"port",s.service,String(s.containerPort)],{cwd:e.sourceWorktree?.path??t,env:n});return a.status!==0||!a.stdout.trim()?[o,s]:[o,{...s,directUrl:boe(a.stdout.trim())}]}))}function yoe(t,e,r,n,i){let o=dA(i??ob(doe(),"hunsu-action-runs",`${loe(t)}-${Soe(t)}`)),s=ob(o,mA(e));return W8(o,{recursive:!0}),cb(s)&&(sb(t,s),V8(s,{recursive:!0,force:!0})),ke(["worktree","add","--detach",s,r],{cwd:t}),{path:s,commit:r,createdAt:n}}function sb(t,e){let r=new Date().toISOString();if(!cb(e))return r;try{ke(["worktree","remove","--force",e],{cwd:t})}catch{V8(e,{recursive:!0,force:!0}),ke(["worktree","prune"],{cwd:t})}return r}function Q8(t,e){W8(pA(t),{recursive:!0}),uoe(Z8(t,e.runId),`${JSON.stringify(e,null,2)}
204
- `,"utf8")}function pA(t){return ob(t,".hunsu","action-runs")}function Z8(t,e){return ob(pA(t),`${mA(e)}.json`)}function voe(t,e){return t?`/api/roadmaps/${encodeURIComponent(t)}/action-runs/${encodeURIComponent(e)}/proxy`:`/api/action-runs/${encodeURIComponent(e)}/proxy`}function xoe(t,e,r){return mA(`${t}-${e.moveId??e.commit.slice(0,12)}-${r.replace(/[^0-9A-Za-z]/g,"").slice(0,14)}`)}function mA(t){return t.toLowerCase().replace(/[^a-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"")||"action-run"}function e5(t){return t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,63)||"hunsu-action"}function t5(t,e){return t.replace(/\{([a-zA-Z][a-zA-Z0-9]*)\}/g,(r,n)=>e[n]??"")}function Soe(t){return ooe("sha256").update(t).digest("hex").slice(0,12)}function boe(t){let e=t.split(/\r?\n/).find(Boolean)??t,r=e.match(/(?:0\.0\.0\.0|127\.0\.0\.1|localhost|\[::\]|::):(\d+)$/);return r?`http://127.0.0.1:${r[1]}`:/^https?:\/\//.test(e)?e:`http://${e}`}function r5(t,e,r){let n=soe(t,e,{cwd:r.cwd,env:{...woe(r.processEnv),...r.env},encoding:"utf8",maxBuffer:16777216});return{status:n.status??1,stdout:n.stdout,stderr:n.stderr}}function woe(t){if(t===void 0)return;let e={};for(let[r,n]of Object.entries(t))n!==void 0&&(e[r]=n);return e}function ab(t){return t.map(uA).sort((e,r)=>e.displayOrder-r.displayOrder||String(e.id).localeCompare(String(r.id)))}function uA(t){return{...t,env:t.env?Object.fromEntries(Object.entries(t.env).map(([e,r])=>[e,{...r}])):void 0,runner:{...t.runner},aliases:t.aliases?Object.fromEntries(Object.entries(t.aliases).map(([e,r])=>[e,{...r}])):void 0,evidence:t.evidence?{...t.evidence,paths:t.evidence.paths?.slice()}:void 0}}import{createHash as Ioe}from"node:crypto";var Eoe="hunsu.hub-package-manifest.v1",n5="hunsu-json-c14n-v1+sha256:";function koe(t){vA(t);let{integrity:e,...r}=t;return JSON.stringify(yA(r,"manifest"))}function Roe(t){let e=koe(t);return`${n5}${Ioe("sha256").update(e,"utf8").digest("hex")}`}async function kg(t,e){if(!t.integrity.startsWith(n5))throw new Error(`Unsupported Hub package integrity prefix: ${t.integrity}`);let r=e.origins.find(a=>a.name===t.origin);if(!r)throw new Error(`Unknown Origin: ${t.origin}`);if(r.transport!=="http")throw new Error(`Origin ${r.name} uses unsupported transport ${r.transport}`);let i=await(e.fetch??fetch)(Aoe(r.url,t.kind,t.key,t.version));if(!i.ok)throw i.status===404?new Error(`Missing Hub package manifest: ${t.origin}/${t.kind}/${t.key}@${t.version}`):new Error(`Origin ${r.name} returned ${i.status} for ${t.kind}/${t.key}@${t.version}`);let o=await i.json();if(vA(o),o.kind!==t.kind||o.key!==t.key||o.version!==t.version)throw new Error(`Hub package manifest from ${r.name} does not match requested ${t.kind}/${t.key}@${t.version}`);let s=Roe(o);if(s!==t.integrity)throw new Error(`Hub package integrity mismatch for ${t.origin}/${t.kind}/${t.key}@${t.version}: expected ${t.integrity}, got ${s}`);return{lock:{...t},manifest:o,integrity:s,origin:{...r}}}function Aoe(t,e,r,n){let i=new URL(t),o=`/v1/packages/${e}/${encodeURIComponent(r)}/versions/${encodeURIComponent(n)}`;return new URL(o,i).toString()}function i5(t){if(vA(t),t.kind!=="team")throw new Error(`Hub package ${t.kind}/${t.key}@${t.version} is not a team package`);return Doe(t.team)}function vA(t){let e=hA(t,"manifest");if(e.schema!==Eoe)throw new Error(`Unsupported Hub package manifest schema: ${String(e.schema)}`);gA(e,["integrity","key","kind","team","member","manager","schema","skill","version"],"manifest");let r=Boe(e.kind,"manifest.kind");switch(Yf(e.key,"manifest.key"),Yf(e.version,"manifest.version"),e.integrity!==void 0&&Yf(e.integrity,"manifest.integrity"),r){case"team":if(Coe(e.team),e.member!==void 0||e.manager!==void 0||e.skill!==void 0)throw new Error("Team package manifest must not include member, manager, or skill payloads");return;case"member":if(Poe(e.member),e.team!==void 0||e.manager!==void 0||e.skill!==void 0)throw new Error("Member package manifest must not include team, manager, or skill payloads");return;case"manager":if(_oe(e.manager),e.team!==void 0||e.member!==void 0||e.skill!==void 0)throw new Error("Manager package manifest must not include team, member, or skill payloads");return;case"skill":if(Toe(e.skill),e.team!==void 0||e.member!==void 0||e.manager!==void 0)throw new Error("Skill package manifest must not include team, member, or manager payloads");return}}function Coe(t){let e=Fd(t,"manifest.team");if(!e.ok)throw new Error(`Invalid manifest.team: ${e.error.message}`)}function Poe(t){let e=JR(t,"manifest.member");if(!e.ok)throw new Error(`Invalid manifest.member: ${e.error.message}`)}function _oe(t){let e=zh(t,"manifest.manager");if(!e.ok)throw new Error(`Invalid manifest.manager: ${e.error.message}`)}function Toe(t){let e=hA(t,"manifest.skill");if(gA(e,["contentHash","files","name"],"manifest.skill"),Yf(e.name,"manifest.skill.name"),Yf(e.contentHash,"manifest.skill.contentHash"),e.files!==void 0){if(!Array.isArray(e.files))throw new Error("manifest.skill.files must be an array");for(let[r,n]of e.files.entries()){let i=hA(n,`manifest.skill.files[${r}]`);gA(i,["path","text"],`manifest.skill.files[${r}]`),Yf(i.path,`manifest.skill.files[${r}].path`),o5(i.text,`manifest.skill.files[${r}].text`)}}}function Boe(t,e){if(t==="team"||t==="member"||t==="manager"||t==="skill")return t;throw new Error(`${e} must be team, member, manager, or skill`)}function hA(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function gA(t,e,r){let n=e.filter(o=>o!=="integrity"&&o!=="team"&&o!=="member"&&o!=="manager"&&o!=="skill"&&o!=="files"&&!(o in t));if(n.length>0)throw new Error(`${r} is missing required keys: ${n.join(", ")}`);let i=Object.keys(t).filter(o=>!e.includes(o));if(i.length>0)throw new Error(`${r} has unsupported keys: ${i.join(", ")}`)}function o5(t,e){if(typeof t!="string")throw new Error(`${e} must be a string`);return t}function Yf(t,e){let r=o5(t,e);if(r.trim().length===0)throw new Error(`${e} must be non-empty`);return r}function yA(t,e){if(t===null||typeof t=="string"||typeof t=="boolean")return t;if(typeof t=="number"){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`);return t}if(Array.isArray(t))return t.map((r,n)=>{if(r===void 0)throw new Error(`${e}[${n}] must not be undefined`);return yA(r,`${e}[${n}]`)});if(typeof t=="object"&&t!==null){let r=t,n={};for(let i of Object.keys(r).sort()){let o=r[i];o!==void 0&&(n[i]=yA(o,`${e}.${i}`))}return n}throw new Error(`${e} must be JSON-serializable`)}function Doe(t){return JSON.parse(JSON.stringify(t))}function wt(t,e,r){return r===void 0?{code:t,message:e}:{code:t,message:e,details:r}}function Rg(t){let e=new Error(t.message);return e.name=`ExecuteOrchestrationError:${t.code}`,t.details!==void 0&&(e.details=t.details),e}function zd(t){if(t.ok)return t.value;throw Rg(t.error)}function SA(t){let e=h5(t,"Team planning final response must be a JSON ExecutionPlan object");return e.ok?wA(e.value,"execution"):e}function a5(t){let e=h5(t,"Goal evaluator final response must be a JSON object");if(!e.ok)return e;let r=e.value;if(r.type==="pass"){if(typeof r.summary!="string"||r.summary.trim()==="")return oe(wt("goal_evaluation_invalid","pass evaluation must include a non-empty summary"));let n=xA(r.evidence,"evidence");return n.ok?S({type:"pass",summary:r.summary,evidence:n.value}):n}if(r.type==="fail"){if(typeof r.reason!="string"||r.reason.trim()==="")return oe(wt("goal_evaluation_invalid","fail evaluation must include a non-empty reason"));if(typeof r.feedback!="string"||r.feedback.trim()==="")return oe(wt("goal_evaluation_invalid","fail evaluation must include non-empty feedback"));if(r.nextGoal!==void 0&&typeof r.nextGoal!="string")return oe(wt("goal_evaluation_invalid","fail evaluation nextGoal must be a string when present"));let n=xA(r.evidence,"evidence");return n.ok?S({type:"fail",reason:r.reason,feedback:r.feedback,nextGoal:typeof r.nextGoal=="string"&&r.nextGoal.trim()!==""?r.nextGoal:void 0,evidence:n.value}):n}return oe(wt("goal_evaluation_invalid","Goal evaluator response type must be pass or fail"))}function bA(t,e,r,n){if(e==="assignee")return{id:r,executorId:t.assignee.executorId,goal:t.assignee.goal,requires:n};let i=t.evaluator;if(!i)throw new Error(`Goal ${t.id} does not define an evaluator`);return{id:r,executorId:i.executorId,goal:i.prompt,requires:n}}function c5(t,e){let[,...r]=t.items;if(e)return{...t,items:[e,...r]};if(r.length!==0)return{...t,items:r}}function wA(t,e){return Ag(t)?t.kind==="queue"?Noe(t,e):t.kind==="goal"?u5(t,e):t.kind==="continuation"?Ooe(t,e):oe(wt("execution_plan_invalid",`${e}.kind must be queue, goal, or continuation`)):oe(wt("execution_plan_invalid",`${e} must be an object`))}function Noe(t,e){let r=l5(t.id,`${e}.id`);if(!r.ok)return r;if(!Array.isArray(t.items))return oe(wt("execution_plan_invalid",`${e}.items must be an array`));let n=[];for(let[i,o]of t.items.entries()){let s=wA(o,`${e}.items[${i}]`);if(!s.ok)return s;n.push(s.value)}return S({kind:"queue",id:r.value,items:n})}function u5(t,e){return t.stage==="needs_evaluation"?d5(t,e):t.stage==="needs_execution"?Moe(t,e):oe(wt("execution_plan_invalid",`${e}.stage must be needs_evaluation or needs_execution`))}function Ooe(t,e){let r=IA(t.id,`${e}.id`);if(!r.ok)return r;let n=f5(t.teamScopeId,`${e}.teamScopeId`);if(!n.ok)return n;let i=wA(t.execution,`${e}.execution`);if(!i.ok)return i;let o=t.continuation===void 0?S(void 0):Ag(t.continuation)?u5(t.continuation,`${e}.continuation`):oe(wt("execution_plan_invalid",`${e}.continuation must be an object`));return o.ok?S({kind:"continuation",id:r.value,teamScopeId:n.value,execution:i.value,continuation:o.value}):o}function d5(t,e){let r=IA(t.id,`${e}.id`);if(!r.ok)return r;let n=s5(t.assignee,`${e}.assignee`,"goal");if(!n.ok)return n;let i=t.evaluator===void 0||t.evaluator===null?S(void 0):s5(t.evaluator,`${e}.evaluator`,"prompt");if(!i.ok)return i;let o=b3(t.remainingAttempts,`${e}.remainingAttempts`);if(!o.ok)return oe(wt("execution_plan_invalid",o.error.message));let s=Hoe(t.requires,`${e}.requires`);return s.ok?S({kind:"goal",stage:"needs_evaluation",id:r.value,assignee:{executorId:n.value.executorId,goal:n.value.text},evaluator:i.value?{executorId:i.value.executorId,prompt:i.value.text}:void 0,remainingAttempts:o.value,requires:s.value}):s}function Moe(t,e){let r=d5({...t,stage:"needs_evaluation"},e);if(!r.ok)return r;let n=IA(t.evaluationPathId,`${e}.evaluationPathId`);if(!n.ok)return n;let i=Loe(t.evaluation,`${e}.evaluation`);if(!i.ok)return i;if(!Array.isArray(t.requires))return oe(wt("execution_plan_invalid",`${e}.requires must be an array for needs_execution`));let o=p5(t.requires,`${e}.requires`);return o.ok?o.value.length!==1||o.value[0]!==n.value?oe(wt("execution_plan_invalid",`${e}.requires must contain only ${e}.evaluationPathId`)):S({...r.value,stage:"needs_execution",evaluationPathId:n.value,evaluation:i.value,requires:o.value}):o}function s5(t,e,r){if(!Ag(t))return oe(wt("execution_plan_invalid",`${e} must be an object`));let n=f5(t.executorId,`${e}.executorId`);if(!n.ok)return n;let i=l5(t[r],`${e}.${r}`);return i.ok?S({executorId:n.value,text:i.value}):i}function Loe(t,e){if(!Ag(t))return oe(wt("execution_plan_invalid",`${e} must be an object`));if(t.type!=="fail")return oe(wt("execution_plan_invalid",`${e}.type must be fail`));if(typeof t.reason!="string"||t.reason.trim()==="")return oe(wt("execution_plan_invalid",`${e}.reason must be a non-empty string`));if(typeof t.feedback!="string"||t.feedback.trim()==="")return oe(wt("execution_plan_invalid",`${e}.feedback must be a non-empty string`));if(t.nextGoal!==void 0&&typeof t.nextGoal!="string")return oe(wt("execution_plan_invalid",`${e}.nextGoal must be a string when present`));let r=xA(t.evidence,`${e}.evidence`);return r.ok?S({type:"fail",reason:t.reason,feedback:t.feedback,nextGoal:typeof t.nextGoal=="string"&&t.nextGoal.trim()!==""?t.nextGoal:void 0,evidence:r.value}):r}function l5(t,e){return typeof t!="string"||t.trim()===""?oe(wt("execution_plan_invalid",`${e} must be a non-empty string`)):S(t)}function IA(t,e){let r=Ie(t,e);return r.ok?S(r.value):oe(wt("execution_plan_invalid",r.error.message))}function f5(t,e){let r=Ie(t,e);return r.ok?S(r.value):oe(wt("execution_plan_invalid",r.error.message))}function Hoe(t,e){return t==="PrevMove"?S("PrevMove"):p5(t,e)}function p5(t,e){let r=m5(t,e,"execution_plan_invalid");if(!r.ok)return r;let n=[];for(let[i,o]of r.value.entries()){let s=Ie(o,`${e}[${i}]`);if(!s.ok)return oe(wt("execution_plan_invalid",s.error.message));n.push(s.value)}return S(n)}function xA(t,e){return t===void 0?S(void 0):m5(t,e,"goal_evaluation_invalid")}function m5(t,e,r){return Array.isArray(t)?t.every(n=>typeof n=="string")?S([...t]):oe(wt(r,`${e} must be an array of strings`)):oe(wt(r,`${e} must be an array of strings`))}function h5(t,e){try{let r=JSON.parse(t);return Ag(r)?S(r):oe(wt("execution_plan_invalid",e))}catch(r){return oe(wt("execution_plan_invalid",e,{cause:r instanceof Error?r.message:String(r)}))}}function Ag(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function EA(t){let{line:e,lineNode:r}=t;if(!r)return oe(wt("invalid_start_state",`No execute-ready MOVE found for Team route ${e.id}`));if(e.status==="failed"||e.status==="complete"||e.status==="abandoned")return oe(wt("invalid_start_state",`Cannot start Execute from ${e.id} because the route is ${e.status}`));if(new Set(t.board.edges.filter(a=>a.type==="move").map(a=>a.fromNodeId)).has(r.id))return oe(wt("invalid_start_state",`Cannot start Execute from ${g5(r,t.formatMovePosition)} because Arrived or Accident already exists`));if(t.existingRuns.find(a=>a.sourceNodeId===r.id&&(a.status==="running"||a.status==="paused")))return oe(wt("active_execute_exists",`A Execute is already active for ${g5(r,t.formatMovePosition)}`));let o=Ba(r.ordinal+1,"targetMoveOrdinal");if(!o.ok)return oe(wt("invalid_start_state",o.error.message));let s=Uoe(t.selectedDestinationIds,t.activeDestinations);return s.ok?S({lineNode:r,selectedDestinationIds:s.value,targetMoveOrdinal:o.value}):s}function y5(t){return t?S(t):oe(wt("terminal_output_missing","ExecutionPlan completed without a terminal output"))}function Uoe(t,e){let r=$oe(e);return t&&t.length>0?t.length!==1?oe(wt("invalid_start_state","Execute must select exactly one Destination")):r&&t[0]===r.id?S([...t]):oe(wt("invalid_start_state","Execute must select the next Destination in the queue")):S(r?[r.id]:[])}function $oe(t){return[...t].sort(Foe)[0]}function Foe(t,e){return(e.priority??0)-(t.priority??0)}function g5(t,e){return e?e(t):`${t.teamName??"Team"} MOVE ${t.ordinal}`}import{execFile as zoe,spawn as Koe}from"node:child_process";import{accessSync as Joe,constants as Xoe,existsSync as Cg,readdirSync as Yoe,statSync as Qoe}from"node:fs";import{delimiter as S5,isAbsolute as fb,join as Ls}from"node:path";import{promisify as Zoe}from"node:util";function ub(t,e,r,n=process.platform){return n!=="win32"||!/\.(?:cmd|bat)$/iu.test(t)?{command:t,args:e}:{command:r.ComSpec??r.COMSPEC??"cmd.exe",args:["/d","/s","/v:off","/c",joe(t,e)],windowsVerbatimArguments:!0}}function joe(t,e){return`"${[t,...e].map(qoe).join(" ")}"`}function qoe(t){if(/[%"\u0000-\u001f\u007f]/u.test(t))throw new Error("Windows command-shim paths and arguments cannot contain percent, quote, or control characters.");return`"${t}"`}var bn="0.2.0-next.3",Kd="local-bridge-v1";import{win32 as Woe}from"node:path";var Voe=new Set(["psmodulepath","winpsmodulepath"]);function db(t,e){if(/[\u0000-\u001f\u007f]/u.test(t))throw new Error("Windows ACL paths cannot contain control characters.");if(!/^[A-Za-z][A-Za-z0-9]*$/u.test(e))throw new Error("Windows ACL PowerShell variable names must be identifiers.");let r=`$${e}`,n=["$ErrorActionPreference = 'Stop'",`${r} = ${Goe(t)}`,"$sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User","$acl = [System.Security.AccessControl.FileSecurity]::new()","$acl.SetOwner($sid)","$acl.SetAccessRuleProtection($true, $false)","$rule = [System.Security.AccessControl.FileSystemAccessRule]::new($sid, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.AccessControlType]::Allow)","$acl.SetAccessRule($rule)",`[System.IO.File]::SetAccessControl(${r}, $acl)`].join("; ");return{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(n,"utf16le").toString("base64")]}}function lb(t){let e=Woe.basename(t).toLowerCase();return e==="powershell"||e==="powershell.exe"}function Ms(t){let e={};for(let[r,n]of Object.entries(t))Voe.has(r.toLowerCase())||n===void 0||(e[r]=n);return e}function Goe(t){return`'${t.replace(/'/g,"''")}'`}var mb=Zoe(zoe),_g=3500;async function lu(t={}){let e=t.env??Rr(),r=t.platform??process.platform,n=await ese({env:e,platform:r,customBinaryPath:t.customBinaryPath}),i=[];for(let c of n){let u=await tse(c,e,r,t.timeoutMs);if(i.push(u),c.rejectWhitespace&&u.error?.includes("HUNSU_CODEX_APP_SERVER_COMMAND"))return{installed:!1,source:u.source,appServerAvailable:!1,discovery:i,error:u.error};if(u.usable&&u.path)return{installed:!0,binaryPath:u.path,source:u.source,version:u.version,appServerAvailable:!0,discovery:i}}let o=i.find(c=>c.path&&c.versionOk===!0&&c.appServerOk===!1);if(o?.path)return{installed:!0,binaryPath:o.path,source:o.source,version:o.version,appServerAvailable:!1,discovery:i,error:o.error??"Codex was found, but Codex app-server is not available."};let s=i.find(c=>c.source==="windows_apps_alias"||c.path&&CA(c.path,r));if(s)return{installed:!1,binaryPath:s.path,source:"windows_apps_alias",appServerAvailable:!1,discovery:i,aliasDetected:!0,error:s.error??"Codex resolved to a WindowsApps execution alias. Select the real Codex binary path in Hunsu Bridge."};let a=i.find(c=>c.path)??i[0];return{installed:!1,binaryPath:a?.path,source:a?.source??"unknown",appServerAvailable:!1,discovery:i,error:a?.error??"Codex CLI was not found by Hunsu Bridge."}}async function hb(t){try{let e=t.env??Rr(),r=t.platform??process.platform,n=I5(t.binaryPath,["--version"],e,r),{stdout:i,stderr:o}=await mb(n.command,n.args,{env:E5(e,r),timeout:t.timeoutMs??_g,windowsHide:!0,windowsVerbatimArguments:n.windowsVerbatimArguments,maxBuffer:64*1024});return`${i}
204
+ `,"utf8")}function pA(t){return ob(t,".hunsu","action-runs")}function Z8(t,e){return ob(pA(t),`${mA(e)}.json`)}function voe(t,e){return t?`/api/roadmaps/${encodeURIComponent(t)}/action-runs/${encodeURIComponent(e)}/proxy`:`/api/action-runs/${encodeURIComponent(e)}/proxy`}function xoe(t,e,r){return mA(`${t}-${e.moveId??e.commit.slice(0,12)}-${r.replace(/[^0-9A-Za-z]/g,"").slice(0,14)}`)}function mA(t){return t.toLowerCase().replace(/[^a-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"")||"action-run"}function e5(t){return t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,63)||"hunsu-action"}function t5(t,e){return t.replace(/\{([a-zA-Z][a-zA-Z0-9]*)\}/g,(r,n)=>e[n]??"")}function Soe(t){return ooe("sha256").update(t).digest("hex").slice(0,12)}function boe(t){let e=t.split(/\r?\n/).find(Boolean)??t,r=e.match(/(?:0\.0\.0\.0|127\.0\.0\.1|localhost|\[::\]|::):(\d+)$/);return r?`http://127.0.0.1:${r[1]}`:/^https?:\/\//.test(e)?e:`http://${e}`}function r5(t,e,r){let n=soe(t,e,{cwd:r.cwd,env:{...woe(r.processEnv),...r.env},encoding:"utf8",maxBuffer:16777216});return{status:n.status??1,stdout:n.stdout,stderr:n.stderr}}function woe(t){if(t===void 0)return;let e={};for(let[r,n]of Object.entries(t))n!==void 0&&(e[r]=n);return e}function ab(t){return t.map(uA).sort((e,r)=>e.displayOrder-r.displayOrder||String(e.id).localeCompare(String(r.id)))}function uA(t){return{...t,env:t.env?Object.fromEntries(Object.entries(t.env).map(([e,r])=>[e,{...r}])):void 0,runner:{...t.runner},aliases:t.aliases?Object.fromEntries(Object.entries(t.aliases).map(([e,r])=>[e,{...r}])):void 0,evidence:t.evidence?{...t.evidence,paths:t.evidence.paths?.slice()}:void 0}}import{createHash as Ioe}from"node:crypto";var Eoe="hunsu.hub-package-manifest.v1",n5="hunsu-json-c14n-v1+sha256:";function koe(t){vA(t);let{integrity:e,...r}=t;return JSON.stringify(yA(r,"manifest"))}function Roe(t){let e=koe(t);return`${n5}${Ioe("sha256").update(e,"utf8").digest("hex")}`}async function kg(t,e){if(!t.integrity.startsWith(n5))throw new Error(`Unsupported Hub package integrity prefix: ${t.integrity}`);let r=e.origins.find(a=>a.name===t.origin);if(!r)throw new Error(`Unknown Origin: ${t.origin}`);if(r.transport!=="http")throw new Error(`Origin ${r.name} uses unsupported transport ${r.transport}`);let i=await(e.fetch??fetch)(Aoe(r.url,t.kind,t.key,t.version));if(!i.ok)throw i.status===404?new Error(`Missing Hub package manifest: ${t.origin}/${t.kind}/${t.key}@${t.version}`):new Error(`Origin ${r.name} returned ${i.status} for ${t.kind}/${t.key}@${t.version}`);let o=await i.json();if(vA(o),o.kind!==t.kind||o.key!==t.key||o.version!==t.version)throw new Error(`Hub package manifest from ${r.name} does not match requested ${t.kind}/${t.key}@${t.version}`);let s=Roe(o);if(s!==t.integrity)throw new Error(`Hub package integrity mismatch for ${t.origin}/${t.kind}/${t.key}@${t.version}: expected ${t.integrity}, got ${s}`);return{lock:{...t},manifest:o,integrity:s,origin:{...r}}}function Aoe(t,e,r,n){let i=new URL(t),o=`/v1/packages/${e}/${encodeURIComponent(r)}/versions/${encodeURIComponent(n)}`;return new URL(o,i).toString()}function i5(t){if(vA(t),t.kind!=="team")throw new Error(`Hub package ${t.kind}/${t.key}@${t.version} is not a team package`);return Doe(t.team)}function vA(t){let e=hA(t,"manifest");if(e.schema!==Eoe)throw new Error(`Unsupported Hub package manifest schema: ${String(e.schema)}`);gA(e,["integrity","key","kind","team","member","manager","schema","skill","version"],"manifest");let r=Boe(e.kind,"manifest.kind");switch(Yf(e.key,"manifest.key"),Yf(e.version,"manifest.version"),e.integrity!==void 0&&Yf(e.integrity,"manifest.integrity"),r){case"team":if(Coe(e.team),e.member!==void 0||e.manager!==void 0||e.skill!==void 0)throw new Error("Team package manifest must not include member, manager, or skill payloads");return;case"member":if(Poe(e.member),e.team!==void 0||e.manager!==void 0||e.skill!==void 0)throw new Error("Member package manifest must not include team, manager, or skill payloads");return;case"manager":if(_oe(e.manager),e.team!==void 0||e.member!==void 0||e.skill!==void 0)throw new Error("Manager package manifest must not include team, member, or skill payloads");return;case"skill":if(Toe(e.skill),e.team!==void 0||e.member!==void 0||e.manager!==void 0)throw new Error("Skill package manifest must not include team, member, or manager payloads");return}}function Coe(t){let e=Fd(t,"manifest.team");if(!e.ok)throw new Error(`Invalid manifest.team: ${e.error.message}`)}function Poe(t){let e=JR(t,"manifest.member");if(!e.ok)throw new Error(`Invalid manifest.member: ${e.error.message}`)}function _oe(t){let e=zh(t,"manifest.manager");if(!e.ok)throw new Error(`Invalid manifest.manager: ${e.error.message}`)}function Toe(t){let e=hA(t,"manifest.skill");if(gA(e,["contentHash","files","name"],"manifest.skill"),Yf(e.name,"manifest.skill.name"),Yf(e.contentHash,"manifest.skill.contentHash"),e.files!==void 0){if(!Array.isArray(e.files))throw new Error("manifest.skill.files must be an array");for(let[r,n]of e.files.entries()){let i=hA(n,`manifest.skill.files[${r}]`);gA(i,["path","text"],`manifest.skill.files[${r}]`),Yf(i.path,`manifest.skill.files[${r}].path`),o5(i.text,`manifest.skill.files[${r}].text`)}}}function Boe(t,e){if(t==="team"||t==="member"||t==="manager"||t==="skill")return t;throw new Error(`${e} must be team, member, manager, or skill`)}function hA(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function gA(t,e,r){let n=e.filter(o=>o!=="integrity"&&o!=="team"&&o!=="member"&&o!=="manager"&&o!=="skill"&&o!=="files"&&!(o in t));if(n.length>0)throw new Error(`${r} is missing required keys: ${n.join(", ")}`);let i=Object.keys(t).filter(o=>!e.includes(o));if(i.length>0)throw new Error(`${r} has unsupported keys: ${i.join(", ")}`)}function o5(t,e){if(typeof t!="string")throw new Error(`${e} must be a string`);return t}function Yf(t,e){let r=o5(t,e);if(r.trim().length===0)throw new Error(`${e} must be non-empty`);return r}function yA(t,e){if(t===null||typeof t=="string"||typeof t=="boolean")return t;if(typeof t=="number"){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`);return t}if(Array.isArray(t))return t.map((r,n)=>{if(r===void 0)throw new Error(`${e}[${n}] must not be undefined`);return yA(r,`${e}[${n}]`)});if(typeof t=="object"&&t!==null){let r=t,n={};for(let i of Object.keys(r).sort()){let o=r[i];o!==void 0&&(n[i]=yA(o,`${e}.${i}`))}return n}throw new Error(`${e} must be JSON-serializable`)}function Doe(t){return JSON.parse(JSON.stringify(t))}function wt(t,e,r){return r===void 0?{code:t,message:e}:{code:t,message:e,details:r}}function Rg(t){let e=new Error(t.message);return e.name=`ExecuteOrchestrationError:${t.code}`,t.details!==void 0&&(e.details=t.details),e}function zd(t){if(t.ok)return t.value;throw Rg(t.error)}function SA(t){let e=h5(t,"Team planning final response must be a JSON ExecutionPlan object");return e.ok?wA(e.value,"execution"):e}function a5(t){let e=h5(t,"Goal evaluator final response must be a JSON object");if(!e.ok)return e;let r=e.value;if(r.type==="pass"){if(typeof r.summary!="string"||r.summary.trim()==="")return oe(wt("goal_evaluation_invalid","pass evaluation must include a non-empty summary"));let n=xA(r.evidence,"evidence");return n.ok?S({type:"pass",summary:r.summary,evidence:n.value}):n}if(r.type==="fail"){if(typeof r.reason!="string"||r.reason.trim()==="")return oe(wt("goal_evaluation_invalid","fail evaluation must include a non-empty reason"));if(typeof r.feedback!="string"||r.feedback.trim()==="")return oe(wt("goal_evaluation_invalid","fail evaluation must include non-empty feedback"));if(r.nextGoal!==void 0&&typeof r.nextGoal!="string")return oe(wt("goal_evaluation_invalid","fail evaluation nextGoal must be a string when present"));let n=xA(r.evidence,"evidence");return n.ok?S({type:"fail",reason:r.reason,feedback:r.feedback,nextGoal:typeof r.nextGoal=="string"&&r.nextGoal.trim()!==""?r.nextGoal:void 0,evidence:n.value}):n}return oe(wt("goal_evaluation_invalid","Goal evaluator response type must be pass or fail"))}function bA(t,e,r,n){if(e==="assignee")return{id:r,executorId:t.assignee.executorId,goal:t.assignee.goal,requires:n};let i=t.evaluator;if(!i)throw new Error(`Goal ${t.id} does not define an evaluator`);return{id:r,executorId:i.executorId,goal:i.prompt,requires:n}}function c5(t,e){let[,...r]=t.items;if(e)return{...t,items:[e,...r]};if(r.length!==0)return{...t,items:r}}function wA(t,e){return Ag(t)?t.kind==="queue"?Noe(t,e):t.kind==="goal"?u5(t,e):t.kind==="continuation"?Ooe(t,e):oe(wt("execution_plan_invalid",`${e}.kind must be queue, goal, or continuation`)):oe(wt("execution_plan_invalid",`${e} must be an object`))}function Noe(t,e){let r=l5(t.id,`${e}.id`);if(!r.ok)return r;if(!Array.isArray(t.items))return oe(wt("execution_plan_invalid",`${e}.items must be an array`));let n=[];for(let[i,o]of t.items.entries()){let s=wA(o,`${e}.items[${i}]`);if(!s.ok)return s;n.push(s.value)}return S({kind:"queue",id:r.value,items:n})}function u5(t,e){return t.stage==="needs_evaluation"?d5(t,e):t.stage==="needs_execution"?Moe(t,e):oe(wt("execution_plan_invalid",`${e}.stage must be needs_evaluation or needs_execution`))}function Ooe(t,e){let r=IA(t.id,`${e}.id`);if(!r.ok)return r;let n=f5(t.teamScopeId,`${e}.teamScopeId`);if(!n.ok)return n;let i=wA(t.execution,`${e}.execution`);if(!i.ok)return i;let o=t.continuation===void 0?S(void 0):Ag(t.continuation)?u5(t.continuation,`${e}.continuation`):oe(wt("execution_plan_invalid",`${e}.continuation must be an object`));return o.ok?S({kind:"continuation",id:r.value,teamScopeId:n.value,execution:i.value,continuation:o.value}):o}function d5(t,e){let r=IA(t.id,`${e}.id`);if(!r.ok)return r;let n=s5(t.assignee,`${e}.assignee`,"goal");if(!n.ok)return n;let i=t.evaluator===void 0||t.evaluator===null?S(void 0):s5(t.evaluator,`${e}.evaluator`,"prompt");if(!i.ok)return i;let o=b4(t.remainingAttempts,`${e}.remainingAttempts`);if(!o.ok)return oe(wt("execution_plan_invalid",o.error.message));let s=Hoe(t.requires,`${e}.requires`);return s.ok?S({kind:"goal",stage:"needs_evaluation",id:r.value,assignee:{executorId:n.value.executorId,goal:n.value.text},evaluator:i.value?{executorId:i.value.executorId,prompt:i.value.text}:void 0,remainingAttempts:o.value,requires:s.value}):s}function Moe(t,e){let r=d5({...t,stage:"needs_evaluation"},e);if(!r.ok)return r;let n=IA(t.evaluationPathId,`${e}.evaluationPathId`);if(!n.ok)return n;let i=Loe(t.evaluation,`${e}.evaluation`);if(!i.ok)return i;if(!Array.isArray(t.requires))return oe(wt("execution_plan_invalid",`${e}.requires must be an array for needs_execution`));let o=p5(t.requires,`${e}.requires`);return o.ok?o.value.length!==1||o.value[0]!==n.value?oe(wt("execution_plan_invalid",`${e}.requires must contain only ${e}.evaluationPathId`)):S({...r.value,stage:"needs_execution",evaluationPathId:n.value,evaluation:i.value,requires:o.value}):o}function s5(t,e,r){if(!Ag(t))return oe(wt("execution_plan_invalid",`${e} must be an object`));let n=f5(t.executorId,`${e}.executorId`);if(!n.ok)return n;let i=l5(t[r],`${e}.${r}`);return i.ok?S({executorId:n.value,text:i.value}):i}function Loe(t,e){if(!Ag(t))return oe(wt("execution_plan_invalid",`${e} must be an object`));if(t.type!=="fail")return oe(wt("execution_plan_invalid",`${e}.type must be fail`));if(typeof t.reason!="string"||t.reason.trim()==="")return oe(wt("execution_plan_invalid",`${e}.reason must be a non-empty string`));if(typeof t.feedback!="string"||t.feedback.trim()==="")return oe(wt("execution_plan_invalid",`${e}.feedback must be a non-empty string`));if(t.nextGoal!==void 0&&typeof t.nextGoal!="string")return oe(wt("execution_plan_invalid",`${e}.nextGoal must be a string when present`));let r=xA(t.evidence,`${e}.evidence`);return r.ok?S({type:"fail",reason:t.reason,feedback:t.feedback,nextGoal:typeof t.nextGoal=="string"&&t.nextGoal.trim()!==""?t.nextGoal:void 0,evidence:r.value}):r}function l5(t,e){return typeof t!="string"||t.trim()===""?oe(wt("execution_plan_invalid",`${e} must be a non-empty string`)):S(t)}function IA(t,e){let r=Ie(t,e);return r.ok?S(r.value):oe(wt("execution_plan_invalid",r.error.message))}function f5(t,e){let r=Ie(t,e);return r.ok?S(r.value):oe(wt("execution_plan_invalid",r.error.message))}function Hoe(t,e){return t==="PrevMove"?S("PrevMove"):p5(t,e)}function p5(t,e){let r=m5(t,e,"execution_plan_invalid");if(!r.ok)return r;let n=[];for(let[i,o]of r.value.entries()){let s=Ie(o,`${e}[${i}]`);if(!s.ok)return oe(wt("execution_plan_invalid",s.error.message));n.push(s.value)}return S(n)}function xA(t,e){return t===void 0?S(void 0):m5(t,e,"goal_evaluation_invalid")}function m5(t,e,r){return Array.isArray(t)?t.every(n=>typeof n=="string")?S([...t]):oe(wt(r,`${e} must be an array of strings`)):oe(wt(r,`${e} must be an array of strings`))}function h5(t,e){try{let r=JSON.parse(t);return Ag(r)?S(r):oe(wt("execution_plan_invalid",e))}catch(r){return oe(wt("execution_plan_invalid",e,{cause:r instanceof Error?r.message:String(r)}))}}function Ag(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function EA(t){let{line:e,lineNode:r}=t;if(!r)return oe(wt("invalid_start_state",`No execute-ready MOVE found for Team route ${e.id}`));if(e.status==="failed"||e.status==="complete"||e.status==="abandoned")return oe(wt("invalid_start_state",`Cannot start Execute from ${e.id} because the route is ${e.status}`));if(new Set(t.board.edges.filter(a=>a.type==="move").map(a=>a.fromNodeId)).has(r.id))return oe(wt("invalid_start_state",`Cannot start Execute from ${g5(r,t.formatMovePosition)} because Arrived or Accident already exists`));if(t.existingRuns.find(a=>a.sourceNodeId===r.id&&(a.status==="running"||a.status==="paused")))return oe(wt("active_execute_exists",`A Execute is already active for ${g5(r,t.formatMovePosition)}`));let o=Ba(r.ordinal+1,"targetMoveOrdinal");if(!o.ok)return oe(wt("invalid_start_state",o.error.message));let s=Uoe(t.selectedDestinationIds,t.activeDestinations);return s.ok?S({lineNode:r,selectedDestinationIds:s.value,targetMoveOrdinal:o.value}):s}function y5(t){return t?S(t):oe(wt("terminal_output_missing","ExecutionPlan completed without a terminal output"))}function Uoe(t,e){let r=$oe(e);return t&&t.length>0?t.length!==1?oe(wt("invalid_start_state","Execute must select exactly one Destination")):r&&t[0]===r.id?S([...t]):oe(wt("invalid_start_state","Execute must select the next Destination in the queue")):S(r?[r.id]:[])}function $oe(t){return[...t].sort(Foe)[0]}function Foe(t,e){return(e.priority??0)-(t.priority??0)}function g5(t,e){return e?e(t):`${t.teamName??"Team"} MOVE ${t.ordinal}`}import{execFile as zoe,spawn as Koe}from"node:child_process";import{accessSync as Joe,constants as Xoe,existsSync as Cg,readdirSync as Yoe,statSync as Qoe}from"node:fs";import{delimiter as S5,isAbsolute as fb,join as Ls}from"node:path";import{promisify as Zoe}from"node:util";function ub(t,e,r,n=process.platform){return n!=="win32"||!/\.(?:cmd|bat)$/iu.test(t)?{command:t,args:e}:{command:r.ComSpec??r.COMSPEC??"cmd.exe",args:["/d","/s","/v:off","/c",joe(t,e)],windowsVerbatimArguments:!0}}function joe(t,e){return`"${[t,...e].map(qoe).join(" ")}"`}function qoe(t){if(/[%"\u0000-\u001f\u007f]/u.test(t))throw new Error("Windows command-shim paths and arguments cannot contain percent, quote, or control characters.");return`"${t}"`}var bn="0.2.0-next.4",Kd="local-bridge-v1";import{win32 as Woe}from"node:path";var Voe=new Set(["psmodulepath","winpsmodulepath"]);function db(t,e){if(/[\u0000-\u001f\u007f]/u.test(t))throw new Error("Windows ACL paths cannot contain control characters.");if(!/^[A-Za-z][A-Za-z0-9]*$/u.test(e))throw new Error("Windows ACL PowerShell variable names must be identifiers.");let r=`$${e}`,n=["$ErrorActionPreference = 'Stop'",`${r} = ${Goe(t)}`,"$sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User","$acl = [System.Security.AccessControl.FileSecurity]::new()","$acl.SetOwner($sid)","$acl.SetAccessRuleProtection($true, $false)","$rule = [System.Security.AccessControl.FileSystemAccessRule]::new($sid, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.AccessControlType]::Allow)","$acl.SetAccessRule($rule)",`[System.IO.File]::SetAccessControl(${r}, $acl)`].join("; ");return{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(n,"utf16le").toString("base64")]}}function lb(t){let e=Woe.basename(t).toLowerCase();return e==="powershell"||e==="powershell.exe"}function Ms(t){let e={};for(let[r,n]of Object.entries(t))Voe.has(r.toLowerCase())||n===void 0||(e[r]=n);return e}function Goe(t){return`'${t.replace(/'/g,"''")}'`}var mb=Zoe(zoe),_g=3500;async function lu(t={}){let e=t.env??Rr(),r=t.platform??process.platform,n=await ese({env:e,platform:r,customBinaryPath:t.customBinaryPath}),i=[];for(let c of n){let u=await tse(c,e,r,t.timeoutMs);if(i.push(u),c.rejectWhitespace&&u.error?.includes("HUNSU_CODEX_APP_SERVER_COMMAND"))return{installed:!1,source:u.source,appServerAvailable:!1,discovery:i,error:u.error};if(u.usable&&u.path)return{installed:!0,binaryPath:u.path,source:u.source,version:u.version,appServerAvailable:!0,discovery:i}}let o=i.find(c=>c.path&&c.versionOk===!0&&c.appServerOk===!1);if(o?.path)return{installed:!0,binaryPath:o.path,source:o.source,version:o.version,appServerAvailable:!1,discovery:i,error:o.error??"Codex was found, but Codex app-server is not available."};let s=i.find(c=>c.source==="windows_apps_alias"||c.path&&CA(c.path,r));if(s)return{installed:!1,binaryPath:s.path,source:"windows_apps_alias",appServerAvailable:!1,discovery:i,aliasDetected:!0,error:s.error??"Codex resolved to a WindowsApps execution alias. Select the real Codex binary path in Hunsu Bridge."};let a=i.find(c=>c.path)??i[0];return{installed:!1,binaryPath:a?.path,source:a?.source??"unknown",appServerAvailable:!1,discovery:i,error:a?.error??"Codex CLI was not found by Hunsu Bridge."}}async function hb(t){try{let e=t.env??Rr(),r=t.platform??process.platform,n=I5(t.binaryPath,["--version"],e,r),{stdout:i,stderr:o}=await mb(n.command,n.args,{env:E5(e,r),timeout:t.timeoutMs??_g,windowsHide:!0,windowsVerbatimArguments:n.windowsVerbatimArguments,maxBuffer:64*1024});return`${i}
205
205
  ${o}`.trim().split(/\r?\n/).map(a=>a.trim()).find(Boolean)}catch{return}}async function b5(t){let e=t.env??Rr(),r=t.command?{ok:!0,value:{command:t.command,args:t.args??["app-server","--stdio"]}}:kA({env:e,cliBinaryPath:t.binaryPath});if(!r.ok)return{available:!1,error:r.error};let n=new Pg(r.value.command,t.timeoutMs??_g,{env:e,platform:t.platform,args:r.value.args});try{let i=await n.initialize();return{available:!0,initialized:Xr(i)}}catch(i){return{available:!1,error:Jd(i)}}finally{n.close()}}function kA(t){let e=t.env.HUNSU_CODEX_APP_SERVER_COMMAND?.trim();if(e&&/\s/.test(e))return{ok:!1,error:"HUNSU_CODEX_APP_SERVER_COMMAND must be a binary path or command name without arguments. Put arguments in HUNSU_CODEX_APP_SERVER_ARGS."};let r=Fh(t.env);if(!r.ok)return{ok:!1,error:r.error.message};let n=t.cliBinaryPath?.trim();return{ok:!0,value:{command:r.value.command==="codex"&&n?n:r.value.command,args:r.value.args}}}function RA(t,e){if(e!=="win32")return[];let r=Qf(t,"LOCALAPPDATA","LocalAppData","localappdata"),n=Qf(t,"APPDATA","AppData","appdata");return yb([r?Ls(r,"OpenAI","Codex","bin"):void 0,n?Ls(n,"npm"):void 0,r?Ls(r,"Programs","OpenAI Codex"):void 0])}function AA(t,e){return e!=="win32"?t.PATH??"":[t.PATH,t.Path,t.path,t.HUNSU_WINDOWS_USER_PATH,t.HUNSU_WINDOWS_MACHINE_PATH].filter(r=>typeof r=="string"&&r.trim().length>0).join(";")}async function ese(t){let{env:e,platform:r}=t,n=[],i=t.customBinaryPath?.trim();i&&n.push({candidate:i,source:"custom"});let o=e.HUNSU_CODEX_BINARY_PATH?.trim();o&&n.push({candidate:o,source:e.HUNSU_CODEX_BINARY_PATH_SOURCE==="user_config"?"custom":"env"});let s=e.HUNSU_CODEX_APP_SERVER_COMMAND?.trim();if(s&&n.push({candidate:s,source:"env",rejectWhitespace:!0}),n.push(...pb("codex",e,r,gb(e,r)).map(a=>({candidate:a,source:"process_path"}))),r==="win32"){n.push(...pb("codex",e,r,await v5("user",e,r)).map(c=>({candidate:c,source:"registry_user_path"}))),n.push(...pb("codex",e,r,await v5("machine",e,r)).map(c=>({candidate:c,source:"registry_machine_path"}))),n.push(...(await ose(e)).map(c=>({candidate:c,source:"where"}))),n.push(...(await sse(e)).map(c=>({candidate:c,source:"powershell_get_command"}))),n.push(...ise(e,r).map(c=>({candidate:c,source:"known_install_dir"})));let a=cse(e,r);a&&n.push({candidate:a,source:"windows_apps_alias"})}return dse(n)}async function tse(t,e,r,n){let i=rse(t.candidate,t.source,e,r,{rejectWhitespace:t.rejectWhitespace});if(i.kind!=="binary")return{source:i.source==="unknown"?t.source:i.source,path:i.kind==="missing"?i.binaryPath:void 0,usable:!1,error:i.error};let o=CA(i.binaryPath,r)?"windows_apps_alias":i.source;if(o==="windows_apps_alias")return{source:o,path:i.binaryPath,usable:!1,versionOk:!1,appServerOk:!1,error:"Codex resolved to a WindowsApps execution alias. Select the real Codex binary path in Hunsu Bridge."};let s=await hb({binaryPath:i.binaryPath,timeoutMs:n,env:e,platform:r});if(!s)return{source:o,path:i.binaryPath,usable:!1,versionOk:!1,appServerOk:!1,error:"Codex candidate did not return a CLI version."};let a=await b5({binaryPath:i.binaryPath,timeoutMs:n,env:e,platform:r});return a.available?{source:o,path:i.binaryPath,usable:!0,versionOk:!0,appServerOk:!0,version:s}:{source:o,path:i.binaryPath,usable:!1,versionOk:!0,appServerOk:!1,version:s,error:a.error}}function rse(t,e,r,n,i={}){let o=t.trim();if(!o)return{kind:"missing",installed:!1,source:e??"unknown",error:"Codex command is empty."};if(i.rejectWhitespace&&/\s/.test(o))return{kind:"unsupported_command_string",installed:!1,source:"env",error:"HUNSU_CODEX_APP_SERVER_COMMAND must be a binary path or command name without arguments. Put arguments in HUNSU_CODEX_APP_SERVER_ARGS."};let s=fb(o)?o:nse(o,r,n,gb(r,n));if(!s)return{kind:"missing",installed:!1,source:e??"unknown",binaryPath:fb(o)?o:void 0,error:fb(o)?"Configured Codex path does not exist.":`Codex command was not found on PATH: ${o}`};if(CA(s,n))return{kind:"missing",installed:!1,source:"windows_apps_alias",binaryPath:s,error:"Codex resolved to a WindowsApps execution alias. Select the real Codex binary path in Hunsu Bridge."};try{return Qoe(s).isFile()?(n!=="win32"&&Joe(s,Xoe.X_OK),{kind:"binary",installed:!0,binaryPath:s,source:e==="unknown"||e===void 0?"process_path":e}):{kind:"missing",installed:!1,binaryPath:s,source:e??"unknown",error:"Configured Codex path is not a file."}}catch(a){return{kind:"missing",installed:!1,binaryPath:s,source:e??"unknown",error:Jd(a)}}}function nse(t,e,r=process.platform,n=gb(e,r)){return pb(t,e,r,n)[0]}function pb(t,e,r=process.platform,n=gb(e,r)){if(fb(t))return Cg(t)?[t]:[];let i=r==="win32"?["",...(e.PATHEXT??e.PathExt??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean)]:[""],o=r==="win32"?";":S5,s=[];for(let a of n.split(o).filter(Boolean))for(let c of i){let u=Ls(a,r==="win32"&&!t.toUpperCase().endsWith(c.toUpperCase())?`${t}${c}`:t);Cg(u)&&s.push(u)}return yb(s)}function ise(t,e){if(e!=="win32")return[];let r=Qf(t,"LOCALAPPDATA","LocalAppData","localappdata"),n=Qf(t,"APPDATA","AppData","appdata"),i=[];if(r){let o=Ls(r,"OpenAI","Codex","bin");if(Cg(o))for(let s of use(o))i.push(Ls(o,s,"codex.exe"));i.push(Ls(r,"OpenAI","Codex","bin","codex.exe"),Ls(r,"Programs","OpenAI Codex","codex.exe"))}return n&&i.push(Ls(n,"npm","codex.cmd")),yb(i.filter(Cg))}async function v5(t,e,r){if(r!=="win32")return"";let n=t==="user"?e.HUNSU_WINDOWS_USER_PATH:e.HUNSU_WINDOWS_MACHINE_PATH;if(n?.trim())return x5(n,e);let i=t==="user"?"HKCU\\Environment":"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";try{let{stdout:o}=await mb("reg.exe",["query",i,"/v","Path"],{env:e,timeout:1500,windowsHide:!0,maxBuffer:65536});return x5(ase(o),e)}catch{return""}}async function ose(t){try{let{stdout:e}=await mb("where.exe",["codex"],{env:t,timeout:1500,windowsHide:!0,maxBuffer:65536});return w5(e)}catch{return[]}}async function sse(t){let e="Get-Command codex -All | ForEach-Object { $_.Source }";for(let r of["powershell.exe","pwsh"])try{let{stdout:n}=await mb(r,["-NoProfile","-Command",e],{env:r==="powershell.exe"?Ms(t):t,timeout:2e3,windowsHide:!0,maxBuffer:65536}),i=w5(n);if(i.length>0)return i}catch{}return[]}function ase(t){return t.split(/\r?\n/).map(r=>r.trim()).find(r=>/^Path\s+REG_/i.test(r))?.replace(/^Path\s+REG_\w+\s+/i,"").trim()??""}function w5(t){return yb(t.split(/\r?\n/).map(e=>e.trim()).filter(e=>e.length>0&&!/^[-\s]+$/.test(e)&&!/^CommandType\b|^Name\b|^Source\b/i.test(e)))}function cse(t,e){if(e!=="win32")return;let r=Qf(t,"LOCALAPPDATA","LocalAppData","localappdata"),n=r?Ls(r,"Microsoft","WindowsApps","codex.exe"):void 0;return n&&Cg(n)?n:void 0}function gb(t,e){return e!=="win32"?t.PATH??"":[t.PATH,t.Path,t.path].filter(r=>typeof r=="string"&&r.trim().length>0).join(";")}function use(t){try{return Yoe(t,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}function dse(t){let e=new Set,r=[];for(let n of t){let i=`${n.source}:${n.candidate}`;e.has(i)||(e.add(i),r.push(n))}return r}function Qf(t,...e){return e.map(r=>t[r]).find(r=>typeof r=="string"&&r.trim().length>0)?.trim()}function yb(t){return[...new Set(t.filter(e=>typeof e=="string"&&e.length>0))]}function CA(t,e){return e==="win32"&&/(?:^|[\\/])WindowsApps[\\/]/i.test(t)}function x5(t,e){return t.replace(/%([^%]+)%/g,(r,n)=>{let i=n.trim(),o=Rr();return Qf(e,i,i.toUpperCase(),i.toLowerCase())??o[i]??r})}function I5(t,e,r,n){return ub(t,e,r,n)}function E5(t,e){let r=Rr(),n={...r,...t},i=e==="win32"?";":S5;for(let o of["PATH","Path","path"]){let s=t[o],a=r[o];if(s===""&&a){n[o]=a;continue}s&&a&&!s.split(i).includes(a)&&(n[o]=`${s}${i}${a}`)}return n}var Pg=class{command;args;timeoutMs;child;nextId=1;buffer="";pending=new Map;constructor(e,r,n={}){this.command=e,this.args=n.args??["app-server","--stdio"],this.timeoutMs=r;let i=n.env??Rr(),o=n.platform??process.platform,s=I5(this.command,this.args,i,o);this.child=Koe(s.command,s.args,{env:E5(i,o),stdio:["pipe","pipe","pipe"],windowsHide:!0,windowsVerbatimArguments:s.windowsVerbatimArguments}),this.child.stdout.setEncoding("utf8"),this.child.stdout.on("data",a=>this.read(a)),this.child.stderr.setEncoding("utf8"),this.child.on("error",a=>this.rejectAll(a)),this.child.on("exit",()=>this.rejectAll(new Error("Codex app-server process exited before probe completed.")))}request(e,r){let n=this.nextId;return this.nextId+=1,new Promise((i,o)=>{let s=setTimeout(()=>{this.pending.delete(n),o(new Error(`Codex app-server probe timed out: ${e}`))},this.timeoutMs);this.pending.set(n,{resolve:i,reject:o,timer:s});try{this.write({jsonrpc:"2.0",id:n,method:e,params:r})}catch(a){clearTimeout(s),this.pending.delete(n),o(a instanceof Error?a:new Error(String(a)))}})}async initialize(){let e=await this.request("initialize",{clientInfo:{name:"hunsu-bridge",title:"Hunsu Bridge",version:bn}});return this.notify("initialized",{}),e}notify(e,r){this.write({jsonrpc:"2.0",method:e,params:r})}close(){this.rejectAll(new Error("Codex app-server probe closed.")),this.child.kill()}write(e){this.child.stdin.write(`${JSON.stringify(e)}
206
206
  `)}read(e){this.buffer+=e;let r=this.buffer.indexOf(`
207
207
  `);for(;r>=0;){let n=this.buffer.slice(0,r).trim();if(this.buffer=this.buffer.slice(r+1),r=this.buffer.indexOf(`
@@ -209,7 +209,7 @@ ${o}`.trim().split(/\r?\n/).map(a=>a.trim()).find(Boolean)}catch{return}}async f
209
209
  ${i.stderr??""}`.trim().split(/\r?\n/u).find(Boolean);return{available:!0,command:e,version:o}}return{available:!1,command:e,message:Ese}}function DA(t={available:!0,command:BA()}){return{providerId:"codex",available:t.available,label:"Install Codex",command:t.command,args:["install","-g","@openai/codex@latest"],confirmationRequired:!0,instructions:t.available?["Hunsu Bridge can run the Codex npm installer after you confirm.","If Codex is already installed in a custom location, use Select Existing Codex."]:[t.message,"pnpm and yarn cannot run this npm-specific provider installer."]}}var D5=async t=>{let e=BA(),r=["install","-g","@openai/codex@latest"];return t.dryRun?{ok:!0,command:e,args:r}:new Promise(n=>{let i={...Rr(),...t.env},o=N5(e,r,i),s=wse(o.command,o.args,{stdio:["ignore","pipe","pipe"],env:i,windowsHide:!0,windowsVerbatimArguments:o.windowsVerbatimArguments}),a="",c=u=>{a=`${a}${u.toString()}`.slice(-16*1024)};s.stdout?.on("data",c),s.stderr?.on("data",c),s.once("error",u=>{n({ok:!1,command:e,args:r,output:a.trim(),error:u.message})}),s.once("close",u=>{n({ok:u===0,command:e,args:r,exitCode:u??void 0,output:a.trim(),error:u===0?void 0:`Codex installer exited with status ${u??"unknown"}.`})})})};function N5(t,e,r,n=process.platform){return ub(t,e,r,n)}import{spawn as LA}from"node:child_process";var pu=new WeakMap;async function Dg(t,e){let r=await lu({env:e});return!r.installed||!r.binaryPath?{started:!1,args:t,message:r.error??"Codex CLI was not found."}:(LA(r.binaryPath,t,{detached:!0,stdio:"ignore",env:{...Rr(),...e},windowsHide:!0}).unref(),{started:!0,command:r.binaryPath,args:t})}async function Ib(t,e){let r=["login"],n=await lu({env:e}),i=new Date().toISOString();if(!n.installed||!n.binaryPath){let o=$a(t,{kind:"chatgpt",startedAt:i,status:"failed",error:n.error??"Codex CLI was not found.",lastOutput:"Browser login failed to start."});return NA(void 0,r,o,!1)}try{let o=LA(n.binaryPath,r,{detached:!0,stdio:"ignore",env:{...Rr(),...e},windowsHide:!0});o.unref();let s=$a(t,{kind:"chatgpt",pid:o.pid,startedAt:i,status:"pending",lastOutput:"Browser login started. Complete sign-in, then click Recheck."});return NA(n.binaryPath,r,s)}catch(o){let s=$a(t,{kind:"chatgpt",startedAt:i,status:"failed",error:o instanceof Error?o.message:String(o),lastOutput:"Browser login failed to start."});return NA(n.binaryPath,r,s,!1)}}async function Eb(t,e,r=3e3){let n=["login","--device-auth"],i=pu.get(t);if(i&&!i.cleared)return OA(i.child.spawnfile,n,t.codexLogin);let o=await lu({env:e});if(!o.installed||!o.binaryPath){let u=$a(t,{kind:"device",startedAt:new Date().toISOString(),status:"failed",error:o.error??"Codex CLI was not found."});return OA(void 0,n,u,!1)}let s=LA(o.binaryPath,n,{detached:!0,stdio:["ignore","pipe","pipe"],env:{...Rr(),...e},windowsHide:!0}),a={child:s,startedAt:new Date().toISOString(),output:"",cleared:!1};pu.set(t,a),$a(t,{kind:"device",pid:s.pid,startedAt:a.startedAt,status:"starting"});let c=u=>{if(a.cleared)return;a.output=`${a.output}${u.toString()}`.slice(-64*1024);let d=MA(a.output);$a(t,{kind:"device",pid:s.pid,startedAt:a.startedAt,status:d.verificationUri||d.userCode?"device_code":"pending",...d,lastOutput:a.output.trim().slice(-4096)})};return s.stdout?.on("data",c),s.stderr?.on("data",c),s.once("error",u=>{a.cleared||($a(t,{kind:"device",pid:s.pid,startedAt:a.startedAt,status:"failed",error:u.message,lastOutput:a.output.trim().slice(-4096)}),pu.delete(t))}),s.once("close",(u,d)=>{if(a.cleared)return;let l=MA(a.output),f=u!==0;$a(t,{kind:"device",pid:s.pid,startedAt:a.startedAt,status:f?"failed":l.verificationUri||l.userCode?"device_code":"completed",...l,lastOutput:a.output.trim().slice(-4096),error:f?`Codex device login exited with status ${u??d??"unknown"}.`:void 0}),pu.delete(t)}),await kse(t,r),OA(o.binaryPath,n,t.codexLogin)}function O5(t){let e=pu.get(t);e&&(e.cleared=!0,pu.delete(t)),t.codexLogin=void 0}function MA(t){let e=[...t.matchAll(/https?:\/\/[^\s)'"]+/g)].map(s=>s[0].replace(/[.,;:]+$/,"")),r=e.find(s=>/[?&](user_?code|code)=/i.test(s)),n=e.find(s=>s!==r)??r,i=r?Ase(r):void 0,o=t.match(/(?:user\s+code|one[-\s]?code|one[-\s]?time\s+code|code)[:\s]+([A-Z0-9][A-Z0-9\-\s]{3,}[A-Z0-9])/i)?.[1]?.trim().replace(/\s+/g,"-");return{...n?{verificationUri:n}:{},...r?{verificationUriComplete:r}:{},...i??o?{userCode:i??o}:{}}}function NA(t,e,r,n=!0){return{started:n,command:t,args:e,state:r.status,status:r.status,lastOutput:r.lastOutput,error:r.error,message:r.status==="failed"?r.error??"Codex login failed to start.":"Codex login started. Complete sign-in in your browser, then click Recheck."}}function OA(t,e,r,n=!0){let i=r?.status??"pending";return{started:n,command:t,args:e,state:i,status:i,verificationUri:r?.verificationUri,verificationUriComplete:r?.verificationUriComplete,userCode:r?.userCode,lastOutput:r?.lastOutput,error:r?.error,message:i==="failed"?r?.error??"Codex device login failed.":r?.verificationUri||r?.userCode?"Codex device login started. Complete authorization in your browser.":i==="completed"?"Codex device login completed.":"Codex device login started."}}function $a(t,e){return t.codexLogin=e,e}async function kse(t,e){let r=t.codexLogin?.startedAt,n=Date.now()+e;for(;Date.now()<n;){let o=t.codexLogin,s=o&&o.startedAt===r?o.status:void 0;if(s==="device_code"){await Rse(t,r);return}if(s==="failed"||s==="completed")return;await M5(50)}let i=pu.get(t);i&&!i.cleared&&t.codexLogin?.startedAt===i.startedAt&&t.codexLogin.status==="starting"&&$a(t,{...t.codexLogin,status:"pending"})}async function Rse(t,e,r=100){let n=Date.now()+r;for(;Date.now()<n;){let i=t.codexLogin;if((i&&i.startedAt===e?i.status:void 0)!=="device_code"||!pu.has(t))return;await M5(10)}}function Ase(t){try{let e=new URL(t);return e.searchParams.get("user_code")??e.searchParams.get("user-code")??e.searchParams.get("code")??void 0}catch{return}}function M5(t){return new Promise(e=>setTimeout(e,t))}function Ng(){return[HA("codex-default","Codex Default",["default","low","medium","high"],["default","fast"],"default"),HA("gpt-5.5-thinking","GPT-5.5 Thinking",["high","xhigh"],["default","fast"],"high"),HA("gpt-5.5","GPT-5.5",["default","low","medium","high"],["default","fast"],"medium")]}function HA(t,e,r,n,i){return{model:UA(t,"providerInventory.model"),label:UA(e,"providerInventory.model.label"),capabilities:{reasoningEfforts:r,serviceTiers:n,supportsReasoning:r.length>0,supportsFastTier:n.includes("fast")},defaultConfig:{providerId:"codex",model:UA(t,"providerInventory.model.defaultConfig.model"),reasoningEffort:i,serviceTier:"default",...t==="codex-default"?{experimental:!0}:{}}}}function UA(t,e){return Zt(Ie(t,e))}var _se={canExecute:!0,canEditFiles:!0,canRunShell:!0,supportsWorktree:!0,supportsEventStream:!0,supportsUsage:!0,supportsSubscriptionAuth:!0,supportsDeviceAuth:!0,supportsApiKeyAuth:!0,supportsRemoteAccess:!0,supportsAcp:!1},Zd=class{providerId="codex";kind="codex";label="Codex";settings;internalLoginState={};options;constructor(e={}){this.options=e,this.settings=zo(e.settings)}metadata(){return bb}async readConfig(){return wb(this.settings)}async validateConfig(e){let r=Qd(this.settings,e);return this.validateSettings(r)}async saveConfig(e){let r=Qd(this.settings,e),n=await this.validateSettings(r);if(!n.valid)throw new Error(n.provider.safeMessage??n.provider.auth.error??n.provider.install?.error??"Codex provider configuration is invalid.");return this.settings=r,this.options.onConfigure?.(this.settings),n.provider}async deleteConfig(e){return this.settings=e&&e.length>0?Qd(this.settings,e.map(r=>({key:r,value:"",isSet:!1,isSecret:!1}))):{},this.options.onConfigure?.(this.settings),this.status({force:!0})}effectiveEnv(e={}){return this.statusEnv(e)}async status(e={}){let r=this.statusEnv(e.env),n=await fu({force:e.force,env:r});return $A(n,{effectiveEnv:Bg(r)})}async recheck(){return this.status({force:!0})}async installPlan(){return DA(await this.installerPrerequisite(this.statusEnv()))}async install(e={}){let r=this.statusEnv(e.env),n=await this.status({force:!0,env:r}),i=await this.installerPrerequisite(r),o=DA(i);if(n.installed)return{providerId:this.providerId,confirmed:e.confirmed===!0,started:!1,status:"already_installed",message:"Codex is already installed.",plan:o,providerStatus:n};if(!i.available)return{providerId:this.providerId,confirmed:e.confirmed===!0,started:!1,status:"prerequisite_missing",message:i.message,plan:o,providerStatus:n};if(e.confirmed!==!0)return{providerId:this.providerId,confirmed:!1,started:!1,status:"confirmation_required",message:"Confirm Codex installation before Hunsu Bridge runs the installer.",plan:o,providerStatus:n};let a=await(this.options.installer??D5)({env:r,dryRun:e.dryRun===!0||r.HUNSU_CODEX_INSTALL_DRY_RUN==="1"}),c=await this.status({force:!0,env:r});return{providerId:this.providerId,confirmed:!0,started:!0,status:a.ok?a.exitCode===void 0?"dry_run":"completed":"failed",message:a.ok?a.exitCode===void 0?"Codex install dry run completed. No installer was run.":"Codex installer completed. Provider status was rechecked.":a.error??"Codex installer failed.",plan:o,command:a.command,args:a.args,exitCode:a.exitCode,output:a.output,error:a.error,providerStatus:c}}async login(e){let r=e.method==="default"?Ose(this.settings.authenticationPreference):e.method,n=this.statusEnv(),i=this.options.loginState??this.internalLoginState;if(r==="device")return{providerId:this.providerId,method:r,...await Eb(i,n)};if(r==="api_key"){let o=await Dg(["login","--api-key"],n);return{providerId:this.providerId,method:r,...o,message:o.started?"Codex API-key login started.":o.message??"Codex API-key login could not start."}}return{providerId:this.providerId,method:r,...await Ib(i,n)}}async configure(e){if(e.authMethod==="api_key")return this.configureApiKey(e);if(e.clearBinaryPath){let i={...this.settings};return delete i.binaryPath,this.settings=i,this.options.onConfigure?.(this.settings),this.status({force:!0,env:e.env})}let r=e.binaryPath?.trim()||e.selectBinaryPath?.trim();if(!r)return this.status({force:!0,env:e.env});let n=Cse(r)?r:Pse(r);return this.saveConfig([{key:"binaryPath",value:n,isSet:!0,isSecret:!1}])}async configureApiKey(e){let r=e.apiKey?.trim(),n=r?this.statusEnv({...e.env,OPENAI_API_KEY:r}):this.statusEnv(e.env);return this.status({force:!0,env:n})}statusEnv(e={}){return Yd({baseEnv:this.baseEnv(e),settings:this.settings})}installerPrerequisite(e){return Promise.resolve((this.options.installerPrerequisite??B5)({env:e}))}baseEnv(e={}){return{...Rr(),...this.options.env?.()??{},...e}}async validateSettings(e){let r=Yd({baseEnv:this.baseEnv(),settings:e}),n=await fu({force:!0,env:r,customBinaryPath:e.binaryPath}),i=$A(n,{effectiveEnv:Bg(r)}),o=n.cli.installed===!0&&!!n.cli.version&&n.appServer.available===!0;return{valid:o,provider:i,diagnostics:i.diagnostics??{effectiveEnv:Bg(r)},errors:o?[]:Tse(e,n)}}};function Tse(t,e){return!e.cli.installed||!e.cli.version?[{field:"binaryPath",message:t.binaryPath?"Select a Codex executable that Hunsu Bridge can run.":"Select an existing Codex executable or install Codex first."}]:e.appServer.available?[]:[{field:t.appServerCommand?"appServerCommand":t.appServerArgs?"appServerArgs":"binaryPath",message:"Codex app-server could not be started with this setting."}]}function $A(t,e={}){let r=t.cli.installed,n=r&&t.appServer.available,i=t.auth.state==="authenticated"?!0:t.auth.state==="unknown"||t.auth.state==="error"?"unknown":!1;return{providerId:"codex",kind:"codex",label:"Codex",description:"OpenAI Codex CLI through the local app-server boundary.",connectionKind:"local_cli",installed:r,configured:n,authenticated:i,ready:t.ready,auth:{kind:Bse(t),state:t.auth.state,access:t.auth.access,accountSummary:t.auth.accountSummary,error:t.auth.error,homeDiagnostic:t.auth.homeDiagnostic},install:{installed:r,binaryPath:t.cli.binaryPath,source:t.cli.source,version:t.cli.version,error:t.cli.error,discovery:t.cli.discovery},usage:{available:t.usage.rateLimitsAvailable,rateLimited:t.usage.rateLimited,summary:t.usage.rateLimitSummary,lastRunUsage:t.usage.lastRunUsage,error:t.usage.error},capabilities:_se,modelInventory:{state:"available",models:Ng()},recommendedAction:Dse(t),diagnostics:{...e.effectiveEnv?{effectiveEnv:e.effectiveEnv}:{},...t.auth.homeDiagnostic?{codexHome:t.auth.homeDiagnostic}:{}},safeMessage:Nse(t)}}async function Og(t,e,r={}){let n=await fu({env:t,force:r.force,lastRunUsage:r.lastRunUsage});return n.auth.state==="authenticated"&&e.codexLogin&&O5(e),e.codexLogin?{...n,codexLogin:e.codexLogin}:n}function Bse(t){return t.auth.method==="chatgpt"?"chatgpt_oauth":t.auth.method==="api_key"||t.auth.method==="access_token"?"api_key":t.auth.state==="not_authenticated"?"chatgpt_oauth":"unknown"}function Dse(t){return t.recommendedAction==="install_codex"?"install":t.recommendedAction==="select_binary"?"select_binary":t.recommendedAction==="login_codex"?"login":t.recommendedAction==="recheck"?"recheck":"none"}function Nse(t){return t.recommendedAction==="select_binary"?"Select the real Codex binary path. WindowsApps aliases cannot be used for Execute.":t.cli.installed?t.appServer.available?t.auth.homeDiagnostic?.likelyHomeMismatch&&t.auth.homeDiagnostic.remediation?.message?t.auth.homeDiagnostic.remediation.message:t.auth.state==="not_authenticated"?"Sign in to Codex to enable Execute.":t.auth.state==="expired"||t.auth.state==="invalid"?"Codex sign-in needs to be refreshed.":t.usage.rateLimited?"Codex is temporarily rate limited.":t.ready?"Codex is ready.":"Codex needs attention.":"Codex is installed, but the app-server is not available.":"Codex was not found by Hunsu Bridge."}function Ose(t){return t==="device_code"?"device":t==="api_key"?"api_key":"chatgpt"}import{existsSync as Yse,mkdirSync as Qse,readFileSync as Zse,renameSync as eae,writeFileSync as tae}from"node:fs";import{dirname as rae}from"node:path";import{homedir as Mse}from"node:os";import{posix as L5,win32 as H5}from"node:path";function Lse(t={}){let e=t.platform??process.platform,r=e==="win32"?H5:L5,n=t.env??{},i=Mg(t.home)??Mg(n.HUNSU_HOME);if(i)return r.isAbsolute(i)?i:r.resolve(i);let o=Mg(t.userHome)??Mse();if(e==="win32"){let s=Mg(t.localAppData)??Mg(n.LOCALAPPDATA)??r.join(o,"AppData","Local");return r.join(s,"Hunsu","Bridge")}return e==="darwin"?r.join(o,"Library","Application Support","Hunsu","Bridge"):r.join(o,".local","share","hunsu","bridge")}function Ko(t={}){let e=Lse(t),r=(t.platform??process.platform)==="win32"?H5:L5,n=r.join(e,"logs"),i=r.join(e,"runtime");return{home:e,homeOwnershipFile:r.join(e,".hunsu-bridge-home.json"),configFile:r.join(e,"config.json"),workspacesFile:r.join(e,"workspaces.json"),credentialsFile:r.join(e,"credentials.json"),runtimeFile:r.join(e,"runtime.json"),logsDirectory:n,structuredLogFile:r.join(n,"bridge.jsonl"),runtimeDirectory:i,runtimeStagingDirectory:r.join(i,"staging"),runtimeVersionsDirectory:r.join(i,"versions"),runtimeInstallFile:r.join(i,"install.json"),setupTransactionFile:r.join(i,"setup-transaction.json"),setupLockFile:r.join(i,"setup.lock"),daemonLockFile:r.join(i,"daemon.lock")}}function Mg(t){let e=t?.trim();return e||void 0}import{access as Gse}from"node:fs/promises";import{mkdir as Hse,open as Use,readFile as $se,rename as Fse,unlink as jse}from"node:fs/promises";import{basename as Lg,dirname as qse,join as Wse}from"node:path";import{randomBytes as Vse}from"node:crypto";var Hs=class extends Error{code="BRIDGE_STATE_INVALID";file;constructor(e,r,n){super(r,n),this.name="BridgeStateError",this.file=e}};async function ai(t){let e;try{e=await $se(t,"utf8")}catch(r){if(er(r)&&r.code==="ENOENT")return;throw new Hs(t,`Unable to read Bridge state file: ${Lg(t)}.`,{cause:r})}try{return JSON.parse(e)}catch(r){throw new Hs(t,`Bridge state file is not valid JSON: ${Lg(t)}.`,{cause:r})}}async function wn(t,e,r={}){let n=qse(t),i=r.mode??384;await Hse(n,{recursive:!0,mode:448});let o=Wse(n,`.${Lg(t)}.${process.pid}.${Vse(8).toString("hex")}.tmp`),s;try{s=await Use(o,"wx",i),await s.writeFile(`${JSON.stringify(e,null,2)}
210
210
  `,"utf8"),await s.sync(),await s.chmod(i),await s.close(),s=void 0,await r.prepareTemporaryFile?.(o),await Fse(o,t),r.onCommitted?.()}catch(a){throw new Hs(t,`Unable to persist Bridge state file: ${Lg(t)}.`,{cause:a})}finally{await s?.close().catch(()=>{}),await jse(o).catch(a=>{if(!er(a)||a.code!=="ENOENT")throw a})}}function Ue(t,e){return new Hs(t,`Bridge state file is invalid (${Lg(t)}): ${e}`)}function er(t){return t instanceof Error&&"code"in t}var Rb="hunsu.bridge.config.v1",Zf="hunsu.bridge.config.v2",U5=Object.freeze({schema:Zf,deploymentProfile:"production",host:"127.0.0.1",port:19687,provider:Object.freeze({kind:"unconfigured"}),remote:Object.freeze({enabled:!1})});function Jo(t){let e=Promise.resolve(),r=async()=>{let i=await ai(t.configFile);return i===void 0?F5(U5):mu(t.configFile,i)},n=i=>{let o=e.then(i,i);return e=o.then(()=>{},()=>{}),o};return{async read(){return await e,r()},async write(i){await n(async()=>{await wn(t.configFile,mu(t.configFile,i))})},async update(i){return n(async()=>{let o=mu(t.configFile,i(await r()));return await wn(t.configFile,o),o})},async ensureDeploymentProfile(i){return n(async()=>{let o=await ai(t.configFile);if(o===void 0){if(i!=="production"&&await Jse(t))throw Ue(t.configFile,"a populated HUNSU_HOME without an explicit profile is treated as production and cannot switch to preview");let a={...F5(U5),deploymentProfile:i};return await wn(t.configFile,a),a}let s=mu(t.configFile,o);if(s.deploymentProfile!==i)throw Ue(t.configFile,`deploymentProfile is ${s.deploymentProfile} and cannot switch to ${i} in a populated HUNSU_HOME`);return Xse(o)&&await wn(t.configFile,s),s})}}}function mu(t,e){if(!Ab(e)||e.schema!==Zf&&e.schema!==Rb)throw Ue(t,`expected schema ${Zf} or ${Rb}`);let r=e.schema===Rb?"production":zse(t,e.deploymentProfile);if(typeof e.host!="string"||e.host.trim()==="")throw Ue(t,"host must be a non-empty string");if(!Number.isInteger(e.port)||e.port<0||e.port>65535)throw Ue(t,"port must be an integer from 0 through 65535");if(!Ab(e.remote)||typeof e.remote.enabled!="boolean")throw Ue(t,"remote.enabled must be a boolean");let n=Kse(t,e.provider);return{schema:Zf,deploymentProfile:r,host:e.host.trim(),port:e.port,provider:n,remote:{enabled:e.remote.enabled}}}function zse(t,e){if(!Pn(e))throw Ue(t,"deploymentProfile must be production or preview");return e}function Kse(t,e){if(!Ab(e))throw Ue(t,"provider must be configured explicitly");if(e.kind==="unconfigured")return{kind:"unconfigured"};if(e.kind!=="codex")throw Ue(t,"provider.kind must be unconfigured or codex");let r=kb(t,"provider.binaryPath",e.binaryPath),n=kb(t,"provider.home",e.home),i=kb(t,"provider.appServerCommand",e.appServerCommand),o=kb(t,"provider.appServerArgs",e.appServerArgs),s=$5(t,"provider.installChannel",e.installChannel,["stable","latest","manual"]),a=$5(t,"provider.authenticationPreference",e.authenticationPreference,["chatgpt","api_key","device_code"]);return{kind:"codex",...r?{binaryPath:r}:{},...n?{home:n}:{},...i?{appServerCommand:i}:{},...o?{appServerArgs:o}:{},...s?{installChannel:s}:{},...a?{authenticationPreference:a}:{}}}function $5(t,e,r,n){if(r!==void 0){if(typeof r!="string"||!n.includes(r))throw Ue(t,`${e} must be one of ${n.join(", ")} when present`);return r}}function kb(t,e,r){if(r!==void 0){if(typeof r!="string"||r.trim()==="")throw Ue(t,`${e} must be a non-empty string when present`);return r}}function F5(t){return{...t,provider:{...t.provider},remote:{...t.remote}}}async function Jse(t){let e=[t.homeOwnershipFile,t.credentialsFile,t.workspacesFile,t.runtimeFile,t.runtimeInstallFile,t.setupTransactionFile];return(await Promise.all(e.map(async n=>{try{return await Gse(n),!0}catch(i){if(er(i)&&i.code==="ENOENT")return!1;throw Ue(n,"durable Bridge state could not be inspected safely")}}))).some(Boolean)}function Xse(t){return Ab(t)&&t.schema===Rb}function Ab(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Cb(){return{currentProviderId:"codex",providers:{codex:{enabled:!0,settings:{}}}}}function Ug(t){let e=Cb();if(!Hg(t))return e;let r=Hg(t.providers)?Object.fromEntries(Object.entries(t.providers).map(([n,i])=>{let o=Hg(i)?i:{};return[n,{enabled:n==="codex"&&o.enabled!==!1,settings:Hg(o.settings)?o.settings:{}}]})):{};return r.codex={enabled:!0,settings:Hg(r.codex?.settings)?r.codex.settings:{}},{currentProviderId:t.currentProviderId==="codex"?"codex":e.currentProviderId,providers:r}}function j5(t=Rr()){return Ko({env:t}).configFile}function nae(t=Rr()){let e=W5(j5(t));return!e||e.provider.kind!=="codex"?Cb():Ug({currentProviderId:"codex",providers:{codex:{enabled:!0,settings:{...e.provider.binaryPath?{binaryPath:e.provider.binaryPath}:{},...e.provider.home?{codexHome:e.provider.home}:{},...e.provider.appServerCommand?{appServerCommand:e.provider.appServerCommand}:{},...e.provider.appServerArgs?{appServerArgs:e.provider.appServerArgs}:{},...e.provider.installChannel?{installChannel:e.provider.installChannel}:{},...e.provider.authenticationPreference?{authenticationPreference:e.provider.authenticationPreference}:{}}}}})}function q5(t=Rr()){let e=j5(t);return{read:()=>nae(t),write(r){let n=W5(e)??{schema:Zf,deploymentProfile:"production",host:"127.0.0.1",port:19687,provider:{kind:"unconfigured"},remote:{enabled:!1}},i=zo(r.providers.codex?.settings),o={...n,provider:{kind:"codex",...i.binaryPath?{binaryPath:i.binaryPath}:{},...i.codexHome?{home:i.codexHome}:{},...i.appServerCommand?{appServerCommand:i.appServerCommand}:{},...i.appServerArgs?{appServerArgs:i.appServerArgs}:{},...i.installChannel?{installChannel:i.installChannel}:{},...i.authenticationPreference?{authenticationPreference:i.authenticationPreference}:{}}};iae(e,o)}}}function W5(t){if(Yse(t))try{let e=JSON.parse(Zse(t,"utf8"));return mu(t,e)}catch{return}}function iae(t,e){Qse(rae(t),{recursive:!0});let r=`${t}.tmp-${process.pid}-${Date.now()}`;tae(r,`${JSON.stringify(e,null,2)}
211
211
  `,{encoding:"utf8",mode:384}),eae(r,t)}function Hg(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var V5={canExecute:!1,canEditFiles:!1,canRunShell:!1,supportsWorktree:!1,supportsEventStream:!1,supportsUsage:!1,supportsSubscriptionAuth:!1,supportsDeviceAuth:!1,supportsApiKeyAuth:!1,supportsRemoteAccess:!1,supportsAcp:!1};var oae={codex:"Codex",claude_code:"Claude Code",gemini_cli:"Gemini CLI",openhands:"OpenHands Agent Server",acp_agent:"ACP Agent",litellm_gateway:"LiteLLM Gateway",openrouter_gateway:"OpenRouter Gateway",custom:"Custom Provider"};function FA(t={}){let e=Ug(t.providerState??t.providerStateStore?.read()??{...Cb(),currentProviderId:t.currentProviderId??"codex"}),r=e.providers[e.currentProviderId]?.enabled?e.currentProviderId:"codex",n=t.providers??[new Zd({...t.codex,settings:e.providers.codex?.settings??{},onConfigure(i){e=sae(e,i),t.providerStateStore?.write(e),t.codex?.onConfigure?.(i)}}),el("claude_code"),el("gemini_cli"),el("openhands"),el("acp_agent"),el("litellm_gateway"),el("openrouter_gateway")];return{list:()=>[...n],get:i=>n.find(o=>o.providerId===i),current:()=>n.find(i=>i.providerId===r)??n[0],async setCurrent(i){let o=n.find(s=>s.providerId===i);if(!o)throw new Error(`Unknown runtime provider: ${i}`);if(o.providerId!=="codex"||e.providers[o.providerId]?.enabled!==!0)throw new Error(`${o.label} is not an enabled runtime provider yet.`);r=o.providerId,e=Ug({...e,currentProviderId:r}),t.providerStateStore?.write(e)}}}function sae(t,e){let r=aae(e);return Ug({...t,providers:{...t.providers,codex:{enabled:!0,settings:r}}})}function aae(t){let e=zo(t),r={};for(let[n,i]of Object.entries(e))i!==void 0&&(r[n]=i);return r}function el(t){let e=oae[t];return{providerId:t,kind:t,label:e,hiddenByDefault:!0,metadata(){return{providerId:t,label:e,description:"Future runtime provider.",configKeys:[]}},async readConfig(){return[]},async saveConfig(){throw new Error(`${e} does not support configuration yet.`)},async status(){return{providerId:t,kind:t,label:e,description:"Future runtime provider.",connectionKind:t.includes("gateway")?"gateway":t==="openhands"||t==="acp_agent"?"remote_agent_server":"local_cli",installed:!1,configured:!1,authenticated:"unknown",ready:!1,auth:{kind:"unknown",state:"unknown",access:"unknown"},install:{installed:!1},usage:{available:!1},capabilities:V5,modelInventory:{state:"unavailable",reason:"not_supported",message:`${e} does not publish a model inventory yet.`},recommendedAction:"configure",safeMessage:"Coming later"}},async recheck(){return this.status()}}}async function K5(t,e,r,n,i){if(t.method==="GET"&&r==="/api/providers"){let o=n.searchParams.get("advanced")==="1"||n.searchParams.get("advanced")==="true",s=i.providerRegistry.list().filter(a=>o||!a.hiddenByDefault);return i.sendJson(e,200,{currentProviderId:i.providerRegistry.current().providerId,providers:await Promise.all(s.map(a=>a.status({env:i.env})))}),!0}if(t.method==="GET"&&r==="/api/codex/status"&&i.legacyCodexStatus){let o=await i.legacyCodexStatus();return i.sendJson(e,200,i.sanitizeLegacyCodexStatus?i.sanitizeLegacyCodexStatus(o):o),!0}if(t.method==="GET"&&r==="/api/runtimes/codex/status"){let o=ep(i);return i.sendJson(e,200,await Og(o,i.codexLoginState??{},{lastRunUsage:i.latestCodexRunUsage?.()})),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/recheck"){let o=ep(i);return i.sendJson(e,202,await Og(o,i.codexLoginState??{},{force:!0,lastRunUsage:i.latestCodexRunUsage?.()})),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/install"){let o=await z5(t,i.readJson),s=i.providerRegistry.get("codex")??i.providerRegistry.current();return i.sendJson(e,202,s.install?await s.install({confirmed:o.confirmed,dryRun:o.dryRun,env:i.env}):await s.installPlan?.()),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/login/chatgpt"){let o=i.providerRegistry.get("codex")??i.providerRegistry.current();return i.sendJson(e,202,o.login?await o.login({method:"chatgpt"}):await Ib(i.codexLoginState??{},ep(i))),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/login/device"){let o=i.providerRegistry.get("codex")??i.providerRegistry.current();return i.sendJson(e,202,o.login?await o.login({method:"device"}):await Eb(i.codexLoginState??{},ep(i))),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/login/api-key"){let o=i.providerRegistry.get("codex")??i.providerRegistry.current();return i.sendJson(e,202,o.login?await o.login({method:"api_key"}):await Dg(["login","--api-key"],ep(i))),!0}if(t.method==="POST"&&r==="/api/runtimes/codex/logout")return i.sendJson(e,202,await Dg(["logout"],ep(i))),!0;if(t.method==="GET"&&r==="/api/providers/current")return i.sendJson(e,200,await i.providerRegistry.current().status({env:i.env})),!0;if(t.method==="GET"&&r==="/api/providers/current/metadata")return i.sendJson(e,200,i.providerRegistry.current().metadata()),!0;if(t.method==="GET"&&r==="/api/providers/current/config")return i.sendJson(e,200,await jA(i.providerRegistry.current(),i)),!0;if(t.method==="POST"&&r==="/api/providers/current/validate"){let o=await G5(t,i.readJson),s=i.providerRegistry.current();return s.validateConfig?(i.sendJson(e,200,await s.validateConfig(o.fields)),!0):(i.sendJson(e,501,{error:"Current provider does not support configuration validation yet."}),!0)}if(t.method==="POST"&&r==="/api/providers/current/config"){let o=await G5(t,i.readJson),s=i.providerRegistry.current();return await s.saveConfig(o.fields),i.sendJson(e,202,await jA(s,i)),!0}if(t.method==="DELETE"&&(r==="/api/providers/current/config"||r.startsWith("/api/providers/current/config/"))){let o=i.providerRegistry.current();return o.deleteConfig?(await o.deleteConfig(cae(r,n)),i.sendJson(e,202,await jA(o,i)),!0):(i.sendJson(e,501,{error:"Current provider does not support configuration reset yet."}),!0)}if(t.method==="POST"&&r==="/api/providers/current/recheck")return i.sendJson(e,202,await i.providerRegistry.current().status({env:i.env,force:!0})),!0;if(t.method==="POST"&&r==="/api/providers/current/install"){let o=i.providerRegistry.current();if(!o.install)return i.sendJson(e,501,{error:"Current provider does not support installation yet."}),!0;let s=await z5(t,i.readJson);return i.sendJson(e,202,await o.install({confirmed:s.confirmed,dryRun:s.dryRun,env:i.env})),!0}if(t.method==="POST"&&r==="/api/providers/current/login"){let o=await i.readJson(t),s=i.providerRegistry.current();return s.login?(i.sendJson(e,202,await s.login({method:o.method??"default"})),!0):(i.sendJson(e,501,{error:"Current provider does not support login yet."}),!0)}if(t.method==="POST"&&r==="/api/providers/current/authenticate"){let o=await i.readJson(t),s=i.providerRegistry.current();return s.login?(i.sendJson(e,202,await s.login({method:o.method??"default"})),!0):(i.sendJson(e,501,{error:"Current provider does not support authentication yet."}),!0)}if(t.method==="POST"&&r==="/api/providers/current/configure"){let o=await i.readJson(t),s=i.providerRegistry.current();return s.configure?(i.sendJson(e,202,await s.configure({...o,env:i.env})),!0):(i.sendJson(e,501,{error:"Current provider does not support configuration yet."}),!0)}return!1}function cae(t,e){let r="/api/providers/current/config/";if(t.startsWith(r)){let i=decodeURIComponent(t.slice(r.length)).trim();return i?[i]:void 0}let n=e.searchParams.getAll("key").map(i=>i.trim()).filter(Boolean);return n.length>0?n:void 0}function ep(t){let r=t.providerRegistry.get("codex");return r?.effectiveEnv?r.effectiveEnv(t.env):t.env}async function jA(t,e){let r=await t.status({env:e.env,force:!0});return{providerId:t.providerId,metadata:t.metadata(),fields:await t.readConfig(),status:r,diagnostics:r.diagnostics}}async function G5(t,e){let r=await e(t);return{fields:Array.isArray(r)?r:r.fields??[]}}async function z5(t,e){try{return await e(t)}catch{return{}}}import{existsSync as uae}from"node:fs";var dae=["local-pairing","project-finder","roadmap-registry","artifact-actions","connection-status","headless-daemon","remote-ready"],lae={minBridgeVersion:bn,requiredProtocolVersion:Kd,requiredFeatures:["local-pairing","connection-status"]};function tl(){return{bridgeVersion:bn,protocolVersion:Kd,supportedFeatures:[...dae]}}function X5(t,e,r="0.1.0"){if(J5(t.bridgeVersion,e.minBridgeVersion)<0)return{compatible:!1,reason:"bridge_update_needed",message:`Bridge ${t.bridgeVersion} is older than required ${e.minBridgeVersion}.`};if(t.protocolVersion!==e.requiredProtocolVersion)return{compatible:!1,reason:"bridge_update_needed",message:`Bridge protocol ${t.protocolVersion} does not match required ${e.requiredProtocolVersion}.`};let n=e.requiredFeatures.find(i=>!t.supportedFeatures.includes(i));return n?{compatible:!1,reason:"feature_unavailable",message:`Bridge feature is unavailable: ${n}.`}:t.minSupportedStudioVersion&&J5(r,t.minSupportedStudioVersion)<0?{compatible:!1,reason:"studio_update_needed",message:`Studio ${r} is older than Bridge requires ${t.minSupportedStudioVersion}.`}:{compatible:!0}}function qA(t){let e=[];fae(t.runtimeConfig.bridgeApi.host)&&e.push("public_bind"),t.repositoryPath&&!uae(t.repositoryPath)&&e.push("project_missing");let r=t.bridgeVersion??tl(),n=X5(r,t.requirement??lae,t.studioVersion);n.compatible||e.push("version_mismatch");let i=t.error??(n.compatible?void 0:n.message);return{mode:"local",transport:"direct",health:i===void 0?"connected":"error",auth:t.auth??"paired",projectAccess:t.projectAccess??(t.repositoryPath?"granted":"not_applicable"),bridge:{id:`local:${t.runtimeConfig.bridgeApi.host}:${t.runtimeConfig.bridgeApi.port}`,name:"Local Bridge",version:r.bridgeVersion,protocolVersion:r.protocolVersion,startedAt:t.startedAt,lastSeenAt:new Date().toISOString()},endpoint:{apiUrl:t.bridgeApiUrl},project:t.repositoryPath?{roadmapId:t.roadmapId,displayName:t.roadmapDisplayName,repositoryPath:t.repositoryPath}:void 0,warnings:e,error:i,version:r,compatibility:n}}function J5(t,e){let r=t.split(/[.-]/).map(o=>Number.parseInt(o,10)),n=e.split(/[.-]/).map(o=>Number.parseInt(o,10)),i=Math.max(r.length,n.length);for(let o=0;o<i;o+=1){let s=Number.isFinite(r[o])?r[o]:0,a=Number.isFinite(n[o])?n[o]:0;if(s!==a)return s>a?1:-1}return 0}function fae(t){return t==="0.0.0.0"||t==="::"||t==="[::]"}async function Y5(t,e,r,n){if(t.method==="GET"&&r==="/api/connection/status")return n.sendJson(e,200,n.studioConnectionStatus()),!0;if(t.method==="GET"&&r==="/api/bridge/status")return n.sendJson(e,200,await n.bridgeStatus()),!0;if(t.method==="GET"&&r==="/api/connections"){let i=await n.bridgeStatus();return n.sendJson(e,200,{connections:i.connections}),!0}if(t.method==="GET"&&r==="/api/connections/local"){let i=await n.bridgeStatus();return n.sendJson(e,200,{connection:i.connections.find(o=>o.mode==="local")}),!0}return t.method==="GET"&&r==="/api/connections/remote"?(n.sendJson(e,200,{connections:[]}),!0):t.method==="POST"&&r==="/api/connections/remote/enable"?n.headlessRemote?(n.sendJson(e,202,{enabled:!0,remote:await n.headlessRemote.enable()}),!0):(n.sendJson(e,503,{error:"remote_unavailable",message:"Remote access is owned by the headless Bridge service."}),!0):t.method==="POST"&&r==="/api/connections/remote/disable"?n.headlessRemote?(n.sendJson(e,202,{enabled:!1,remote:await n.headlessRemote.disable()}),!0):(n.sendJson(e,503,{error:"remote_unavailable",message:"Remote access is owned by the headless Bridge service."}),!0):!1}function hu(t,e){let r=WA(t.lifecycle),n=e.redactPath?void 0:t.repositoryPath;return{workspaceId:t.roadmapId,roadmapId:t.roadmapId,displayName:t.displayName,path:n,pathRedacted:e.redactPath||void 0,lifecycle:r,health:pae(t),backendId:e.backendId??"local",connectionMode:e.connectionMode??"local",provider:{providerId:e.provider.providerId,label:e.provider.label,readyForExecute:e.provider.ready},actions:mae(r,t.primaryAction)}}function gu(t,e){return t.filter(r=>e.activeOnly!==!0||WA(r.lifecycle)==="active").filter(r=>e.remoteOnly!==!0||r.remoteAccess?.enabled===!0&&WA(r.lifecycle)==="active").map(r=>hu(r,e))}function WA(t){return t==="inactive"||t==="missing"||t==="needs_upgrade"||t==="error"?t:"active"}function pae(t){return t.lifecycle==="missing"||t.health==="missing"?"missing":t.lifecycle==="needs_upgrade"||t.health==="needs-upgrade"||t.health==="missing-runtime"?"needs_upgrade":t.lifecycle==="error"?"error":t.health==="ok"||t.health==="git-dirty"?"ok":"unknown"}function mae(t,e){let r=[];return t==="active"?r.push("open_studio","deactivate"):t==="inactive"?r.push("activate","remove"):r.push(e==="repair"?"repair":"remove"),r}async function Z5(t,e,r,n){if(await hae(t,e,r,n))return!0;if(t.method==="GET"&&r==="/api/workspaces"){let i=await n.bridgeStatus();return n.sendJson(e,200,i.workspaces),!0}if(t.method==="GET"&&r==="/api/workspaces/active"){let i=await n.bridgeStatus();return n.sendJson(e,200,{workspaces:i.workspaces.active}),!0}if(t.method==="GET"&&r==="/api/workspaces/managed"){let i=await n.bridgeStatus();return n.sendJson(e,200,{workspaces:i.workspaces.managed}),!0}return t.method==="POST"&&r==="/api/workspaces/add"?(n.sendJson(e,202,await yae(await n.readJson(t),n)),!0):t.method==="POST"&&r==="/api/workspaces/activate"?(n.sendJson(e,202,await Q5(await n.readJson(t),"active",n)),!0):t.method==="POST"&&r==="/api/workspaces/deactivate"?(n.sendJson(e,202,await Q5(await n.readJson(t),"inactive",n)),!0):t.method==="POST"&&r==="/api/workspaces/remove"?(n.sendJson(e,202,await vae(await n.readJson(t),n)),!0):!1}async function hae(t,e,r,n){return t.method==="GET"&&r==="/api/roadmaps/recent"?(n.sendJson(e,200,{roadmaps:n.recentRoadmaps()}),!0):t.method==="GET"&&r==="/api/roadmaps/managed"?(n.sendJson(e,200,{roadmaps:n.managedRoadmaps()}),!0):t.method==="POST"&&r==="/api/roadmaps/recent/remove"?(n.sendJson(e,202,await n.removeRoadmap(await n.readJson(t))),!0):t.method==="POST"&&r==="/api/roadmaps/activate"?(n.sendJson(e,202,await n.activateRoadmap(await n.readJson(t))),!0):t.method==="POST"&&r==="/api/roadmaps/deactivate"?(n.sendJson(e,202,await n.deactivateRoadmap(await n.readJson(t))),!0):t.method==="POST"&&r==="/api/projects/inspect"?(n.sendJson(e,200,{project:await n.inspectProject(await n.readJson(t))}),!0):t.method==="POST"&&r==="/api/roadmaps/open"?(n.sendJson(e,202,await VA(await n.readJson(t),n.openRoadmap,n)),!0):t.method==="POST"&&r==="/api/roadmaps/port/inspect"?(n.sendJson(e,200,await n.inspectRoadmapPort(await n.readJson(t))),!0):t.method==="POST"&&r==="/api/roadmaps/port/apply"?(n.sendJson(e,202,await VA(await n.readJson(t),n.applyRoadmapPort,n)),!0):t.method==="POST"&&r==="/api/roadmaps/create"?(n.sendJson(e,202,await VA(await n.readJson(t),n.createRoadmap,n)),!0):!1}async function VA(t,e,r){let n=await e(t),i=gae(n);return i&&r.selectRepository?.(i),n}function gae(t){if(typeof t!="object"||t===null)return;let e=t.repository;if(typeof e!="object"||e===null)return;let r=e.root;return typeof r=="string"&&r.trim()?r:void 0}async function yae(t,e){let r=await e.addWorkspace(t);r.repository?.root&&e.selectRepository?.(r.repository.root);let n=await e.currentProvider();return{workspace:hu(r.roadmap,{provider:n}),workspaces:gu(e.managedRoadmaps(),{provider:n})}}async function Q5(t,e,r){let n=await r.setWorkspaceLifecycle(t,e),i=await r.currentProvider();return{workspace:n.roadmap?hu(n.roadmap,{provider:i}):void 0,workspaces:gu(n.roadmaps,{provider:i})}}async function vae(t,e){let r=await e.removeWorkspace(t),n=await e.currentProvider();return{removed:r.removed,workspaces:gu(r.roadmaps,{provider:n})}}function GA(t){return{backendId:"local",mode:"local",label:t.label??"This computer",provider:t.provider,connection:t.running===!1?{state:"not_running"}:{state:"connected"},workspaces:t.workspaces}}import{existsSync as Tae,readFileSync as Bae}from"node:fs";import{chmod as xae}from"node:fs/promises";import{execFile as Sae}from"node:child_process";import{promisify as bae}from"node:util";import{randomBytes as wae}from"node:crypto";var rl="hunsu.bridge.credentials.v2";function vu(t,e={}){let r=e.randomBytes??wae,n=e.platform??process.platform,i=e.windowsAclHardener??(d=>Eae(d,e.processEnv??{})),o=Promise.resolve(),s=async()=>{let d=await ai(t.credentialsFile);if(d!==void 0)return Rae(t.credentialsFile,d)},a=async()=>(await o,s()),c=d=>{let l=o.then(d,d);return o=l.then(()=>{},()=>{}),l},u=async d=>c(async()=>{let l=await s(),f={schema:rl,controlToken:$g(t.credentialsFile,"controlToken",d.controlToken??l?.controlToken??zA(r)),connect:d.connect===void 0?l?.connect??null:rM(t.credentialsFile,d.connect)};return await wn(t.credentialsFile,f,{mode:384,...n==="win32"?{prepareTemporaryFile:i}:{}}),f});return{read:a,async ensure(){let d=await a();return d?(n==="win32"?await i(t.credentialsFile):await xae(t.credentialsFile,384),d):u({})},write:u,rotateControlToken(d={}){return c(async()=>{let l=await s(),f=zA(r);for(let g=0;f===l?.controlToken&&g<8;g+=1)f=zA(r);if(f===l?.controlToken)throw Ue(t.credentialsFile,"a distinct control credential could not be generated");let p={schema:rl,controlToken:f,connect:l?.connect??null};return await wn(t.credentialsFile,p,{mode:384,...n==="win32"?{prepareTemporaryFile:i}:{},onCommitted:()=>d.onCommitted?.(p)}),p})}}}var Iae=bae(Sae);async function Eae(t,e){let r=kae(t);try{await Iae(r.command,r.args,{env:Ms(e),windowsHide:!0})}catch{throw Ue(t,"credentials ACL could not be restricted to the current Windows user")}}function kae(t){if(/[\u0000-\u001f\u007f]/u.test(t))throw Ue(t,"credentials path cannot contain control characters");return db(t,"CredentialPath")}function zA(t){return`hunsu_control_${Buffer.from(t(32)).toString("base64url")}`}function Rae(t,e){if(!KA(e)||e.schema!==rl)throw Ue(t,`expected schema ${rl}`);return{schema:rl,controlToken:$g(t,"controlToken",e.controlToken),connect:rM(t,e.connect)}}function rM(t,e){if(e===null)return null;if(!KA(e))throw Ue(t,"connect must be null or a Connect credential");let r={signingPrivateKey:Pb(t,"connect.signingPrivateKey",e.signingPrivateKey,!0),signingPublicKey:Pb(t,"connect.signingPublicKey",e.signingPublicKey,!1),agreementPrivateKey:Pb(t,"connect.agreementPrivateKey",e.agreementPrivateKey,!0),agreementPublicKey:Pb(t,"connect.agreementPublicKey",e.agreementPublicKey,!1)};if(e.state==="enrolling")return{...r,state:"enrolling",enrollmentId:yu(t,"connect.enrollmentId",e.enrollmentId),deviceCode:$g(t,"connect.deviceCode",e.deviceCode),userCode:yu(t,"connect.userCode",e.userCode),verificationUri:tM(t,"connect.verificationUri",e.verificationUri),verificationUriComplete:tM(t,"connect.verificationUriComplete",e.verificationUriComplete),interval:Cae(t,"connect.interval",e.interval),expiresAt:eM(t,"connect.expiresAt",e.expiresAt)};if(e.state!=="registered")throw Ue(t,"connect.state must be enrolling or registered");return{...r,state:"registered",deviceId:yu(t,"connect.deviceId",e.deviceId),accountId:yu(t,"connect.accountId",e.accountId),refreshToken:$g(t,"connect.refreshToken",e.refreshToken),accessToken:$g(t,"connect.accessToken",e.accessToken),expiresAt:eM(t,"connect.expiresAt",e.expiresAt),connectWsUrl:Aae(t,"connect.connectWsUrl",e.connectWsUrl)}}function $g(t,e,r){return yu(t,e,r)}function yu(t,e,r){if(typeof r!="string"||r.trim()==="")throw Ue(t,`${e} must be a non-empty string`);return r}function eM(t,e,r){let n=yu(t,e,r);if(!Number.isFinite(Date.parse(n)))throw Ue(t,`${e} must be a valid timestamp`);return n}function Aae(t,e,r){let n=yu(t,e,r),i;try{i=new URL(n)}catch{throw Ue(t,`${e} must be a valid WebSocket URL`)}let o=i.hostname==="localhost"||i.hostname==="127.0.0.1"||i.hostname==="[::1]"||i.hostname==="::1";if(i.protocol!=="wss:"&&!(i.protocol==="ws:"&&o))throw Ue(t,`${e} must use WSS except for loopback fixtures`);if(i.username||i.password||i.search||i.hash)throw Ue(t,`${e} must not contain credentials`);return i.toString()}function tM(t,e,r){let n=yu(t,e,r),i;try{i=new URL(n)}catch{throw Ue(t,`${e} must be a valid URL`)}let o=i.hostname==="localhost"||i.hostname==="127.0.0.1"||i.hostname==="[::1]"||i.hostname==="::1";if(i.protocol!=="https:"&&!(i.protocol==="http:"&&o))throw Ue(t,`${e} must use HTTPS except for loopback fixtures`);if(i.username||i.password||i.hash)throw Ue(t,`${e} must not contain credentials`);return i.toString()}function Cae(t,e,r){if(!Number.isInteger(r)||Number(r)<1||Number(r)>30)throw Ue(t,`${e} must be an integer from 1 through 30`);return Number(r)}function Pb(t,e,r,n){if(!KA(r)||r.kty!=="EC"||r.crv!=="P-256"||typeof r.x!="string"||typeof r.y!="string"||n&&typeof r.d!="string"||!n&&r.d!==void 0)throw Ue(t,`${e} must be a ${n?"private":"public"} P-256 JWK`);return{kty:"EC",crv:"P-256",x:r.x,y:r.y,...n?{d:r.d}:{},ext:!0}}function KA(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var tp=["remote.access","execute.start","artifactAction.run","env.read","hostAlias.expose"];var Fa="hunsu.bridge.workspaces.v1";function _b(t){return{async read(){let e=await ai(t.workspacesFile);return e===void 0?{schema:Fa,workspaces:[]}:nM(t.workspacesFile,e)},async write(e){await wn(t.workspacesFile,nM(t.workspacesFile,e))}}}function nM(t,e){if(!JA(e)||e.schema!==Fa||!Array.isArray(e.workspaces))throw Ue(t,`expected schema ${Fa} and a workspaces array`);let r=e.workspaces.map((o,s)=>Pae(t,o,s)),n=new Set,i=new Set;for(let o of r){if(n.has(o.workspaceId))throw Ue(t,`duplicate workspaceId ${o.workspaceId}`);if(i.has(o.repositoryPath))throw Ue(t,"duplicate repositoryPath");n.add(o.workspaceId),i.add(o.repositoryPath)}return{schema:Fa,workspaces:r}}function Pae(t,e,r){if(!JA(e))throw Ue(t,`workspaces[${r}] must be an object`);let n=e.lifecycle;if(n!=="active"&&n!=="inactive")throw Ue(t,`workspaces[${r}].lifecycle is invalid`);return{workspaceId:rp(t,`workspaces[${r}].workspaceId`,e.workspaceId),displayName:rp(t,`workspaces[${r}].displayName`,e.displayName),repositoryPath:rp(t,`workspaces[${r}].repositoryPath`,e.repositoryPath),lifecycle:n,..._ae(t,e.remoteAccess,r),createdAt:rp(t,`workspaces[${r}].createdAt`,e.createdAt),updatedAt:rp(t,`workspaces[${r}].updatedAt`,e.updatedAt)}}function _ae(t,e,r){if(e===void 0)return{};if(!JA(e)||typeof e.enabled!="boolean"||!Array.isArray(e.scopes))throw Ue(t,`workspaces[${r}].remoteAccess must contain enabled and scopes`);let n=e.scopes.map((i,o)=>{let s=rp(t,`workspaces[${r}].remoteAccess.scopes[${o}]`,i);if(!tp.includes(s))throw Ue(t,`workspaces[${r}].remoteAccess.scopes[${o}] is unsupported`);return s});return{remoteAccess:{enabled:e.enabled,scopes:[...new Set(n)]}}}function rp(t,e,r){if(typeof r!="string"||r.trim()==="")throw Ue(t,`${e} must be non-empty`);return r}function JA(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function iM(t){let e=Nae(t);return!e?.connect||e.connect.state!=="registered"?{available:e!==void 0,signedIn:!1}:e.connect.refreshToken?{available:!0,signedIn:!0,userId:e.connect.accountId}:{available:!0,signedIn:!1}}function oM(t){let e=Dae(t)?.provider;return e?.kind==="codex"?zo({binaryPath:e.binaryPath,codexHome:e.home,appServerCommand:e.appServerCommand,appServerArgs:e.appServerArgs,installChannel:e.installChannel,authenticationPreference:e.authenticationPreference}):{}}function Dae(t){let e=Ko({env:t}).configFile,r=sM(e);if(r!==void 0)try{return mu(e,r)}catch{return}}function Nae(t){let e=sM(Ko({env:t}).credentialsFile);return e?.schema===rl?e:void 0}function sM(t){if(Tae(t))try{return JSON.parse(Bae(t,"utf8"))}catch{return}}async function XA(t,e,r={}){return t.current().status({env:e,force:r.force})}function Oae(t,e){let r=iM(e.processEnv);return r.signedIn?{signedIn:!0,userId:r.userId,source:"daemon"}:{signedIn:!1,source:r.available?"daemon":"none"}}async function xu(t){return Mae({providerRegistry:t.providerRegistry,env:t.runtimeConfig.processEnv,managedRoadmaps:t.managedRoadmaps(),account:Oae(t.request,t.runtimeConfig)})}async function Mae(t){let e=await XA(t.providerRegistry,t.env),r=gu(t.managedRoadmaps,{provider:e,activeOnly:!0}),n=gu(t.managedRoadmaps,{provider:e,activeOnly:!1});return{provider:e,connections:[GA({provider:e,workspaces:r})],workspaces:{active:r,managed:n},account:t.account}}import{createServer as Lae}from"node:http";function aM(t,e={}){let r=Lae(t),n=e.runtimeConfig;return n?.bridgeApi.port===0&&r.once("listening",()=>{let i=r.address();!i||typeof i=="string"||Hae(n,i.port)}),r}function cM(t){return new URL(t.url??"/","http://localhost")}function Hae(t,e){t.bridgeApi={...t.bridgeApi,port:e},t.processEnv.HUNSU_BRIDGE_PORT=String(e),t.codexAppServer.environment.HUNSU_BRIDGE_PORT=String(e)}function YA(t){return t==="/health"}function uM(t){return YA(t)}function QA(t){return t==="/api/bridge/control/status"||t==="/api/bridge/pairing/rotate"||t==="/api/bridge/pairing/revoke"||t==="/api/bridge/control/shutdown"}async function dM(t,e,r,n){if(await Uae(r,n))return!0;if(t.method==="GET"&&r==="/api/board")return n.sendJson(e,200,n.board()),!0;if(t.method==="GET"&&r==="/api/roadmap")return n.sendJson(e,200,n.roadmapView()),!0;if(t.method==="GET"&&r==="/api/events")return n.sendJson(e,200,{events:n.events()}),!0;if(t.method==="GET"&&r==="/api/repository")return n.sendJson(e,200,{repository:n.repository()}),!0;if(t.method==="POST"&&r==="/api/repository")return n.sendJson(e,202,await n.selectRepository(await n.readJson(t))),!0;if(t.method==="GET"&&r==="/api/worktree")return n.sendJson(e,200,n.worktree()),!0;if(t.method==="GET"&&r==="/api/artifacts")return n.sendJson(e,200,{artifacts:n.artifacts()}),!0;if(t.method==="GET"&&r.startsWith("/api/artifacts/")){let i=decodeURIComponent(r.slice(15)),o=n.artifact(i);return n.sendJson(e,o?200:404,o?{artifact:o}:{error:`Unknown artifact: ${i}`}),!0}if(t.method==="GET"&&r==="/api/skills")return n.sendJson(e,200,{skills:n.skills()}),!0;if(t.method==="GET"&&r.startsWith("/api/moves/")&&r.endsWith("/diff")){let i=decodeURIComponent(r.slice(11,-5));return n.sendJson(e,200,{diff:n.moveDiff(i)}),!0}return t.method==="POST"&&r==="/api/commands"?(n.sendJson(e,202,await n.executeCommands(await n.readJson(t))),!0):t.method==="POST"&&r==="/api/lines/accept"?(n.sendJson(e,202,await n.decideLine("accept",await n.readJson(t))),!0):t.method==="POST"&&r==="/api/lines/reject"?(n.sendJson(e,202,await n.decideLine("reject",await n.readJson(t))),!0):!1}async function lM(t,e,r,n){let i=$ae(r);if(!i)return!1;let o=n.repositoryPath(i.roadmapId),s=i.suffix;if(t.method==="GET"&&s==="")return n.sendJson(e,200,n.loadRoadmap(i.roadmapId,o)),!0;if(t.method==="GET"&&s==="/board")return n.sendJson(e,200,n.board(i.roadmapId,o)),!0;if(t.method==="GET"&&s==="/roadmap")return n.sendJson(e,200,n.roadmapView(i.roadmapId,o)),!0;if(t.method==="GET"&&s==="/events")return n.sendJson(e,200,{events:n.events(i.roadmapId,o)}),!0;if(t.method==="GET"&&s==="/repository")return n.sendJson(e,200,{repository:n.repository(i.roadmapId,o)}),!0;if(t.method==="GET"&&s==="/worktree")return n.sendJson(e,200,n.worktree(i.roadmapId,o)),!0;if(t.method==="GET"&&s==="/artifacts")return n.sendJson(e,200,{artifacts:n.artifacts(i.roadmapId,o)}),!0;if(t.method==="GET"&&s.startsWith("/artifacts/")){let c=decodeURIComponent(s.slice(11)),u=n.artifact(i.roadmapId,o,c);return n.sendJson(e,u?200:404,u?{artifact:u}:{error:`Unknown artifact: ${c}`}),!0}if(s==="/artifact-actions"||s.startsWith("/artifact-actions/")||s==="/action-runs"||s.startsWith("/action-runs/"))return n.artifactActions(s,i.roadmapId,o);if(s==="/hunsu/drafts"||s.startsWith("/hunsu/drafts/"))return n.hunsuDrafts(s.slice(13),i.roadmapId,o);if(await n.executes(s,i.roadmapId,o))return!0;if(t.method==="GET"&&s==="/skills")return n.sendJson(e,200,{skills:n.skills(i.roadmapId,o)}),!0;let a=Fae(s);if(a&&t.method==="GET"){let u=new URL(t.url??"/","http://localhost").searchParams.get("path")??void 0;if(a.action==="tree")return n.sendJson(e,200,{tree:n.moveFileTree(i.roadmapId,o,a.moveId,u)}),!0;if(a.action==="blob")return n.sendJson(e,200,{blob:n.moveFileBlob(i.roadmapId,o,a.moveId,u??"")}),!0;if(a.action==="diff")return n.sendJson(e,200,{diff:n.moveDiff(i.roadmapId,o,a.moveId)}),!0}if(t.method==="GET"&&s.startsWith("/moves/")&&s.endsWith("/diff")){let c=decodeURIComponent(s.slice(7,-5));return n.sendJson(e,200,{diff:n.moveDiff(i.roadmapId,o,c)}),!0}return t.method==="POST"&&s==="/commands"?(n.sendJson(e,202,await n.executeCommands(i.roadmapId,o,await n.readJson(t))),!0):t.method==="POST"&&s==="/lines/accept"?(n.sendJson(e,202,await n.decideLine(i.roadmapId,o,"accept",await n.readJson(t))),!0):t.method==="POST"&&s==="/lines/reject"?(n.sendJson(e,202,await n.decideLine(i.roadmapId,o,"reject",await n.readJson(t))),!0):!1}async function Uae(t,e){return t==="/api/artifact-actions"||t.startsWith("/api/artifact-actions/")||t==="/api/action-runs"||t.startsWith("/api/action-runs/")?e.artifactActions(t):!1}function $ae(t){let e="/api/roadmaps/";if(!t.startsWith(e))return;let r=t.slice(e.length),[n,...i]=r.split("/");if(n)return{roadmapId:decodeURIComponent(n),suffix:i.length>0?`/${i.join("/")}`:""}}function Fae(t){if(!t.startsWith("/moves/"))return;let e=t.slice(1).split("/");if(e.length<4||e[0]!=="moves"||e[2]!=="files")return;let r=decodeURIComponent(e[1]??"");if(e[3]==="tree")return{action:"tree",moveId:r};if(e[3]==="blob")return{action:"blob",moveId:r};if(e[3]==="diff")return{action:"diff",moveId:r}}function Us(){return{"access-control-allow-methods":"GET,HEAD,POST,PUT,DELETE,OPTIONS","access-control-allow-headers":"authorization,content-type,x-hunsu-bridge-token,x-hunsu-bridge-control-token","access-control-allow-private-network":"true","access-control-max-age":"600",vary:"origin, access-control-request-method, access-control-request-headers, access-control-request-private-network"}}function fM(){let t=new WeakMap;return{set(e,r){t.set(e,r)},get(e){return t.get(e)??Us()}}}import{randomBytes as jae,timingSafeEqual as qae}from"node:crypto";var Wae=300*1e3;function Tb(t){if(!t.controlToken.trim())throw new Error("Control token is required before pairing can be enabled.");let e=t.ttlMs??Wae;if(!Number.isFinite(e)||e<=0)throw new Error("Pairing TTL must be positive.");let r=t.now??Date.now,n=t.randomBytes??jae,i;if(t.initialPairing){let a=t.initialPairing.credential.trim();if(!a||ZA(t.controlToken,a))throw new Error("Initial pairing credential must be non-empty and distinct from the control token.");let c=pM(t.initialPairing.browserUrl);if(!c)throw new Error("Initial pairing browser URL is invalid.");let u=`pair_${Buffer.from(n(12)).toString("base64url")}`;c.searchParams.set("hunsuBridgeToken",a),t.initialPairing.workspaceId&&c.searchParams.set("workspace",t.initialPairing.workspaceId),i={pairingId:u,credential:a,pairingUrl:c.toString(),workspaceId:t.initialPairing.workspaceId??null,expiresAtMs:r()+e,browserOpened:!1,consumed:!1,revoked:!1}}let o=a=>({pairingId:a.pairingId,expiresAt:new Date(a.expiresAtMs).toISOString(),workspaceId:a.workspaceId,browserOpened:a.browserOpened,status:a.revoked?"revoked":r()>=a.expiresAtMs?"expired":a.consumed?"consumed":"active"}),s=a=>!i||!ZA(i.credential,a)?oe({code:"PAIRING_CREDENTIAL_INVALID",message:"Pairing credential is invalid."}):i.revoked?oe({code:"PAIRING_CREDENTIAL_REVOKED",message:"Pairing credential has been revoked."}):r()>=i.expiresAtMs?oe({code:"PAIRING_CREDENTIAL_EXPIRED",message:"Pairing credential has expired."}):S({pairingId:i.pairingId,workspaceId:i.workspaceId,expiresAt:new Date(i.expiresAtMs).toISOString()});return{rotate(a){let c=pM(a.browserUrl);if(!c)return oe({code:"PAIRING_ROTATION_FAILED",message:"Browser URL is invalid."});let u=`hunsu_bridge_pair_${Buffer.from(n(32)).toString("base64url")}`;if(u===t.controlToken)return oe({code:"PAIRING_ROTATION_FAILED",message:"Pairing credential generation failed."});let d=`pair_${Buffer.from(n(12)).toString("base64url")}`;return c.searchParams.set("hunsuBridgeToken",u),a.workspaceId&&c.searchParams.set("workspace",a.workspaceId),i&&(i.revoked=!0),i={pairingId:d,credential:u,pairingUrl:c.toString(),workspaceId:a.workspaceId??null,expiresAtMs:r()+e,browserOpened:!1,consumed:!1,revoked:!1},S({safe:o(i),internal:{pairingId:d,credential:u,pairingUrl:i.pairingUrl}})},consume(a){let c=s(a);return c.ok&&i&&(i.consumed=!0),c},validate(a){return a?!i||!ZA(i.credential,a)?{valid:!1,reason:"invalid"}:i.revoked?{valid:!1,reason:"revoked"}:r()>=i.expiresAtMs?{valid:!1,reason:"expired"}:{valid:!0}:{valid:!1,reason:"missing"}},revoke(a){return!i||a!==void 0&&i.pairingId!==a?!1:(i.revoked=!0,!0)},markBrowserOpened(a){return!i||i.pairingId!==a||i.revoked||r()>=i.expiresAtMs?!1:(i.browserOpened=!0,!0)},getSafeMetadata(){return i?o(i):null},getPairingUrl(a){if(!i||i.pairingId!==a)return oe({code:"PAIRING_CREDENTIAL_INVALID",message:"Pairing credential is invalid."});let c=s(i.credential);return c.ok?S(i.pairingUrl):c}}}function pM(t){try{let e=new URL(t);return e.protocol==="http:"||e.protocol==="https:"?e:void 0}catch{return}}function ZA(t,e){let r=Buffer.from(t),n=Buffer.from(e);return r.length===n.length&&qae(r,n)}var Bb="hunsu.bridge.cli-result.v1",Vae="Start Hunsu Bridge with `hunsu-bridge service start`.",Fe=class extends Error{code;recovery;cause;constructor(e,r,n={}){super(r),this.name="BridgeError",this.code=e,this.recovery=n.recovery,this.cause=n.cause}};function pr(t,e,r="OK"){return{schema:Bb,ok:!0,code:r,message:t,...e===void 0?{}:{value:e}}}function fr(t,e,r){return{schema:Bb,ok:!1,code:t,message:e,...r?{recovery:r}:{}}}function mM(){return fr("BRIDGE_NOT_RUNNING",Vae)}function ja(t){return t instanceof Fe?fr(t.code,t.message,t.recovery):t instanceof Hs?fr(t.code,t.message):fr("BRIDGE_CONTROL_UNAVAILABLE","Hunsu Bridge command failed unexpectedly.")}import{unlink as Gae}from"node:fs/promises";import{isAbsolute as zae}from"node:path";var Fg="hunsu.bridge.runtime.v1";function Db(t){let e=async()=>{let r=await ai(t.runtimeFile);return r===void 0?void 0:hM(t.runtimeFile,r)};return{read:e,async write(r){await wn(t.runtimeFile,hM(t.runtimeFile,r))},async clear(r){if(r!==void 0){let n=await e();if(n===void 0||n.instanceId!==r)return!1}try{return await Gae(t.runtimeFile),!0}catch(n){if(er(n)&&n.code==="ENOENT")return!1;throw n}}}}function hM(t,e){if(!Yae(e)||e.schema!==Fg)throw Ue(t,`expected schema ${Fg}`);if(!Number.isInteger(e.daemonPid)||e.daemonPid<=0)throw Ue(t,"daemonPid must be a positive integer");let r=e.serviceManager;if(r!=="development"&&r!=="windows-task-scheduler"&&r!=="macos-launch-agent"&&r!=="linux-systemd-user")throw Ue(t,"serviceManager is invalid");return{schema:Fg,instanceId:np(t,"instanceId",e.instanceId),daemonPid:e.daemonPid,version:np(t,"version",e.version),protocolVersion:Jae(t,e.protocolVersion),deploymentProfile:Kae(t,e.deploymentProfile),startedAt:np(t,"startedAt",e.startedAt),endpoint:np(t,"endpoint",e.endpoint),runtimePath:Xae(t,"runtimePath",e.runtimePath),serviceManager:r,lastHealthyAt:np(t,"lastHealthyAt",e.lastHealthyAt)}}function Kae(t,e){if(e===void 0)return"production";if(!Pn(e))throw Ue(t,"deploymentProfile must be production or preview");return e}function Jae(t,e){if(e!=="local-bridge-v1")throw Ue(t,"protocolVersion must be local-bridge-v1");return e}function np(t,e,r){if(typeof r!="string"||r.trim()==="")throw Ue(t,`${e} must be non-empty`);return r}function Xae(t,e,r){let n=np(t,e,r);if(!zae(n)||/[\u0000-\u001f\u007f]/u.test(n))throw Ue(t,`${e} must be an absolute path without control characters`);return n}function Yae(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function yM(t){let e={...t.env??{}},r=new Set,n=o=>new Zd({env:()=>e,settings:Su(o.provider)}),i=o=>{for(let s of r)try{s(gM(o))}catch{}};return{async list(){return[{providerId:"codex",label:"Codex",configured:(await t.configStore.read()).provider.kind==="codex"}]},async configuration(){return gM((await t.configStore.read()).provider)},async status(o=!1){let s=await t.configStore.read();return n(s).status({force:o,env:e})},async setCodex(o){let a={...await t.configStore.read(),provider:{kind:"codex",...o.binaryPath?.trim()?{binaryPath:o.binaryPath.trim()}:{},...o.home?.trim()?{home:o.home.trim()}:{},...o.appServerCommand?.trim()?{appServerCommand:o.appServerCommand.trim()}:{},...o.appServerArgs?.trim()?{appServerArgs:o.appServerArgs.trim()}:{},...o.installChannel?{installChannel:o.installChannel}:{},...o.authenticationPreference?{authenticationPreference:o.authenticationPreference}:{}}},c=await n(a).status({force:!0,env:e});if(!c.installed)throw new Fe("PROVIDER_BINARY_NOT_FOUND",c.safeMessage??"Codex was not found by Hunsu Bridge.");if(!c.configured)throw new Fe("PROVIDER_CHECK_FAILED",c.safeMessage??"Codex could not initialize its app-server.");let u=await t.configStore.update(d=>({...d,provider:a.provider}));return i(u.provider),c},async resetCodex(){let o=await t.configStore.update(s=>({...s,provider:{kind:"unconfigured"}}));return i(o.provider),n(o).status({force:!0,env:e})},onConfigurationChange(o){return r.add(o),()=>r.delete(o)}}}function vM(t){let e=async()=>new Zd({env:t.env,settings:Su(await t.service.configuration())}),r={providerId:"codex",kind:"codex",label:"Codex",metadata:()=>bb,async readConfig(){return wb(Su(await t.service.configuration()))},async validateConfig(i){return(await e()).validateConfig(i)},async saveConfig(i){let o=Su(await t.service.configuration());return t.service.setCodex(eC(Qd(o,i)))},async deleteConfig(i){if(!i?.length)return t.service.resetCodex();let o=Su(await t.service.configuration()),s=Qd(o,i.map(a=>({key:a,value:"",isSet:!1,isSecret:!1})));return t.service.setCodex(eC(s))},status:i=>t.service.status(i?.force),async installPlan(){return(await e()).installPlan()},async install(i){return(await e()).install(i)},async login(i){return(await e()).login(i)},recheck:()=>t.service.status(!0),async configure(i){if(i.authMethod==="api_key")return(await e()).configure(i);let o=Su(await t.service.configuration()),s=i.binaryPath?.trim()||i.selectBinaryPath?.trim(),a={...o,...s?{binaryPath:s}:{}};return i.clearBinaryPath&&delete a.binaryPath,t.service.setCodex(eC(a))},effectiveEnv:i=>({...t.env(),...i??{}})},n=t.fallback.list().map(i=>i.providerId==="codex"?r:i);return n.some(i=>i.providerId==="codex")||n.unshift(r),{list:()=>[...n],get:i=>i==="codex"?r:n.find(o=>o.providerId===i),current:()=>r,async setCurrent(i){i!=="codex"&&await t.fallback.setCurrent(i)}}}function Su(t){return t.kind==="codex"?zo({binaryPath:t.binaryPath,codexHome:t.home,appServerCommand:t.appServerCommand,appServerArgs:t.appServerArgs,installChannel:t.installChannel,authenticationPreference:t.authenticationPreference}):{}}function eC(t){return{...t.binaryPath?{binaryPath:t.binaryPath}:{},...t.codexHome?{home:t.codexHome}:{},...t.appServerCommand?{appServerCommand:t.appServerCommand}:{},...t.appServerArgs?{appServerArgs:t.appServerArgs}:{},...t.installChannel?{installChannel:t.installChannel}:{},...t.authenticationPreference?{authenticationPreference:t.authenticationPreference}:{}}}function gM(t){return{...t}}var Qae="/studio/settings/model-aliases",Zae="1970-01-01T00:00:00.000Z",jg={primary:"PrimaryModel",fast:"FastModel",reviewer:"ReviewerModel",cheap:"CheapModel"};function SM(t=Zae){return[Nb(jg.primary,"Primary Model",{kind:"direct",provider:{providerId:"codex",model:"gpt-5.5-thinking",reasoningEffort:"high",serviceTier:"default"}},t),Nb(jg.fast,"Fast Model",{kind:"direct",provider:{providerId:"codex",model:"gpt-5.5",reasoningEffort:"medium",serviceTier:"fast"}},t),Nb(jg.reviewer,"Reviewer Model",{kind:"direct",provider:{providerId:"codex",model:"gpt-5.5-thinking",reasoningEffort:"xhigh",serviceTier:"default"}},t),Nb(jg.cheap,"Cheap Model",{kind:"direct",provider:{providerId:"codex",model:"gpt-5.5",reasoningEffort:"low",serviceTier:"default"}},t)]}function ece(t,e="local"){let r=Wa(e.trim()||"local","providerInventory.backendId");return t.modelInventory.state==="unavailable"?oe({code:"PROVIDER_INVENTORY_UNAVAILABLE",backendId:r,providerId:t.providerId,message:t.modelInventory.message}):S({providerId:t.providerId,label:Wa(t.label,"providerInventory.label"),ready:t.ready,authState:t.auth.state,models:t.modelInventory.models})}function rC(){return{backendId:Wa("local","providerInventory.backendId"),providers:[{providerId:"codex",label:Wa("Codex","providerInventory.label"),ready:!0,authState:"authenticated",models:Ng()}]}}function nC(t){let e=t.backendId?.trim(),r=e?t.connections?.find(s=>s.backendId===e):t.connections?.find(s=>s.mode==="local");if(e&&!r)return $s(e);let n=r?.backendId??"local",i=r?.provider??t.provider;if(!i)return $s(n);let o=ece(i,n);return o.ok?S({backendId:Wa(n,"providerInventory.backendId"),providers:[o.value]}):o}function $s(t,e=`Backend ${t.trim()||"local"} is not available on this Bridge.`){return oe({code:"BACKEND_UNAVAILABLE",backendId:Wa(t.trim()||"local","providerInventory.backendId"),message:e})}function bM(t,e,r){return oe({code:"PROVIDER_INVENTORY_UNAVAILABLE",backendId:Wa(t.trim()||"local","providerInventory.backendId"),providerId:e,message:r})}function nl(t){let e=t.backendId?.trim()||"local",r=t.selection??{kind:"alias",aliasId:jg.primary},n=t.aliases===void 0?SM():t.aliases;if(r.kind==="direct")return tC(r,t.inventories,e);let i=n.find(s=>s.aliasId===r.aliasId);if(!i)return{ok:!1,backendId:e,error:qa("MODEL_ALIAS_NOT_FOUND",`Model alias ${r.aliasId} does not exist.`,{aliasId:r.aliasId,actions:[Ob()]})};let o=t.overrides?.find(s=>s.aliasId===i.aliasId&&s.backendId===e);return tC(o?.selection??i.selection,t.inventories,e)}function tC(t,e,r="local"){let n=r.trim()||"local",i=t.provider,o=e.find(l=>l.providerId===i.providerId);if(!o)return{ok:!1,backendId:n,error:qa("PROVIDER_NOT_READY",`Provider ${i.providerId} is not available for model selection.`,{providerId:i.providerId,actions:[xM(i.providerId)]})};if(o.authState==="not_authenticated"||o.authState==="expired"||o.authState==="invalid")return{ok:!1,backendId:n,error:qa("PROVIDER_LOGIN_REQUIRED",`${o.label} login is required before this model can run.`,{providerId:i.providerId,actions:[tce(i.providerId,o.label)]})};if(!o.ready)return{ok:!1,backendId:n,error:qa("PROVIDER_NOT_READY",`${o.label} is not ready for Execute.`,{providerId:i.providerId,actions:[xM(i.providerId)]})};let s=o.models.find(l=>l.model===i.model);if(!s)return i.experimental===!0?{ok:!0,backendId:n,selection:t,resolved:i,provider:{providerId:i.providerId,ready:o.ready},model:{providerId:i.providerId,model:i.model,experimental:!0}}:{ok:!1,backendId:n,error:qa("MODEL_UNSUPPORTED",`${o.label} does not advertise model ${i.model}.`,{providerId:i.providerId,model:i.model,actions:[Ob()]})};let a=s.capabilities.reasoningEfforts??[],c=i.reasoningEffort??s.defaultConfig?.reasoningEffort;if(c&&a.length>0&&!a.includes(c))return{ok:!1,backendId:n,error:qa("REASONING_UNSUPPORTED",`${s.label} does not support ${c} reasoning.`,{providerId:i.providerId,model:i.model,actions:[Ob()]})};let u=s.capabilities.serviceTiers??[],d=i.serviceTier??s.defaultConfig?.serviceTier;return d&&u.length>0&&!u.includes(d)?{ok:!1,backendId:n,error:qa("SERVICE_TIER_UNSUPPORTED",`${s.label} does not support the ${d} service tier.`,{providerId:i.providerId,model:i.model,actions:[Ob()]})}:{ok:!0,backendId:n,selection:t,resolved:i,provider:{providerId:i.providerId,ready:o.ready},model:s}}function il(t){return{ok:!1,backendId:t.backendId,error:t.code==="BACKEND_UNAVAILABLE"?qa(t.code,t.message,{actions:[nce(t.backendId)]}):qa(t.code,t.message,{providerId:t.providerId,actions:[rce(t.providerId)]})}}function bu(t,e){if(t.error==="BACKEND_UNAVAILABLE"){let r=e.startsWith("remote:")||e==="remote";return{area:"connection",backendId:e,error:r?"REMOTE_NOT_CONNECTED":"BRIDGE_NOT_CONNECTED",message:t.message,actions:t.actions}}return{area:"model",backendId:e,providerId:t.providerId,aliasId:t.aliasId,model:t.model,error:t.error,message:t.message,actions:t.actions}}function Nb(t,e,r,n){return{aliasId:Wa(t,"modelAlias.aliasId"),displayName:Wa(e,"modelAlias.displayName"),selection:r,scope:{kind:"user"},createdAt:n,updatedAt:n}}function qa(t,e,r){return{error:t,message:e,...r}}function xM(t){return{type:"open_provider_setup",label:"Run hunsu-bridge provider status",href:"/studio/setup?next=%2Fstudio",providerId:t}}function tce(t,e){return{type:"login_provider",label:`Check ${e} with hunsu-bridge provider check ${t}`,href:"/studio/setup?next=%2Fstudio",providerId:t}}function rce(t){return{type:"recheck_provider",label:`Run hunsu-bridge provider check ${t}`,href:"/studio/setup?next=%2Fstudio",providerId:t}}function nce(t){return{type:"open_connection",label:t.startsWith("remote:")||t==="remote"?"Run hunsu-bridge remote status":"Run hunsu-bridge status",href:"/studio/setup?next=%2Fstudio"}}function Ob(){return{type:"edit_model_alias",label:"Edit Model Alias",href:Qae}}function Wa(t,e){return Zt(Ie(t,e))}var Kn="/studio/setup?next=%2Fstudio",wM="/studio";function Mb(t){if(!t.installed){let e=t.recommendedAction==="select_binary"?{type:"open_provider_setup",label:`Run hunsu-bridge provider set ${t.providerId} --binary <path>`,href:Kn,providerId:t.providerId}:{type:"install_provider",label:`Install ${t.label}, then run hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId};return ip(t,"PROVIDER_MISSING",t.safeMessage??`${t.label} is not installed or could not be found.`,[e])}if(!t.configured)return ip(t,"PROVIDER_UNAVAILABLE",`${t.label} is installed but unavailable.`,[{type:"recheck_provider",label:`Run hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId}]);if(t.auth.state==="not_authenticated")return ip(t,"PROVIDER_LOGIN_REQUIRED",`${t.label} login is required before Execute can start.`,[{type:"login_provider",label:`Run hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId}]);if(t.auth.state==="expired"||t.auth.state==="invalid")return ip(t,"PROVIDER_AUTH_EXPIRED",`${t.label} authentication needs to be refreshed.`,[{type:"login_provider",label:`Run hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId},{type:"recheck_provider",label:`Recheck with hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId}]);if(t.usage?.rateLimited)return ip(t,"PROVIDER_RATE_LIMITED",`${t.label} is temporarily rate limited.`,[{type:"recheck_provider",label:`Run hunsu-bridge provider check ${t.providerId}`,href:Kn,providerId:t.providerId}]);if(!t.capabilities.canExecute)return ip(t,"PROVIDER_CAPABILITY_MISSING",`${t.label} cannot execute Hunsu workspaces.`,[{type:"open_provider_setup",label:"Run hunsu-bridge provider status",href:Kn}])}function iC(t){if(!t)return qg(void 0,"WORKSPACE_MISSING","Choose an active Workspace before starting Execute.");if(t.lifecycle==="inactive")return qg(t.workspaceId,"WORKSPACE_INACTIVE","This Workspace is inactive. Activate it in Hunsu Bridge before starting Execute.");if(t.lifecycle==="missing")return qg(t.workspaceId,"WORKSPACE_MISSING","This Workspace path is missing. Repair or remove it in Hunsu Bridge.");if(t.lifecycle==="needs_upgrade")return qg(t.workspaceId,"WORKSPACE_NEEDS_UPGRADE","This Workspace needs an upgrade before Execute can start.");if(t.lifecycle==="error"||t.health==="error"||t.health==="unknown")return qg(t.workspaceId,"WORKSPACE_UNHEALTHY","This Workspace needs attention before Execute can start.")}function EM(t,e){return iC(t?hu(t,{provider:e}):void 0)}function ice(t,e,r){let n=wu(t),i=Hb(e.connections,n),o=i?.provider??r.provider,s=CM(t.workspace?.workspaceId,r.workspace?.workspaceId),a=i?.workspaces.find(u=>u.workspaceId===s||u.roadmapId===s),c=i?.mode==="remote"?a:a??r.workspace;return iC(c)??Mb(o)}function oC(t,e){let r=t.aliases;if(!t.modelSelection&&!r?.length)return;let n=sC(t,e);if(!n.ok){let s=il(n.error);return bu(s.error,s.backendId)}let i=n.value,o=nl({selection:t.modelSelection,aliases:r,backendId:i.backendId,inventories:i.providers});return o.ok?void 0:bu(o.error,o.backendId)}function sC(t,e){let r=wu(t),n=Hb(e.connections,r);if(r.backendId&&!n)return $s(r.backendId,`Backend ${r.backendId} is not connected to this Bridge.`);if(r.remoteRequested&&!n)return $s("remote","No Remote Bridge backend is connected.");let i=e.connections.find(s=>s.mode==="local"),o=n??i;return nC({connections:e.connections,backendId:r.backendId??o?.backendId??"local"})}async function aC(t,e,r){let n=uC(t,e);if(n)return n;let i=wu(t),o=Hb(e.connections,i)??(i.remoteRequested?void 0:e.connections.find(u=>u.mode==="local")),s=o?Mb(o.provider):void 0;if(s)return s;let a=await r.providerInventory();if(!a.ok){let u=il(a.error);return bu(u.error,u.backendId)}let c=new Set;for(let u of await r.modelSelections()){if(!u.selection&&!u.aliases?.length)continue;let d=JSON.stringify(u);if(c.has(d))continue;c.add(d);let l=nl({selection:u.selection,aliases:u.aliases,backendId:a.value.backendId,inventories:a.value.providers});if(!l.ok)return bu(l.error,l.backendId)}}function kM(t,e){return t}function Lb(t){return!!(t.backendId?.trim()||t.connectionMode||t.workspace?.backendId?.trim()||t.workspace?.connectionMode)}async function cC(t,e,r,n){let i=await e.current().status({env:r,force:!0});return n?ice(n.body,n.status,{provider:i,workspace:t?hu(t,{provider:i}):void 0}):EM(t,i)??Mb(i)}async function RM(t){let e=IM(t.repositoryPath),r=t.roadmaps.find(n=>IM(n.repositoryPath)===e);return cC(r,t.registry,t.env,t.selected)}function wu(t){let e=CM(t.backendId,t.workspace?.backendId),r=e?oce(e)?"remote":"local":t.connectionMode??t.workspace?.connectionMode;return{backendId:e,connectionMode:r,remoteRequested:r==="remote"}}function uC(t,e){let r=wu(t),n=Hb(e.connections,r);return AM({backend:n,backendId:r.backendId,remoteRequested:r.remoteRequested,accountSignedIn:e.account.signedIn,localBridgeConnected:e.connections.some(i=>i.mode==="local"&&i.connection.state==="connected")})}function AM(t){if(t.localBridgeConnected===!1&&!t.remoteRequested)return ol(t.backendId??"local","BRIDGE_NOT_CONNECTED","Hunsu Bridge is not connected.",[{type:"open_connection",label:"Run hunsu-bridge status",href:Kn}]);if(t.remoteRequested&&t.accountSignedIn===!1)return ol(t.backendId,"REMOTE_LOGIN_REQUIRED","Sign in to Hunsu before using Remote Bridge.",[{type:"open_connection",label:"Run hunsu-bridge login",href:Kn}]);if(!t.backend)return t.remoteRequested?ol(t.backendId,"REMOTE_NOT_CONNECTED","Remote Bridge is not connected.",[{type:"open_connection",label:"Run hunsu-bridge remote status",href:Kn}]):t.backendId?ol(t.backendId,"BRIDGE_NOT_CONNECTED",`Backend ${t.backendId} is not connected to this Bridge.`,[{type:"open_connection",label:"Run hunsu-bridge status",href:Kn}]):void 0;if(t.backend.connection.state!=="connected")return t.backend.connection.state==="login_required"?ol(t.backend.backendId,"REMOTE_LOGIN_REQUIRED","Sign in to Hunsu before using Remote Bridge.",[{type:"open_connection",label:"Run hunsu-bridge login",href:Kn}]):t.backend.mode==="remote"?ol(t.backend.backendId,"REMOTE_NOT_CONNECTED","Remote Bridge is offline or unavailable.",[{type:"open_connection",label:"Run hunsu-bridge remote status",href:Kn}]):ol(t.backend.backendId,"BRIDGE_NOT_CONNECTED","Hunsu Bridge is not connected.",[{type:"open_connection",label:"Run hunsu-bridge status",href:Kn}])}function Hb(t,e){if(e.backendId)return t.find(r=>r.backendId===e.backendId);if(e.connectionMode==="local")return t.find(r=>r.mode==="local");if(e.remoteRequested)return t.find(r=>r.mode==="remote"&&r.connection.state==="connected")??t.find(r=>r.mode==="remote")}function CM(...t){return t.find(e=>e?.trim())?.trim()}function oce(t){return t==="remote"||t.startsWith("remote:")}function IM(t){return t.replace(/\\/g,"/").replace(/\/+$/,"")}function ip(t,e,r,n){return{area:"provider",providerId:t.providerId,error:e,message:r,actions:[{type:"open_provider_setup",label:"Run hunsu-bridge provider status",href:Kn,providerId:t.providerId},...n]}}function ol(t,e,r,n){return{area:"connection",backendId:t,error:e,message:r,actions:n}}function qg(t,e,r){return{area:"workspace",workspaceId:t,error:e,message:r,actions:[{type:"open_workspaces",label:"Run hunsu-bridge workspace list",href:wM},...t?[{type:"activate_workspace",label:`Run hunsu-bridge workspace inspect ${t}`,href:wM,workspaceId:t}]:[]]}}async function PM(t,e,r,n){return TM(t,e,r,n,"/api")}async function _M(t,e,r,n){return TM(t,e,r,n,"")}async function TM(t,e,r,n,i){if(t.method==="GET"&&(r===`${i}/runs`||r===`${i}/executes`)){let o=n.runSummaries();return n.sendJson(e,200,{runs:o,executes:o.map(n.executeView)}),!0}if(t.method==="GET"&&(r===`${i}/runs/events`||r===`${i}/executes/events`))return n.streamLiveEvents(),!0;if(t.method==="POST"&&(r===`${i}/runs/start`||r===`${i}/executes/start`)){let o=await n.readJson(t),s=await sce(o,n);return s?(n.sendJson(e,409,s),!0):(n.sendJson(e,202,await n.startRun(o)),!0)}if(t.method==="POST"&&(r===`${i}/runs/pause`||r===`${i}/executes/pause`))return n.sendJson(e,202,await n.pauseRun(await n.readJson(t))),!0;if(t.method==="POST"&&(r===`${i}/runs/resume`||r===`${i}/executes/resume`)){let o=await n.resumeRun(await n.readJson(t));return o.ok?(n.sendJson(e,202,o.value),!0):(n.sendJson(e,409,o.error),!0)}return t.method==="POST"&&(r===`${i}/runs/stop`||r===`${i}/executes/stop`)?(n.sendJson(e,202,await n.stopRun(await n.readJson(t))),!0):t.method==="POST"&&(r===`${i}/runs/complete-move`||r===`${i}/executes/complete-move`)?(n.sendJson(e,202,await n.completeMove(await n.readJson(t))),!0):ace(t,e,r,n,i)}async function sce(t,e){let r=kM(t,{localBridgeTokenPresent:e.localBridgeTokenPresent()}),n=Lb(r)||r.modelSelection||r.aliases?.length||e.modelPreflight?await e.bridgeStatus():void 0,i=n?uC(r,n):void 0;if(i)return i;let o=n?oC(r,n):void 0;if(o)return o;let s=e.modelPreflight?await e.modelPreflight(r):void 0;if(s)return s;if(e.roadmapId){let a=e.managedRoadmaps().find(c=>c.roadmapId===e.roadmapId);return cC(a,e.providerRegistry,e.env,n?{body:r,status:n}:void 0)}return RM({repositoryPath:e.repositoryPath,registry:e.providerRegistry,roadmaps:e.managedRoadmaps(),env:e.env,selected:n?{body:r,status:n}:void 0})}function ace(t,e,r,n,i){if(t.method==="GET"&&r===`${i}/agent-sessions`)return n.sendJson(e,200,{sessions:n.agentSessions()}),!0;if(t.method==="GET"&&r===`${i}/agent-sessions/events`)return n.streamAgentSessionEvents(),!0;if(t.method==="GET"&&r.startsWith(`${i}/agent-sessions/`)){let o=cce(r.slice(`${i}/agent-sessions`.length));if(o?.action==="show"){let s=n.findAgentSession(o.sessionId);return n.sendJson(e,s?200:404,s?{session:s}:{error:`Unknown AgentSession: ${o.sessionId}`}),!0}if(o?.action==="events")return n.streamAgentSessionEvents(o.sessionId),!0}return!1}function cce(t){if(!t.startsWith("/"))return;if(t.endsWith("/events")){let r=t.slice(1,-7);return r?{action:"events",sessionId:decodeURIComponent(r)}:void 0}let e=t.slice(1);return e?{action:"show",sessionId:decodeURIComponent(e)}:void 0}async function BM(t,e,r,n,i){return t.method==="GET"&&r==="/api/filesystem/roots"?(i.sendJson(e,200,{roots:i.browseRootEntries(i.cwd)}),!0):t.method==="GET"&&r==="/api/filesystem/browse"?(i.sendJson(e,200,i.browse(n.searchParams.get("path")??void 0,{cwd:i.cwd,rootId:n.searchParams.get("rootId")??void 0})),!0):t.method==="POST"&&r==="/api/filesystem/grants"?(i.sendJson(e,201,i.createGrant(await i.readJson(t),{cwd:i.cwd})),!0):!1}function DM(t){return{async readEndpointConfig(){let{host:e,port:r}=await Jo(t).read();return{host:e,port:r}},async readCredential(){let e=await vu(t).read();return e?{controlToken:e.controlToken}:void 0}}}var Iu="X-Hunsu-Bridge-Control-Token";function lC(t={}){let e=t.paths??Ko(t),r=t.fetchImpl??fetch,n=t.timeoutMs??2e3,i=t.stateReader??DM(e),o=async()=>{if(t.endpoint)return uce(t.endpoint);let s=await i.readEndpointConfig();return Wg(s.host,s.port)};return{endpoint:o,async probe(){return(await dC(r,await o(),n)).probe},async health(){try{return(await dC(r,await o(),n)).health}catch{return}},async request(s,a={}){let c;try{c=await o()}catch(v){return ja(v)}let u=a.timeoutMs??n,d=await dC(r,c,u);if(d.probe.state==="offline")return mM();if(d.probe.state==="foreign-listener")return fr("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge endpoint is in use by another service.");if(d.probe.state==="hunsu-unhealthy")return fr("BRIDGE_CONTROL_UNAVAILABLE",d.probe.status===void 0?"Hunsu Bridge health is unavailable.":`Hunsu Bridge health is unavailable (HTTP ${d.probe.status}).`);let l;try{l=await i.readCredential()}catch(v){return ja(v)}if(!l?.controlToken)return fr("BRIDGE_CONTROL_UNAUTHORIZED","Hunsu Bridge control credentials are missing.");let f;try{f=dce(s)}catch(v){return ja(v)}let p;try{p=await r(new URL(f,c),{method:a.method??"GET",headers:{[Iu]:l.controlToken,...a.body===void 0?{}:{"content-type":"application/json"}},...a.body===void 0?{}:{body:JSON.stringify(a.body)},redirect:"error",signal:AbortSignal.timeout(u)})}catch{return fr("BRIDGE_CONTROL_UNAVAILABLE","Hunsu Bridge was healthy, but the authenticated control request did not complete.")}if(p.status===401||p.status===403)return fr("BRIDGE_CONTROL_UNAUTHORIZED","Hunsu Bridge rejected the local control credential.");let g=await lce(p);return g||fr("BRIDGE_CONTROL_UNAVAILABLE",`Hunsu Bridge returned an invalid control response (HTTP ${p.status}).`)}}}async function dC(t,e,r){let n;try{n=await t(new URL("/health",e),{method:"GET",redirect:"error",signal:AbortSignal.timeout(r)})}catch{return{probe:{state:"offline"}}}let i=await n.json().catch(()=>{});return n.ok&&i?.ok===!0&&i.service==="hunsu-bridge"&&typeof i.version=="string"&&i.protocolVersion==="local-bridge-v1"&&Pn(i.deploymentProfile)?{probe:{state:"hunsu-healthy"},health:i}:i?.service==="hunsu-bridge"?{probe:{state:"hunsu-unhealthy",status:n.status}}:{probe:{state:"foreign-listener"}}}function Wg(t,e){if(!NM(t))throw new Fe("BRIDGE_STATE_INVALID","Bridge control endpoint configuration must use a loopback host.");return`http://${t.includes(":")&&!t.startsWith("[")?`[${t}]`:t}:${e}`}function uce(t){let e;try{e=new URL(t)}catch(r){throw new Fe("BRIDGE_STATE_INVALID","Bridge control endpoint configuration is invalid.",{cause:r})}if(e.protocol!=="http:"&&e.protocol!=="https:")throw new Fe("BRIDGE_STATE_INVALID","Bridge control endpoint configuration must use HTTP or HTTPS.");if(!NM(e.hostname))throw new Fe("BRIDGE_STATE_INVALID","Bridge control endpoint configuration must use a loopback host.");if(e.username||e.password)throw new Fe("BRIDGE_STATE_INVALID","Bridge control endpoint configuration must not contain credentials.");return e.pathname="/",e.search="",e.hash="",e.toString().replace(/\/$/,"")}function NM(t){return t==="localhost"||t==="127.0.0.1"||t==="::1"||t==="[::1]"}function dce(t){if(!t.startsWith("/v1/control"))throw new Fe("BRIDGE_CONTROL_UNAVAILABLE","The Bridge control client may call only control API routes.");return t}async function lce(t){if(!(t.headers.get("content-type")??"").toLowerCase().includes("application/json"))return;let r=await t.json().catch(()=>{});if(!(!r||r.schema!==Bb||typeof r.ok!="boolean"||typeof r.code!="string"||typeof r.message!="string"))return r}var bL=Sce(fce),bce=Xn(Ai(xce(import.meta.url)),"../../.."),OM="# HUNSU-MANAGED-CODEX-ENVIRONMENT v1",qC=".hunsu-materialized-skill",sp=".hunsu-prev",ul=".hunsu-request",Qg=["destinations.json","harness.json","executors.json","resources.json","artifact-actions.json"],wce=Qg.map(t=>`${sp}/${t}`),Vg=Qg.map(t=>`${ul}/${t}`),Ice=[...wce,...Vg],wL="check-command",Ece="Hello World Web Project",kce=["Create a minimal Hello World web project from this empty checkout.","Add the smallest practical web app files, package scripts, and run instructions needed to launch it locally through an Artifact Action from a clean checkout.","Keep the implementation simple and verify the project can be started or built with a concrete command."].join(" "),Rce=[{id:"destination_001",title:"Create a runnable Hello World web app",acceptanceCriteria:["The repository contains a minimal runnable web app.","The app renders Hello World or an equivalent visible greeting in a browser.","A documented package script starts or builds the hosted action surface."],constraints:["Prefer the smallest static or Vite-style implementation that is easy to inspect.","Do not add unrelated product features."],priority:100}],Ace=["Act as Faker, a pragmatic engineer.","Build the smallest working web project that satisfies the goal, prefer simple conventional files and scripts, and verify the result with concrete commands."].join(" "),Cce=["Act as Keria, a careful reviewer.","Verify the completed web project against the goal with concrete evidence, and call out any missing run or build proof."].join(" "),MM="Plan the smallest ExecutionPlan needed for the available engineer Member to create and verify the Hello World web project.",jb=`
212
- ...[truncated]`,Fs=8*1024,or=128*1024,js=32*1024,Pce=100,_ce=256*1024,IL=50,EL=256*1024,Tce=512*1024,Bce=256*1024,Dce=1024*1024,Nce=250,Oce=300,Mce=900*1e3,bC=256*1024,wC=new WeakMap,Xb=fM(),Lce="hunsuBridgeToken",IC="x-hunsu-bridge-token",Hce="x-hunsu-bridge-control-token",Uce=900*1e3,$ce=["http://127.0.0.1:19688","http://localhost:19688"];async function WC(t,e){let r=typeof t=="function"?await t(e):t,n=r.ok?r.value.backendId:r.error.backendId,i=wu(e);return i.backendId&&n!==i.backendId?$s(i.backendId,`Provider inventory backend ${n} does not match selected backend ${i.backendId}.`):!i.backendId&&i.connectionMode==="remote"&&n==="local"?$s("remote","A remote backend selection requires a remote provider inventory."):!i.backendId&&i.connectionMode!=="remote"&&n!=="local"?$s("local",`Provider inventory backend ${n} does not match the default local backend.`):r}function Fce(t=[]){return{events:t,runs:{},agentSessions:{},hunsuDrafts:{},hunsuDraftArtifacts:{},filesystemCapabilities:{},liveSubscribers:new Set,agentSessionSubscribers:new Set}}function kL(t,e){let r=t??Hf(f3(e)).webUrl;try{return new URL(r).toString()}catch{throw new Error(`Invalid Studio web URL: ${r}`)}}function jce(t){let e=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",r=process.platform==="win32"?["/c","start","",t]:[t];return new Promise((n,i)=>{let o=pce(e,r,{detached:!0,stdio:"ignore",windowsHide:!0});o.once("spawn",()=>{o.unref(),n()}),o.once("error",i)})}function VC(t){return jce(t)}function qce(t,e){let r=dl(t,"host");return r?`http://${CL(e.bridgeApi.host)?r.replace(/^(0\.0\.0\.0|\[::\])(?=:|$)/,"127.0.0.1"):r}`:dS(e.bridgeApi)}function Wce(t,e){let r=typeof t?.controlToken=="function"?al(t.controlToken()):al(t?.controlToken),n=al(t?.authToken),i=Math.max(1,t?.pairingTokenTtlMs??Uce),o=t?.pairingService??(r?Tb({controlToken:r,ttlMs:i,...n?{initialPairing:{credential:n,browserUrl:kL(void 0,e.processEnv)}}:{}}):void 0);if(t?.pairingService&&n&&!t.pairingService.validate(n).valid)throw new Error("The supplied pairing service must own the explicit browser auth token.");return{authToken:o?void 0:n,controlToken:typeof t?.controlToken=="function"?t.controlToken:al(t?.controlToken),pairingService:o,allowedOrigins:Xce([...$ce,...Kce(e.processEnv),...t?.allowedOrigins??[]].map(AL).filter(s=>s!==void 0)),allowNoOrigin:t?.allowNoOrigin??!0,requirePairing:t?.requirePairing??!!(t?.authToken||o||t?.pairingValidator),pairingValidator:t?.pairingValidator}}function Vce(t,e,r,n={}){let i=dl(t,"origin"),o=Gce(i,r);if(i&&o===void 0)return{allowed:!1,status:403,error:`Origin is not allowed for Hunsu Bridge: ${i}`,code:"origin_not_allowed",corsHeaders:Us()};if(!i&&!r.allowNoOrigin)return{allowed:!1,status:403,error:"Requests without an Origin header are not allowed.",code:"origin_missing",corsHeaders:Us()};let s=o??Us(),a=!n.skipAuth&&r.requirePairing&&!uM(e.pathname)?zce(t,e,r):{valid:!0};return a.valid?{allowed:!0,corsHeaders:s}:{allowed:!1,status:401,error:a.error,code:a.code,corsHeaders:s}}function Gce(t,e){if(!t)return Us();let r=AL(t);if(!(!r||!e.allowedOrigins.includes(r)))return{...Us(),"access-control-allow-origin":r}}function LM(t,e){let r=typeof e.controlToken=="function"?al(e.controlToken()):e.controlToken;if(!r)return{allowed:!1,status:404,error:"Bridge control endpoint is not enabled.",code:"bridge_control_unavailable",corsHeaders:Us()};let n=dl(t,Hce);return!n||!RL(n,r)?{allowed:!1,status:401,error:"Missing or invalid Hunsu Bridge control token.",code:"bridge_control_token_invalid",corsHeaders:Us()}:{allowed:!0,corsHeaders:Us()}}function zce(t,e,r){let n=r.authToken,o=dl(t,"authorization")?.match(/^Bearer\s+(.+)$/i)?.[1]?.trim(),s=dl(t,IC),a=e.searchParams.get(Lce)??void 0,c=[o,s,a].find(d=>d!==void 0);if(c===void 0)return{valid:!1,code:"pairing_token_missing",error:"Missing Hunsu Bridge pairing token."};let u=r.pairingService?.validate(c)??r.pairingValidator?.(c);if(u?.valid)return{valid:!0};if(u?.valid===!1||!n||!RL(c,n)){let d=u?.valid===!1?u.reason:"invalid";return{valid:!1,code:d==="expired"?"pairing_token_expired":d==="revoked"?"pairing_token_revoked":"pairing_token_invalid",error:d==="expired"?"Hunsu Bridge pairing token expired. Pair again with `hunsu-bridge pair`.":d==="revoked"?"Hunsu Bridge pairing token was revoked. Pair again with `hunsu-bridge pair`.":"Invalid Hunsu Bridge pairing token."}}return{valid:!0}}function RL(t,e){let r=Buffer.from(t),n=Buffer.from(e);return r.length===n.length&&vce(r,n)}function dl(t,e){let n=(t.headers??{})[e.toLowerCase()];return Array.isArray(n)?n[0]:n}function Kce(t){let e=al(t.HUNSU_WEB_PORT),r=al(t.HUNSU_WEB_HOST);return[...Jce(t.HUNSU_BRIDGE_ALLOWED_ORIGINS),e?`http://127.0.0.1:${e}`:void 0,e?`http://localhost:${e}`:void 0,r&&e&&!CL(r)?`http://${r}:${e}`:void 0].filter(n=>n!==void 0)}function Jce(t){return t?.split(",").map(e=>e.trim()).filter(Boolean)??[]}function AL(t){if(t?.trim())try{return new URL(t.trim()).origin}catch{return}}function al(t){return t?.trim()?t.trim():void 0}function Xce(t){return[...new Set(t)]}function CL(t){return t==="0.0.0.0"||t==="::"||t==="[::]"}function fC(t){if(t.testRunner==="deterministic")return new EC;let e=t.processEnv.HUNSU_CODEX_BINARY_PATH?.trim(),r=e&&t.codexAppServer.command==="codex"?e:t.codexAppServer.command;return Vd({clientOptions:{command:r,args:t.codexAppServer.args,environment:t.codexAppServer.environment},threadOptions:t.codexThreadOptions})}async function Yce(t,e){let r=e?await Og(t,e,{lastRunUsage:PL(e)}):await fu({env:t});return{bridge:{connected:!0,version:tl().bridgeVersion,protocolVersion:tl().protocolVersion},runtimes:{codex:r},...e?.codexLogin?{codexLogin:e.codexLogin}:{},tools:{git:await HM("git",["--version"]),node:await HM(process.execPath,["--version"])}}}function Qce(t){let e="account"in t?Zce(t.account):void 0,r="rateLimits"in t?eue(t.rateLimits):void 0,n=["accountError"in t?t.accountError:void 0,"rateLimitsError"in t?t.rateLimitsError:void 0,t.error].filter(i=>typeof i=="string"&&i.trim().length>0);return{backend:t.backend,available:t.available,initialized:"initialized"in t?t.initialized!==void 0:void 0,auth:e?.auth,accountSummary:e?.summary,rateLimitSummary:r?.summary,rateLimited:r?.rateLimited,accountError:"accountError"in t?$b(t.accountError):void 0,rateLimitsError:"rateLimitsError"in t?$b(t.rateLimitsError):void 0,error:n.length>0?$b(n.join("; ")):void 0}}function Zce(t){if(!qb(t))return;let r={...qb(t.account)?t.account:{},...t},n=r.requiresOpenaiAuth===!0,i=tue(r);return{auth:{state:n?"not_authenticated":"authenticated",method:i,access:i==="chatgpt"?"subscription":i==="api_key"||i==="access_token"?"usage_based":"unknown"},summary:n?void 0:{displayName:Va(r,["displayName","name","userName"]),email:Va(r,["email","userEmail"]),workspaceName:Va(r,["workspaceName","organizationName","orgName"]),planLabel:Va(r,["planLabel","plan","planType","subscriptionPlan"])}}}function eue(t){if(!qb(t))return;let e=qb(t.rateLimits)?t.rateLimits:{},r={...t,...e},n=Va(r,["rateLimitReachedType","rate_limit_reached_type"]),i=Va(r,["label","status","summary"])??(n&&n.toLowerCase()!=="none"?"Rate limited":"Available"),o=Va(r,["remainingLabel","remaining"]),s=r.rateLimited===!0||r.limited===!0||n!==void 0&&n.toLowerCase()!=="none"||/\brate.?limited\b|quota exceeded|temporarily unavailable|no remaining/i.test(`${i} ${o??""}`);return{summary:{label:i,resetAt:Va(r,["resetAt","reset_at"]),remainingLabel:o},rateLimited:s}}function tue(t){let e=`${Va(t,["authMethod","method","loginMethod","accountType","type"])??""}`.toLowerCase();return e.includes("chatgpt")||e.includes("subscription")?"chatgpt":e.includes("api")?"api_key":e.includes("access")?"access_token":"unknown"}function Va(t,e){for(let r of e){let n=t[r];if(typeof n=="string"&&n.trim())return $b(n.trim());if(typeof n=="number")return String(n)}}function $b(t){if(!t)return;let e=Xr(t);return typeof e=="string"?e:void 0}function qb(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function HM(t,e){try{let{stdout:r,stderr:n}=await bL(t,e,{timeout:2e3,windowsHide:!0}),i=`${r}
212
+ ...[truncated]`,Fs=8*1024,or=128*1024,js=32*1024,Pce=100,_ce=256*1024,IL=50,EL=256*1024,Tce=512*1024,Bce=256*1024,Dce=1024*1024,Nce=250,Oce=300,Mce=900*1e3,bC=256*1024,wC=new WeakMap,Xb=fM(),Lce="hunsuBridgeToken",IC="x-hunsu-bridge-token",Hce="x-hunsu-bridge-control-token",Uce=900*1e3,$ce=["http://127.0.0.1:19688","http://localhost:19688"];async function WC(t,e){let r=typeof t=="function"?await t(e):t,n=r.ok?r.value.backendId:r.error.backendId,i=wu(e);return i.backendId&&n!==i.backendId?$s(i.backendId,`Provider inventory backend ${n} does not match selected backend ${i.backendId}.`):!i.backendId&&i.connectionMode==="remote"&&n==="local"?$s("remote","A remote backend selection requires a remote provider inventory."):!i.backendId&&i.connectionMode!=="remote"&&n!=="local"?$s("local",`Provider inventory backend ${n} does not match the default local backend.`):r}function Fce(t=[]){return{events:t,runs:{},agentSessions:{},hunsuDrafts:{},hunsuDraftArtifacts:{},filesystemCapabilities:{},liveSubscribers:new Set,agentSessionSubscribers:new Set}}function kL(t,e){let r=t??Hf(f4(e)).webUrl;try{return new URL(r).toString()}catch{throw new Error(`Invalid Studio web URL: ${r}`)}}function jce(t){let e=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",r=process.platform==="win32"?["/c","start","",t]:[t];return new Promise((n,i)=>{let o=pce(e,r,{detached:!0,stdio:"ignore",windowsHide:!0});o.once("spawn",()=>{o.unref(),n()}),o.once("error",i)})}function VC(t){return jce(t)}function qce(t,e){let r=dl(t,"host");return r?`http://${CL(e.bridgeApi.host)?r.replace(/^(0\.0\.0\.0|\[::\])(?=:|$)/,"127.0.0.1"):r}`:dS(e.bridgeApi)}function Wce(t,e){let r=typeof t?.controlToken=="function"?al(t.controlToken()):al(t?.controlToken),n=al(t?.authToken),i=Math.max(1,t?.pairingTokenTtlMs??Uce),o=t?.pairingService??(r?Tb({controlToken:r,ttlMs:i,...n?{initialPairing:{credential:n,browserUrl:kL(void 0,e.processEnv)}}:{}}):void 0);if(t?.pairingService&&n&&!t.pairingService.validate(n).valid)throw new Error("The supplied pairing service must own the explicit browser auth token.");return{authToken:o?void 0:n,controlToken:typeof t?.controlToken=="function"?t.controlToken:al(t?.controlToken),pairingService:o,allowedOrigins:Xce([...$ce,...Kce(e.processEnv),...t?.allowedOrigins??[]].map(AL).filter(s=>s!==void 0)),allowNoOrigin:t?.allowNoOrigin??!0,requirePairing:t?.requirePairing??!!(t?.authToken||o||t?.pairingValidator),pairingValidator:t?.pairingValidator}}function Vce(t,e,r,n={}){let i=dl(t,"origin"),o=Gce(i,r);if(i&&o===void 0)return{allowed:!1,status:403,error:`Origin is not allowed for Hunsu Bridge: ${i}`,code:"origin_not_allowed",corsHeaders:Us()};if(!i&&!r.allowNoOrigin)return{allowed:!1,status:403,error:"Requests without an Origin header are not allowed.",code:"origin_missing",corsHeaders:Us()};let s=o??Us(),a=!n.skipAuth&&r.requirePairing&&!uM(e.pathname)?zce(t,e,r):{valid:!0};return a.valid?{allowed:!0,corsHeaders:s}:{allowed:!1,status:401,error:a.error,code:a.code,corsHeaders:s}}function Gce(t,e){if(!t)return Us();let r=AL(t);if(!(!r||!e.allowedOrigins.includes(r)))return{...Us(),"access-control-allow-origin":r}}function LM(t,e){let r=typeof e.controlToken=="function"?al(e.controlToken()):e.controlToken;if(!r)return{allowed:!1,status:404,error:"Bridge control endpoint is not enabled.",code:"bridge_control_unavailable",corsHeaders:Us()};let n=dl(t,Hce);return!n||!RL(n,r)?{allowed:!1,status:401,error:"Missing or invalid Hunsu Bridge control token.",code:"bridge_control_token_invalid",corsHeaders:Us()}:{allowed:!0,corsHeaders:Us()}}function zce(t,e,r){let n=r.authToken,o=dl(t,"authorization")?.match(/^Bearer\s+(.+)$/i)?.[1]?.trim(),s=dl(t,IC),a=e.searchParams.get(Lce)??void 0,c=[o,s,a].find(d=>d!==void 0);if(c===void 0)return{valid:!1,code:"pairing_token_missing",error:"Missing Hunsu Bridge pairing token."};let u=r.pairingService?.validate(c)??r.pairingValidator?.(c);if(u?.valid)return{valid:!0};if(u?.valid===!1||!n||!RL(c,n)){let d=u?.valid===!1?u.reason:"invalid";return{valid:!1,code:d==="expired"?"pairing_token_expired":d==="revoked"?"pairing_token_revoked":"pairing_token_invalid",error:d==="expired"?"Hunsu Bridge pairing token expired. Pair again with `hunsu-bridge pair`.":d==="revoked"?"Hunsu Bridge pairing token was revoked. Pair again with `hunsu-bridge pair`.":"Invalid Hunsu Bridge pairing token."}}return{valid:!0}}function RL(t,e){let r=Buffer.from(t),n=Buffer.from(e);return r.length===n.length&&vce(r,n)}function dl(t,e){let n=(t.headers??{})[e.toLowerCase()];return Array.isArray(n)?n[0]:n}function Kce(t){let e=al(t.HUNSU_WEB_PORT),r=al(t.HUNSU_WEB_HOST);return[...Jce(t.HUNSU_BRIDGE_ALLOWED_ORIGINS),e?`http://127.0.0.1:${e}`:void 0,e?`http://localhost:${e}`:void 0,r&&e&&!CL(r)?`http://${r}:${e}`:void 0].filter(n=>n!==void 0)}function Jce(t){return t?.split(",").map(e=>e.trim()).filter(Boolean)??[]}function AL(t){if(t?.trim())try{return new URL(t.trim()).origin}catch{return}}function al(t){return t?.trim()?t.trim():void 0}function Xce(t){return[...new Set(t)]}function CL(t){return t==="0.0.0.0"||t==="::"||t==="[::]"}function fC(t){if(t.testRunner==="deterministic")return new EC;let e=t.processEnv.HUNSU_CODEX_BINARY_PATH?.trim(),r=e&&t.codexAppServer.command==="codex"?e:t.codexAppServer.command;return Vd({clientOptions:{command:r,args:t.codexAppServer.args,environment:t.codexAppServer.environment},threadOptions:t.codexThreadOptions})}async function Yce(t,e){let r=e?await Og(t,e,{lastRunUsage:PL(e)}):await fu({env:t});return{bridge:{connected:!0,version:tl().bridgeVersion,protocolVersion:tl().protocolVersion},runtimes:{codex:r},...e?.codexLogin?{codexLogin:e.codexLogin}:{},tools:{git:await HM("git",["--version"]),node:await HM(process.execPath,["--version"])}}}function Qce(t){let e="account"in t?Zce(t.account):void 0,r="rateLimits"in t?eue(t.rateLimits):void 0,n=["accountError"in t?t.accountError:void 0,"rateLimitsError"in t?t.rateLimitsError:void 0,t.error].filter(i=>typeof i=="string"&&i.trim().length>0);return{backend:t.backend,available:t.available,initialized:"initialized"in t?t.initialized!==void 0:void 0,auth:e?.auth,accountSummary:e?.summary,rateLimitSummary:r?.summary,rateLimited:r?.rateLimited,accountError:"accountError"in t?$b(t.accountError):void 0,rateLimitsError:"rateLimitsError"in t?$b(t.rateLimitsError):void 0,error:n.length>0?$b(n.join("; ")):void 0}}function Zce(t){if(!qb(t))return;let r={...qb(t.account)?t.account:{},...t},n=r.requiresOpenaiAuth===!0,i=tue(r);return{auth:{state:n?"not_authenticated":"authenticated",method:i,access:i==="chatgpt"?"subscription":i==="api_key"||i==="access_token"?"usage_based":"unknown"},summary:n?void 0:{displayName:Va(r,["displayName","name","userName"]),email:Va(r,["email","userEmail"]),workspaceName:Va(r,["workspaceName","organizationName","orgName"]),planLabel:Va(r,["planLabel","plan","planType","subscriptionPlan"])}}}function eue(t){if(!qb(t))return;let e=qb(t.rateLimits)?t.rateLimits:{},r={...t,...e},n=Va(r,["rateLimitReachedType","rate_limit_reached_type"]),i=Va(r,["label","status","summary"])??(n&&n.toLowerCase()!=="none"?"Rate limited":"Available"),o=Va(r,["remainingLabel","remaining"]),s=r.rateLimited===!0||r.limited===!0||n!==void 0&&n.toLowerCase()!=="none"||/\brate.?limited\b|quota exceeded|temporarily unavailable|no remaining/i.test(`${i} ${o??""}`);return{summary:{label:i,resetAt:Va(r,["resetAt","reset_at"]),remainingLabel:o},rateLimited:s}}function tue(t){let e=`${Va(t,["authMethod","method","loginMethod","accountType","type"])??""}`.toLowerCase();return e.includes("chatgpt")||e.includes("subscription")?"chatgpt":e.includes("api")?"api_key":e.includes("access")?"access_token":"unknown"}function Va(t,e){for(let r of e){let n=t[r];if(typeof n=="string"&&n.trim())return $b(n.trim());if(typeof n=="number")return String(n)}}function $b(t){if(!t)return;let e=Xr(t);return typeof e=="string"?e:void 0}function qb(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function HM(t,e){try{let{stdout:r,stderr:n}=await bL(t,e,{timeout:2e3,windowsHide:!0}),i=`${r}
213
213
  ${n}`.trim().split(/\r?\n/).find(Boolean);return{installed:!0,binaryPath:t,version:i}}catch(r){return{installed:!1,binaryPath:t,error:r instanceof Error?r.message:String(r)}}}function PL(t){return Object.values(t.runs).filter(r=>r.lastRunUsage).sort((r,n)=>n.updatedAt.localeCompare(r.updatedAt))[0]?.lastRunUsage}function rue(t){if(t)return{inputTokens:t.input_tokens,cachedInputTokens:t.cached_input_tokens,outputTokens:t.output_tokens,reasoningTokens:t.reasoning_output_tokens}}var EC=class{async runTeamPlanning(e){return{runId:e.runId,provider:"codex",providerThreadId:this.threadId(e.runId,"team"),providerTurnId:this.turnId(e.runId,"plan"),finalResponse:JSON.stringify({kind:"queue",id:"deterministic-e2e-execute",items:[{kind:"goal",stage:"needs_evaluation",id:"hello-world-web-app",assignee:{executorId:"faker",goal:"Create the smallest static Hello World web app with package scripts."},evaluator:{executorId:"keria",prompt:"Verify the static Hello World app files and scripts exist."},remainingAttempts:1,requires:"PrevMove"}]},null,2)}}async runMemberPath(e){return e.outputSchema?{runId:e.runId,provider:"codex",providerThreadId:this.threadId(e.runId,"evaluator"),providerTurnId:this.turnId(e.runId,e.memberPath.id),finalResponse:JSON.stringify(this.evaluateHelloWorldApp(e.repositoryPath),null,2)}:(nue(e.repositoryPath),{runId:e.runId,provider:"codex",providerThreadId:this.threadId(e.runId,"member"),providerTurnId:this.turnId(e.runId,e.memberPath.id),finalResponse:"Created a minimal static Hello World web app with index.html, package.json, and README.md."})}async runMoveFinalizer(e){return{runId:e.runId,provider:"codex",providerThreadId:this.threadId(e.runId,"finalizer"),providerTurnId:this.turnId(e.runId,`finalize-${e.moveId}`),finalResponse:["move: create runnable Hello World web app","",e.completionSummary,"","Evidence:",...e.pathOutputs.map(r=>`- ${r.pathId}: ${r.finalResponse??"completed"}`)].join(`
214
214
  `)}}async prepareHunsuDraftSession(e){return{runId:e.runId,provider:"codex",providerThreadId:this.threadId(e.runId,"hunsu-draft")}}async runHunsuDraftTurn(e){return{runId:e.runId,provider:"codex",providerThreadId:e.providerThreadId??this.threadId(e.runId,"hunsu-draft"),providerTurnId:this.turnId(e.runId,"hunsu-draft-turn"),finalResponse:"Updated the decoded Hunsu request files. Run the supplied Draft check command to create a DiffArtifact."}}resumeRun(e){return this.runTeamPlanning(e)}pauseRun(e){return Promise.resolve()}stopRun(e){return Promise.resolve()}providerStatus(){return Promise.resolve({backend:"app-server",available:!0,initialized:{runner:"deterministic"}})}async*events(e){if(e.startsWith("hunsu-draft:")){yield*this.hunsuDraftEvents(e);return}yield{type:"runner.status.changed",runId:e,phase:"working",headline:"Deterministic E2E runner"}}async*hunsuDraftEvents(e){let r=this.threadId(e,"hunsu-draft"),n=this.turnId(e,"hunsu-draft-turn"),i=Date.now();yield{type:"runner.turn.started",runId:e,providerThreadId:r,providerTurnId:n,startedAtMs:i},await Xo(80),yield{type:"runner.item.started",runId:e,providerThreadId:r,providerTurnId:n,itemId:"reasoning_001",item:{id:"reasoning_001",type:"reasoning",raw:{type:"reasoning",id:"reasoning_001"}},startedAtMs:i+80},await Xo(80),yield{type:"runner.item.delta",runId:e,providerThreadId:r,providerTurnId:n,itemId:"reasoning_001",deltaKind:"reasoningSummary",delta:"Inspecting decoded request runtime files."},await Xo(80),yield{type:"runner.item.delta",runId:e,providerThreadId:r,providerTurnId:n,itemId:"reasoning_001",deltaKind:"reasoningText",delta:"Mapping the request to the editable Hunsu runtime surface."},await Xo(80),yield{type:"runner.item.completed",runId:e,providerThreadId:r,providerTurnId:n,itemId:"reasoning_001",item:{id:"reasoning_001",type:"reasoning",summary:["Inspecting decoded request runtime files."],content:["Mapping the request to the editable Hunsu runtime surface."],durationMs:240,raw:{type:"reasoning",id:"reasoning_001"}},completedAtMs:i+320},await Xo(80),yield{type:"runner.item.started",runId:e,providerThreadId:r,providerTurnId:n,itemId:"cmd_check_001",item:{id:"cmd_check_001",type:"commandExecution",command:"node --input-type=module -e <draft-check-command>",commandActions:[{type:"unknown",command:"node --input-type=module -e <draft-check-command>"}],raw:{type:"commandExecution",id:"cmd_check_001"}},startedAtMs:i+400},await Xo(80),yield{type:"runner.item.delta",runId:e,providerThreadId:r,providerTurnId:n,itemId:"cmd_check_001",deltaKind:"commandOutput",delta:`Draft check command completed.
215
215
  `},await Xo(80),yield{type:"runner.item.completed",runId:e,providerThreadId:r,providerTurnId:n,itemId:"cmd_check_001",item:{id:"cmd_check_001",type:"commandExecution",status:"completed",command:"node --input-type=module -e <draft-check-command>",aggregatedOutput:`Draft check command completed.
@@ -260,15 +260,15 @@ ${i}`:""].filter(Boolean).join(`
260
260
  `,"utf8"),await u.sync(),await u.chmod(384)}finally{await u.close()}try{for(let d=0;d<2;d+=1)try{await _pe(c,n);let l=!1;return{operation:e,async release(){if(l)return;let f=await QH(n).catch(p=>{if(!(er(p)&&p.code==="ENOENT"))throw p});if(f&&f.token!==a.token)throw Ue(n,"setup lock ownership changed before release");f&&await aw(n),l=!0}}}catch(l){if(!er(l)||l.code!=="EEXIST")throw l;let f=await QH(n).catch(()=>{});if(f&&s(f.pid))throw new Zo;try{await aw(n)}catch(p){if(!er(p)||p.code!=="ENOENT")throw new Zo}}}finally{await aw(c).catch(d=>{if(!er(d)||d.code!=="ENOENT")throw d})}throw new Zo}function YH(t,e){if(!ZH(e)||e.schema!==o0)throw Ue(t,`expected schema ${o0}`);if(!Mpe(e.phase))throw Ue(t,"phase is invalid");return{schema:o0,transactionId:vP(t,"transactionId",e.transactionId),phase:e.phase,candidate:sw(t,"candidate",e.candidate,{allowUnverified:!0}),previous:e.previous===null?null:ow(t,e.previous),createdAt:yP(t,"createdAt",e.createdAt),updatedAt:yP(t,"updatedAt",e.updatedAt)}}async function QH(t){let e;try{e=await Dpe(t,"utf8")}catch(n){if(er(n)&&n.code==="ENOENT")return;throw n}let r;try{r=JSON.parse(e)}catch{throw Ue(t,"setup lock is not valid JSON")}if(!ZH(r)||r.schema!==gP||!Lpe(r.operation)||!Number.isSafeInteger(r.pid)||Number(r.pid)<=0)throw Ue(t,"setup lock has an invalid schema");return{schema:gP,token:vP(t,"token",r.token),operation:r.operation,pid:Number(r.pid),createdAt:yP(t,"createdAt",r.createdAt)}}function vP(t,e,r){if(typeof r!="string"||!r.trim()||/[\u0000-\u001f\u007f]/u.test(r))throw Ue(t,`${e} must be a non-empty safe string`);return r}function yP(t,e,r){let n=vP(t,e,r);if(!Number.isFinite(Date.parse(n)))throw Ue(t,`${e} must be an ISO timestamp`);return n}function Mpe(t){return t==="preparing"||t==="candidate-staged"||t==="previous-stopped"||t==="service-switched"||t==="candidate-started"||t==="candidate-verified"||t==="committing"||t==="rolling-back"}function Lpe(t){return t==="setup"||t==="remove"||t==="service-mutation"||t==="runtime-upgrade"}function ZH(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Hpe(t){try{return process.kill(t,0),!0}catch(e){return er(e)&&e.code==="EPERM"}}async function uw(t){let e=[],r=!0,n="production";try{n=(await Jo(t.paths).read()).deploymentProfile}catch{r=!1,e.push({code:"BRIDGE_STATE_INVALID",message:"Bridge configuration is invalid."})}let i=await $pe(t.paths.credentialsFile);if(i)try{await vu(t.paths).read()}catch{e.push({code:"BRIDGE_STATE_INVALID",message:"Bridge credentials file is invalid or inaccessible."})}let o=await Db(t.paths).read().catch(()=>{});o&&o.deploymentProfile!==n&&e.push({code:"BRIDGE_PROFILE_MISMATCH",message:"The running Bridge deployment profile does not match its durable configuration."});let s;try{s=(await cw(t.paths).read())?.phase,s&&e.push({code:"SETUP_TRANSACTION_INCOMPLETE",message:`Bridge setup has an incomplete ${s} transaction.`})}catch{e.push({code:"BRIDGE_STATE_INVALID",message:"Bridge setup transaction state is invalid."})}let a=await iw({store:_b(t.paths)}).list(),c=a.ok?a.value.map(KH):[];a.ok||e.push({code:a.error.code,message:a.error.message});let u=t.providerService?await t.providerService.status(!1).catch(()=>{}):void 0,d={schema:"hunsu.bridge.doctor.v1",mode:t.online===!1?"offline":"online",version:bn,protocolVersion:Kd,deploymentProfile:n,home:t.paths.home,state:{config:r?"valid":"invalid",credentialsPresent:i,runtimePresent:o!==void 0,workspaceCount:c.length,...s?{setupTransactionPhase:s}:{}},...u?{provider:{providerId:u.providerId,installed:u.installed,configured:u.configured,authenticated:u.authenticated,ready:u.ready,...u.safeMessage?{message:u.safeMessage}:{}}}:{},workspaces:c,issues:e},l=Xr(d);return _s(l),l}async function $pe(t){try{return await Upe(t),!0}catch{return!1}}import{appendFile as Fpe,chmod as jpe,mkdir as qpe,readFile as Wpe,rename as Vpe,stat as Gpe,unlink as eU}from"node:fs/promises";var xP="hunsu.bridge.log.v1",zpe=1048576,Kpe=3;function nU(t){let e=rU(t.maxBytes??zpe,"maxBytes"),r=rU(t.maxFiles??Kpe,"maxFiles"),n=t.now??(()=>new Date),i=Promise.resolve();return{append:async s=>{let a=i.then(async()=>{if(!s.event.trim())throw new Error("Structured log event name must be non-empty.");let c={schema:xP,timestamp:n().toISOString(),level:s.level,event:s.event,...s.message===void 0?{}:{message:s.message},...s.data===void 0?{}:{data:s.data}},u=SP(c),d=`${JSON.stringify(u)}
261
261
  `;if(Buffer.byteLength(d)>e&&(u=SP({schema:xP,timestamp:c.timestamp,level:c.level,event:c.event,message:"Structured log event exceeded the configured size limit.",data:{truncated:!0}}),d=`${JSON.stringify(u)}
262
262
  `),Buffer.byteLength(d)>e)throw new Error("Structured log maxBytes is too small for a valid record.");return await qpe(t.paths.logsDirectory,{recursive:!0,mode:448}),await Xpe(t.paths.structuredLogFile,Buffer.byteLength(d),e,r),await Fpe(t.paths.structuredLogFile,d,{encoding:"utf8",mode:384}),await jpe(t.paths.structuredLogFile,384),u});return i=a.then(()=>{},()=>{}),a},async read(s={}){await i;let a=[];for(let d of Ype(t.paths.structuredLogFile,r)){let l=await Qpe(d);if(l!==void 0)for(let f of l.split(/\r?\n/u)){if(!f.trim())continue;let p=Jpe(f);p&&a.push(p)}}let c=s.limit;if(c===void 0)return a;let u=Math.max(0,Math.trunc(c));return u===0?[]:a.slice(-u)}}}function SP(t){let e=Xr(t);return _s(e),e}function Jpe(t){try{let e=JSON.parse(t);return Zpe(e)?SP(e):void 0}catch{return}}async function Xpe(t,e,r,n){let i=0;try{i=(await Gpe(t)).size}catch(o){if(!er(o)||o.code!=="ENOENT")throw o}if(!(i===0||i+e<=r)){if(n===1){await eU(t).catch(o=>{if(!er(o)||o.code!=="ENOENT")throw o});return}await eU(`${t}.${n-1}`).catch(o=>{if(!er(o)||o.code!=="ENOENT")throw o});for(let o=n-2;o>=1;o-=1)await tU(`${t}.${o}`,`${t}.${o+1}`);await tU(t,`${t}.1`)}}async function tU(t,e){try{await Vpe(t,e)}catch(r){if(!er(r)||r.code!=="ENOENT")throw r}}function Ype(t,e){let r=[];for(let n=e-1;n>=1;n-=1)r.push(`${t}.${n}`);return r.push(t),r}async function Qpe(t){try{return await Wpe(t,"utf8")}catch(e){if(er(e)&&e.code==="ENOENT")return;throw e}}function rU(t,e){if(!Number.isInteger(t)||t<=0)throw new Error(`${e} must be a positive integer.`);return t}function Zpe(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;return e.schema===xP&&typeof e.timestamp=="string"&&(e.level==="debug"||e.level==="info"||e.level==="warn"||e.level==="error")&&typeof e.event=="string"}import{Buffer as Jc}from"node:buffer";import{hostname as BAe}from"node:os";import{randomBytes as DAe,webcrypto as hO}from"node:crypto";import{Buffer as Ya}from"node:buffer";import{randomBytes as eme,webcrypto as tme}from"node:crypto";var xr=tme.subtle,rme="hunsu.connect.signal.v1",nme="hunsu.peer.data.v1",ime=Number.MAX_SAFE_INTEGER;async function aU(){let t=await xr.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]),e=await xr.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);return{signingPrivateKey:lw(await xr.exportKey("jwk",t.privateKey)),signingPublicKey:Qr(await xr.exportKey("jwk",t.publicKey)),agreementPrivateKey:lw(await xr.exportKey("jwk",e.privateKey)),agreementPublicKey:Qr(await xr.exportKey("jwk",e.publicKey))}}async function cU(t){let e=["hunsu.connect.enrollment-proof.v1",t.deviceName,t.issuedAt,t.nonce,JSON.stringify(Qr(t.signingPublicJwk)),JSON.stringify(Qr(t.agreementPublicJwk))].join(`
263
- `),r=await hU(t.signingPrivateKey),n=await xr.sign({name:"ECDSA",hash:"SHA-256"},r,Ci(e));return _u(n)}async function uU(t){let e=await gU(t.browserAgreementPublicJwk),r=await xr.importKey("jwk",lw(t.deviceAgreementPrivateKey),{name:"ECDH",namedCurve:"P-256"},!1,["deriveBits"]),n=await xr.deriveBits({name:"ECDH",public:e},r,256),i=await xr.importKey("raw",n,"HKDF",!1,["deriveBits"]),o=await xr.deriveBits({name:"HKDF",hash:"SHA-256",salt:Ci(t.sessionId),info:Ci(rme)},i,256),s=await xr.importKey("raw",o,{name:"AES-GCM"},!1,["encrypt","decrypt"]),a={key:s,noncePrefix:(await vp(Ci("hunsu.connect.signal.nonce/bridge"))).slice(0,4),sequence:0},c=0;return{async encrypt(u){let d=await pU(a,u,iU(t.sessionId));return{schema:Gf,sessionId:t.sessionId,sequence:d.sequence,iv:d.nonce,ciphertext:d.ciphertext}},async decrypt(u){if(u.schema!==Gf||u.sessionId!==t.sessionId||u.sequence!==c+1)throw sr("Connect signaling sequence or binding is invalid.");let d=IP((await vp(Ci("hunsu.connect.signal.nonce/browser"))).slice(0,4),u.sequence),l=await mU(s,u.sequence,u.iv,u.ciphertext,iU(t.sessionId),d);return c=u.sequence,l}}}async function dU(t){if(t.ticketClaims.sessionId!==t.sessionId)throw sr("Ticket session binding is invalid.");let e=t.now??(()=>new Date),r=t.randomBytes??eme,n=await xr.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]),i=await gU(t.ticketClaims.browserAgreementPublicJwk),o=await xr.deriveBits({name:"ECDH",public:i},n.privateKey,256),s=Qr(await xr.exportKey("jwk",n.publicKey)),a=_u(r(24)),c=new Date(e().getTime()+J4).toISOString(),u=_u(await vp(Ci(t.ticket))),d=ome({sessionId:t.sessionId,accountId:t.ticketClaims.accountId,deviceId:t.ticketClaims.deviceId,ticketDigest:u,browserAgreementPublicJwk:t.ticketClaims.browserAgreementPublicJwk,bridgeEphemeralPublicJwk:s,browserNonce:t.browserNonce,bridgeNonce:a,leaseExpiresAt:c}),l=await vp(d),f=_u(l),p=await hU(t.deviceSigningPrivateKey),g=_u(await xr.sign({name:"ECDSA",hash:"SHA-256"},p,l)),v=await xr.importKey("raw",o,"HKDF",!1,["deriveBits"]),b=new Uint8Array(await xr.deriveBits({name:"HKDF",hash:"SHA-256",salt:l,info:Ci(nme)},v,1024)),C=await dw(b.slice(0,32),"control/browser"),B=await dw(b.slice(32,64),"control/bridge"),_=await dw(b.slice(64,96),"stream/browser"),F=await dw(b.slice(96,128),"stream/bridge");return{serverHello:{type:"peer.server-hello",protocolVersion:Oa,sessionId:t.sessionId,bridgeEphemeralPublicJwk:s,bridgeNonce:a,leaseExpiresAt:c,transcriptHash:f,signature:g},accountId:t.ticketClaims.accountId,transcriptHash:f,ticketId:t.ticketClaims.jti,async encrypt(he,z){let de=await pU(he==="control"?B:F,z,oU(t.sessionId,he)),R={version:Oa,sessionId:t.sessionId,channel:he,sequence:de.sequence,nonce:de.nonce,ciphertext:de.ciphertext};return JSON.stringify(R)},async decrypt(he,z){let Ae=typeof z=="string"?z:Ya.from(z).toString("utf8");if(Ya.byteLength(Ae,"utf8")>dg*2)throw sr("Peer frame exceeds its encoded bound.");let de;try{de=JSON.parse(Ae)}catch{throw sr("Peer frame is not valid JSON.")}let R=sme(de,t.sessionId,he),V=he==="control"?C:_;if(R.sequence!==V.sequence+1)throw sr("Peer frame sequence is not contiguous.");let le=IP(V.noncePrefix,R.sequence),se=await mU(V.key,R.sequence,R.nonce,R.ciphertext,oU(t.sessionId,he),le);return V.sequence=R.sequence,se}}}async function lU(t){let e=t.ticket.split(".");if(e.length!==3||e.some(d=>!/^[A-Za-z0-9_-]+$/u.test(d)))throw sr("Connect ticket encoding is invalid.");let r=sU(e[0],"Connect ticket header"),n=sU(e[1],"Connect ticket claims");if(!bP(r,["alg","typ","kid"])||r.alg!=="ES256"||r.typ!=="hunsu-connect-session+jwt"||r.kid!==t.expectedKeyId)throw sr("Connect ticket protected header is invalid.");if(!bP(n,["iss","aud","sub","jti","environment","sessionId","accountId","deviceId","browserAgreementPublicJwk","iat","exp"]))throw sr("Connect ticket claims are invalid.");let i=Qr(n.browserAgreementPublicJwk),o=Math.floor(t.now.getTime()/1e3);if(n.iss!==t.expectedIssuer||n.aud!=="hunsu-bridge"||n.environment!==t.expectedEnvironment||n.sessionId!==t.expectedSessionId||n.sub!==t.expectedDeviceId||n.deviceId!==t.expectedDeviceId||!hl(n.jti,256)||!hl(n.accountId,256)||!Number.isSafeInteger(n.iat)||!Number.isSafeInteger(n.exp)||Number(n.iat)>o+15||Number(n.exp)<=o||Number(n.exp)<=Number(n.iat)||Number(n.exp)-Number(n.iat)>90||t.expectedBrowserAgreementPublicJwk&&!ame(i,t.expectedBrowserAgreementPublicJwk))throw sr("Connect ticket claim binding is invalid.");let s=await xr.importKey("jwk",Qr(t.signingPublicKey),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),a=yp(e[2],64,64);if(!await xr.verify({name:"ECDSA",hash:"SHA-256"},s,a,Ci(`${e[0]}.${e[1]}`)))throw sr("Connect ticket signature is invalid.");let u=_u(await vp(Ci(t.ticket)));if(!await t.consume(n.jti,u))throw sr("Connect ticket was already used.");return{iss:n.iss,aud:"hunsu-bridge",sub:n.sub,jti:n.jti,environment:n.environment,sessionId:n.sessionId,accountId:n.accountId,deviceId:n.deviceId,browserAgreementPublicJwk:i,iat:n.iat,exp:n.exp}}function wP(t,e){if(typeof e!="string"||!e.startsWith(`v=0\r
263
+ `),r=await hU(t.signingPrivateKey),n=await xr.sign({name:"ECDSA",hash:"SHA-256"},r,Ci(e));return _u(n)}async function uU(t){let e=await gU(t.browserAgreementPublicJwk),r=await xr.importKey("jwk",lw(t.deviceAgreementPrivateKey),{name:"ECDH",namedCurve:"P-256"},!1,["deriveBits"]),n=await xr.deriveBits({name:"ECDH",public:e},r,256),i=await xr.importKey("raw",n,"HKDF",!1,["deriveBits"]),o=await xr.deriveBits({name:"HKDF",hash:"SHA-256",salt:Ci(t.sessionId),info:Ci(rme)},i,256),s=await xr.importKey("raw",o,{name:"AES-GCM"},!1,["encrypt","decrypt"]),a={key:s,noncePrefix:(await vp(Ci("hunsu.connect.signal.nonce/bridge"))).slice(0,4),sequence:0},c=0;return{async encrypt(u){let d=await pU(a,u,iU(t.sessionId));return{schema:Gf,sessionId:t.sessionId,sequence:d.sequence,iv:d.nonce,ciphertext:d.ciphertext}},async decrypt(u){if(u.schema!==Gf||u.sessionId!==t.sessionId||u.sequence!==c+1)throw sr("Connect signaling sequence or binding is invalid.");let d=IP((await vp(Ci("hunsu.connect.signal.nonce/browser"))).slice(0,4),u.sequence),l=await mU(s,u.sequence,u.iv,u.ciphertext,iU(t.sessionId),d);return c=u.sequence,l}}}async function dU(t){if(t.ticketClaims.sessionId!==t.sessionId)throw sr("Ticket session binding is invalid.");let e=t.now??(()=>new Date),r=t.randomBytes??eme,n=await xr.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]),i=await gU(t.ticketClaims.browserAgreementPublicJwk),o=await xr.deriveBits({name:"ECDH",public:i},n.privateKey,256),s=Qr(await xr.exportKey("jwk",n.publicKey)),a=_u(r(24)),c=new Date(e().getTime()+J3).toISOString(),u=_u(await vp(Ci(t.ticket))),d=ome({sessionId:t.sessionId,accountId:t.ticketClaims.accountId,deviceId:t.ticketClaims.deviceId,ticketDigest:u,browserAgreementPublicJwk:t.ticketClaims.browserAgreementPublicJwk,bridgeEphemeralPublicJwk:s,browserNonce:t.browserNonce,bridgeNonce:a,leaseExpiresAt:c}),l=await vp(d),f=_u(l),p=await hU(t.deviceSigningPrivateKey),g=_u(await xr.sign({name:"ECDSA",hash:"SHA-256"},p,l)),v=await xr.importKey("raw",o,"HKDF",!1,["deriveBits"]),b=new Uint8Array(await xr.deriveBits({name:"HKDF",hash:"SHA-256",salt:l,info:Ci(nme)},v,1024)),C=await dw(b.slice(0,32),"control/browser"),B=await dw(b.slice(32,64),"control/bridge"),_=await dw(b.slice(64,96),"stream/browser"),F=await dw(b.slice(96,128),"stream/bridge");return{serverHello:{type:"peer.server-hello",protocolVersion:Oa,sessionId:t.sessionId,bridgeEphemeralPublicJwk:s,bridgeNonce:a,leaseExpiresAt:c,transcriptHash:f,signature:g},accountId:t.ticketClaims.accountId,transcriptHash:f,ticketId:t.ticketClaims.jti,async encrypt(he,z){let de=await pU(he==="control"?B:F,z,oU(t.sessionId,he)),R={version:Oa,sessionId:t.sessionId,channel:he,sequence:de.sequence,nonce:de.nonce,ciphertext:de.ciphertext};return JSON.stringify(R)},async decrypt(he,z){let Ae=typeof z=="string"?z:Ya.from(z).toString("utf8");if(Ya.byteLength(Ae,"utf8")>dg*2)throw sr("Peer frame exceeds its encoded bound.");let de;try{de=JSON.parse(Ae)}catch{throw sr("Peer frame is not valid JSON.")}let R=sme(de,t.sessionId,he),V=he==="control"?C:_;if(R.sequence!==V.sequence+1)throw sr("Peer frame sequence is not contiguous.");let le=IP(V.noncePrefix,R.sequence),se=await mU(V.key,R.sequence,R.nonce,R.ciphertext,oU(t.sessionId,he),le);return V.sequence=R.sequence,se}}}async function lU(t){let e=t.ticket.split(".");if(e.length!==3||e.some(d=>!/^[A-Za-z0-9_-]+$/u.test(d)))throw sr("Connect ticket encoding is invalid.");let r=sU(e[0],"Connect ticket header"),n=sU(e[1],"Connect ticket claims");if(!bP(r,["alg","typ","kid"])||r.alg!=="ES256"||r.typ!=="hunsu-connect-session+jwt"||r.kid!==t.expectedKeyId)throw sr("Connect ticket protected header is invalid.");if(!bP(n,["iss","aud","sub","jti","environment","sessionId","accountId","deviceId","browserAgreementPublicJwk","iat","exp"]))throw sr("Connect ticket claims are invalid.");let i=Qr(n.browserAgreementPublicJwk),o=Math.floor(t.now.getTime()/1e3);if(n.iss!==t.expectedIssuer||n.aud!=="hunsu-bridge"||n.environment!==t.expectedEnvironment||n.sessionId!==t.expectedSessionId||n.sub!==t.expectedDeviceId||n.deviceId!==t.expectedDeviceId||!hl(n.jti,256)||!hl(n.accountId,256)||!Number.isSafeInteger(n.iat)||!Number.isSafeInteger(n.exp)||Number(n.iat)>o+15||Number(n.exp)<=o||Number(n.exp)<=Number(n.iat)||Number(n.exp)-Number(n.iat)>90||t.expectedBrowserAgreementPublicJwk&&!ame(i,t.expectedBrowserAgreementPublicJwk))throw sr("Connect ticket claim binding is invalid.");let s=await xr.importKey("jwk",Qr(t.signingPublicKey),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),a=yp(e[2],64,64);if(!await xr.verify({name:"ECDSA",hash:"SHA-256"},s,a,Ci(`${e[0]}.${e[1]}`)))throw sr("Connect ticket signature is invalid.");let u=_u(await vp(Ci(t.ticket)));if(!await t.consume(n.jti,u))throw sr("Connect ticket was already used.");return{iss:n.iss,aud:"hunsu-bridge",sub:n.sub,jti:n.jti,environment:n.environment,sessionId:n.sessionId,accountId:n.accountId,deviceId:n.deviceId,browserAgreementPublicJwk:i,iat:n.iat,exp:n.exp}}function wP(t,e){if(typeof e!="string"||!e.startsWith(`v=0\r
264
264
  `)||Ya.byteLength(e,"utf8")>64*1024||/[\u0000\u000b\u000c]/u.test(e))throw sr("Peer SDP is invalid.");let r=e.split(`\r
265
- `).filter(Boolean),n=r.filter(s=>s.startsWith("m="));if(n.length!==1||!/^m=application \d+ UDP\/DTLS\/SCTP webrtc-datachannel$/u.test(n[0]))throw sr("Peer SDP must contain exactly one WebRTC DataChannel section.");if(r.some(s=>/^m=(audio|video)\b/u.test(s)))throw sr("Peer SDP requested unsupported media.");let i=r.filter(s=>s.startsWith("a=candidate:"));if(i.length>64||i.some(s=>!/ typ (?:host|srflx)(?: |$)/u.test(s)))throw sr("Peer SDP contains invalid ICE candidates.");if(!r.some(s=>/^a=ice-ufrag:[A-Za-z0-9+/]{4,256}$/u.test(s))||!r.some(s=>/^a=ice-pwd:[A-Za-z0-9+/]{22,256}$/u.test(s))||!r.some(s=>t==="offer"?s==="a=setup:actpass":/^a=setup:(?:active|passive)$/u.test(s)))throw sr("Peer SDP ICE or DTLS setup is invalid.");let o=[...new Set(r.flatMap(s=>{let a=s.match(/^a=fingerprint:sha-256 ((?:[0-9A-F]{2}:){31}[0-9A-F]{2})$/u);return a?.[1]?[a[1]]:[]}))];if(o.length!==1)throw sr("Peer SDP must contain one consistent SHA-256 fingerprint.");return{fingerprint:o[0]}}function fU(t){if(typeof t!="string"||t.length>2048||!/^candidate:[^\r\n]+ typ (?:host|srflx)(?: |$)/u.test(t))throw sr("Peer ICE candidate is invalid.")}function ome(t){return Ci(JSON.stringify({v:1,sessionId:t.sessionId,accountId:t.accountId,deviceId:t.deviceId,ticketDigest:t.ticketDigest,browserAgreementPublicJwk:Qr(t.browserAgreementPublicJwk),bridgeEphemeralPublicJwk:Qr(t.bridgeEphemeralPublicJwk),browserNonce:t.browserNonce,bridgeNonce:t.bridgeNonce,leaseExpiresAt:t.leaseExpiresAt}))}async function dw(t,e){return{key:await xr.importKey("raw",t,{name:"AES-GCM"},!1,["encrypt","decrypt"]),noncePrefix:(await vp(Ci(`hunsu.peer.data.nonce/${e}`))).slice(0,4),sequence:0}}async function pU(t,e,r){let n=Ci(JSON.stringify(e));if(n.byteLength>dg-16)throw sr("Peer plaintext exceeds its bound.");let i=t.sequence+1;if(i>ime)throw sr("Peer frame sequence is exhausted.");let o=IP(t.noncePrefix,i),s=await xr.encrypt({name:"AES-GCM",iv:o,additionalData:Ci(`${r}:${i}`),tagLength:128},t.key,n);return t.sequence=i,{sequence:i,nonce:_u(o),ciphertext:_u(s)}}async function mU(t,e,r,n,i,o){let s=yp(r,12,12);if(!Ya.from(s).equals(Ya.from(o)))throw sr("Peer frame nonce is invalid.");let a=yp(n,16,dg),c;try{c=await xr.decrypt({name:"AES-GCM",iv:o,additionalData:Ci(`${i}:${e}`),tagLength:128},t,a)}catch{throw sr("Peer frame authentication failed.")}try{return JSON.parse(Ya.from(c).toString("utf8"))}catch{throw sr("Peer frame plaintext is invalid.")}}function sme(t,e,r){if(!EP(t)||!bP(t,["version","sessionId","channel","sequence","nonce","ciphertext"])||t.version!==Oa||t.sessionId!==e||t.channel!==r||!Number.isSafeInteger(t.sequence)||Number(t.sequence)<1||!hl(t.nonce,16)||!hl(t.ciphertext,Math.ceil(dg*4/3)))throw sr("Peer frame fields are invalid.");return t}function IP(t,e){let r=new Uint8Array(12);return r.set(t,0),new DataView(r.buffer).setBigUint64(4,BigInt(e),!1),r}function iU(t){return`${Gf}:${t}`}function oU(t,e){return`${Oa}:${t}:${e}`}function sU(t,e){try{let r=yp(t,2,8192),n=JSON.parse(Ya.from(r).toString("utf8"));if(!EP(n))throw new Error;return n}catch{throw sr(`${e} is invalid.`)}}async function hU(t){return xr.importKey("jwk",lw(t),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"])}async function gU(t){return xr.importKey("jwk",Qr(t),{name:"ECDH",namedCurve:"P-256"},!1,[])}function lw(t){if(!hl(t.d,128))throw sr("P-256 private key is invalid.");return{...Qr({kty:t.kty,crv:t.crv,x:t.x,y:t.y}),d:t.d,ext:!0}}function Qr(t){if(!EP(t)||t.kty!=="EC"||t.crv!=="P-256"||!hl(t.x,128)||!hl(t.y,128)||t.d!==void 0)throw sr("P-256 public key is invalid.");return yp(t.x,32,32),yp(t.y,32,32),{crv:"P-256",kty:"EC",x:t.x,y:t.y}}function ame(t,e){let r=Qr(t),n=Qr(e);return r.x===n.x&&r.y===n.y}function bP(t,e){let r=Object.keys(t).sort(),n=[...e].sort();return r.length===n.length&&r.every((i,o)=>i===n[o])}function yp(t,e,r){if(!/^[A-Za-z0-9_-]+$/u.test(t)||t.length%4===1)throw sr("Base64url value is invalid.");let n=Ya.from(t,"base64url");if(n.byteLength<e||n.byteLength>r||n.toString("base64url")!==t)throw sr("Base64url value has an invalid size or encoding.");return new Uint8Array(n)}function _u(t){return Ya.from(t instanceof Uint8Array?t:new Uint8Array(t)).toString("base64url")}function Ci(t){return new TextEncoder().encode(t)}async function vp(t){return new Uint8Array(await xr.digest("SHA-256",t))}function hl(t,e){return typeof t=="string"&&t.length>0&&t.length<=e&&!/[\u0000-\u001f\u007f]/u.test(t)}function EP(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function sr(t){return new Error(t)}import{Buffer as n1e}from"node:buffer";function yY(t={}){return async()=>{let e=await(t.loadWerift??d1e)(),r=new e.RTCPeerConnection({iceServers:[{urls:K4}],iceTransportPolicy:"all",maxMessageSize:128*1024});return i1e(r,t.channelTimeoutMs??1e4)}}async function Xk(t){let e=t.highWaterMark??1048576,r=t.lowWaterMark??256*1024;if(t.channel.readyState!=="open")throw new Error("Peer DataChannel is not open.");if(t.channel.bufferedAmount>e&&(t.channel.bufferedAmountLowThreshold=r,await c1e(t.channel,t.signal,t.timeoutMs??1e4)),t.signal.aborted||t.channel.readyState!=="open")throw new Error("Peer DataChannel send was canceled.");if(t.channel.send(t.value),t.channel.bufferedAmount>e*2)throw new Error("Peer DataChannel backpressure bound was exceeded.")}function i1e(t,e){let r=new Map,n,i=!1,o=t.onDataChannel.subscribe(s=>{try{let a=o1e(s);if(!s.isCreatedByRemote||a.label!==P1&&a.label!==_1||r.has(a.label))throw new Error("Peer offered an unexpected DataChannel.");G6(a),r.set(a.label,a)}catch(a){n=a instanceof Error?a:new Error("Peer DataChannel is invalid."),t.close()}});return{async acceptOffer(s,a){if(i)throw new Error("Peer transport is closed.");if(wP("offer",s),await t.setRemoteDescription({type:"offer",sdp:s}),n)throw n;let c=await t.createAnswer();await t.setLocalDescription(c),await a1e(t,a,e);let u=t.localDescription?.sdp;if(!u)throw new Error("Peer answer SDP is unavailable.");return wP("answer",u),{answerSdp:u}},waitForChannels(s){return i?Promise.reject(new Error("Peer transport is closed.")):s1e(r,()=>n,s,e)},async addIceCandidate(s){if(i)throw new Error("Peer transport is closed.");fU(s.candidate),await t.addIceCandidate(s)},async close(){if(!i){i=!0,o.unSubscribe();for(let s of r.values())s.close();r.clear(),await t.close()}}}}function o1e(t){return{get label(){return t.label},get ordered(){return t.ordered},get maxRetransmits(){return t.maxRetransmits},get maxPacketLifeTime(){return t.maxPacketLifeTime},get readyState(){return t.readyState},get bufferedAmount(){return t.bufferedAmount},get bufferedAmountLowThreshold(){return t.bufferedAmountLowThreshold},set bufferedAmountLowThreshold(e){t.bufferedAmountLowThreshold=e},send(e){t.send(typeof e=="string"?e:n1e.from(e))},close(){t.close()},onMessage(e){let r=t.onMessage.subscribe(n=>e(typeof n=="string"?n:new Uint8Array(n)));return()=>r.unSubscribe()},onStateChange(e){let r=t.stateChange.subscribe(e);return()=>r.unSubscribe()},onBufferedAmountLow(e){let r=t.bufferedAmountLow.subscribe(e);return()=>r.unSubscribe()}}}function G6(t){if(!t.ordered||t.maxRetransmits!==void 0||t.maxPacketLifeTime!==void 0)throw new Error("Peer DataChannels must be reliable and ordered.")}async function s1e(t,e,r,n){let i=Date.now()+n;for(;Date.now()<i;){if(r?.aborted)throw new Error("Peer negotiation was canceled.");let o=e();if(o)throw o;let s=t.get(P1),a=t.get(_1);if(s&&a)return G6(s),G6(a),{control:s,stream:a};await u1e(r)}throw new Error("Peer did not open both required DataChannels.")}async function a1e(t,e,r){t.iceGatheringState!=="complete"&&await new Promise((n,i)=>{let o=setTimeout(()=>c(new Error("Peer ICE gathering timed out.")),r);o.unref?.();let s=t.iceGatheringStateChange.subscribe(u=>{u==="complete"&&c()}),a=()=>c(new Error("Peer ICE gathering was canceled."));e?.addEventListener("abort",a,{once:!0});function c(u){clearTimeout(o),s.unSubscribe(),e?.removeEventListener("abort",a),u?i(u):n()}})}function c1e(t,e,r){return new Promise((n,i)=>{let o=setTimeout(()=>u(new Error("Peer DataChannel remained backpressured.")),r);o.unref?.();let s=t.onBufferedAmountLow(()=>u()),a=t.onStateChange(d=>{d!=="open"&&u(new Error("Peer DataChannel closed while backpressured."))}),c=()=>u(new Error("Peer DataChannel send was canceled."));e.addEventListener("abort",c,{once:!0});function u(d){clearTimeout(o),s(),a(),e.removeEventListener("abort",c),d?i(d):n()}})}function u1e(t){return new Promise((e,r)=>{let n=setTimeout(()=>{t?.removeEventListener("abort",i),e()},5),i=()=>{clearTimeout(n),t?.removeEventListener("abort",i),r(new Error("Peer negotiation was canceled."))};t?.addEventListener("abort",i,{once:!0})})}async function d1e(){return await Promise.resolve().then(()=>(gY(),hY))}function DQ(t){let e=t.fetchImpl??fetch,r=t.sleep??KAe,n=t.now??(()=>new Date),i=t.randomBytes??DAe,o=VAe(t.connectApiUrl),s=GAe(t.connectWsUrl),a=t.socketFactory??FAe,c=t.peerTransportFactory??yY(),u="disabled",d,l,f=!1,p=0,g=0,v,b=Promise.resolve(),C=new Map,B=R=>{let V=b.then(R,R);return b=V.then(()=>{},()=>{}),V},_=async()=>{let[R,V,le]=await Promise.all([t.configStore.read(),t.credentialStore.read(),t.workspaceService.list()]),se=V?.connect?.state==="registered"?V.connect:void 0,H=le.ok?le.value.filter(G=>G.lifecycle==="active"&&G.remoteAccess.enabled&&G.remoteAccess.scopes.includes("remote.access")).map(G=>G.workspaceId):[];return{enabled:R.remote.enabled,signedIn:!!se?.refreshToken,...se?.accountId?{accountId:se.accountId}:{},connection:se?R.remote.enabled?u:"disabled":"signed_out",...se?.deviceId?{deviceId:se.deviceId}:{},...l?{peerSessionId:l.sessionId}:{},grantedWorkspaceIds:R.remote.enabled&&se?H:[],protocolVersion:Oa}},F=(R="canceled")=>{p+=1;let V=d;d=void 0,V?.close(1e3,R);let le=l;l=void 0,le?.close(R),v=void 0},he=(R,V)=>C.has(R)||C.size>=1024?!1:(C.set(R,V),!0),z=async()=>{let R=++p;if(f||!(await t.configStore.read()).remote.enabled)return;u="connecting";let le=await _Q(t.credentialStore);if(le=await OAe({credential:le,credentialStore:t.credentialStore,connectApiUrl:o,fetchImpl:e,now:n,secureRandom:i}),f||R!==p)return;let se=OQ(s),H=await yO({method:"GET",url:se,signingPrivateKey:le.signingPrivateKey,signingPublicKey:le.signingPublicKey,accessToken:le.accessToken,now:n(),randomBytes:i}),G=await a({url:s,headers:{authorization:`DPoP ${le.accessToken}`,dpop:H}});if(await $Ae(G,1e4),f||R!==p){G.close(1e3,"superseded");return}d=G,g=0;let j=Promise.resolve(),me=_e=>{j=j.then(()=>de(_e.data,le,G,R)).catch(()=>{G.close(1008,"invalid_connect_frame")})},Ce=()=>{if(d===G&&(d=void 0),R!==p||f)return;u="offline",v=void 0;let _e=l;l=void 0,_e?.close("protocol_error"),Ae(R)};G.addEventListener("message",me),G.addEventListener("close",Ce),G.addEventListener("error",Ce)},Ae=R=>{let V=g++,le=Math.min(3e4,1e3*2**Math.min(V,5));r(le).then(async()=>{f||R!==p||!(await t.configStore.read()).remote.enabled||await z().catch(()=>{f||Ae(p)})})},de=async(R,V,le,se)=>{if(le!==d||se!==p)return;let H=UAe(R);if(HAe(H)){if(H.type==="connect.authenticated"){if(H.deviceId!==V.deviceId||H.accountId!==V.accountId||Date.parse(H.expiresAt)<=n().getTime())throw new Error("Connect authentication binding is invalid.");v=H.accountId,u="connected";return}if(H.type==="connect.session"){if(v!==V.accountId||Date.parse(H.expiresAt)<=n().getTime())throw new Error("Connect session arrived before authentication.");let j=await lU({ticket:H.ticket,signingPublicKey:t.connectTicketSigningPublicJwk,expectedKeyId:t.connectTicketSigningKeyId,expectedIssuer:t.connectTicketIssuer,expectedEnvironment:t.deploymentProfile,expectedSessionId:H.sessionId,expectedDeviceId:V.deviceId,now:n(),consume:he});if(j.accountId!==V.accountId)throw new Error("Connect ticket account binding is invalid.");let me=await uU({sessionId:H.sessionId,browserAgreementPublicJwk:j.browserAgreementPublicJwk,deviceAgreementPrivateKey:V.agreementPrivateKey}),Ce=l,_e=new gO({sessionId:H.sessionId,ticket:H.ticket,ticketClaims:j,signalCrypto:me,deviceSigningPrivateKey:V.signingPrivateKey,workspaceService:t.workspaceService,peerTransportFactory:c,onCommand:t.onCommand,onCommandStream:t.onCommandStream,now:n,randomBytes:i,sendSignal:P=>{if(le!==d||l!==_e)throw new Error("Connect session is no longer active.");le.send(JSON.stringify(P))},onClosed:()=>{l===_e&&(l=void 0)}});l=_e,Ce&&await Ce.close("replaced");return}if(H.type==="connect.ready"){if(l?.sessionId!==H.sessionId)throw new Error("Connect ready session binding is invalid.");return}if(l?.sessionId===H.sessionId){let j=l;l=void 0,await j.close(H.reason==="replaced"?"replaced":"protocol_error")}return}let G=z4(H);if(!G.ok||!l||G.value.sessionId!==l.sessionId)throw new Error("Connect signaling frame is invalid.");await l.handleSignal(G.value)};return{status:_,async login(R={}){return B(async()=>{f=!1;let V=await t.credentialStore.ensure();if(V.connect?.state==="registered")throw new Fe("REMOTE_CONNECTION_FAILED","This Bridge is already enrolled with Hunsu Connect.");let le=V.connect??await aU(),se=n().toISOString(),H=Jc.from(i(24)).toString("base64url"),G=WAe(t.deviceName??BAe()),j={schema:V4,deviceName:G,signingPublicJwk:Qr(le.signingPublicKey),agreementPublicJwk:Qr(le.agreementPublicKey),issuedAt:se,nonce:H,proof:await cU({deviceName:G,signingPublicJwk:le.signingPublicKey,agreementPublicJwk:le.agreementPublicKey,issuedAt:se,nonce:H,signingPrivateKey:le.signingPrivateKey})},me=await e(new URL("/v1/device-enrollments",o),{method:"POST",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify(j),redirect:"error",signal:AbortSignal.timeout(1e4)});if(!me.ok)throw new Fe("REMOTE_CONNECTION_FAILED",`Hunsu Connect enrollment could not start (HTTP ${me.status}).`);let Ce=LAe(await me.json().catch(()=>{}),n()),_e={...le,state:"enrolling",enrollmentId:Ce.enrollmentId,deviceCode:Ce.deviceCode,userCode:Ce.userCode,verificationUri:Ce.verificationUri,verificationUriComplete:Ce.verificationUriComplete,interval:Ce.interval,expiresAt:new Date(n().getTime()+Ce.expiresIn*1e3).toISOString()};await t.credentialStore.write({connect:_e});let P=!1;if(R.openBrowser!==!1&&t.openBrowser)try{await t.openBrowser(_e.verificationUriComplete),P=!0}catch{P=!1}let D=p;return NAe({enrollment:_e,credentialStore:t.credentialStore,connectApiUrl:o,connectWsUrl:s,fetchImpl:e,sleep:r,now:n,randomBytes:i,canceled:()=>f||D!==p}).catch(()=>{}),{state:"pending",verificationUri:_e.verificationUri,verificationUriComplete:_e.verificationUriComplete,userCode:_e.userCode,expiresAt:_e.expiresAt,browserOpened:P}})},async logout(){return B(async()=>{F("canceled"),u="disabled",await t.configStore.update(R=>({...R,remote:{enabled:!1}})),await t.credentialStore.write({connect:null})})},async enable(){return B(async()=>(f=!1,await _Q(t.credentialStore),await t.configStore.update(R=>({...R,remote:{enabled:!0}})),await z().catch(R=>{throw u="offline",new Fe("REMOTE_ENABLE_FAILED","Remote Bridge could not connect to Hunsu Connect.",{cause:R})}),_()))},async disable(){return B(async()=>(F("canceled"),u="disabled",await t.configStore.update(R=>({...R,remote:{enabled:!1}})),_()))},stop(){f=!0,F("canceled")}}}var gO=class{sessionId;input;transport;control;stream;crypto;confirmed=!1;closed=!1;signalSendQueue=Promise.resolve();controlReceiveQueue=Promise.resolve();streamReceiveQueue=Promise.resolve();controlSendQueue=Promise.resolve();streamSendQueue=Promise.resolve();requests=new Map;seenRequestIds=new Set;lifetime=new AbortController;leaseTimer;constructor(e){this.input=e,this.sessionId=e.sessionId}async handleSignal(e){if(this.closed)throw new Error("Peer session is closed.");let r=await this.input.signalCrypto.decrypt(e),n=Q4(r);if(!n.ok)throw new Error(n.error.message);let i=n.value;if(i.type==="peer.offer"){if(this.transport)throw new Error("Peer offer was repeated.");let o=await this.input.peerTransportFactory();this.transport=o;try{let s=await o.acceptOffer(i.sdp);if(this.closed||this.transport!==o)throw new Error("Peer session was superseded.");await this.sendSignal({type:"peer.answer",sdp:s.answerSdp}),o.waitForChannels(this.lifetime.signal).then(a=>{this.closed||this.transport!==o||(this.control=a.control,this.stream=a.stream,this.attachChannels(a.control,a.stream))}).catch(()=>this.close("protocol_error"))}catch(s){throw await this.close("protocol_error"),s}return}if(i.type==="peer.ice"){if(!this.transport)throw new Error("Peer ICE arrived before the offer.");await this.transport.addIceCandidate(i);return}if(i.type==="peer.answer")throw new Error("Browser cannot send a peer answer.");await this.close(i.reason==="expired"?"protocol_error":"canceled")}async close(e){if(!this.closed){this.closed=!0,this.leaseTimer&&clearTimeout(this.leaseTimer);for(let r of this.requests.values())r.abort(e);this.requests.clear(),this.confirmed&&this.crypto&&this.control?.readyState==="open"&&await this.sendEncryptedControl({type:"session.close",sessionId:this.sessionId,reason:e==="replaced"?"replaced":e==="canceled"?"canceled":"protocol_error"}).catch(()=>{}),this.lifetime.abort(e),this.control?.close(),this.stream?.close(),await this.transport?.close().catch(()=>{}),this.input.onClosed()}}attachChannels(e,r){e.onMessage(n=>{this.controlReceiveQueue=this.controlReceiveQueue.then(()=>this.handleControlData(n)).catch(()=>this.close("protocol_error"))}),r.onMessage(n=>{this.streamReceiveQueue=this.streamReceiveQueue.then(()=>this.handleUnexpectedStreamData(n)).catch(()=>this.close("protocol_error"))}),e.onStateChange(n=>{n==="closed"&&this.close("protocol_error")}),r.onStateChange(n=>{n==="closed"&&this.close("protocol_error")})}async handleControlData(e){if(!this.crypto){let i=qAe(e,16384),o;try{o=JSON.parse(i)}catch{throw new Error("Peer hello is invalid.")}let s=Z4(o);if(!s.ok||s.value.sessionId!==this.sessionId||s.value.ticket!==this.input.ticket||!jAe(s.value.browserAgreementPublicJwk,this.input.ticketClaims.browserAgreementPublicJwk))throw new Error("Peer hello binding is invalid.");this.crypto=await dU({sessionId:this.sessionId,ticket:this.input.ticket,ticketClaims:this.input.ticketClaims,browserNonce:s.value.browserNonce,deviceSigningPrivateKey:this.input.deviceSigningPrivateKey,now:this.input.now,randomBytes:this.input.randomBytes}),await this.sendPlainControl(JSON.stringify(this.crypto.serverHello));return}let r=await this.crypto.decrypt("control",e),n=e8(r);if(!n.ok||n.value.sessionId!==this.sessionId)throw new Error("Peer control message is invalid.");if(!this.confirmed){if(n.value.type!=="session.confirm"||n.value.transcriptHash!==this.crypto.transcriptHash)throw new Error("Peer did not confirm the signed transcript.");this.confirmed=!0;let i=await this.pathFreeWorkspaces();await this.sendEncryptedControl({type:"session.ready",sessionId:this.sessionId,deviceId:this.input.ticketClaims.deviceId,transcriptHash:this.crypto.transcriptHash,leaseExpiresAt:this.crypto.serverHello.leaseExpiresAt,workspaces:i});let o=Math.max(1,Date.parse(this.crypto.serverHello.leaseExpiresAt)-this.input.now().getTime());this.leaseTimer=setTimeout(()=>{this.closeForExpiredLease()},o),this.leaseTimer.unref?.();return}await this.handleConfirmedControl(n.value)}async handleConfirmedControl(e){if(e.type==="session.close"){await this.close("canceled");return}if(e.type==="stream.cancel"){let s=this.requests.get(e.requestId);s&&s.abort(e.reason??"browser_cancel");return}if(e.type!=="command.request")throw new Error("Peer sent a server-only control message.");if(this.requests.size>=X4||this.seenRequestIds.has(e.requestId)||this.seenRequestIds.size>=1024){await this.sendCommandResult(e,{ok:!1,status:429,error:"Peer command concurrency or identity bound was exceeded."});return}let r=Date.parse(e.deadline);if(!Number.isFinite(r)||r<=this.input.now().getTime()||r>Date.parse(this.crypto.serverHello.leaseExpiresAt)){await this.sendCommandResult(e,{ok:!1,status:408,error:"Peer command deadline is invalid or expired."});return}this.seenRequestIds.add(e.requestId);let n=new AbortController;this.requests.set(e.requestId,n);let i=setTimeout(()=>n.abort("deadline"),r-this.input.now().getTime());i.unref?.();let o={requestId:e.requestId,workspaceId:e.workspaceId,command:e.command,deadline:e.deadline,...e.payload===void 0?{}:{payload:e.payload}};try{if(e.command==="agentSession.events"||e.command==="live.events")await this.runStreamCommand(e,o,n);else{let s=this.input.onCommand?await this.input.onCommand(o):{ok:!1,status:503,error:"Peer command router is unavailable."};await this.sendCommandResult(e,s)}}finally{clearTimeout(i),this.requests.delete(e.requestId)}}async runStreamCommand(e,r,n){let i=`stream_${Jc.from(this.input.randomBytes(18)).toString("base64url")}`;await this.sendEncryptedControl({type:"command.result",sessionId:this.sessionId,requestId:e.requestId,workspaceId:e.workspaceId,status:202,ok:!0,body:{streamId:i}}),await this.sendEncryptedStream({type:"stream.open",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId});let o=0,s=this.input.onCommandStream?await this.input.onCommandStream(r,{signal:n.signal,emit:a=>{o+=1,this.sendEncryptedStream({type:"stream.chunk",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId,chunkSequence:o,event:a.event,...a.data===void 0?{}:{data:a.data}}).catch(()=>n.abort("stream_send_failed"))}}):{ok:!1,status:503,error:"Peer stream router is unavailable."};await this.streamSendQueue,await this.sendEncryptedStream({type:"stream.end",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId,status:s.status,...s.ok?{}:{error:s.error}})}sendCommandResult(e,r){return this.sendEncryptedControl({type:"command.result",sessionId:this.sessionId,requestId:e.requestId,workspaceId:e.workspaceId,status:r.status,ok:r.ok,...r.ok&&r.body!==void 0?{body:r.body}:{},...r.ok?{}:{error:r.error}})}async handleUnexpectedStreamData(e){throw!this.confirmed||!this.crypto?new Error("Peer stream data arrived before authentication."):(await this.crypto.decrypt("stream",e),new Error("Browser-to-Bridge stream messages are not supported."))}sendSignal(e){let r=this.signalSendQueue.then(async()=>{let n=await this.input.signalCrypto.encrypt(e);this.input.sendSignal(n)});return this.signalSendQueue=r.catch(()=>{}),r}sendPlainControl(e){return this.control?Xk({channel:this.control,value:e,signal:this.lifetime.signal}):Promise.reject(new Error("Peer control channel is unavailable."))}sendEncryptedControl(e){let r=this.controlSendQueue.then(async()=>{if(!this.crypto||!this.control)throw new Error("Peer control channel is unavailable.");let n=await this.crypto.encrypt("control",e);await Xk({channel:this.control,value:n,signal:this.lifetime.signal})});return this.controlSendQueue=r.catch(()=>{}),r}sendEncryptedStream(e){let r=this.streamSendQueue.then(async()=>{if(!this.crypto||!this.stream)throw new Error("Peer stream channel is unavailable.");let n=await this.crypto.encrypt("stream",e);await Xk({channel:this.stream,value:n,signal:this.lifetime.signal})});return this.streamSendQueue=r.catch(()=>{}),r}async pathFreeWorkspaces(){let e=await this.input.workspaceService.list();if(!e.ok)throw new Error("Workspace registry is unavailable.");return e.value.flatMap(r=>r.lifecycle==="active"&&r.remoteAccess.enabled&&r.remoteAccess.scopes.includes("remote.access")?[{workspaceId:r.workspaceId,displayName:r.displayName,scopes:[...r.remoteAccess.scopes]}]:[])}async closeForExpiredLease(){this.closed||(this.crypto&&this.control?.readyState==="open"&&await this.sendEncryptedControl({type:"session.close",sessionId:this.sessionId,reason:"lease_expired"}).catch(()=>{}),await this.close("protocol_error"))}};async function NAe(t){let e=t.enrollment.interval;for(;!t.canceled()&&t.now().getTime()<Date.parse(t.enrollment.expiresAt);){if(await t.sleep(e*1e3),t.canceled())return;let r=new URL("/v1/device-enrollment-tokens",t.connectApiUrl),n=await yO({method:"POST",url:r.toString(),signingPrivateKey:t.enrollment.signingPrivateKey,signingPublicKey:t.enrollment.signingPublicKey,now:t.now(),randomBytes:t.randomBytes}),i=await t.fetchImpl(r,{method:"POST",headers:{accept:"application/json","content-type":"application/json",dpop:n},body:JSON.stringify({enrollmentId:t.enrollment.enrollmentId,deviceCode:t.enrollment.deviceCode}),redirect:"error",signal:AbortSignal.timeout(1e4)});if(i.ok){let a=NQ(await i.json().catch(()=>{}));await t.credentialStore.write({connect:MAe(t.enrollment,a,t.connectWsUrl,t.now())});return}let o=await i.json().catch(()=>{}),s=mR(o)&&typeof o.error=="string"?o.error:void 0;if(s!=="authorization_pending"){if(s==="slow_down"){e=Math.min(30,e+5);continue}if(s==="expired_token"||s==="access_denied")return;if(!(i.status>=500))return}}}async function OAe(t){if(Date.parse(t.credential.expiresAt)>t.now().getTime()+6e4)return t.credential;let e=new URL("/v1/device-tokens",t.connectApiUrl),r=await yO({method:"POST",url:e.toString(),signingPrivateKey:t.credential.signingPrivateKey,signingPublicKey:t.credential.signingPublicKey,now:t.now(),randomBytes:t.secureRandom}),n=await t.fetchImpl(e,{method:"POST",headers:{accept:"application/json","content-type":"application/json",dpop:r},body:JSON.stringify({refreshToken:t.credential.refreshToken}),redirect:"error",signal:AbortSignal.timeout(1e4)});if(!n.ok)throw new Fe("ACCOUNT_LOGIN_REQUIRED","Hunsu Connect device credentials could not be refreshed.");let i=NQ(await n.json().catch(()=>{}));if(i.deviceId!==t.credential.deviceId||i.accountId!==t.credential.accountId)throw new Error("Refreshed Connect credential binding changed.");let o={...t.credential,accessToken:i.accessToken,refreshToken:i.refreshToken,expiresAt:new Date(t.now().getTime()+i.expiresIn*1e3).toISOString()};return await t.credentialStore.write({connect:o}),o}async function yO(t){let e={typ:"dpop+jwt",alg:"ES256",jwk:Qr(t.signingPublicKey)},r={jti:Jc.from(t.randomBytes(24)).toString("base64url"),htm:t.method.toUpperCase(),htu:OQ(t.url),iat:Math.floor(t.now.getTime()/1e3),...t.accessToken?{ath:lR(await hO.subtle.digest("SHA-256",fR(t.accessToken)))}:{}},n=lR(fR(JSON.stringify(e))),i=lR(fR(JSON.stringify(r))),o=await hO.subtle.importKey("jwk",zAe(t.signingPrivateKey),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),s=await hO.subtle.sign({name:"ECDSA",hash:"SHA-256"},o,fR(`${n}.${i}`));return`${n}.${i}.${lR(s)}`}async function _Q(t){let e=await t.read();if(!e?.connect||e.connect.state!=="registered")throw new Fe("ACCOUNT_LOGIN_REQUIRED","Enroll this Bridge with Hunsu Connect before enabling Remote access.");return e.connect}function MAe(t,e,r,n){return{signingPrivateKey:t.signingPrivateKey,signingPublicKey:t.signingPublicKey,agreementPrivateKey:t.agreementPrivateKey,agreementPublicKey:t.agreementPublicKey,state:"registered",deviceId:e.deviceId,accountId:e.accountId,accessToken:e.accessToken,refreshToken:e.refreshToken,expiresAt:new Date(n.getTime()+e.expiresIn*1e3).toISOString(),connectWsUrl:r}}function LAe(t,e){if(!mR(t)||t.schema!=="hunsu.connect.enrollment-created.v1"||!xi(t.enrollmentId,256)||!xi(t.deviceCode,512)||!xi(t.userCode,64)||!Number.isInteger(t.expiresIn)||Number(t.expiresIn)<60||Number(t.expiresIn)>900||!Number.isInteger(t.interval)||Number(t.interval)<1||Number(t.interval)>30)throw new Error("Connect enrollment response is invalid.");let r=TQ(t.verificationUri),n=TQ(t.verificationUriComplete);if(new URL(r).origin!==new URL(n).origin)throw new Error("Connect verification origins do not match.");return{schema:"hunsu.connect.enrollment-created.v1",enrollmentId:t.enrollmentId,deviceCode:t.deviceCode,userCode:t.userCode,verificationUri:r,verificationUriComplete:n,expiresIn:Number(t.expiresIn),interval:Number(t.interval)}}function NQ(t){if(!mR(t)||t.schema!=="hunsu.connect.device-token.v1"||t.tokenType!=="DPoP"||!xi(t.accessToken,8*1024)||!xi(t.refreshToken,8*1024)||!xi(t.deviceId,256)||!xi(t.accountId,256)||t.expiresIn!==300)throw new Error("Connect device token response is invalid.");return t}function HAe(t){return!mR(t)||t.schema!==G4||typeof t.type!="string"?!1:t.type==="connect.authenticated"?pR(t,["schema","type","deviceId","accountId","expiresAt"])&&xi(t.deviceId,256)&&xi(t.accountId,256)&&BQ(t.expiresAt):t.type==="connect.session"?pR(t,["schema","type","sessionId","ticket","expiresAt"])&&xi(t.sessionId,256)&&xi(t.ticket,8*1024)&&BQ(t.expiresAt):t.type==="connect.ready"?pR(t,["schema","type","sessionId"])&&xi(t.sessionId,256):t.type==="connect.closed"?pR(t,["schema","type","sessionId","reason"])&&xi(t.sessionId,256)&&(t.reason==="expired"||t.reason==="replaced"||t.reason==="revoked"||t.reason==="peer_disconnected"||t.reason==="protocol_error"):!1}function UAe(t){let e=typeof t=="string"?t:t instanceof ArrayBuffer?Jc.from(t).toString("utf8"):ArrayBuffer.isView(t)?Jc.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8"):void 0;if(!e||Jc.byteLength(e,"utf8")>128*1024)throw new Error("Connect frame is invalid or too large.");try{return JSON.parse(e)}catch{throw new Error("Connect frame is not valid JSON.")}}async function $Ae(t,e){t.readyState!==1&&await new Promise((r,n)=>{let i=setTimeout(()=>a(new Error("Connect WebSocket open timed out.")),e);i.unref?.();let o=()=>a(),s=()=>a(new Error("Connect WebSocket could not open."));t.addEventListener("open",o),t.addEventListener("close",s),t.addEventListener("error",s);function a(c){clearTimeout(i),t.removeEventListener?.("open",o),t.removeEventListener?.("close",s),t.removeEventListener?.("error",s),c?n(c):r()}})}async function FAe(t){let e=await Promise.resolve().then(()=>(PQ(),CQ));return new e.WebSocket(t.url,{headers:t.headers})}function jAe(t,e){let r=Qr(t),n=Qr(e);return r.x===n.x&&r.y===n.y}function qAe(t,e){let r=typeof t=="string"?t:Jc.from(t).toString("utf8");if(Jc.byteLength(r,"utf8")>e)throw new Error("Peer plaintext frame is too large.");return r}function WAe(t){let e=t.trim();if(!e||e.length>128||/[\u0000-\u001f\u007f]/u.test(e))throw new Error("Bridge device name is invalid.");return e}function VAe(t){let e=new URL(t);if(e.protocol!=="https:"&&!(e.protocol==="http:"&&vO(e.hostname)))throw new Error("Connect API URL must use HTTPS.");if(e.username||e.password||e.search||e.hash)throw new Error("Connect API URL is invalid.");return e.toString()}function GAe(t){let e=new URL(t);if(e.protocol!=="wss:"&&!(e.protocol==="ws:"&&vO(e.hostname)))throw new Error("Connect WebSocket URL must use WSS.");if(e.username||e.password||e.search||e.hash)throw new Error("Connect WebSocket URL is invalid.");return e.toString()}function TQ(t){if(typeof t!="string")throw new Error("Connect verification URL is invalid.");let e=new URL(t);if(e.protocol!=="https:"&&!(e.protocol==="http:"&&vO(e.hostname)))throw new Error("Connect verification URL must use HTTPS.");if(e.username||e.password||e.hash)throw new Error("Connect verification URL is invalid.");return e.toString()}function OQ(t){let e=new URL(t);return e.protocol==="wss:"&&(e.protocol="https:"),e.protocol==="ws:"&&(e.protocol="http:"),e.hash="",e.toString()}function zAe(t){if(!xi(t.d,128))throw new Error("Device signing private key is invalid.");return{...Qr({kty:t.kty,crv:t.crv,x:t.x,y:t.y}),d:t.d,ext:!0}}function lR(t){return Jc.from(t instanceof Uint8Array?t:new Uint8Array(t)).toString("base64url")}function fR(t){return new TextEncoder().encode(t)}function pR(t,e){let r=Object.keys(t);return r.length===e.length&&r.every(n=>e.includes(n))}function xi(t,e){return typeof t=="string"&&t.length>0&&t.length<=e&&!/[\u0000-\u001f\u007f]/u.test(t)}function BQ(t){return xi(t,64)&&Number.isFinite(Date.parse(t))}function vO(t){return t==="localhost"||t==="127.0.0.1"||t==="[::1]"||t==="::1"}function mR(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function KAe(t){return new Promise(e=>{setTimeout(e,t).unref?.()})}import{isAbsolute as LQ,normalize as JAe,resolve as kXe}from"node:path";function HQ(t){let e=t.fetchImpl??fetch;return async r=>{let n=t.endpoint();if(!n)return ji(503,"Bridge is still starting.");let i=await $Q(t.workspaceService,r);if(!i.ok)return i.error;let o=XAe(r,i.value);if(!o)return ji(400,"Remote command is not supported by this Bridge protocol.");try{let s=await e(new URL(o.path,n),{method:o.method,headers:{[Iu]:t.controlToken(),...o.body===void 0?{}:{"content-type":"application/json"}},...o.body===void 0?{}:{body:JSON.stringify(o.body)},redirect:"error",signal:AbortSignal.timeout(9e3)}),a=await s.json().catch(()=>{});if(!s.ok)return ji(s.status,"Local Bridge command failed.");let c=xO(a,o.workspaceId),u=Xr(hR(c,o.resultScope==="workspace"?o.authorizedRoot:void 0));return _s(u),{ok:!0,status:s.status,...a===void 0?{}:{body:u}}}catch{return ji(503,"Local Bridge command is unavailable.")}}}function UQ(t){let e=t.fetchImpl??fetch;return async(r,n)=>{let i=t.endpoint();if(!i)return ji(503,"Bridge is still starting.");let o=await $Q(t.workspaceService,r);if(!o.ok||!o.value)return o.ok?ji(403,"Remote command Workspace is not granted."):o.error;let s=o.value,a=YAe(r,s);if(!a)return ji(400,"Remote event command is not supported by this Bridge protocol.");let c=AbortSignal.timeout(t.timeoutMs??5*6e4),u=AbortSignal.any([n.signal,c]);try{let d=await e(new URL(a.path,i),{method:"GET",headers:{[Iu]:t.controlToken(),accept:"text/event-stream"},redirect:"error",signal:u});return!d.ok||!d.body?ji(d.ok?502:d.status,"Local Bridge event stream is unavailable."):(await rCe(d.body,l=>{let f=Xr(hR(l.data,s.repositoryPath));_s(f),n.emit({event:l.event,...l.data===void 0?{}:{data:f}})}),{ok:!0,status:200})}catch(d){return n.signal.aborted?ji(499,"Remote event stream was canceled."):c.aborted||d instanceof Error&&d.name==="TimeoutError"?ji(504,"Remote event stream timed out."):ji(503,"Local Bridge event stream is unavailable.")}}}async function $Q(t,e){let r=await t.list();if(!r.ok)return{ok:!1,error:ji(503,"Workspace registry is unavailable.")};let n=r.value.find(o=>o.lifecycle==="active"&&o.remoteAccess.enabled&&o.remoteAccess.scopes.includes("remote.access")&&o.workspaceId===e.workspaceId),i=Y4(e.command);return n&&i.some(o=>!n.remoteAccess.scopes.includes(o))?{ok:!1,error:ji(403,"Remote command scope is not granted.")}:n?{ok:!0,value:n}:{ok:!1,error:ji(403,"Remote command Workspace is not granted.")}}function XAe(t,e){if(!e||t.workspaceId!==e.workspaceId)return;let r=FQ(t.payload);if(gR(r))return;let n=QAe(t.command,r,e);if(n)return n;let i=e.workspaceId,o=ri(r,"roadmapId");if(o&&o!==i)return;let s={...r??{},roadmapId:i},a=`/api/roadmaps/${encodeURIComponent(i)}`,c=ZAe(t.command,a,s);return c?{...c,authorizedRoot:e.repositoryPath,workspaceId:e.workspaceId,resultScope:"workspace"}:void 0}function YAe(t,e){let r=FQ(t.payload);if(gR(r))return;let n=ri(r,"roadmapId");if(n&&n!==e.workspaceId)return;let i=`/api/roadmaps/${encodeURIComponent(e.workspaceId)}`;if(t.command==="live.events")return{path:`${i}/runs/events`};if(t.command==="agentSession.events"){let o=ri(r,"sessionId");return o?{path:`${i}/agent-sessions/${encodeURIComponent(o)}/events`}:void 0}}function QAe(t,e,r){let n=o=>({...o,workspaceId:r.workspaceId,resultScope:"global"}),i=o=>({...o,authorizedRoot:r.repositoryPath,workspaceId:r.workspaceId,resultScope:"workspace"});switch(t){case"health":return n({method:"GET",path:"/health"});case"bridge.status":return n({method:"GET",path:"/api/bridge/status"});case"connection.status":return n({method:"GET",path:"/api/connection/status"});case"provider.inventory":{let o=ri(e,"backendId");return n({method:"GET",path:`/api/providers/inventory${o?`?backendId=${encodeURIComponent(o)}`:""}`})}case"modelAlias.validate":return n({method:"POST",path:"/api/model-aliases/validate",body:e??{}});case"modelAlias.resolve":return n({method:"POST",path:"/api/model-aliases/resolve",body:e??{}});case"roadmap.registry.list":return n({method:"GET",path:"/api/roadmaps/recent"});case"roadmap.registry.remove":return i({method:"POST",path:"/api/roadmaps/recent/remove",body:{roadmapId:r.workspaceId}});case"roadmap.open":return i({method:"POST",path:"/api/roadmaps/open",body:{path:r.repositoryPath}});case"roadmap.port.inspect":return i({method:"POST",path:"/api/roadmaps/port/inspect",body:{...e??{},path:r.repositoryPath}});case"roadmap.port.apply":return i({method:"POST",path:"/api/roadmaps/port/apply",body:{...e??{},path:r.repositoryPath}});case"roadmap.create":return i({method:"POST",path:"/api/roadmaps/create",body:{...e??{},path:r.repositoryPath}});default:return}}function ZAe(t,e,r){switch(t){case"roadmap.board":return{method:"GET",path:`${e}/board`};case"roadmap.worktree":return{method:"GET",path:`${e}/worktree`};case"roadmap.skills":return{method:"GET",path:`${e}/skills`};case"roadmap.commands":return{method:"POST",path:`${e}/commands`,body:r};case"execute.status":return{method:"GET",path:`${e}/runs`};case"execute.start":return{method:"POST",path:`${e}/runs/start`,body:r};case"execute.pause":return{method:"POST",path:`${e}/runs/pause`,body:r};case"execute.resume":return{method:"POST",path:`${e}/runs/resume`,body:r};case"execute.stop":return{method:"POST",path:`${e}/runs/stop`,body:r};case"execute.completeMove":return{method:"POST",path:`${e}/runs/complete-move`,body:r};case"artifactAction.list":return{method:"GET",path:`${e}/artifact-actions`};case"artifactAction.runs":return{method:"GET",path:`${e}/action-runs`};case"artifactAction.start":{let n=ri(r,"actionId");return n?{method:"POST",path:`${e}/artifact-actions/${encodeURIComponent(n)}/runs`,body:r}:void 0}case"artifactAction.stop":{let n=ri(r,"runId");return n?{method:"POST",path:`${e}/action-runs/${encodeURIComponent(n)}/stop`,body:r}:void 0}case"moveFile.tree":case"moveFile.blob":case"moveFile.diff":{let n=ri(r,"moveId");if(!n)return;let i=t.slice(9),o=ri(r,"path");return{method:"GET",path:`${e}/moves/${encodeURIComponent(n)}/files/${i}${o?`?path=${encodeURIComponent(o)}`:""}`}}case"hunsuDraft.list":return{method:"GET",path:`${e}/hunsu/drafts`};case"hunsuDraft.start":return{method:"POST",path:`${e}/hunsu/drafts`,body:r};case"hunsuDraft.get":return Vx("GET",e,r);case"hunsuDraft.message":return Vx("POST",e,r,"messages");case"hunsuDraft.diffArtifact.create":return Vx("POST",e,r,"diff-artifacts");case"hunsuDraft.diffArtifact.get":{let n=ri(r,"draftSessionId"),i=ri(r,"diffArtifactId");return n&&i?{method:"GET",path:`${e}/hunsu/drafts/${encodeURIComponent(n)}/diff-artifacts/${encodeURIComponent(i)}`}:void 0}case"hunsuDraft.approve":return Vx("POST",e,r,"approve");case"hunsuDraft.discard":return Vx("POST",e,r,"discard");case"line.accept":return{method:"POST",path:`${e}/lines/accept`,body:r};case"line.reject":return{method:"POST",path:`${e}/lines/reject`,body:r};case"agentSession.list":return{method:"GET",path:`${e}/agent-sessions`};case"agentSession.get":{let n=ri(r,"sessionId");return n?{method:"GET",path:`${e}/agent-sessions/${encodeURIComponent(n)}`}:void 0}case"agentSession.events":case"live.events":return;default:return}}function Vx(t,e,r,n){let i=ri(r,"draftSessionId");return i?{method:t,path:`${e}/hunsu/drafts/${encodeURIComponent(i)}${n?`/${n}`:""}`,...t==="POST"?{body:r}:{}}:void 0}function hR(t,e){if(Array.isArray(t))return t.map(i=>hR(i,e));if(typeof t=="string")return tCe(t,e);if(!Gx(t))return t;let r={},n=!1;for(let[i,o]of Object.entries(t)){if(iCe(i)&&typeof o=="string"&&!eCe(o,e)){n=!0;continue}r[i]=hR(o,e)}return n&&(r.pathRedacted=!0),r}function eCe(t,e){if(!e||LQ(t))return!1;let r=JAe(t);return r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)}function tCe(t,e){let r=t;if(e){r=r.replaceAll(e,"[redacted-path]");let n=e.replace(/\\/gu,"/");n!==e&&(r=r.replaceAll(n,"[redacted-path]"))}return r.replace(/(?<![:\w])\/(?:home|Users|tmp|var|private|opt|srv|mnt|Volumes)\/[^\s"'<>]+/gu,"[redacted-path]").replace(/\b[A-Za-z]:\\[^\r\n"'<>]+/gu,"[redacted-path]")}async function rCe(t,e){let r=t.getReader(),n=new TextDecoder,i="";try{for(;;){let o=await r.read();if(i+=o.value?n.decode(o.value,{stream:!o.done}):n.decode(),i.length>1048576)throw new Error("Remote event buffer exceeded its bound.");for(;;){let s=nCe(i);if(!s)break;let a=i.slice(0,s.index);i=i.slice(s.index+s.length);let c=MQ(a);c&&e(c)}if(o.done){let s=MQ(i);s&&e(s);return}}}finally{r.releaseLock()}}function nCe(t){let e=t.indexOf(`
265
+ `).filter(Boolean),n=r.filter(s=>s.startsWith("m="));if(n.length!==1||!/^m=application \d+ UDP\/DTLS\/SCTP webrtc-datachannel$/u.test(n[0]))throw sr("Peer SDP must contain exactly one WebRTC DataChannel section.");if(r.some(s=>/^m=(audio|video)\b/u.test(s)))throw sr("Peer SDP requested unsupported media.");let i=r.filter(s=>s.startsWith("a=candidate:"));if(i.length>64||i.some(s=>!/ typ (?:host|srflx)(?: |$)/u.test(s)))throw sr("Peer SDP contains invalid ICE candidates.");if(!r.some(s=>/^a=ice-ufrag:[A-Za-z0-9+/]{4,256}$/u.test(s))||!r.some(s=>/^a=ice-pwd:[A-Za-z0-9+/]{22,256}$/u.test(s))||!r.some(s=>t==="offer"?s==="a=setup:actpass":/^a=setup:(?:active|passive)$/u.test(s)))throw sr("Peer SDP ICE or DTLS setup is invalid.");let o=[...new Set(r.flatMap(s=>{let a=s.match(/^a=fingerprint:sha-256 ((?:[0-9A-F]{2}:){31}[0-9A-F]{2})$/u);return a?.[1]?[a[1]]:[]}))];if(o.length!==1)throw sr("Peer SDP must contain one consistent SHA-256 fingerprint.");return{fingerprint:o[0]}}function fU(t){if(typeof t!="string"||t.length>2048||!/^candidate:[^\r\n]+ typ (?:host|srflx)(?: |$)/u.test(t))throw sr("Peer ICE candidate is invalid.")}function ome(t){return Ci(JSON.stringify({v:1,sessionId:t.sessionId,accountId:t.accountId,deviceId:t.deviceId,ticketDigest:t.ticketDigest,browserAgreementPublicJwk:Qr(t.browserAgreementPublicJwk),bridgeEphemeralPublicJwk:Qr(t.bridgeEphemeralPublicJwk),browserNonce:t.browserNonce,bridgeNonce:t.bridgeNonce,leaseExpiresAt:t.leaseExpiresAt}))}async function dw(t,e){return{key:await xr.importKey("raw",t,{name:"AES-GCM"},!1,["encrypt","decrypt"]),noncePrefix:(await vp(Ci(`hunsu.peer.data.nonce/${e}`))).slice(0,4),sequence:0}}async function pU(t,e,r){let n=Ci(JSON.stringify(e));if(n.byteLength>dg-16)throw sr("Peer plaintext exceeds its bound.");let i=t.sequence+1;if(i>ime)throw sr("Peer frame sequence is exhausted.");let o=IP(t.noncePrefix,i),s=await xr.encrypt({name:"AES-GCM",iv:o,additionalData:Ci(`${r}:${i}`),tagLength:128},t.key,n);return t.sequence=i,{sequence:i,nonce:_u(o),ciphertext:_u(s)}}async function mU(t,e,r,n,i,o){let s=yp(r,12,12);if(!Ya.from(s).equals(Ya.from(o)))throw sr("Peer frame nonce is invalid.");let a=yp(n,16,dg),c;try{c=await xr.decrypt({name:"AES-GCM",iv:o,additionalData:Ci(`${i}:${e}`),tagLength:128},t,a)}catch{throw sr("Peer frame authentication failed.")}try{return JSON.parse(Ya.from(c).toString("utf8"))}catch{throw sr("Peer frame plaintext is invalid.")}}function sme(t,e,r){if(!EP(t)||!bP(t,["version","sessionId","channel","sequence","nonce","ciphertext"])||t.version!==Oa||t.sessionId!==e||t.channel!==r||!Number.isSafeInteger(t.sequence)||Number(t.sequence)<1||!hl(t.nonce,16)||!hl(t.ciphertext,Math.ceil(dg*4/3)))throw sr("Peer frame fields are invalid.");return t}function IP(t,e){let r=new Uint8Array(12);return r.set(t,0),new DataView(r.buffer).setBigUint64(4,BigInt(e),!1),r}function iU(t){return`${Gf}:${t}`}function oU(t,e){return`${Oa}:${t}:${e}`}function sU(t,e){try{let r=yp(t,2,8192),n=JSON.parse(Ya.from(r).toString("utf8"));if(!EP(n))throw new Error;return n}catch{throw sr(`${e} is invalid.`)}}async function hU(t){return xr.importKey("jwk",lw(t),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"])}async function gU(t){return xr.importKey("jwk",Qr(t),{name:"ECDH",namedCurve:"P-256"},!1,[])}function lw(t){if(!hl(t.d,128))throw sr("P-256 private key is invalid.");return{...Qr({kty:t.kty,crv:t.crv,x:t.x,y:t.y}),d:t.d,ext:!0}}function Qr(t){if(!EP(t)||t.kty!=="EC"||t.crv!=="P-256"||!hl(t.x,128)||!hl(t.y,128)||t.d!==void 0)throw sr("P-256 public key is invalid.");return yp(t.x,32,32),yp(t.y,32,32),{crv:"P-256",kty:"EC",x:t.x,y:t.y}}function ame(t,e){let r=Qr(t),n=Qr(e);return r.x===n.x&&r.y===n.y}function bP(t,e){let r=Object.keys(t).sort(),n=[...e].sort();return r.length===n.length&&r.every((i,o)=>i===n[o])}function yp(t,e,r){if(!/^[A-Za-z0-9_-]+$/u.test(t)||t.length%4===1)throw sr("Base64url value is invalid.");let n=Ya.from(t,"base64url");if(n.byteLength<e||n.byteLength>r||n.toString("base64url")!==t)throw sr("Base64url value has an invalid size or encoding.");return new Uint8Array(n)}function _u(t){return Ya.from(t instanceof Uint8Array?t:new Uint8Array(t)).toString("base64url")}function Ci(t){return new TextEncoder().encode(t)}async function vp(t){return new Uint8Array(await xr.digest("SHA-256",t))}function hl(t,e){return typeof t=="string"&&t.length>0&&t.length<=e&&!/[\u0000-\u001f\u007f]/u.test(t)}function EP(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function sr(t){return new Error(t)}import{Buffer as n1e}from"node:buffer";function yY(t={}){return async()=>{let e=await(t.loadWerift??d1e)(),r=new e.RTCPeerConnection({iceServers:[{urls:K3}],iceTransportPolicy:"all",maxMessageSize:128*1024});return i1e(r,t.channelTimeoutMs??1e4)}}async function Xk(t){let e=t.highWaterMark??1048576,r=t.lowWaterMark??256*1024;if(t.channel.readyState!=="open")throw new Error("Peer DataChannel is not open.");if(t.channel.bufferedAmount>e&&(t.channel.bufferedAmountLowThreshold=r,await c1e(t.channel,t.signal,t.timeoutMs??1e4)),t.signal.aborted||t.channel.readyState!=="open")throw new Error("Peer DataChannel send was canceled.");if(t.channel.send(t.value),t.channel.bufferedAmount>e*2)throw new Error("Peer DataChannel backpressure bound was exceeded.")}function i1e(t,e){let r=new Map,n,i=!1,o=t.onDataChannel.subscribe(s=>{try{let a=o1e(s);if(!s.isCreatedByRemote||a.label!==P1&&a.label!==_1||r.has(a.label))throw new Error("Peer offered an unexpected DataChannel.");G6(a),r.set(a.label,a)}catch(a){n=a instanceof Error?a:new Error("Peer DataChannel is invalid."),t.close()}});return{async acceptOffer(s,a){if(i)throw new Error("Peer transport is closed.");if(wP("offer",s),await t.setRemoteDescription({type:"offer",sdp:s}),n)throw n;let c=await t.createAnswer();await t.setLocalDescription(c),await a1e(t,a,e);let u=t.localDescription?.sdp;if(!u)throw new Error("Peer answer SDP is unavailable.");return wP("answer",u),{answerSdp:u}},waitForChannels(s){return i?Promise.reject(new Error("Peer transport is closed.")):s1e(r,()=>n,s,e)},async addIceCandidate(s){if(i)throw new Error("Peer transport is closed.");fU(s.candidate),await t.addIceCandidate(s)},async close(){if(!i){i=!0,o.unSubscribe();for(let s of r.values())s.close();r.clear(),await t.close()}}}}function o1e(t){return{get label(){return t.label},get ordered(){return t.ordered},get maxRetransmits(){return t.maxRetransmits},get maxPacketLifeTime(){return t.maxPacketLifeTime},get readyState(){return t.readyState},get bufferedAmount(){return t.bufferedAmount},get bufferedAmountLowThreshold(){return t.bufferedAmountLowThreshold},set bufferedAmountLowThreshold(e){t.bufferedAmountLowThreshold=e},send(e){t.send(typeof e=="string"?e:n1e.from(e))},close(){t.close()},onMessage(e){let r=t.onMessage.subscribe(n=>e(typeof n=="string"?n:new Uint8Array(n)));return()=>r.unSubscribe()},onStateChange(e){let r=t.stateChange.subscribe(e);return()=>r.unSubscribe()},onBufferedAmountLow(e){let r=t.bufferedAmountLow.subscribe(e);return()=>r.unSubscribe()}}}function G6(t){if(!t.ordered||t.maxRetransmits!==void 0||t.maxPacketLifeTime!==void 0)throw new Error("Peer DataChannels must be reliable and ordered.")}async function s1e(t,e,r,n){let i=Date.now()+n;for(;Date.now()<i;){if(r?.aborted)throw new Error("Peer negotiation was canceled.");let o=e();if(o)throw o;let s=t.get(P1),a=t.get(_1);if(s&&a)return G6(s),G6(a),{control:s,stream:a};await u1e(r)}throw new Error("Peer did not open both required DataChannels.")}async function a1e(t,e,r){t.iceGatheringState!=="complete"&&await new Promise((n,i)=>{let o=setTimeout(()=>c(new Error("Peer ICE gathering timed out.")),r);o.unref?.();let s=t.iceGatheringStateChange.subscribe(u=>{u==="complete"&&c()}),a=()=>c(new Error("Peer ICE gathering was canceled."));e?.addEventListener("abort",a,{once:!0});function c(u){clearTimeout(o),s.unSubscribe(),e?.removeEventListener("abort",a),u?i(u):n()}})}function c1e(t,e,r){return new Promise((n,i)=>{let o=setTimeout(()=>u(new Error("Peer DataChannel remained backpressured.")),r);o.unref?.();let s=t.onBufferedAmountLow(()=>u()),a=t.onStateChange(d=>{d!=="open"&&u(new Error("Peer DataChannel closed while backpressured."))}),c=()=>u(new Error("Peer DataChannel send was canceled."));e.addEventListener("abort",c,{once:!0});function u(d){clearTimeout(o),s(),a(),e.removeEventListener("abort",c),d?i(d):n()}})}function u1e(t){return new Promise((e,r)=>{let n=setTimeout(()=>{t?.removeEventListener("abort",i),e()},5),i=()=>{clearTimeout(n),t?.removeEventListener("abort",i),r(new Error("Peer negotiation was canceled."))};t?.addEventListener("abort",i,{once:!0})})}async function d1e(){return await Promise.resolve().then(()=>(gY(),hY))}function DQ(t){let e=t.fetchImpl??fetch,r=t.sleep??KAe,n=t.now??(()=>new Date),i=t.randomBytes??DAe,o=VAe(t.connectApiUrl),s=GAe(t.connectWsUrl),a=t.socketFactory??FAe,c=t.peerTransportFactory??yY(),u="disabled",d,l,f=!1,p=0,g=0,v,b=Promise.resolve(),C=new Map,B=R=>{let V=b.then(R,R);return b=V.then(()=>{},()=>{}),V},_=async()=>{let[R,V,le]=await Promise.all([t.configStore.read(),t.credentialStore.read(),t.workspaceService.list()]),se=V?.connect?.state==="registered"?V.connect:void 0,H=le.ok?le.value.filter(G=>G.lifecycle==="active"&&G.remoteAccess.enabled&&G.remoteAccess.scopes.includes("remote.access")).map(G=>G.workspaceId):[];return{enabled:R.remote.enabled,signedIn:!!se?.refreshToken,...se?.accountId?{accountId:se.accountId}:{},connection:se?R.remote.enabled?u:"disabled":"signed_out",...se?.deviceId?{deviceId:se.deviceId}:{},...l?{peerSessionId:l.sessionId}:{},grantedWorkspaceIds:R.remote.enabled&&se?H:[],protocolVersion:Oa}},F=(R="canceled")=>{p+=1;let V=d;d=void 0,V?.close(1e3,R);let le=l;l=void 0,le?.close(R),v=void 0},he=(R,V)=>C.has(R)||C.size>=1024?!1:(C.set(R,V),!0),z=async()=>{let R=++p;if(f||!(await t.configStore.read()).remote.enabled)return;u="connecting";let le=await _Q(t.credentialStore);if(le=await OAe({credential:le,credentialStore:t.credentialStore,connectApiUrl:o,fetchImpl:e,now:n,secureRandom:i}),f||R!==p)return;let se=OQ(s),H=await yO({method:"GET",url:se,signingPrivateKey:le.signingPrivateKey,signingPublicKey:le.signingPublicKey,accessToken:le.accessToken,now:n(),randomBytes:i}),G=await a({url:s,headers:{authorization:`DPoP ${le.accessToken}`,dpop:H}});if(await $Ae(G,1e4),f||R!==p){G.close(1e3,"superseded");return}d=G,g=0;let j=Promise.resolve(),me=_e=>{j=j.then(()=>de(_e.data,le,G,R)).catch(()=>{G.close(1008,"invalid_connect_frame")})},Ce=()=>{if(d===G&&(d=void 0),R!==p||f)return;u="offline",v=void 0;let _e=l;l=void 0,_e?.close("protocol_error"),Ae(R)};G.addEventListener("message",me),G.addEventListener("close",Ce),G.addEventListener("error",Ce)},Ae=R=>{let V=g++,le=Math.min(3e4,1e3*2**Math.min(V,5));r(le).then(async()=>{f||R!==p||!(await t.configStore.read()).remote.enabled||await z().catch(()=>{f||Ae(p)})})},de=async(R,V,le,se)=>{if(le!==d||se!==p)return;let H=UAe(R);if(HAe(H)){if(H.type==="connect.authenticated"){if(H.deviceId!==V.deviceId||H.accountId!==V.accountId||Date.parse(H.expiresAt)<=n().getTime())throw new Error("Connect authentication binding is invalid.");v=H.accountId,u="connected";return}if(H.type==="connect.session"){if(v!==V.accountId||Date.parse(H.expiresAt)<=n().getTime())throw new Error("Connect session arrived before authentication.");let j=await lU({ticket:H.ticket,signingPublicKey:t.connectTicketSigningPublicJwk,expectedKeyId:t.connectTicketSigningKeyId,expectedIssuer:t.connectTicketIssuer,expectedEnvironment:t.deploymentProfile,expectedSessionId:H.sessionId,expectedDeviceId:V.deviceId,now:n(),consume:he});if(j.accountId!==V.accountId)throw new Error("Connect ticket account binding is invalid.");let me=await uU({sessionId:H.sessionId,browserAgreementPublicJwk:j.browserAgreementPublicJwk,deviceAgreementPrivateKey:V.agreementPrivateKey}),Ce=l,_e=new gO({sessionId:H.sessionId,ticket:H.ticket,ticketClaims:j,signalCrypto:me,deviceSigningPrivateKey:V.signingPrivateKey,workspaceService:t.workspaceService,peerTransportFactory:c,onCommand:t.onCommand,onCommandStream:t.onCommandStream,now:n,randomBytes:i,sendSignal:P=>{if(le!==d||l!==_e)throw new Error("Connect session is no longer active.");le.send(JSON.stringify(P))},onClosed:()=>{l===_e&&(l=void 0)}});l=_e,Ce&&await Ce.close("replaced");return}if(H.type==="connect.ready"){if(l?.sessionId!==H.sessionId)throw new Error("Connect ready session binding is invalid.");return}if(l?.sessionId===H.sessionId){let j=l;l=void 0,await j.close(H.reason==="replaced"?"replaced":"protocol_error")}return}let G=z3(H);if(!G.ok||!l||G.value.sessionId!==l.sessionId)throw new Error("Connect signaling frame is invalid.");await l.handleSignal(G.value)};return{status:_,async login(R={}){return B(async()=>{f=!1;let V=await t.credentialStore.ensure();if(V.connect?.state==="registered")throw new Fe("REMOTE_CONNECTION_FAILED","This Bridge is already enrolled with Hunsu Connect.");let le=V.connect??await aU(),se=n().toISOString(),H=Jc.from(i(24)).toString("base64url"),G=WAe(t.deviceName??BAe()),j={schema:V3,deviceName:G,signingPublicJwk:Qr(le.signingPublicKey),agreementPublicJwk:Qr(le.agreementPublicKey),issuedAt:se,nonce:H,proof:await cU({deviceName:G,signingPublicJwk:le.signingPublicKey,agreementPublicJwk:le.agreementPublicKey,issuedAt:se,nonce:H,signingPrivateKey:le.signingPrivateKey})},me=await e(new URL("/v1/device-enrollments",o),{method:"POST",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify(j),redirect:"error",signal:AbortSignal.timeout(1e4)});if(!me.ok)throw new Fe("REMOTE_CONNECTION_FAILED",`Hunsu Connect enrollment could not start (HTTP ${me.status}).`);let Ce=LAe(await me.json().catch(()=>{}),n()),_e={...le,state:"enrolling",enrollmentId:Ce.enrollmentId,deviceCode:Ce.deviceCode,userCode:Ce.userCode,verificationUri:Ce.verificationUri,verificationUriComplete:Ce.verificationUriComplete,interval:Ce.interval,expiresAt:new Date(n().getTime()+Ce.expiresIn*1e3).toISOString()};await t.credentialStore.write({connect:_e});let P=!1;if(R.openBrowser!==!1&&t.openBrowser)try{await t.openBrowser(_e.verificationUriComplete),P=!0}catch{P=!1}let D=p;return NAe({enrollment:_e,credentialStore:t.credentialStore,connectApiUrl:o,connectWsUrl:s,fetchImpl:e,sleep:r,now:n,randomBytes:i,canceled:()=>f||D!==p}).catch(()=>{}),{state:"pending",verificationUri:_e.verificationUri,verificationUriComplete:_e.verificationUriComplete,userCode:_e.userCode,expiresAt:_e.expiresAt,browserOpened:P}})},async logout(){return B(async()=>{F("canceled"),u="disabled",await t.configStore.update(R=>({...R,remote:{enabled:!1}})),await t.credentialStore.write({connect:null})})},async enable(){return B(async()=>(f=!1,await _Q(t.credentialStore),await t.configStore.update(R=>({...R,remote:{enabled:!0}})),await z().catch(R=>{throw u="offline",new Fe("REMOTE_ENABLE_FAILED","Remote Bridge could not connect to Hunsu Connect.",{cause:R})}),_()))},async disable(){return B(async()=>(F("canceled"),u="disabled",await t.configStore.update(R=>({...R,remote:{enabled:!1}})),_()))},stop(){f=!0,F("canceled")}}}var gO=class{sessionId;input;transport;control;stream;crypto;confirmed=!1;closed=!1;signalSendQueue=Promise.resolve();controlReceiveQueue=Promise.resolve();streamReceiveQueue=Promise.resolve();controlSendQueue=Promise.resolve();streamSendQueue=Promise.resolve();requests=new Map;seenRequestIds=new Set;lifetime=new AbortController;leaseTimer;constructor(e){this.input=e,this.sessionId=e.sessionId}async handleSignal(e){if(this.closed)throw new Error("Peer session is closed.");let r=await this.input.signalCrypto.decrypt(e),n=Q3(r);if(!n.ok)throw new Error(n.error.message);let i=n.value;if(i.type==="peer.offer"){if(this.transport)throw new Error("Peer offer was repeated.");let o=await this.input.peerTransportFactory();this.transport=o;try{let s=await o.acceptOffer(i.sdp);if(this.closed||this.transport!==o)throw new Error("Peer session was superseded.");await this.sendSignal({type:"peer.answer",sdp:s.answerSdp}),o.waitForChannels(this.lifetime.signal).then(a=>{this.closed||this.transport!==o||(this.control=a.control,this.stream=a.stream,this.attachChannels(a.control,a.stream))}).catch(()=>this.close("protocol_error"))}catch(s){throw await this.close("protocol_error"),s}return}if(i.type==="peer.ice"){if(!this.transport)throw new Error("Peer ICE arrived before the offer.");await this.transport.addIceCandidate(i);return}if(i.type==="peer.answer")throw new Error("Browser cannot send a peer answer.");await this.close(i.reason==="expired"?"protocol_error":"canceled")}async close(e){if(!this.closed){this.closed=!0,this.leaseTimer&&clearTimeout(this.leaseTimer);for(let r of this.requests.values())r.abort(e);this.requests.clear(),this.confirmed&&this.crypto&&this.control?.readyState==="open"&&await this.sendEncryptedControl({type:"session.close",sessionId:this.sessionId,reason:e==="replaced"?"replaced":e==="canceled"?"canceled":"protocol_error"}).catch(()=>{}),this.lifetime.abort(e),this.control?.close(),this.stream?.close(),await this.transport?.close().catch(()=>{}),this.input.onClosed()}}attachChannels(e,r){e.onMessage(n=>{this.controlReceiveQueue=this.controlReceiveQueue.then(()=>this.handleControlData(n)).catch(()=>this.close("protocol_error"))}),r.onMessage(n=>{this.streamReceiveQueue=this.streamReceiveQueue.then(()=>this.handleUnexpectedStreamData(n)).catch(()=>this.close("protocol_error"))}),e.onStateChange(n=>{n==="closed"&&this.close("protocol_error")}),r.onStateChange(n=>{n==="closed"&&this.close("protocol_error")})}async handleControlData(e){if(!this.crypto){let i=qAe(e,16384),o;try{o=JSON.parse(i)}catch{throw new Error("Peer hello is invalid.")}let s=Z3(o);if(!s.ok||s.value.sessionId!==this.sessionId||s.value.ticket!==this.input.ticket||!jAe(s.value.browserAgreementPublicJwk,this.input.ticketClaims.browserAgreementPublicJwk))throw new Error("Peer hello binding is invalid.");this.crypto=await dU({sessionId:this.sessionId,ticket:this.input.ticket,ticketClaims:this.input.ticketClaims,browserNonce:s.value.browserNonce,deviceSigningPrivateKey:this.input.deviceSigningPrivateKey,now:this.input.now,randomBytes:this.input.randomBytes}),await this.sendPlainControl(JSON.stringify(this.crypto.serverHello));return}let r=await this.crypto.decrypt("control",e),n=e8(r);if(!n.ok||n.value.sessionId!==this.sessionId)throw new Error("Peer control message is invalid.");if(!this.confirmed){if(n.value.type!=="session.confirm"||n.value.transcriptHash!==this.crypto.transcriptHash)throw new Error("Peer did not confirm the signed transcript.");this.confirmed=!0;let i=await this.pathFreeWorkspaces();await this.sendEncryptedControl({type:"session.ready",sessionId:this.sessionId,deviceId:this.input.ticketClaims.deviceId,transcriptHash:this.crypto.transcriptHash,leaseExpiresAt:this.crypto.serverHello.leaseExpiresAt,workspaces:i});let o=Math.max(1,Date.parse(this.crypto.serverHello.leaseExpiresAt)-this.input.now().getTime());this.leaseTimer=setTimeout(()=>{this.closeForExpiredLease()},o),this.leaseTimer.unref?.();return}await this.handleConfirmedControl(n.value)}async handleConfirmedControl(e){if(e.type==="session.close"){await this.close("canceled");return}if(e.type==="stream.cancel"){let s=this.requests.get(e.requestId);s&&s.abort(e.reason??"browser_cancel");return}if(e.type!=="command.request")throw new Error("Peer sent a server-only control message.");if(this.requests.size>=X3||this.seenRequestIds.has(e.requestId)||this.seenRequestIds.size>=1024){await this.sendCommandResult(e,{ok:!1,status:429,error:"Peer command concurrency or identity bound was exceeded."});return}let r=Date.parse(e.deadline);if(!Number.isFinite(r)||r<=this.input.now().getTime()||r>Date.parse(this.crypto.serverHello.leaseExpiresAt)){await this.sendCommandResult(e,{ok:!1,status:408,error:"Peer command deadline is invalid or expired."});return}this.seenRequestIds.add(e.requestId);let n=new AbortController;this.requests.set(e.requestId,n);let i=setTimeout(()=>n.abort("deadline"),r-this.input.now().getTime());i.unref?.();let o={requestId:e.requestId,workspaceId:e.workspaceId,command:e.command,deadline:e.deadline,...e.payload===void 0?{}:{payload:e.payload}};try{if(e.command==="agentSession.events"||e.command==="live.events")await this.runStreamCommand(e,o,n);else{let s=this.input.onCommand?await this.input.onCommand(o):{ok:!1,status:503,error:"Peer command router is unavailable."};await this.sendCommandResult(e,s)}}finally{clearTimeout(i),this.requests.delete(e.requestId)}}async runStreamCommand(e,r,n){let i=`stream_${Jc.from(this.input.randomBytes(18)).toString("base64url")}`;await this.sendEncryptedControl({type:"command.result",sessionId:this.sessionId,requestId:e.requestId,workspaceId:e.workspaceId,status:202,ok:!0,body:{streamId:i}}),await this.sendEncryptedStream({type:"stream.open",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId});let o=0,s=this.input.onCommandStream?await this.input.onCommandStream(r,{signal:n.signal,emit:a=>{o+=1,this.sendEncryptedStream({type:"stream.chunk",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId,chunkSequence:o,event:a.event,...a.data===void 0?{}:{data:a.data}}).catch(()=>n.abort("stream_send_failed"))}}):{ok:!1,status:503,error:"Peer stream router is unavailable."};await this.streamSendQueue,await this.sendEncryptedStream({type:"stream.end",sessionId:this.sessionId,requestId:e.requestId,streamId:i,workspaceId:e.workspaceId,status:s.status,...s.ok?{}:{error:s.error}})}sendCommandResult(e,r){return this.sendEncryptedControl({type:"command.result",sessionId:this.sessionId,requestId:e.requestId,workspaceId:e.workspaceId,status:r.status,ok:r.ok,...r.ok&&r.body!==void 0?{body:r.body}:{},...r.ok?{}:{error:r.error}})}async handleUnexpectedStreamData(e){throw!this.confirmed||!this.crypto?new Error("Peer stream data arrived before authentication."):(await this.crypto.decrypt("stream",e),new Error("Browser-to-Bridge stream messages are not supported."))}sendSignal(e){let r=this.signalSendQueue.then(async()=>{let n=await this.input.signalCrypto.encrypt(e);this.input.sendSignal(n)});return this.signalSendQueue=r.catch(()=>{}),r}sendPlainControl(e){return this.control?Xk({channel:this.control,value:e,signal:this.lifetime.signal}):Promise.reject(new Error("Peer control channel is unavailable."))}sendEncryptedControl(e){let r=this.controlSendQueue.then(async()=>{if(!this.crypto||!this.control)throw new Error("Peer control channel is unavailable.");let n=await this.crypto.encrypt("control",e);await Xk({channel:this.control,value:n,signal:this.lifetime.signal})});return this.controlSendQueue=r.catch(()=>{}),r}sendEncryptedStream(e){let r=this.streamSendQueue.then(async()=>{if(!this.crypto||!this.stream)throw new Error("Peer stream channel is unavailable.");let n=await this.crypto.encrypt("stream",e);await Xk({channel:this.stream,value:n,signal:this.lifetime.signal})});return this.streamSendQueue=r.catch(()=>{}),r}async pathFreeWorkspaces(){let e=await this.input.workspaceService.list();if(!e.ok)throw new Error("Workspace registry is unavailable.");return e.value.flatMap(r=>r.lifecycle==="active"&&r.remoteAccess.enabled&&r.remoteAccess.scopes.includes("remote.access")?[{workspaceId:r.workspaceId,displayName:r.displayName,scopes:[...r.remoteAccess.scopes]}]:[])}async closeForExpiredLease(){this.closed||(this.crypto&&this.control?.readyState==="open"&&await this.sendEncryptedControl({type:"session.close",sessionId:this.sessionId,reason:"lease_expired"}).catch(()=>{}),await this.close("protocol_error"))}};async function NAe(t){let e=t.enrollment.interval;for(;!t.canceled()&&t.now().getTime()<Date.parse(t.enrollment.expiresAt);){if(await t.sleep(e*1e3),t.canceled())return;let r=new URL("/v1/device-enrollment-tokens",t.connectApiUrl),n=await yO({method:"POST",url:r.toString(),signingPrivateKey:t.enrollment.signingPrivateKey,signingPublicKey:t.enrollment.signingPublicKey,now:t.now(),randomBytes:t.randomBytes}),i=await t.fetchImpl(r,{method:"POST",headers:{accept:"application/json","content-type":"application/json",dpop:n},body:JSON.stringify({enrollmentId:t.enrollment.enrollmentId,deviceCode:t.enrollment.deviceCode}),redirect:"error",signal:AbortSignal.timeout(1e4)});if(i.ok){let a=NQ(await i.json().catch(()=>{}));await t.credentialStore.write({connect:MAe(t.enrollment,a,t.connectWsUrl,t.now())});return}let o=await i.json().catch(()=>{}),s=mR(o)&&typeof o.error=="string"?o.error:void 0;if(s!=="authorization_pending"){if(s==="slow_down"){e=Math.min(30,e+5);continue}if(s==="expired_token"||s==="access_denied")return;if(!(i.status>=500))return}}}async function OAe(t){if(Date.parse(t.credential.expiresAt)>t.now().getTime()+6e4)return t.credential;let e=new URL("/v1/device-tokens",t.connectApiUrl),r=await yO({method:"POST",url:e.toString(),signingPrivateKey:t.credential.signingPrivateKey,signingPublicKey:t.credential.signingPublicKey,now:t.now(),randomBytes:t.secureRandom}),n=await t.fetchImpl(e,{method:"POST",headers:{accept:"application/json","content-type":"application/json",dpop:r},body:JSON.stringify({refreshToken:t.credential.refreshToken}),redirect:"error",signal:AbortSignal.timeout(1e4)});if(!n.ok)throw new Fe("ACCOUNT_LOGIN_REQUIRED","Hunsu Connect device credentials could not be refreshed.");let i=NQ(await n.json().catch(()=>{}));if(i.deviceId!==t.credential.deviceId||i.accountId!==t.credential.accountId)throw new Error("Refreshed Connect credential binding changed.");let o={...t.credential,accessToken:i.accessToken,refreshToken:i.refreshToken,expiresAt:new Date(t.now().getTime()+i.expiresIn*1e3).toISOString()};return await t.credentialStore.write({connect:o}),o}async function yO(t){let e={typ:"dpop+jwt",alg:"ES256",jwk:Qr(t.signingPublicKey)},r={jti:Jc.from(t.randomBytes(24)).toString("base64url"),htm:t.method.toUpperCase(),htu:OQ(t.url),iat:Math.floor(t.now.getTime()/1e3),...t.accessToken?{ath:lR(await hO.subtle.digest("SHA-256",fR(t.accessToken)))}:{}},n=lR(fR(JSON.stringify(e))),i=lR(fR(JSON.stringify(r))),o=await hO.subtle.importKey("jwk",zAe(t.signingPrivateKey),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),s=await hO.subtle.sign({name:"ECDSA",hash:"SHA-256"},o,fR(`${n}.${i}`));return`${n}.${i}.${lR(s)}`}async function _Q(t){let e=await t.read();if(!e?.connect||e.connect.state!=="registered")throw new Fe("ACCOUNT_LOGIN_REQUIRED","Enroll this Bridge with Hunsu Connect before enabling Remote access.");return e.connect}function MAe(t,e,r,n){return{signingPrivateKey:t.signingPrivateKey,signingPublicKey:t.signingPublicKey,agreementPrivateKey:t.agreementPrivateKey,agreementPublicKey:t.agreementPublicKey,state:"registered",deviceId:e.deviceId,accountId:e.accountId,accessToken:e.accessToken,refreshToken:e.refreshToken,expiresAt:new Date(n.getTime()+e.expiresIn*1e3).toISOString(),connectWsUrl:r}}function LAe(t,e){if(!mR(t)||t.schema!=="hunsu.connect.enrollment-created.v1"||!xi(t.enrollmentId,256)||!xi(t.deviceCode,512)||!xi(t.userCode,64)||!Number.isInteger(t.expiresIn)||Number(t.expiresIn)<60||Number(t.expiresIn)>900||!Number.isInteger(t.interval)||Number(t.interval)<1||Number(t.interval)>30)throw new Error("Connect enrollment response is invalid.");let r=TQ(t.verificationUri),n=TQ(t.verificationUriComplete);if(new URL(r).origin!==new URL(n).origin)throw new Error("Connect verification origins do not match.");return{schema:"hunsu.connect.enrollment-created.v1",enrollmentId:t.enrollmentId,deviceCode:t.deviceCode,userCode:t.userCode,verificationUri:r,verificationUriComplete:n,expiresIn:Number(t.expiresIn),interval:Number(t.interval)}}function NQ(t){if(!mR(t)||t.schema!=="hunsu.connect.device-token.v1"||t.tokenType!=="DPoP"||!xi(t.accessToken,8*1024)||!xi(t.refreshToken,8*1024)||!xi(t.deviceId,256)||!xi(t.accountId,256)||t.expiresIn!==300)throw new Error("Connect device token response is invalid.");return t}function HAe(t){return!mR(t)||t.schema!==G3||typeof t.type!="string"?!1:t.type==="connect.authenticated"?pR(t,["schema","type","deviceId","accountId","expiresAt"])&&xi(t.deviceId,256)&&xi(t.accountId,256)&&BQ(t.expiresAt):t.type==="connect.session"?pR(t,["schema","type","sessionId","ticket","expiresAt"])&&xi(t.sessionId,256)&&xi(t.ticket,8*1024)&&BQ(t.expiresAt):t.type==="connect.ready"?pR(t,["schema","type","sessionId"])&&xi(t.sessionId,256):t.type==="connect.closed"?pR(t,["schema","type","sessionId","reason"])&&xi(t.sessionId,256)&&(t.reason==="expired"||t.reason==="replaced"||t.reason==="revoked"||t.reason==="peer_disconnected"||t.reason==="protocol_error"):!1}function UAe(t){let e=typeof t=="string"?t:t instanceof ArrayBuffer?Jc.from(t).toString("utf8"):ArrayBuffer.isView(t)?Jc.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8"):void 0;if(!e||Jc.byteLength(e,"utf8")>128*1024)throw new Error("Connect frame is invalid or too large.");try{return JSON.parse(e)}catch{throw new Error("Connect frame is not valid JSON.")}}async function $Ae(t,e){t.readyState!==1&&await new Promise((r,n)=>{let i=setTimeout(()=>a(new Error("Connect WebSocket open timed out.")),e);i.unref?.();let o=()=>a(),s=()=>a(new Error("Connect WebSocket could not open."));t.addEventListener("open",o),t.addEventListener("close",s),t.addEventListener("error",s);function a(c){clearTimeout(i),t.removeEventListener?.("open",o),t.removeEventListener?.("close",s),t.removeEventListener?.("error",s),c?n(c):r()}})}async function FAe(t){let e=await Promise.resolve().then(()=>(PQ(),CQ));return new e.WebSocket(t.url,{headers:t.headers})}function jAe(t,e){let r=Qr(t),n=Qr(e);return r.x===n.x&&r.y===n.y}function qAe(t,e){let r=typeof t=="string"?t:Jc.from(t).toString("utf8");if(Jc.byteLength(r,"utf8")>e)throw new Error("Peer plaintext frame is too large.");return r}function WAe(t){let e=t.trim();if(!e||e.length>128||/[\u0000-\u001f\u007f]/u.test(e))throw new Error("Bridge device name is invalid.");return e}function VAe(t){let e=new URL(t);if(e.protocol!=="https:"&&!(e.protocol==="http:"&&vO(e.hostname)))throw new Error("Connect API URL must use HTTPS.");if(e.username||e.password||e.search||e.hash)throw new Error("Connect API URL is invalid.");return e.toString()}function GAe(t){let e=new URL(t);if(e.protocol!=="wss:"&&!(e.protocol==="ws:"&&vO(e.hostname)))throw new Error("Connect WebSocket URL must use WSS.");if(e.username||e.password||e.search||e.hash)throw new Error("Connect WebSocket URL is invalid.");return e.toString()}function TQ(t){if(typeof t!="string")throw new Error("Connect verification URL is invalid.");let e=new URL(t);if(e.protocol!=="https:"&&!(e.protocol==="http:"&&vO(e.hostname)))throw new Error("Connect verification URL must use HTTPS.");if(e.username||e.password||e.hash)throw new Error("Connect verification URL is invalid.");return e.toString()}function OQ(t){let e=new URL(t);return e.protocol==="wss:"&&(e.protocol="https:"),e.protocol==="ws:"&&(e.protocol="http:"),e.hash="",e.toString()}function zAe(t){if(!xi(t.d,128))throw new Error("Device signing private key is invalid.");return{...Qr({kty:t.kty,crv:t.crv,x:t.x,y:t.y}),d:t.d,ext:!0}}function lR(t){return Jc.from(t instanceof Uint8Array?t:new Uint8Array(t)).toString("base64url")}function fR(t){return new TextEncoder().encode(t)}function pR(t,e){let r=Object.keys(t);return r.length===e.length&&r.every(n=>e.includes(n))}function xi(t,e){return typeof t=="string"&&t.length>0&&t.length<=e&&!/[\u0000-\u001f\u007f]/u.test(t)}function BQ(t){return xi(t,64)&&Number.isFinite(Date.parse(t))}function vO(t){return t==="localhost"||t==="127.0.0.1"||t==="[::1]"||t==="::1"}function mR(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function KAe(t){return new Promise(e=>{setTimeout(e,t).unref?.()})}import{isAbsolute as LQ,normalize as JAe,resolve as kXe}from"node:path";function HQ(t){let e=t.fetchImpl??fetch;return async r=>{let n=t.endpoint();if(!n)return ji(503,"Bridge is still starting.");let i=await $Q(t.workspaceService,r);if(!i.ok)return i.error;let o=XAe(r,i.value);if(!o)return ji(400,"Remote command is not supported by this Bridge protocol.");try{let s=await e(new URL(o.path,n),{method:o.method,headers:{[Iu]:t.controlToken(),...o.body===void 0?{}:{"content-type":"application/json"}},...o.body===void 0?{}:{body:JSON.stringify(o.body)},redirect:"error",signal:AbortSignal.timeout(9e3)}),a=await s.json().catch(()=>{});if(!s.ok)return ji(s.status,"Local Bridge command failed.");let c=xO(a,o.workspaceId),u=Xr(hR(c,o.resultScope==="workspace"?o.authorizedRoot:void 0));return _s(u),{ok:!0,status:s.status,...a===void 0?{}:{body:u}}}catch{return ji(503,"Local Bridge command is unavailable.")}}}function UQ(t){let e=t.fetchImpl??fetch;return async(r,n)=>{let i=t.endpoint();if(!i)return ji(503,"Bridge is still starting.");let o=await $Q(t.workspaceService,r);if(!o.ok||!o.value)return o.ok?ji(403,"Remote command Workspace is not granted."):o.error;let s=o.value,a=YAe(r,s);if(!a)return ji(400,"Remote event command is not supported by this Bridge protocol.");let c=AbortSignal.timeout(t.timeoutMs??5*6e4),u=AbortSignal.any([n.signal,c]);try{let d=await e(new URL(a.path,i),{method:"GET",headers:{[Iu]:t.controlToken(),accept:"text/event-stream"},redirect:"error",signal:u});return!d.ok||!d.body?ji(d.ok?502:d.status,"Local Bridge event stream is unavailable."):(await rCe(d.body,l=>{let f=Xr(hR(l.data,s.repositoryPath));_s(f),n.emit({event:l.event,...l.data===void 0?{}:{data:f}})}),{ok:!0,status:200})}catch(d){return n.signal.aborted?ji(499,"Remote event stream was canceled."):c.aborted||d instanceof Error&&d.name==="TimeoutError"?ji(504,"Remote event stream timed out."):ji(503,"Local Bridge event stream is unavailable.")}}}async function $Q(t,e){let r=await t.list();if(!r.ok)return{ok:!1,error:ji(503,"Workspace registry is unavailable.")};let n=r.value.find(o=>o.lifecycle==="active"&&o.remoteAccess.enabled&&o.remoteAccess.scopes.includes("remote.access")&&o.workspaceId===e.workspaceId),i=Y3(e.command);return n&&i.some(o=>!n.remoteAccess.scopes.includes(o))?{ok:!1,error:ji(403,"Remote command scope is not granted.")}:n?{ok:!0,value:n}:{ok:!1,error:ji(403,"Remote command Workspace is not granted.")}}function XAe(t,e){if(!e||t.workspaceId!==e.workspaceId)return;let r=FQ(t.payload);if(gR(r))return;let n=QAe(t.command,r,e);if(n)return n;let i=e.workspaceId,o=ri(r,"roadmapId");if(o&&o!==i)return;let s={...r??{},roadmapId:i},a=`/api/roadmaps/${encodeURIComponent(i)}`,c=ZAe(t.command,a,s);return c?{...c,authorizedRoot:e.repositoryPath,workspaceId:e.workspaceId,resultScope:"workspace"}:void 0}function YAe(t,e){let r=FQ(t.payload);if(gR(r))return;let n=ri(r,"roadmapId");if(n&&n!==e.workspaceId)return;let i=`/api/roadmaps/${encodeURIComponent(e.workspaceId)}`;if(t.command==="live.events")return{path:`${i}/runs/events`};if(t.command==="agentSession.events"){let o=ri(r,"sessionId");return o?{path:`${i}/agent-sessions/${encodeURIComponent(o)}/events`}:void 0}}function QAe(t,e,r){let n=o=>({...o,workspaceId:r.workspaceId,resultScope:"global"}),i=o=>({...o,authorizedRoot:r.repositoryPath,workspaceId:r.workspaceId,resultScope:"workspace"});switch(t){case"health":return n({method:"GET",path:"/health"});case"bridge.status":return n({method:"GET",path:"/api/bridge/status"});case"connection.status":return n({method:"GET",path:"/api/connection/status"});case"provider.inventory":{let o=ri(e,"backendId");return n({method:"GET",path:`/api/providers/inventory${o?`?backendId=${encodeURIComponent(o)}`:""}`})}case"modelAlias.validate":return n({method:"POST",path:"/api/model-aliases/validate",body:e??{}});case"modelAlias.resolve":return n({method:"POST",path:"/api/model-aliases/resolve",body:e??{}});case"roadmap.registry.list":return n({method:"GET",path:"/api/roadmaps/recent"});case"roadmap.registry.remove":return i({method:"POST",path:"/api/roadmaps/recent/remove",body:{roadmapId:r.workspaceId}});case"roadmap.open":return i({method:"POST",path:"/api/roadmaps/open",body:{path:r.repositoryPath}});case"roadmap.port.inspect":return i({method:"POST",path:"/api/roadmaps/port/inspect",body:{...e??{},path:r.repositoryPath}});case"roadmap.port.apply":return i({method:"POST",path:"/api/roadmaps/port/apply",body:{...e??{},path:r.repositoryPath}});case"roadmap.create":return i({method:"POST",path:"/api/roadmaps/create",body:{...e??{},path:r.repositoryPath}});default:return}}function ZAe(t,e,r){switch(t){case"roadmap.board":return{method:"GET",path:`${e}/board`};case"roadmap.worktree":return{method:"GET",path:`${e}/worktree`};case"roadmap.skills":return{method:"GET",path:`${e}/skills`};case"roadmap.commands":return{method:"POST",path:`${e}/commands`,body:r};case"execute.status":return{method:"GET",path:`${e}/runs`};case"execute.start":return{method:"POST",path:`${e}/runs/start`,body:r};case"execute.pause":return{method:"POST",path:`${e}/runs/pause`,body:r};case"execute.resume":return{method:"POST",path:`${e}/runs/resume`,body:r};case"execute.stop":return{method:"POST",path:`${e}/runs/stop`,body:r};case"execute.completeMove":return{method:"POST",path:`${e}/runs/complete-move`,body:r};case"artifactAction.list":return{method:"GET",path:`${e}/artifact-actions`};case"artifactAction.runs":return{method:"GET",path:`${e}/action-runs`};case"artifactAction.start":{let n=ri(r,"actionId");return n?{method:"POST",path:`${e}/artifact-actions/${encodeURIComponent(n)}/runs`,body:r}:void 0}case"artifactAction.stop":{let n=ri(r,"runId");return n?{method:"POST",path:`${e}/action-runs/${encodeURIComponent(n)}/stop`,body:r}:void 0}case"moveFile.tree":case"moveFile.blob":case"moveFile.diff":{let n=ri(r,"moveId");if(!n)return;let i=t.slice(9),o=ri(r,"path");return{method:"GET",path:`${e}/moves/${encodeURIComponent(n)}/files/${i}${o?`?path=${encodeURIComponent(o)}`:""}`}}case"hunsuDraft.list":return{method:"GET",path:`${e}/hunsu/drafts`};case"hunsuDraft.start":return{method:"POST",path:`${e}/hunsu/drafts`,body:r};case"hunsuDraft.get":return Vx("GET",e,r);case"hunsuDraft.message":return Vx("POST",e,r,"messages");case"hunsuDraft.diffArtifact.create":return Vx("POST",e,r,"diff-artifacts");case"hunsuDraft.diffArtifact.get":{let n=ri(r,"draftSessionId"),i=ri(r,"diffArtifactId");return n&&i?{method:"GET",path:`${e}/hunsu/drafts/${encodeURIComponent(n)}/diff-artifacts/${encodeURIComponent(i)}`}:void 0}case"hunsuDraft.approve":return Vx("POST",e,r,"approve");case"hunsuDraft.discard":return Vx("POST",e,r,"discard");case"line.accept":return{method:"POST",path:`${e}/lines/accept`,body:r};case"line.reject":return{method:"POST",path:`${e}/lines/reject`,body:r};case"agentSession.list":return{method:"GET",path:`${e}/agent-sessions`};case"agentSession.get":{let n=ri(r,"sessionId");return n?{method:"GET",path:`${e}/agent-sessions/${encodeURIComponent(n)}`}:void 0}case"agentSession.events":case"live.events":return;default:return}}function Vx(t,e,r,n){let i=ri(r,"draftSessionId");return i?{method:t,path:`${e}/hunsu/drafts/${encodeURIComponent(i)}${n?`/${n}`:""}`,...t==="POST"?{body:r}:{}}:void 0}function hR(t,e){if(Array.isArray(t))return t.map(i=>hR(i,e));if(typeof t=="string")return tCe(t,e);if(!Gx(t))return t;let r={},n=!1;for(let[i,o]of Object.entries(t)){if(iCe(i)&&typeof o=="string"&&!eCe(o,e)){n=!0;continue}r[i]=hR(o,e)}return n&&(r.pathRedacted=!0),r}function eCe(t,e){if(!e||LQ(t))return!1;let r=JAe(t);return r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)}function tCe(t,e){let r=t;if(e){r=r.replaceAll(e,"[redacted-path]");let n=e.replace(/\\/gu,"/");n!==e&&(r=r.replaceAll(n,"[redacted-path]"))}return r.replace(/(?<![:\w])\/(?:home|Users|tmp|var|private|opt|srv|mnt|Volumes)\/[^\s"'<>]+/gu,"[redacted-path]").replace(/\b[A-Za-z]:\\[^\r\n"'<>]+/gu,"[redacted-path]")}async function rCe(t,e){let r=t.getReader(),n=new TextDecoder,i="";try{for(;;){let o=await r.read();if(i+=o.value?n.decode(o.value,{stream:!o.done}):n.decode(),i.length>1048576)throw new Error("Remote event buffer exceeded its bound.");for(;;){let s=nCe(i);if(!s)break;let a=i.slice(0,s.index);i=i.slice(s.index+s.length);let c=MQ(a);c&&e(c)}if(o.done){let s=MQ(i);s&&e(s);return}}}finally{r.releaseLock()}}function nCe(t){let e=t.indexOf(`
266
266
 
267
267
  `),r=t.indexOf(`\r
268
268
  \r
269
269
  `);if(!(e<0&&r<0))return r>=0&&(e<0||r<e)?{index:r,length:4}:{index:e,length:2}}function MQ(t){let e="message",r=[];for(let o of t.split(/\r?\n/gu)){if(!o||o.startsWith(":"))continue;let s=o.indexOf(":"),a=s<0?o:o.slice(0,s),c=s<0?"":o.slice(s+1).replace(/^ /u,"");a==="event"&&c.trim()&&(e=c.trim().slice(0,128)),a==="data"&&r.push(c)}if(r.length===0)return;let n=r.join(`
270
270
  `),i=n;try{i=JSON.parse(n)}catch{}return{event:e,data:i}}function xO(t,e){return Array.isArray(t)?t.filter(r=>!Gx(r)||(ri(r,"workspaceId")??ri(r,"roadmapId"))===void 0||(ri(r,"workspaceId")??ri(r,"roadmapId"))===e).map(r=>xO(r,e)):Gx(t)?Object.fromEntries(Object.entries(t).map(([r,n])=>[r,xO(n,e)])):t}function gR(t){return Array.isArray(t)?t.some(gR):Gx(t)?Object.entries(t).some(([e,r])=>typeof r=="string"&&(e==="repositoryPath"||e==="projectPath"||e==="repositoryRoot"||e==="cwd"||e==="worktreePath"||e==="path"&&LQ(r))?!0:gR(r)):!1}function iCe(t){return t==="path"||t==="repositoryPath"||t==="projectPath"||t==="repositoryRoot"||t==="root"||t==="cwd"||t==="worktreePath"||t==="runtimePath"}function ji(t,e){return{ok:!1,status:t,error:e}}function FQ(t){return Gx(t)?t:void 0}function ri(t,e){let r=t?.[e];return typeof r=="string"&&r.trim()?r.trim():void 0}function Gx(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}import{timingSafeEqual as oCe}from"node:crypto";function qQ(t){return async(e,r,n)=>{if(!n.pathname.startsWith("/v1/control"))return!1;if(!sCe(e,t.controlToken()))return Jr(r,401,fr("BRIDGE_CONTROL_UNAUTHORIZED","Hunsu Bridge rejected the local control credential.")),!0;try{let i=n.pathname;if(e.method==="GET"&&i==="/v1/control/status")return Jr(r,200,pr("Hunsu Bridge is running.",t.runtimeIdentity())),!0;if(e.method==="POST"&&i==="/v1/control/credential/rotate")return await t.rotateControlToken(),Jr(r,200,pr("Hunsu Bridge control credential was rotated.",{rotated:!0,pairingPreserved:!0},"CONTROL_CREDENTIAL_ROTATED")),!0;if(e.method==="GET"&&i==="/v1/control/provider"){let[s,a]=await Promise.all([t.providerService.list(),t.providerService.status(n.searchParams.get("force")==="1")]);return Jr(r,200,pr("Codex provider status is available.",{providers:s,provider:a})),!0}if(e.method==="PUT"&&i==="/v1/control/provider"){let s=await Ch(e);if(s.providerId!=="codex")throw new Fe("PROVIDER_NOT_CONFIGURED","The first headless Bridge prerelease supports only Codex.");let a=s.reset===!0?await t.providerService.resetCodex():await t.providerService.setCodex({binaryPath:_f(s.binaryPath),home:_f(s.home)});return Jr(r,200,pr(s.reset===!0?"Codex provider configuration was reset.":"Codex provider was configured.",{provider:a})),!0}if(e.method==="POST"&&i==="/v1/control/provider/check"){let s=await t.providerService.status(!0);if(!s.installed)throw new Fe("PROVIDER_BINARY_NOT_FOUND",s.safeMessage??"Codex was not found.");if(!s.configured)throw new Fe("PROVIDER_CHECK_FAILED",s.safeMessage??"Codex could not initialize.");return Jr(r,200,pr(s.ready?"Codex is ready.":"Codex was checked and needs attention.",{provider:s})),!0}if(e.method==="GET"&&i==="/v1/control/workspaces")return Pf(r,await t.workspaceService.list(),"Workspaces are available."),!0;if(e.method==="POST"&&i==="/v1/control/workspaces"){let s=await Ch(e);return Pf(r,await t.workspaceService.add(uCe(s.path,"Workspace path"),{displayName:_f(s.displayName)}),"Workspace was added.",201),!0}let o=aCe(i);if(o&&e.method==="GET"&&o.action==="inspect")return Pf(r,await t.workspaceService.get(o.workspaceId),"Workspace is available."),!0;if(o&&e.method==="DELETE"&&o.action==="inspect")return Pf(r,await t.workspaceService.remove(o.workspaceId),"Workspace was removed."),!0;if(o&&e.method==="POST"&&o.action==="open"){let s=await t.workspaceService.open(o.workspaceId);if(!s.ok)return Pf(r,s,"Workspace could not be opened."),!0;let a=jQ(t.pairingService.rotate({browserUrl:t.webUrl??"https://hunsu.app/studio",workspaceId:o.workspaceId})),c=!1;try{await t.openBrowser(a.internal.pairingUrl),c=!0,t.pairingService.markBrowserOpened(a.safe.pairingId)}catch{c=!1}return Jr(r,c?200:503,c?pr("Workspace was opened in Hunsu Web.",{workspace:s.value,...a.safe,browserOpened:c}):fr("BROWSER_OPEN_FAILED","The Workspace is paired, but the browser could not be opened.")),!0}if(o&&e.method==="PUT"&&o.action==="remote-access"){let s=await Ch(e);if(typeof s.enabled!="boolean")throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote access requires an enabled boolean.");let a=s.enabled?cCe(s.scopes):[];return Pf(r,await t.workspaceService.setRemoteAccess(o.workspaceId,{enabled:s.enabled,scopes:a}),s.enabled?"Workspace Remote access was granted.":"Workspace Remote access was revoked."),!0}if(e.method==="POST"&&(i==="/v1/control/pair"||o?.action==="pair")){let s=await Ch(e,!0),a=o?.workspaceId??_f(s.workspaceId);if(a){let d=await t.workspaceService.get(a);if(!d.ok)return Pf(r,d,"Workspace was not found."),!0}let c=jQ(t.pairingService.rotate({browserUrl:_f(s.webUrl)??t.webUrl??"https://hunsu.app/studio",...a?{workspaceId:a}:{}})),u=!1;if(s.openBrowser===!0)try{await t.openBrowser(c.internal.pairingUrl),u=!0,t.pairingService.markBrowserOpened(c.safe.pairingId)}catch{throw new Fe("BROWSER_OPEN_FAILED","Pairing was created, but the browser could not be opened.")}return Jr(r,201,pr("A short-lived Hunsu Web pairing was created.",{...c.safe,browserOpened:u})),!0}if(e.method==="POST"&&i==="/v1/control/pair/revoke"){let s=await Ch(e,!0),a=t.pairingService.revoke(_f(s.pairingId));return Jr(r,a?200:404,a?pr("The active browser pairing credential was revoked.",{revoked:!0}):fr("PAIRING_ROTATION_FAILED","No matching active browser pairing credential was found.")),!0}if(e.method==="POST"&&i==="/v1/control/login"){let s=await Ch(e,!0),a=await t.remoteService.login({openBrowser:s.openBrowser!==!1});return Jr(r,202,pr("Hunsu sign-in is waiting for browser or device-code approval.",a)),!0}if(e.method==="POST"&&i==="/v1/control/logout")return await t.remoteService.logout(),Jr(r,200,pr("Signed out of Hunsu and disabled Remote Bridge.")),!0;if(e.method==="GET"&&i==="/v1/control/remote")return Jr(r,200,pr("Remote Bridge status is available.",await t.remoteService.status())),!0;if(e.method==="POST"&&i==="/v1/control/remote/enable")return Jr(r,200,pr("Remote Bridge is enabled.",await t.remoteService.enable())),!0;if(e.method==="POST"&&i==="/v1/control/remote/disable")return Jr(r,200,pr("Remote Bridge is disabled.",await t.remoteService.disable())),!0;if(e.method==="GET"&&i==="/v1/control/doctor")return Jr(r,200,pr("Bridge diagnostics completed.",await t.doctor())),!0;if(e.method==="GET"&&i==="/v1/control/logs"){let s=Number.parseInt(n.searchParams.get("limit")??"200",10);return Jr(r,200,pr("Bridge logs are available.",{events:await t.structuredLog.read({limit:Number.isFinite(s)?Math.max(1,Math.min(1e3,s)):200})})),!0}return e.method==="POST"&&i==="/v1/control/shutdown"?(Jr(r,202,pr("Hunsu Bridge is shutting down.")),setImmediate(t.onShutdown),!0):(Jr(r,404,fr("BRIDGE_CONTROL_UNAVAILABLE","Unknown Hunsu Bridge control route.")),!0)}catch(i){let o=ja(i);return Jr(r,dCe(o.code),o),!0}}}function sCe(t,e){let r=t.headers[Iu.toLowerCase()],n=Array.isArray(r)?r[0]:r;if(!n)return!1;let i=Buffer.from(n),o=Buffer.from(e);return i.length===o.length&&oCe(i,o)}function Jr(t,e,r){let n=JSON.stringify(r);t.writeHead(e,{"content-type":"application/json; charset=utf-8","content-length":Buffer.byteLength(n),"cache-control":"no-store"}),t.end(n)}function Pf(t,e,r,n=200){e.ok?Jr(t,n,pr(r,e.value)):Jr(t,e.error.code==="WORKSPACE_NOT_FOUND"?404:400,fr(e.error.code,e.error.message))}async function Ch(t,e=!1){let r=[],n=0;for await(let i of t){let o=Buffer.isBuffer(i)?i:Buffer.from(i);if(n+=o.length,n>1048576)throw new Fe("BRIDGE_STATE_INVALID","Control request body is too large.");r.push(o)}if(r.length===0&&e)return{};try{let i=JSON.parse(Buffer.concat(r).toString("utf8"));if(!i||typeof i!="object"||Array.isArray(i))throw new Error("object required");return i}catch{throw new Fe("BRIDGE_STATE_INVALID","Control request body must be a JSON object.")}}function aCe(t){let e=t.match(/^\/v1\/control\/workspaces\/([^/]+)(?:\/(pair|open|remote-access))?$/);if(e?.[1])return{workspaceId:decodeURIComponent(e[1]),action:e[2]==="pair"?"pair":e[2]==="open"?"open":e[2]==="remote-access"?"remote-access":"inspect"}}function cCe(t){if(!Array.isArray(t)||t.length===0)throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote access requires at least one explicit scope.");let e=t.map(r=>{if(typeof r!="string"||!tp.includes(r))throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote access contains an unsupported scope.");return r});if(!e.includes("remote.access"))throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote access requires the remote.access scope.");return[...new Set(e)]}function uCe(t,e){let r=_f(t);if(!r)throw new Fe("BRIDGE_STATE_INVALID",`${e} is required.`);return r}function _f(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function dCe(t){return t==="WORKSPACE_NOT_FOUND"?404:t==="BRIDGE_CONTROL_UNAUTHORIZED"?401:t==="PROVIDER_BINARY_NOT_FOUND"||t==="PROVIDER_LOGIN_REQUIRED"||t==="ACCOUNT_LOGIN_REQUIRED"?409:400}function jQ(t){if(!t.ok)throw new Fe(t.error.code,t.error.message);return t.value}import{constants as SO}from"node:fs";import{mkdir as lCe,open as fCe,readFile as pCe,unlink as mCe}from"node:fs/promises";import{dirname as hCe}from"node:path";async function VQ(t){let e=t.pid??process.pid,r=t.now??(()=>new Date),n=t.processAlive??gCe,i=t.fetchImpl??fetch;await lCe(hCe(t.paths.daemonLockFile),{recursive:!0});for(let o=0;o<2;o+=1)try{let s=await fCe(t.paths.daemonLockFile,SO.O_CREAT|SO.O_EXCL|SO.O_WRONLY,384);try{await s.writeFile(`${JSON.stringify({pid:e,createdAt:r().toISOString()})}
271
- `,"utf8")}finally{await s.close()}let a=await yR({endpoint:t.endpoint,controlToken:t.controlToken,fetchImpl:i});if(a.kind!=="unreachable")throw await bO(t.paths.daemonLockFile),WQ(a);let c=!1;return{async release(){c||(c=!0,await bO(t.paths.daemonLockFile))}}}catch(s){if(s instanceof Fe||!vCe(s))throw s;let a=await yCe(t.paths.daemonLockFile),c=await yR({endpoint:t.endpoint,controlToken:t.controlToken,fetchImpl:i});if(a!==void 0&&!n(a)&&c.kind==="unreachable"&&o===0){await bO(t.paths.daemonLockFile);continue}throw c.kind!=="unreachable"?WQ(c):new Fe("BRIDGE_ALREADY_RUNNING","Another Hunsu Bridge daemon startup is already in progress.")}throw new Fe("BRIDGE_ALREADY_RUNNING","Another Hunsu Bridge daemon startup is already in progress.")}async function yR(t){let e=t.fetchImpl??fetch,r=t.timeoutMs??750,n;try{n=await e(new URL("/health",t.endpoint),{redirect:"error",signal:AbortSignal.timeout(r)})}catch{return{kind:"unreachable"}}if(!n.ok)return{kind:"foreign"};let i=await n.json().catch(()=>{});if(i?.ok!==!0||i.service!=="hunsu-bridge"||i.protocolVersion!=="local-bridge-v1")return{kind:"foreign"};try{let o=await e(new URL("/v1/control/status",t.endpoint),{headers:{[Iu]:t.controlToken},redirect:"error",signal:AbortSignal.timeout(r)});if(!o.ok)return{kind:"hunsu-unauthenticated"};let s=await o.json().catch(()=>{});return s?.ok===!0?{kind:"hunsu-authenticated",...typeof s.value?.instanceId=="string"?{instanceId:s.value.instanceId}:{}}:{kind:"hunsu-unauthenticated"}}catch{return{kind:"hunsu-unauthenticated"}}}function gCe(t){if(!Number.isSafeInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return wO(e,"EPERM")}}function WQ(t){return t.kind==="hunsu-authenticated"?new Fe("BRIDGE_ALREADY_RUNNING","Hunsu Bridge is already running."):new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use by another service.")}async function yCe(t){try{let e=JSON.parse(await pCe(t,"utf8"));return typeof e.pid=="number"&&Number.isSafeInteger(e.pid)&&e.pid>0?e.pid:void 0}catch{return}}async function bO(t){try{await mCe(t)}catch(e){if(!wO(e,"ENOENT"))throw e}}function vCe(t){return wO(t,"EEXIST")}function wO(t,e){return t instanceof Error&&"code"in t&&t.code===e}async function ICe(t){try{await t.credentialStore.rotateControlToken({onCommitted:e=>t.activate(e.controlToken)})}catch(e){let r=await t.credentialStore.read().catch(()=>{});throw r&&t.activate(r.controlToken),e}}async function GQ(t={}){let e={...process.env,...t.env??{}},r=Ko({...t,env:e}),n=t.runtimePath??t.cwd??process.cwd();if(t.runtimePath!==void 0&&!bCe(t.runtimePath)||/[\u0000-\u001f\u007f]/u.test(n))throw new Fe("BRIDGE_STATE_INVALID","Bridge runtime path must be absolute and contain no control characters.");let i=wCe(n);await SCe(r.home,{recursive:!0,mode:448});let o=Jo(r),s=vu(r,{processEnv:e}),a=Db(r),c=t.deploymentProfile??"production";if(!Pn(c))throw new Fe("BRIDGE_STATE_INVALID","Bridge deployment profile must be production or preview.");let u=await o.ensureDeploymentProfile(c),d=ECe({profile:u.deploymentProfile,development:t.development===!0,environment:e,webUrl:t.webUrl}),l=t.host??u.host,f=t.port??u.port;if(RCe(l),!Number.isInteger(f)||f<0||f>65535)throw new Fe("BRIDGE_STATE_INVALID","Bridge port must be an integer from 0 through 65535.");let p=await s.read(),g=Wg(IO(u.host),u.port),v=await VQ({paths:r,endpoint:g,controlToken:p?.controlToken??"hunsu_control_unavailable",fetchImpl:t.fetchImpl}),b;try{b=await s.ensure();let D=Wg(IO(l),f);if(D!==g){let K=await yR({endpoint:D,controlToken:b.controlToken,fetchImpl:t.fetchImpl});if(K.kind!=="unreachable")throw K.kind==="hunsu-authenticated"?new Fe("BRIDGE_ALREADY_RUNNING","Hunsu Bridge is already running."):new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use by another service.")}(l!==u.host||f!==u.port)&&await o.update(K=>({...K,host:l,port:f}))}catch(D){throw await v.release().catch(()=>{}),D}let C=b.controlToken,B=nU({paths:r}),_=iw({store:_b(r)}),F=yM({configStore:o,env:{...e,HUNSU_HOME:r.home}}),he=Tb({controlToken:b.controlToken}),z,Ae=HQ({workspaceService:_,endpoint:()=>z?.endpoint,controlToken:()=>C,fetchImpl:t.fetchImpl}),de=UQ({workspaceService:_,endpoint:()=>z?.endpoint,controlToken:()=>C,fetchImpl:t.fetchImpl}),R=DQ({configStore:o,credentialStore:s,workspaceService:_,deploymentProfile:u.deploymentProfile,connectApiUrl:d.connectApiUrl,connectWsUrl:d.connectWsUrl,connectTicketIssuer:d.connectTicketIssuer,connectTicketSigningKeyId:d.connectTicketSigningKeyId,connectTicketSigningPublicJwk:d.connectTicketSigningPublicJwk,fetchImpl:t.fetchImpl,socketFactory:t.socketFactory,peerTransportFactory:t.peerTransportFactory,openBrowser:t.openBrowser??VC,onCommand:Ae,onCommandStream:de}),V=new Date().toISOString(),le=t.serviceManager??ACe(t.development===!0,t.platform??process.platform),se=`bridge_${xCe(16).toString("base64url")}`,H,G,j=!1,me,Ce=new Promise(D=>{me=D}),_e=async()=>{j||(j=!0,G&&clearInterval(G),R.stop(),z&&await a.clear(z.instanceId).catch(()=>!1),await v.release().catch(()=>{}),await B.append({level:"info",event:"daemon.stopped",message:"Hunsu Bridge stopped."}).catch(()=>{}),me())},P=async()=>{let D=H;if(!D||!D.listening){await _e();return}await new Promise((K,T)=>{D.close($=>$?T($):K())}),await Ce};try{let D={...e,HUNSU_HOME:r.home,HUNSU_BRIDGE_HOST:l,HUNSU_BRIDGE_PORT:String(f),HUNSU_ROADMAP_REGISTRY_PATH:r.workspacesFile,HUNSU_WEB_URL:d.webUrl,HUNSU_CONNECT_API_BASE_URL:d.connectApiUrl,HUNSU_CONNECT_WS_URL:d.connectWsUrl},K=Hf(uS(D,{cwd:t.cwd??process.cwd(),roadmapRegistryPath:r.workspacesFile,processEnv:D})),T=d.webUrl,$=new URL(T).origin,ye=qQ({controlToken:()=>C,rotateControlToken:async()=>{await ICe({credentialStore:s,activate:_t=>{C=_t}}),await B.append({level:"info",event:"control.credential_rotated",message:"Hunsu Bridge control credential was rotated."}).catch(()=>{})},runtimeIdentity:()=>{if(!z)throw new Fe("BRIDGE_CONTROL_UNAVAILABLE","Hunsu Bridge is still starting.");return z},providerService:F,workspaceService:_,pairingService:he,remoteService:R,structuredLog:B,webUrl:T,openBrowser:t.openBrowser??VC,doctor:()=>uw({paths:r,providerService:F,online:!0}),onShutdown:()=>{P()}});H=_L({cwd:t.cwd??process.cwd(),roadmapRegistryPath:r.workspacesFile,runtimeConfig:K,deploymentProfile:u.deploymentProfile,controlStatus:{deploymentProfile:u.deploymentProfile},security:{controlToken:()=>C,allowedOrigins:[$],requirePairing:!0,pairingService:he},controlRouteHandler:ye,providerService:F,headlessRemote:{enable:()=>R.enable(),disable:()=>R.disable()}}),H.once("close",()=>{_e()}),await kCe(H,l,f);let Se=H.address();if(!Se||typeof Se=="string")throw new Fe("BRIDGE_CONTROL_UNAVAILABLE","Bridge listener address is unavailable.");let ct=Wg(IO(l),Se.port),It=new Date().toISOString();return z={schema:Fg,instanceId:se,daemonPid:process.pid,version:bn,protocolVersion:Kd,deploymentProfile:u.deploymentProfile,startedAt:V,endpoint:ct,runtimePath:i,serviceManager:le,lastHealthyAt:It},await a.write(z),f===0&&await o.update(_t=>({..._t,host:l,port:Se.port})),await v.release(),await B.append({level:"info",event:"daemon.started",message:"Hunsu Bridge is ready.",data:{instanceId:se,endpoint:ct,version:bn,serviceManager:le,deploymentProfile:u.deploymentProfile}}),G=setInterval(()=>{z&&(z={...z,lastHealthyAt:new Date().toISOString()},a.write(z).catch(_t=>B.append({level:"error",event:"runtime.write_failed",message:_t instanceof Error?_t.message:"Runtime identity update failed."}).then(()=>{})))},3e4),G.unref(),(await o.read()).remote.enabled&&R.enable().catch(_t=>B.append({level:"warn",event:"remote.connect_failed",message:_t instanceof Error?_t.message:"Remote Bridge could not connect."}).then(()=>{})),{identity:z,paths:r,server:H,close:P,waitUntilClosed:()=>Ce}}catch(D){throw H?.listening&&await new Promise(K=>H.close(()=>K())),await _e(),CCe(D,"EADDRINUSE")?new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use.",{cause:D}):D}}function ECe(t){let e=c3(t.profile);if(!t.development){if(t.webUrl!==void 0&&t.webUrl!==e.webUrl)throw new Fe("BRIDGE_STATE_INVALID",`Installed ${t.profile} Bridge daemons use the allowlisted Web URL for that profile.`);return e}return{webUrl:t.webUrl??t.environment.HUNSU_WEB_URL??e.webUrl,connectApiUrl:t.environment.HUNSU_CONNECT_API_BASE_URL??e.connectApiUrl,connectWsUrl:t.environment.HUNSU_CONNECT_WS_URL??e.connectWsUrl,connectTicketIssuer:e.connectTicketIssuer,connectTicketSigningKeyId:e.connectTicketSigningKeyId,connectTicketSigningPublicJwk:e.connectTicketSigningPublicJwk}}function kCe(t,e,r){return new Promise((n,i)=>{let o=s=>i(s);t.once("error",o),t.listen(r,e,()=>{t.off("error",o),n()})})}function RCe(t){if(t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1"&&t!=="[::1]")throw new Fe("BRIDGE_STATE_INVALID","Hunsu Bridge must bind to a loopback address.")}function IO(t){return t==="localhost"?"127.0.0.1":t==="[::1]"?"::1":t}function ACe(t,e){return t?"development":e==="win32"?"windows-task-scheduler":e==="darwin"?"macos-launch-agent":"linux-systemd-user"}function CCe(t,e){return t instanceof Error&&"code"in t&&t.code===e}var zQ=new Set(["home","json","help","version"]),JQ=new Set(["json","help","version","follow","delete-data","confirm-delete-data","no-open","dry-run"]),PCe=new Set(["home","host","port","cwd","web-url","profile","channel","runtime-package","runtime-path","binary","codex-home","workspace","scopes"]);function EO(t){let e=new Map,r=[];for(let i=0;i<t.length;i+=1){let o=t[i];if(!o.startsWith("--")){r.push(o);continue}let s=o.slice(2);if(!s)throw Ph("Invalid empty command option.");let a=s.indexOf("="),c=a>=0?s.slice(0,a):s;if(_Ce(c),e.has(c))throw Ph(`Duplicate option: --${c}.`);if(JQ.has(c)){if(a>=0)throw Ph(`--${c} does not accept a value.`);e.set(c,!0);continue}let u=a>=0?s.slice(a+1):t[i+1];if(!u||a<0&&u.startsWith("--"))throw Ph(`--${c} requires a value.`);e.set(c,u),a<0&&(i+=1)}let n={positionals:r,flags:e};return TCe(n),n}function XQ(t){return t.some(e=>e==="--json"||e.startsWith("--json="))}function Or(t,e){let r=t.flags.get(e);return typeof r=="string"?r:void 0}function Rs(t,e){return t.flags.get(e)===!0}function _Ce(t){if(!JQ.has(t)&&!PCe.has(t))throw Ph(`Unknown option: --${t}.`)}function TCe(t){let e=t.positionals[0];if(!e){KQ(t,zQ,"help");return}let r=new Set(zQ);switch(e){case"dev":case"daemon":Xc(r,"host","port","cwd","web-url","runtime-path","profile");break;case"setup":Xc(r,"channel","runtime-package","dry-run","profile");break;case"remove":Xc(r,"delete-data","confirm-delete-data","dry-run","profile");break;case"status":case"doctor":Xc(r,"profile");break;case"logs":Xc(r,"follow");break;case"provider":t.positionals[1]==="set"&&Xc(r,"binary","codex-home");break;case"workspace":t.positionals[1]==="grant"&&Xc(r,"scopes");break;case"pair":case"open":Xc(r,"workspace");break;case"login":Xc(r,"no-open");break;default:break}KQ(t,r,e)}function Xc(t,...e){for(let r of e)t.add(r)}function KQ(t,e,r){for(let n of t.flags.keys())if(!e.has(n))throw Ph(`Option --${n} is not supported by ${r}.`)}function Ph(t){return new Fe("BRIDGE_STATE_INVALID",t)}var BCe=new Set(["status","doctor","logs","provider","workspace","credential","pair","open","login","logout","remote"]),vR=2e4;function YQ(t){return BCe.has(t)}async function QQ(t){let{parsed:e,paths:r,client:n,emit:i}=t,o=e.positionals[0];if(o==="status")return i(await n.request("/v1/control/status"));if(o==="doctor"){let s=await n.request("/v1/control/doctor"),a=!s.ok&&(s.code==="BRIDGE_NOT_RUNNING"||s.code==="BRIDGE_STATE_INVALID")?pr("Offline Bridge diagnostics completed.",await uw({paths:r,online:!1})):s;return i(a)}if(o==="logs"){let s=await n.request("/v1/control/logs"),a=i(s);return a!==0||!Rs(e,"follow")?a:MCe(n,i)}if(o==="provider")return i(await DCe(e,n));if(o==="workspace")return i(await NCe(e,n));if(o==="credential"){let s=e.positionals[1];if(s!=="rotate")throw new Fe("BRIDGE_STATE_INVALID",`Unknown credential command: ${s??""}`);return i(await n.request("/v1/control/credential/rotate",{method:"POST"}))}if(o==="pair"||o==="open")return o==="pair"&&e.positionals[1]==="revoke"?i(await n.request("/v1/control/pair/revoke",{method:"POST"})):i(await n.request("/v1/control/pair",{method:"POST",body:{...Or(e,"workspace")?{workspaceId:Or(e,"workspace")}:{},openBrowser:o==="open"}}));if(o==="login")return i(await n.request("/v1/control/login",{method:"POST",body:{openBrowser:!Rs(e,"no-open")}}));if(o==="logout")return i(await n.request("/v1/control/logout",{method:"POST"}));if(o==="remote"){let s=e.positionals[1]??"status";if(s==="status")return i(await n.request("/v1/control/remote"));if(s==="enable"||s==="disable")return i(await n.request(`/v1/control/remote/${s}`,{method:"POST"}));throw new Fe("BRIDGE_STATE_INVALID",`Unknown remote command: ${s}`)}throw new Fe("BRIDGE_STATE_INVALID",`Unknown client command: ${o}`)}async function DCe(t,e){let r=t.positionals[1]??"status";if(r==="list"||r==="status")return e.request(`/v1/control/provider${r==="status"?"":"?list=1"}`,{timeoutMs:vR});if(r==="check")return kO(t.positionals[2]),e.request("/v1/control/provider/check",{method:"POST",timeoutMs:vR});if(r==="set"){kO(t.positionals[2]);let n=await e.request("/v1/control/provider",{method:"PUT",timeoutMs:vR,body:{providerId:"codex",...Or(t,"binary")?{binaryPath:Or(t,"binary")}:{},...Or(t,"codex-home")?{home:Or(t,"codex-home")}:{}}});return!n.ok&&n.code==="BRIDGE_NOT_RUNNING"&&Or(t,"home")&&!Or(t,"codex-home")?fr("BRIDGE_NOT_RUNNING","Hunsu Bridge is not running at the selected HUNSU_HOME. --home selects HUNSU_HOME; use --codex-home to configure Codex Home."):n}if(r==="reset")return kO(t.positionals[2]),e.request("/v1/control/provider",{method:"PUT",timeoutMs:vR,body:{providerId:"codex",reset:!0}});throw new Fe("BRIDGE_STATE_INVALID",`Unknown provider command: ${r}`)}async function NCe(t,e){let r=t.positionals[1]??"list";if(r==="list")return e.request("/v1/control/workspaces");if(r==="add"){let o=t.positionals[2];if(!o)throw new Fe("WORKSPACE_PATH_INVALID","Workspace path is required.");return e.request("/v1/control/workspaces",{method:"POST",body:{path:o}})}let n=t.positionals[2];if(!n)throw new Fe("WORKSPACE_NOT_FOUND","Workspace id is required.");let i=encodeURIComponent(n);if(r==="inspect")return e.request(`/v1/control/workspaces/${i}`);if(r==="remove")return e.request(`/v1/control/workspaces/${i}`,{method:"DELETE"});if(r==="open")return e.request(`/v1/control/workspaces/${i}/open`,{method:"POST"});if(r==="grant"||r==="revoke"){let o=r==="revoke"?[]:OCe(Or(t,"scopes"));return e.request(`/v1/control/workspaces/${i}/remote-access`,{method:"PUT",body:{enabled:r==="grant",scopes:o}})}throw new Fe("BRIDGE_STATE_INVALID",`Unknown workspace command: ${r}`)}function OCe(t){let r=(t??"remote.access").split(",").map(n=>n.trim()).filter(Boolean).map(n=>{if(!tp.includes(n))throw new Fe("BRIDGE_STATE_INVALID",`Unsupported Workspace Remote scope: ${n}`);return n});if(!r.includes("remote.access"))throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote grants require remote.access.");return[...new Set(r)]}async function MCe(t,e){let r=!1,n=()=>{r=!0};process.once("SIGINT",n),process.once("SIGTERM",n);try{for(;!r&&(await new Promise(o=>setTimeout(o,1e3)),!r);){let i=await t.request("/v1/control/logs?limit=50");if(e(i)!==0)return 1}return 0}finally{process.off("SIGINT",n),process.off("SIGTERM",n)}}function kO(t){if(t!=="codex")throw new Fe("PROVIDER_NOT_CONFIGURED","The first headless Bridge prerelease supports only Codex.")}import{homedir as ZCe}from"node:os";import{homedir as GCe}from"node:os";import{join as zCe}from"node:path";import{execFile as LCe}from"node:child_process";import{access as HCe,mkdir as ZQ,readFile as UCe,rm as $Ce,writeFile as FCe}from"node:fs/promises";import{dirname as tZ,isAbsolute as jCe,win32 as qCe}from"node:path";function Th(t,e){let r=e.sleep??(u=>new Promise(d=>setTimeout(d,u))),n=Math.max(1,e.stopTimeoutMs??8e3),i=Math.max(1,e.pollIntervalMs??100),o,s=async()=>{let[u,d,l]=await Promise.all([RO(t),rZ(e.probeHealth),o?Promise.resolve(o):e.readInstalledRuntime?.().catch(()=>{})??Promise.resolve(void 0)]),f=d==="healthy"?await VCe(e.probeAuthenticatedStatus):"unavailable";return{installed:u.installed,manager:t.manager,managerState:u.state,health:d,authentication:f,definitionPath:t.definitionPath,packageVersion:l?.packageVersion,runtimePath:l?.runtimePath,deploymentProfile:l?.deploymentProfile,detail:u.detail}},a=async()=>{let u=!1;try{u=await e.requestAuthenticatedShutdown()}catch{u=!1}if(u&&await eZ(e.probeHealth,r,n,i)==="offline")return Tf(t.manager,"Hunsu Bridge stopped through its authenticated control API.",!0);try{await t.stopOwned()}catch{return Bf(t.manager,"SERVICE_STOP_FAILED","The owned Hunsu Bridge service could not be stopped.")}return await eZ(e.probeHealth,r,n,i)==="healthy"?Bf(t.manager,"SERVICE_STOP_FAILED","The owned Hunsu Bridge service stopped, but the Bridge endpoint remained healthy."):Tf(t.manager,"Hunsu Bridge stopped through its OS user service manager.",!0)},c={async install(u){try{WCe(u,t.platform);let d=await t.install(u);return o={packageVersion:u.packageVersion,runtimePath:u.runtimePath,deploymentProfile:u.deploymentProfile},d.changed?Tf(t.manager,"Hunsu Bridge user service installed. It was not started.",!0):Tf(t.manager,"Hunsu Bridge user service is already installed.",!1,"SERVICE_ALREADY_INSTALLED")}catch{return Bf(t.manager,"SERVICE_INSTALL_FAILED","Hunsu Bridge user service installation failed.")}},async uninstall(){if(!(await RO(t)).installed)return Tf(t.manager,"Hunsu Bridge user service is not installed.",!1);if(!(await a()).ok)return Bf(t.manager,"SERVICE_STOP_FAILED","Hunsu Bridge must stop before its user service can be uninstalled.");try{let l=await t.uninstall();return Tf(t.manager,"Hunsu Bridge user service uninstalled.",l.changed)}catch{return Bf(t.manager,"SERVICE_INSTALL_FAILED","Hunsu Bridge user service uninstallation failed.")}},async start(){if(!(await RO(t)).installed)return Bf(t.manager,"SERVICE_NOT_INSTALLED","Install the Hunsu Bridge user service before starting it.");try{return await t.start(),Tf(t.manager,"Hunsu Bridge start requested through its OS user service manager.",!0)}catch{return Bf(t.manager,"SERVICE_START_FAILED","The Hunsu Bridge user service could not be started.")}},stop:a,async restart(){let u=await a();return u.ok?c.start():u},status:s};return c}var xR={async exists(t){try{return await HCe(t),!0}catch{return!1}},async readText(t){try{return await UCe(t,"utf8")}catch{return}},async mkdir(t,e){await ZQ(t,{recursive:!0,mode:e?.mode})},async writeText(t,e,r){await ZQ(tZ(t),{recursive:!0,mode:448}),await FCe(t,e,{encoding:"utf8",mode:r?.mode})},async remove(t){await $Ce(t,{force:!0})}},AO=(t={})=>e=>new Promise(r=>{LCe(e.command,e.args,{encoding:"utf8",...lb(e.command)?{env:Ms(t)}:{},windowsHide:!0,maxBuffer:1024*1024},(n,i,o)=>{let s=n&&"code"in n&&typeof n.code=="number"?n.code:n?1:0;r({exitCode:s,stdout:i??"",stderr:o??(n instanceof Error?n.message:"")})})}),SR=AO();async function bR(t,e,r){return await t.readText(e)===r?!1:(await t.mkdir(tZ(e),{mode:448}),await t.writeText(e,r,{mode:384}),!0)}function WCe(t,e){let r=e==="win32"?qCe.isAbsolute:jCe;for(let[n,i]of Object.entries({nodePath:t.nodePath,cliPath:t.cliPath,hunsuHome:t.hunsuHome,runtimePath:t.runtimePath}))if(!i||!r(i)||_h(i))throw new Error(`${n} must be an absolute path without control characters.`);if(!t.packageVersion.trim()||_h(t.packageVersion))throw new Error("packageVersion must be non-empty and contain no control characters.");if(!Pn(t.deploymentProfile))throw new Error("deploymentProfile must be production or preview.")}function CO(t){if(_h(t))throw new Error("systemd values cannot contain control characters.");return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/%/g,"%%")}"`}function Bd(t){if(_h(t))throw new Error("plist values cannot contain control characters.");return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Aa(t){if(_h(t))throw new Error("PowerShell values cannot contain control characters.");return`'${t.replace(/'/g,"''")}'`}function wR(t){if(_h(t)||t.includes('"'))throw new Error("Windows command arguments cannot contain control characters or quotes.");return`"${t.replace(/(\\+)$/u,"$1$1")}"`}async function RO(t){try{return await t.status()}catch{return{installed:!1,state:"unknown",detail:"Service-manager status is unavailable."}}}async function rZ(t){try{return await t()?"healthy":"offline"}catch{return"unavailable"}}async function VCe(t){if(!t)return"unavailable";try{return(await t()).state}catch{return"unavailable"}}async function eZ(t,e,r,n){let i=Math.max(1,Math.ceil(r/n));for(let o=0;o<i;o+=1){let s=await rZ(t);if(s!=="healthy")return s;o+1<i&&await e(n)}return"healthy"}function Tf(t,e,r,n="OK"){return{ok:!0,code:n,message:e,manager:t,changed:r}}function Bf(t,e,r){return{ok:!1,code:e,message:r,manager:t}}function _h(t){return/[\u0000-\u001f\u007f]/u.test(t)}var Bh="hunsu-bridge.service";function nZ(t){let e=t.commandRunner??SR,r=t.fileSystem??xR,n=t.unitPath??zCe(t.homeDirectory??GCe(),".config","systemd","user",Bh);return Th({manager:"systemd-user",definitionPath:n,platform:"linux",async install(o){let s=await bR(r,n,KCe(o));return zx(await e({command:"systemctl",args:["--user","daemon-reload"]}),"reload systemd user units"),zx(await e({command:"systemctl",args:["--user","enable",Bh]}),"enable the systemd user unit"),{changed:s}},async uninstall(){let o=await r.exists(n);return await e({command:"systemctl",args:["--user","disable",Bh]}),await r.remove(n),zx(await e({command:"systemctl",args:["--user","daemon-reload"]}),"reload systemd user units"),{changed:o}},async start(){zx(await e({command:"systemctl",args:["--user","start",Bh]}),"start the systemd user unit")},async stopOwned(){zx(await e({command:"systemctl",args:["--user","stop",Bh]}),"stop the systemd user unit")},async status(){if(!await r.exists(n))return{installed:!1,state:"stopped"};let o=await e({command:"systemctl",args:["--user","is-active",Bh]});return{installed:!0,state:o.exitCode===0&&o.stdout.trim()==="active"?"running":/^(inactive|failed|deactivating)$/u.test(o.stdout.trim())||o.exitCode===3?"stopped":"unknown",detail:o.stdout.trim()||o.stderr.trim()||void 0}}},t)}function KCe(t){return["[Unit]","Description=Hunsu Bridge","After=network-online.target","","[Service]","Type=simple",`ExecStart=${[t.nodePath,t.cliPath,"daemon","--runtime-path",t.runtimePath,"--profile",t.deploymentProfile].map(CO).join(" ")}`,`Environment=${CO(`HUNSU_HOME=${t.hunsuHome}`)}`,"Restart=on-failure","RestartSec=2","","[Install]","WantedBy=default.target",""].join(`
271
+ `,"utf8")}finally{await s.close()}let a=await yR({endpoint:t.endpoint,controlToken:t.controlToken,fetchImpl:i});if(a.kind!=="unreachable")throw await bO(t.paths.daemonLockFile),WQ(a);let c=!1;return{async release(){c||(c=!0,await bO(t.paths.daemonLockFile))}}}catch(s){if(s instanceof Fe||!vCe(s))throw s;let a=await yCe(t.paths.daemonLockFile),c=await yR({endpoint:t.endpoint,controlToken:t.controlToken,fetchImpl:i});if(a!==void 0&&!n(a)&&c.kind==="unreachable"&&o===0){await bO(t.paths.daemonLockFile);continue}throw c.kind!=="unreachable"?WQ(c):new Fe("BRIDGE_ALREADY_RUNNING","Another Hunsu Bridge daemon startup is already in progress.")}throw new Fe("BRIDGE_ALREADY_RUNNING","Another Hunsu Bridge daemon startup is already in progress.")}async function yR(t){let e=t.fetchImpl??fetch,r=t.timeoutMs??750,n;try{n=await e(new URL("/health",t.endpoint),{redirect:"error",signal:AbortSignal.timeout(r)})}catch{return{kind:"unreachable"}}if(!n.ok)return{kind:"foreign"};let i=await n.json().catch(()=>{});if(i?.ok!==!0||i.service!=="hunsu-bridge"||i.protocolVersion!=="local-bridge-v1")return{kind:"foreign"};try{let o=await e(new URL("/v1/control/status",t.endpoint),{headers:{[Iu]:t.controlToken},redirect:"error",signal:AbortSignal.timeout(r)});if(!o.ok)return{kind:"hunsu-unauthenticated"};let s=await o.json().catch(()=>{});return s?.ok===!0?{kind:"hunsu-authenticated",...typeof s.value?.instanceId=="string"?{instanceId:s.value.instanceId}:{}}:{kind:"hunsu-unauthenticated"}}catch{return{kind:"hunsu-unauthenticated"}}}function gCe(t){if(!Number.isSafeInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return wO(e,"EPERM")}}function WQ(t){return t.kind==="hunsu-authenticated"?new Fe("BRIDGE_ALREADY_RUNNING","Hunsu Bridge is already running."):new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use by another service.")}async function yCe(t){try{let e=JSON.parse(await pCe(t,"utf8"));return typeof e.pid=="number"&&Number.isSafeInteger(e.pid)&&e.pid>0?e.pid:void 0}catch{return}}async function bO(t){try{await mCe(t)}catch(e){if(!wO(e,"ENOENT"))throw e}}function vCe(t){return wO(t,"EEXIST")}function wO(t,e){return t instanceof Error&&"code"in t&&t.code===e}async function ICe(t){try{await t.credentialStore.rotateControlToken({onCommitted:e=>t.activate(e.controlToken)})}catch(e){let r=await t.credentialStore.read().catch(()=>{});throw r&&t.activate(r.controlToken),e}}async function GQ(t={}){let e={...process.env,...t.env??{}},r=Ko({...t,env:e}),n=t.runtimePath??t.cwd??process.cwd();if(t.runtimePath!==void 0&&!bCe(t.runtimePath)||/[\u0000-\u001f\u007f]/u.test(n))throw new Fe("BRIDGE_STATE_INVALID","Bridge runtime path must be absolute and contain no control characters.");let i=wCe(n);await SCe(r.home,{recursive:!0,mode:448});let o=Jo(r),s=vu(r,{processEnv:e}),a=Db(r),c=t.deploymentProfile??"production";if(!Pn(c))throw new Fe("BRIDGE_STATE_INVALID","Bridge deployment profile must be production or preview.");let u=await o.ensureDeploymentProfile(c),d=ECe({profile:u.deploymentProfile,development:t.development===!0,environment:e,webUrl:t.webUrl}),l=t.host??u.host,f=t.port??u.port;if(RCe(l),!Number.isInteger(f)||f<0||f>65535)throw new Fe("BRIDGE_STATE_INVALID","Bridge port must be an integer from 0 through 65535.");let p=await s.read(),g=Wg(IO(u.host),u.port),v=await VQ({paths:r,endpoint:g,controlToken:p?.controlToken??"hunsu_control_unavailable",fetchImpl:t.fetchImpl}),b;try{b=await s.ensure();let D=Wg(IO(l),f);if(D!==g){let K=await yR({endpoint:D,controlToken:b.controlToken,fetchImpl:t.fetchImpl});if(K.kind!=="unreachable")throw K.kind==="hunsu-authenticated"?new Fe("BRIDGE_ALREADY_RUNNING","Hunsu Bridge is already running."):new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use by another service.")}(l!==u.host||f!==u.port)&&await o.update(K=>({...K,host:l,port:f}))}catch(D){throw await v.release().catch(()=>{}),D}let C=b.controlToken,B=nU({paths:r}),_=iw({store:_b(r)}),F=yM({configStore:o,env:{...e,HUNSU_HOME:r.home}}),he=Tb({controlToken:b.controlToken}),z,Ae=HQ({workspaceService:_,endpoint:()=>z?.endpoint,controlToken:()=>C,fetchImpl:t.fetchImpl}),de=UQ({workspaceService:_,endpoint:()=>z?.endpoint,controlToken:()=>C,fetchImpl:t.fetchImpl}),R=DQ({configStore:o,credentialStore:s,workspaceService:_,deploymentProfile:u.deploymentProfile,connectApiUrl:d.connectApiUrl,connectWsUrl:d.connectWsUrl,connectTicketIssuer:d.connectTicketIssuer,connectTicketSigningKeyId:d.connectTicketSigningKeyId,connectTicketSigningPublicJwk:d.connectTicketSigningPublicJwk,fetchImpl:t.fetchImpl,socketFactory:t.socketFactory,peerTransportFactory:t.peerTransportFactory,openBrowser:t.openBrowser??VC,onCommand:Ae,onCommandStream:de}),V=new Date().toISOString(),le=t.serviceManager??ACe(t.development===!0,t.platform??process.platform),se=`bridge_${xCe(16).toString("base64url")}`,H,G,j=!1,me,Ce=new Promise(D=>{me=D}),_e=async()=>{j||(j=!0,G&&clearInterval(G),R.stop(),z&&await a.clear(z.instanceId).catch(()=>!1),await v.release().catch(()=>{}),await B.append({level:"info",event:"daemon.stopped",message:"Hunsu Bridge stopped."}).catch(()=>{}),me())},P=async()=>{let D=H;if(!D||!D.listening){await _e();return}await new Promise((K,T)=>{D.close($=>$?T($):K())}),await Ce};try{let D={...e,HUNSU_HOME:r.home,HUNSU_BRIDGE_HOST:l,HUNSU_BRIDGE_PORT:String(f),HUNSU_ROADMAP_REGISTRY_PATH:r.workspacesFile,HUNSU_WEB_URL:d.webUrl,HUNSU_CONNECT_API_BASE_URL:d.connectApiUrl,HUNSU_CONNECT_WS_URL:d.connectWsUrl},K=Hf(uS(D,{cwd:t.cwd??process.cwd(),roadmapRegistryPath:r.workspacesFile,processEnv:D})),T=d.webUrl,$=new URL(T).origin,ye=qQ({controlToken:()=>C,rotateControlToken:async()=>{await ICe({credentialStore:s,activate:_t=>{C=_t}}),await B.append({level:"info",event:"control.credential_rotated",message:"Hunsu Bridge control credential was rotated."}).catch(()=>{})},runtimeIdentity:()=>{if(!z)throw new Fe("BRIDGE_CONTROL_UNAVAILABLE","Hunsu Bridge is still starting.");return z},providerService:F,workspaceService:_,pairingService:he,remoteService:R,structuredLog:B,webUrl:T,openBrowser:t.openBrowser??VC,doctor:()=>uw({paths:r,providerService:F,online:!0}),onShutdown:()=>{P()}});H=_L({cwd:t.cwd??process.cwd(),roadmapRegistryPath:r.workspacesFile,runtimeConfig:K,deploymentProfile:u.deploymentProfile,controlStatus:{deploymentProfile:u.deploymentProfile},security:{controlToken:()=>C,allowedOrigins:[$],requirePairing:!0,pairingService:he},controlRouteHandler:ye,providerService:F,headlessRemote:{enable:()=>R.enable(),disable:()=>R.disable()}}),H.once("close",()=>{_e()}),await kCe(H,l,f);let Se=H.address();if(!Se||typeof Se=="string")throw new Fe("BRIDGE_CONTROL_UNAVAILABLE","Bridge listener address is unavailable.");let ct=Wg(IO(l),Se.port),It=new Date().toISOString();return z={schema:Fg,instanceId:se,daemonPid:process.pid,version:bn,protocolVersion:Kd,deploymentProfile:u.deploymentProfile,startedAt:V,endpoint:ct,runtimePath:i,serviceManager:le,lastHealthyAt:It},await a.write(z),f===0&&await o.update(_t=>({..._t,host:l,port:Se.port})),await v.release(),await B.append({level:"info",event:"daemon.started",message:"Hunsu Bridge is ready.",data:{instanceId:se,endpoint:ct,version:bn,serviceManager:le,deploymentProfile:u.deploymentProfile}}),G=setInterval(()=>{z&&(z={...z,lastHealthyAt:new Date().toISOString()},a.write(z).catch(_t=>B.append({level:"error",event:"runtime.write_failed",message:_t instanceof Error?_t.message:"Runtime identity update failed."}).then(()=>{})))},3e4),G.unref(),(await o.read()).remote.enabled&&R.enable().catch(_t=>B.append({level:"warn",event:"remote.connect_failed",message:_t instanceof Error?_t.message:"Remote Bridge could not connect."}).then(()=>{})),{identity:z,paths:r,server:H,close:P,waitUntilClosed:()=>Ce}}catch(D){throw H?.listening&&await new Promise(K=>H.close(()=>K())),await _e(),CCe(D,"EADDRINUSE")?new Fe("BRIDGE_PORT_IN_USE","The configured Hunsu Bridge port is already in use.",{cause:D}):D}}function ECe(t){let e=c4(t.profile);if(!t.development){if(t.webUrl!==void 0&&t.webUrl!==e.webUrl)throw new Fe("BRIDGE_STATE_INVALID",`Installed ${t.profile} Bridge daemons use the allowlisted Web URL for that profile.`);return e}return{webUrl:t.webUrl??t.environment.HUNSU_WEB_URL??e.webUrl,connectApiUrl:t.environment.HUNSU_CONNECT_API_BASE_URL??e.connectApiUrl,connectWsUrl:t.environment.HUNSU_CONNECT_WS_URL??e.connectWsUrl,connectTicketIssuer:e.connectTicketIssuer,connectTicketSigningKeyId:e.connectTicketSigningKeyId,connectTicketSigningPublicJwk:e.connectTicketSigningPublicJwk}}function kCe(t,e,r){return new Promise((n,i)=>{let o=s=>i(s);t.once("error",o),t.listen(r,e,()=>{t.off("error",o),n()})})}function RCe(t){if(t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1"&&t!=="[::1]")throw new Fe("BRIDGE_STATE_INVALID","Hunsu Bridge must bind to a loopback address.")}function IO(t){return t==="localhost"?"127.0.0.1":t==="[::1]"?"::1":t}function ACe(t,e){return t?"development":e==="win32"?"windows-task-scheduler":e==="darwin"?"macos-launch-agent":"linux-systemd-user"}function CCe(t,e){return t instanceof Error&&"code"in t&&t.code===e}var zQ=new Set(["home","json","help","version"]),JQ=new Set(["json","help","version","follow","delete-data","confirm-delete-data","no-open","dry-run"]),PCe=new Set(["home","host","port","cwd","web-url","profile","channel","runtime-package","runtime-path","binary","codex-home","workspace","scopes"]);function EO(t){let e=new Map,r=[];for(let i=0;i<t.length;i+=1){let o=t[i];if(!o.startsWith("--")){r.push(o);continue}let s=o.slice(2);if(!s)throw Ph("Invalid empty command option.");let a=s.indexOf("="),c=a>=0?s.slice(0,a):s;if(_Ce(c),e.has(c))throw Ph(`Duplicate option: --${c}.`);if(JQ.has(c)){if(a>=0)throw Ph(`--${c} does not accept a value.`);e.set(c,!0);continue}let u=a>=0?s.slice(a+1):t[i+1];if(!u||a<0&&u.startsWith("--"))throw Ph(`--${c} requires a value.`);e.set(c,u),a<0&&(i+=1)}let n={positionals:r,flags:e};return TCe(n),n}function XQ(t){return t.some(e=>e==="--json"||e.startsWith("--json="))}function Or(t,e){let r=t.flags.get(e);return typeof r=="string"?r:void 0}function Rs(t,e){return t.flags.get(e)===!0}function _Ce(t){if(!JQ.has(t)&&!PCe.has(t))throw Ph(`Unknown option: --${t}.`)}function TCe(t){let e=t.positionals[0];if(!e){KQ(t,zQ,"help");return}let r=new Set(zQ);switch(e){case"dev":case"daemon":Xc(r,"host","port","cwd","web-url","runtime-path","profile");break;case"setup":Xc(r,"channel","runtime-package","dry-run","profile");break;case"remove":Xc(r,"delete-data","confirm-delete-data","dry-run","profile");break;case"status":case"doctor":Xc(r,"profile");break;case"logs":Xc(r,"follow");break;case"provider":t.positionals[1]==="set"&&Xc(r,"binary","codex-home");break;case"workspace":t.positionals[1]==="grant"&&Xc(r,"scopes");break;case"pair":case"open":Xc(r,"workspace");break;case"login":Xc(r,"no-open");break;default:break}KQ(t,r,e)}function Xc(t,...e){for(let r of e)t.add(r)}function KQ(t,e,r){for(let n of t.flags.keys())if(!e.has(n))throw Ph(`Option --${n} is not supported by ${r}.`)}function Ph(t){return new Fe("BRIDGE_STATE_INVALID",t)}var BCe=new Set(["status","doctor","logs","provider","workspace","credential","pair","open","login","logout","remote"]),vR=2e4;function YQ(t){return BCe.has(t)}async function QQ(t){let{parsed:e,paths:r,client:n,emit:i}=t,o=e.positionals[0];if(o==="status")return i(await n.request("/v1/control/status"));if(o==="doctor"){let s=await n.request("/v1/control/doctor"),a=!s.ok&&(s.code==="BRIDGE_NOT_RUNNING"||s.code==="BRIDGE_STATE_INVALID")?pr("Offline Bridge diagnostics completed.",await uw({paths:r,online:!1})):s;return i(a)}if(o==="logs"){let s=await n.request("/v1/control/logs"),a=i(s);return a!==0||!Rs(e,"follow")?a:MCe(n,i)}if(o==="provider")return i(await DCe(e,n));if(o==="workspace")return i(await NCe(e,n));if(o==="credential"){let s=e.positionals[1];if(s!=="rotate")throw new Fe("BRIDGE_STATE_INVALID",`Unknown credential command: ${s??""}`);return i(await n.request("/v1/control/credential/rotate",{method:"POST"}))}if(o==="pair"||o==="open")return o==="pair"&&e.positionals[1]==="revoke"?i(await n.request("/v1/control/pair/revoke",{method:"POST"})):i(await n.request("/v1/control/pair",{method:"POST",body:{...Or(e,"workspace")?{workspaceId:Or(e,"workspace")}:{},openBrowser:o==="open"}}));if(o==="login")return i(await n.request("/v1/control/login",{method:"POST",body:{openBrowser:!Rs(e,"no-open")}}));if(o==="logout")return i(await n.request("/v1/control/logout",{method:"POST"}));if(o==="remote"){let s=e.positionals[1]??"status";if(s==="status")return i(await n.request("/v1/control/remote"));if(s==="enable"||s==="disable")return i(await n.request(`/v1/control/remote/${s}`,{method:"POST"}));throw new Fe("BRIDGE_STATE_INVALID",`Unknown remote command: ${s}`)}throw new Fe("BRIDGE_STATE_INVALID",`Unknown client command: ${o}`)}async function DCe(t,e){let r=t.positionals[1]??"status";if(r==="list"||r==="status")return e.request(`/v1/control/provider${r==="status"?"":"?list=1"}`,{timeoutMs:vR});if(r==="check")return kO(t.positionals[2]),e.request("/v1/control/provider/check",{method:"POST",timeoutMs:vR});if(r==="set"){kO(t.positionals[2]);let n=await e.request("/v1/control/provider",{method:"PUT",timeoutMs:vR,body:{providerId:"codex",...Or(t,"binary")?{binaryPath:Or(t,"binary")}:{},...Or(t,"codex-home")?{home:Or(t,"codex-home")}:{}}});return!n.ok&&n.code==="BRIDGE_NOT_RUNNING"&&Or(t,"home")&&!Or(t,"codex-home")?fr("BRIDGE_NOT_RUNNING","Hunsu Bridge is not running at the selected HUNSU_HOME. --home selects HUNSU_HOME; use --codex-home to configure Codex Home."):n}if(r==="reset")return kO(t.positionals[2]),e.request("/v1/control/provider",{method:"PUT",timeoutMs:vR,body:{providerId:"codex",reset:!0}});throw new Fe("BRIDGE_STATE_INVALID",`Unknown provider command: ${r}`)}async function NCe(t,e){let r=t.positionals[1]??"list";if(r==="list")return e.request("/v1/control/workspaces");if(r==="add"){let o=t.positionals[2];if(!o)throw new Fe("WORKSPACE_PATH_INVALID","Workspace path is required.");return e.request("/v1/control/workspaces",{method:"POST",body:{path:o}})}let n=t.positionals[2];if(!n)throw new Fe("WORKSPACE_NOT_FOUND","Workspace id is required.");let i=encodeURIComponent(n);if(r==="inspect")return e.request(`/v1/control/workspaces/${i}`);if(r==="remove")return e.request(`/v1/control/workspaces/${i}`,{method:"DELETE"});if(r==="open")return e.request(`/v1/control/workspaces/${i}/open`,{method:"POST"});if(r==="grant"||r==="revoke"){let o=r==="revoke"?[]:OCe(Or(t,"scopes"));return e.request(`/v1/control/workspaces/${i}/remote-access`,{method:"PUT",body:{enabled:r==="grant",scopes:o}})}throw new Fe("BRIDGE_STATE_INVALID",`Unknown workspace command: ${r}`)}function OCe(t){let r=(t??"remote.access").split(",").map(n=>n.trim()).filter(Boolean).map(n=>{if(!tp.includes(n))throw new Fe("BRIDGE_STATE_INVALID",`Unsupported Workspace Remote scope: ${n}`);return n});if(!r.includes("remote.access"))throw new Fe("BRIDGE_STATE_INVALID","Workspace Remote grants require remote.access.");return[...new Set(r)]}async function MCe(t,e){let r=!1,n=()=>{r=!0};process.once("SIGINT",n),process.once("SIGTERM",n);try{for(;!r&&(await new Promise(o=>setTimeout(o,1e3)),!r);){let i=await t.request("/v1/control/logs?limit=50");if(e(i)!==0)return 1}return 0}finally{process.off("SIGINT",n),process.off("SIGTERM",n)}}function kO(t){if(t!=="codex")throw new Fe("PROVIDER_NOT_CONFIGURED","The first headless Bridge prerelease supports only Codex.")}import{homedir as ZCe}from"node:os";import{homedir as GCe}from"node:os";import{join as zCe}from"node:path";import{execFile as LCe}from"node:child_process";import{access as HCe,mkdir as ZQ,readFile as UCe,rm as $Ce,writeFile as FCe}from"node:fs/promises";import{dirname as tZ,isAbsolute as jCe,win32 as qCe}from"node:path";function Th(t,e){let r=e.sleep??(u=>new Promise(d=>setTimeout(d,u))),n=Math.max(1,e.stopTimeoutMs??8e3),i=Math.max(1,e.pollIntervalMs??100),o,s=async()=>{let[u,d,l]=await Promise.all([RO(t),rZ(e.probeHealth),o?Promise.resolve(o):e.readInstalledRuntime?.().catch(()=>{})??Promise.resolve(void 0)]),f=d==="healthy"?await VCe(e.probeAuthenticatedStatus):"unavailable";return{installed:u.installed,manager:t.manager,managerState:u.state,health:d,authentication:f,definitionPath:t.definitionPath,packageVersion:l?.packageVersion,runtimePath:l?.runtimePath,deploymentProfile:l?.deploymentProfile,detail:u.detail}},a=async()=>{let u=!1;try{u=await e.requestAuthenticatedShutdown()}catch{u=!1}if(u&&await eZ(e.probeHealth,r,n,i)==="offline")return Tf(t.manager,"Hunsu Bridge stopped through its authenticated control API.",!0);try{await t.stopOwned()}catch{return Bf(t.manager,"SERVICE_STOP_FAILED","The owned Hunsu Bridge service could not be stopped.")}return await eZ(e.probeHealth,r,n,i)==="healthy"?Bf(t.manager,"SERVICE_STOP_FAILED","The owned Hunsu Bridge service stopped, but the Bridge endpoint remained healthy."):Tf(t.manager,"Hunsu Bridge stopped through its OS user service manager.",!0)},c={async install(u){try{WCe(u,t.platform);let d=await t.install(u);return o={packageVersion:u.packageVersion,runtimePath:u.runtimePath,deploymentProfile:u.deploymentProfile},d.changed?Tf(t.manager,"Hunsu Bridge user service installed. It was not started.",!0):Tf(t.manager,"Hunsu Bridge user service is already installed.",!1,"SERVICE_ALREADY_INSTALLED")}catch{return Bf(t.manager,"SERVICE_INSTALL_FAILED","Hunsu Bridge user service installation failed.")}},async uninstall(){if(!(await RO(t)).installed)return Tf(t.manager,"Hunsu Bridge user service is not installed.",!1);if(!(await a()).ok)return Bf(t.manager,"SERVICE_STOP_FAILED","Hunsu Bridge must stop before its user service can be uninstalled.");try{let l=await t.uninstall();return Tf(t.manager,"Hunsu Bridge user service uninstalled.",l.changed)}catch{return Bf(t.manager,"SERVICE_INSTALL_FAILED","Hunsu Bridge user service uninstallation failed.")}},async start(){if(!(await RO(t)).installed)return Bf(t.manager,"SERVICE_NOT_INSTALLED","Install the Hunsu Bridge user service before starting it.");try{return await t.start(),Tf(t.manager,"Hunsu Bridge start requested through its OS user service manager.",!0)}catch{return Bf(t.manager,"SERVICE_START_FAILED","The Hunsu Bridge user service could not be started.")}},stop:a,async restart(){let u=await a();return u.ok?c.start():u},status:s};return c}var xR={async exists(t){try{return await HCe(t),!0}catch{return!1}},async readText(t){try{return await UCe(t,"utf8")}catch{return}},async mkdir(t,e){await ZQ(t,{recursive:!0,mode:e?.mode})},async writeText(t,e,r){await ZQ(tZ(t),{recursive:!0,mode:448}),await FCe(t,e,{encoding:"utf8",mode:r?.mode})},async remove(t){await $Ce(t,{force:!0})}},AO=(t={})=>e=>new Promise(r=>{LCe(e.command,e.args,{encoding:"utf8",...lb(e.command)?{env:Ms(t)}:{},windowsHide:!0,maxBuffer:1024*1024},(n,i,o)=>{let s=n&&"code"in n&&typeof n.code=="number"?n.code:n?1:0;r({exitCode:s,stdout:i??"",stderr:o??(n instanceof Error?n.message:"")})})}),SR=AO();async function bR(t,e,r){return await t.readText(e)===r?!1:(await t.mkdir(tZ(e),{mode:448}),await t.writeText(e,r,{mode:384}),!0)}function WCe(t,e){let r=e==="win32"?qCe.isAbsolute:jCe;for(let[n,i]of Object.entries({nodePath:t.nodePath,cliPath:t.cliPath,hunsuHome:t.hunsuHome,runtimePath:t.runtimePath}))if(!i||!r(i)||_h(i))throw new Error(`${n} must be an absolute path without control characters.`);if(!t.packageVersion.trim()||_h(t.packageVersion))throw new Error("packageVersion must be non-empty and contain no control characters.");if(!Pn(t.deploymentProfile))throw new Error("deploymentProfile must be production or preview.")}function CO(t){if(_h(t))throw new Error("systemd values cannot contain control characters.");return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/%/g,"%%")}"`}function Bd(t){if(_h(t))throw new Error("plist values cannot contain control characters.");return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Aa(t){if(_h(t))throw new Error("PowerShell values cannot contain control characters.");return`'${t.replace(/'/g,"''")}'`}function wR(t){if(_h(t)||t.includes('"'))throw new Error("Windows command arguments cannot contain control characters or quotes.");return`"${t.replace(/(\\+)$/u,"$1$1")}"`}async function RO(t){try{return await t.status()}catch{return{installed:!1,state:"unknown",detail:"Service-manager status is unavailable."}}}async function rZ(t){try{return await t()?"healthy":"offline"}catch{return"unavailable"}}async function VCe(t){if(!t)return"unavailable";try{return(await t()).state}catch{return"unavailable"}}async function eZ(t,e,r,n){let i=Math.max(1,Math.ceil(r/n));for(let o=0;o<i;o+=1){let s=await rZ(t);if(s!=="healthy")return s;o+1<i&&await e(n)}return"healthy"}function Tf(t,e,r,n="OK"){return{ok:!0,code:n,message:e,manager:t,changed:r}}function Bf(t,e,r){return{ok:!1,code:e,message:r,manager:t}}function _h(t){return/[\u0000-\u001f\u007f]/u.test(t)}var Bh="hunsu-bridge.service";function nZ(t){let e=t.commandRunner??SR,r=t.fileSystem??xR,n=t.unitPath??zCe(t.homeDirectory??GCe(),".config","systemd","user",Bh);return Th({manager:"systemd-user",definitionPath:n,platform:"linux",async install(o){let s=await bR(r,n,KCe(o));return zx(await e({command:"systemctl",args:["--user","daemon-reload"]}),"reload systemd user units"),zx(await e({command:"systemctl",args:["--user","enable",Bh]}),"enable the systemd user unit"),{changed:s}},async uninstall(){let o=await r.exists(n);return await e({command:"systemctl",args:["--user","disable",Bh]}),await r.remove(n),zx(await e({command:"systemctl",args:["--user","daemon-reload"]}),"reload systemd user units"),{changed:o}},async start(){zx(await e({command:"systemctl",args:["--user","start",Bh]}),"start the systemd user unit")},async stopOwned(){zx(await e({command:"systemctl",args:["--user","stop",Bh]}),"stop the systemd user unit")},async status(){if(!await r.exists(n))return{installed:!1,state:"stopped"};let o=await e({command:"systemctl",args:["--user","is-active",Bh]});return{installed:!0,state:o.exitCode===0&&o.stdout.trim()==="active"?"running":/^(inactive|failed|deactivating)$/u.test(o.stdout.trim())||o.exitCode===3?"stopped":"unknown",detail:o.stdout.trim()||o.stderr.trim()||void 0}}},t)}function KCe(t){return["[Unit]","Description=Hunsu Bridge","After=network-online.target","","[Service]","Type=simple",`ExecStart=${[t.nodePath,t.cliPath,"daemon","--runtime-path",t.runtimePath,"--profile",t.deploymentProfile].map(CO).join(" ")}`,`Environment=${CO(`HUNSU_HOME=${t.hunsuHome}`)}`,"Restart=on-failure","RestartSec=2","","[Install]","WantedBy=default.target",""].join(`
272
272
  `)}function zx(t,e){if(t.exitCode!==0)throw new Error(`Unable to ${e}.`)}import{homedir as JCe}from"node:os";import{join as IR}from"node:path";var _O="app.hunsu.bridge";function iZ(t){let e=t.commandRunner??SR,r=t.fileSystem??xR,n=t.homeDirectory??JCe(),i=t.plistPath??IR(n,"Library","LaunchAgents",`${_O}.plist`),s=`gui/${t.uid??(typeof process.getuid=="function"?process.getuid():0)}`,a=`${s}/${_O}`;return Th({manager:"launchd-user",definitionPath:i,platform:"darwin",async install(u){await r.mkdir(IR(u.hunsuHome,"logs"),{mode:448});let d=XCe(u);return await r.readText(i)!==d&&(await e({command:"launchctl",args:["print",a]})).exitCode===0&&PO(await e({command:"launchctl",args:["bootout",a]}),"reload the changed LaunchAgent definition"),{changed:await bR(r,i,d)}},async uninstall(){let u=await r.exists(i);return await e({command:"launchctl",args:["bootout",a]}),await r.remove(i),{changed:u}},async start(){let d=(await e({command:"launchctl",args:["print",a]})).exitCode===0?await e({command:"launchctl",args:["kickstart",a]}):await e({command:"launchctl",args:["bootstrap",s,i]});PO(d,"start the LaunchAgent")},async stopOwned(){PO(await e({command:"launchctl",args:["bootout",a]}),"stop the LaunchAgent")},async status(){if(!await r.exists(i))return{installed:!1,state:"stopped"};let u=await e({command:"launchctl",args:["print",a]}),l=u.stdout.match(/^\s*state\s*=\s*([^\r\n]+)\s*$/imu)?.[1]?.trim().toLowerCase();return{installed:!0,state:u.exitCode!==0?"stopped":l==="running"?"running":l?"stopped":"unknown",detail:u.exitCode===0?l??"loaded; state unavailable":"not loaded"}}},t)}function XCe(t){let e=IR(t.hunsuHome,"logs","bridge.stdout.log"),r=IR(t.hunsuHome,"logs","bridge.stderr.log");return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>"," <key>Label</key>",` <string>${_O}</string>`," <key>ProgramArguments</key>"," <array>",` <string>${Bd(t.nodePath)}</string>`,` <string>${Bd(t.cliPath)}</string>`," <string>daemon</string>"," <string>--runtime-path</string>",` <string>${Bd(t.runtimePath)}</string>`," <string>--profile</string>",` <string>${Bd(t.deploymentProfile)}</string>`," </array>"," <key>EnvironmentVariables</key>"," <dict>"," <key>HUNSU_HOME</key>",` <string>${Bd(t.hunsuHome)}</string>`," </dict>"," <key>RunAtLoad</key>"," <true/>"," <key>KeepAlive</key>"," <dict>"," <key>SuccessfulExit</key>"," <false/>"," </dict>"," <key>StandardOutPath</key>",` <string>${Bd(e)}</string>`," <key>StandardErrorPath</key>",` <string>${Bd(r)}</string>`,"</dict>","</plist>",""].join(`
273
273
  `)}function PO(t,e){if(t.exitCode!==0)throw new Error(`Unable to ${e}.`)}var oZ="Hunsu Bridge";function sZ(t){let e=t.commandRunner??AO(t.processEnv??{}),r=t.taskName??oZ,n=t.powershellPath??"powershell.exe",i=!1,o=u=>e({command:n,args:["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",u]}),s=async()=>o(["$ErrorActionPreference = 'Stop'",`Get-ScheduledTask -TaskName ${Aa(r)} | Select-Object -ExpandProperty State`].join("; ")),a=async()=>o(["$ErrorActionPreference = 'Stop'",`$Task = Get-ScheduledTask -TaskName ${Aa(r)}`,"@{ Execute = $Task.Actions[0].Execute; Arguments = $Task.Actions[0].Arguments; WorkingDirectory = $Task.Actions[0].WorkingDirectory } | ConvertTo-Json -Compress"].join("; ")),c={manager:"windows-task-scheduler",definitionPath:`Task Scheduler: ${r}`,platform:"win32",async install(u){let d=await a(),l=!QCe(d,u),f=await o(YCe(u,r));return ER(f,"register the current-user scheduled task"),i=!0,{changed:l}},async uninstall(){let u=await s(),d=await o(["$ErrorActionPreference = 'Stop'",`Unregister-ScheduledTask -TaskName ${Aa(r)} -Confirm:$false`].join("; "));return u.exitCode===0&&ER(d,"unregister the current-user scheduled task"),i=!1,{changed:u.exitCode===0}},async start(){ER(await o(`Start-ScheduledTask -TaskName ${Aa(r)}`),"start the current-user scheduled task")},async stopOwned(){ER(await o(`Stop-ScheduledTask -TaskName ${Aa(r)}`),"stop the current-user scheduled task")},async status(){let u=await s();if(u.exitCode!==0)return{installed:i,state:"stopped",detail:"task not registered"};i=!0;let d=u.stdout.trim().toLowerCase();return{installed:!0,state:d==="running"?"running":d?"stopped":"unknown",detail:d||void 0}}};return Th(c,t)}function YCe(t,e=oZ){let r=aZ(t);return["$ErrorActionPreference = 'Stop'","$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name",`$Action = New-ScheduledTaskAction -Execute ${Aa(t.nodePath)} -Argument ${Aa(r)} -WorkingDirectory ${Aa(t.runtimePath)}`,"$Trigger = New-ScheduledTaskTrigger -AtLogOn -User $CurrentUser","$Principal = New-ScheduledTaskPrincipal -UserId $CurrentUser -LogonType Interactive -RunLevel Limited","$Settings = New-ScheduledTaskSettingsSet -Hidden -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)",`Register-ScheduledTask -TaskName ${Aa(e)} -Action $Action -Trigger $Trigger -Principal $Principal -Settings $Settings -Description 'Hunsu Bridge current-user daemon' -Force | Out-Null`].join("; ")}function aZ(t){return[wR(t.cliPath),"daemon","--runtime-path",wR(t.runtimePath),"--home",wR(t.hunsuHome),"--profile",t.deploymentProfile].join(" ")}function QCe(t,e){if(t.exitCode!==0)return!1;try{let r=JSON.parse(t.stdout.trim().replace(/^\uFEFF/u,""));return typeof r.Execute=="string"&&r.Execute.toLowerCase()===e.nodePath.toLowerCase()&&r.Arguments===aZ(e)&&typeof r.WorkingDirectory=="string"&&r.WorkingDirectory.toLowerCase()===e.runtimePath.toLowerCase()}catch{return!1}}function ER(t,e){if(t.exitCode!==0)throw new Error(`Unable to ${e}.`)}function cZ(t){let e=t.platform??process.platform;if(e==="linux"&&t.linux)return nZ(t.linux);if(e==="darwin"&&t.macos)return iZ(t.macos);if(e==="win32"&&t.windows)return sZ(t.windows);throw new Error(`Hunsu Bridge does not have a configured user service manager for ${e}.`)}function uZ(t){let e=t.platform??process.platform,r={requestAuthenticatedShutdown:async()=>(await t.controlClient.request("/v1/control/shutdown",{method:"POST"})).ok,probeHealth:async()=>await t.controlClient.health()!==void 0,probeAuthenticatedStatus:async()=>{let i=await t.controlClient.request("/v1/control/status");return i.ok?{state:"authenticated",value:i.value}:i.code==="BRIDGE_CONTROL_UNAUTHORIZED"?{state:"unauthorized"}:{state:"unavailable"}},readInstalledRuntime:async()=>{let i=await Pu(t.paths).read();return i?{packageVersion:i.current.packageVersion,runtimePath:i.current.runtimePath,deploymentProfile:i.serviceInput.deploymentProfile}:void 0}},n=t.userHome??ZCe();return cZ({platform:e,...e==="linux"?{linux:{...r,homeDirectory:n}}:{},...e==="darwin"?{macos:{...r,homeDirectory:n}}:{},...e==="win32"?{windows:{...r,processEnv:t.processEnv}}:{}})}import{isAbsolute as dZ}from"node:path";import{fileURLToPath as ePe,pathToFileURL as lZ}from"node:url";var Ca=class extends Error{code="RUNTIME_INSTALL_FAILED";constructor(e){super(e),this.name="RuntimePackageSourceError"}};function kR(){return{kind:"registry-exact",packageName:"@hunsu/bridge",version:bn}}function fZ(t,e=bn){if(hZ(t)||!dZ(t)||!t.toLowerCase().endsWith(".tgz"))throw new Ca("--runtime-package requires an absolute local .tgz path.");if(!TO(e))throw new Ca("The local runtime package requires an exact expected version.");return{kind:"local-tarball",fileUrl:lZ(t).href,expectedVersion:e}}function pZ(t){return Kx(t),"@hunsu/bridge"}function mZ(t){let e=Kx(t);return e.kind==="registry-exact"?e.version:e.expectedVersion}function BO(t){let e=Kx(t);return e.kind==="local-tarball"?e.fileUrl:`${e.packageName}@${e.version}`}function Kx(t){if(t.kind==="registry-exact"){if(t.packageName!=="@hunsu/bridge"||!TO(t.version))throw new Ca("Bridge setup requires one exact @hunsu/bridge package version.");return{kind:"registry-exact",packageName:"@hunsu/bridge",version:t.version}}if(t.kind!=="local-tarball"||!TO(t.expectedVersion))throw new Ca("Bridge setup requires one exact @hunsu/bridge package version.");let e;try{e=new URL(t.fileUrl)}catch{throw new Ca("The local runtime package must be a file URL created from an absolute .tgz path.")}if(e.protocol!=="file:"||e.username||e.password||e.search||e.hash)throw new Ca("The local runtime package must be a credential-free local file URL.");let r;try{r=ePe(e)}catch{throw new Ca("The local runtime package file URL is invalid.")}if(!dZ(r)||!r.toLowerCase().endsWith(".tgz")||hZ(r))throw new Ca("The local runtime package must resolve to an absolute .tgz path.");return{kind:"local-tarball",fileUrl:lZ(r).href,expectedVersion:t.expectedVersion}}function TO(t){return/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/u.test(t)}function hZ(t){return/[\u0000-\u001f\u007f]/u.test(t)}import{join as bPe}from"node:path";import{execFile as tPe}from"node:child_process";import{lstat as gZ,mkdir as rPe,realpath as nPe}from"node:fs/promises";import{isAbsolute as iPe,resolve as NO,win32 as oPe}from"node:path";import{promisify as sPe}from"node:util";var RR="hunsu.bridge.home-ownership.v1",sn=class extends Error{constructor(e,r){super(e,r),this.name="HomeOwnershipError"}};function AR(t,e={}){let r=e.platform??process.platform,n=e.windowsAclHardener??(i=>cPe(i,e.processEnv??{}));return{async read(){let i;try{i=await gZ(t.homeOwnershipFile)}catch(s){if(er(s)&&s.code==="ENOENT")return;throw new sn("The Hunsu home ownership marker could not be inspected.",{cause:s})}if(!i.isFile()||i.isSymbolicLink())throw new sn("The Hunsu home ownership marker has an unsafe filesystem type.");let o=await ai(t.homeOwnershipFile);return o===void 0?void 0:yZ(t.homeOwnershipFile,o)},async write(i){await wn(t.homeOwnershipFile,yZ(t.homeOwnershipFile,i),{mode:384,...r==="win32"?{prepareTemporaryFile:n}:{}})},async canonicalHome(i){try{i&&await rPe(t.home,{recursive:!0,mode:448});let o=await gZ(t.home);if(!o.isDirectory()||o.isSymbolicLink())throw new sn("The configured Hunsu home has an unsafe filesystem type.");return NO(await nPe(t.home))}catch(o){throw o instanceof sn?o:new sn("The canonical Hunsu home could not be established.",{cause:o})}}}}async function vZ(t){let e=await t.store.canonicalHome(!0),r=await t.store.read();if(r){if(!CR(r.home,e))throw new sn("The Hunsu home ownership marker does not match the canonical home.");if(t.expectedInstallationId&&r.installationId!==t.expectedInstallationId)throw new sn("The Hunsu home ownership marker does not match the installed runtime.");return await t.store.write(r),r}let n=t.expectedInstallationId??(t.createInstallationId??JH)();xZ(n);let i={schema:RR,installationId:n,createdAt:(t.now??(()=>new Date))().toISOString(),home:e};return await t.store.write(i),i}function CR(t,e){let r=NO(t),n=NO(e);return process.platform==="win32"?r.toLowerCase()===n.toLowerCase():r===n}var aPe=sPe(tPe);async function cPe(t,e){let r=uPe(t);try{await aPe(r.command,r.args,{env:Ms(e),windowsHide:!0})}catch{throw new sn("The Hunsu home ownership marker ACL could not be restricted to the current Windows user.")}}function uPe(t){if(/[\u0000-\u001f\u007f]/u.test(t))throw new sn("The Hunsu home ownership marker path cannot contain control characters.");return db(t,"OwnershipMarkerPath")}function yZ(t,e){if(!dPe(e)||e.schema!==RR)throw Ue(t,`expected schema ${RR}`);let r=DO(t,"installationId",e.installationId);xZ(r,t);let n=DO(t,"createdAt",e.createdAt);if(!Number.isFinite(Date.parse(n)))throw Ue(t,"createdAt must be an ISO timestamp");let i=DO(t,"home",e.home);if(!iPe(i)&&!oPe.isAbsolute(i))throw Ue(t,"home must be an absolute path");return{schema:RR,installationId:r,createdAt:n,home:i}}function xZ(t,e){if(!/^install_[A-Za-z0-9_-]{8,}$/u.test(t))throw e?Ue(e,"installationId must be a Hunsu installation id"):new sn("The Hunsu installation identity is invalid.")}function DO(t,e,r){if(typeof r!="string"||!r.trim()||/[\u0000-\u001f\u007f]/u.test(r))throw Ue(t,`${e} must be a non-empty safe string`);return r}function dPe(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}import{lstat as lPe,readdir as fPe,realpath as pPe,rmdir as mPe,unlink as hPe}from"node:fs/promises";import{homedir as gPe}from"node:os";import{basename as yPe,isAbsolute as vPe,join as Yx,parse as xPe,relative as IZ,resolve as Uo,sep as EZ}from"node:path";var MO=Object.freeze(["config.json","workspaces.json","credentials.json","runtime.json","runtime","logs",".hunsu-bridge-home.json"]),kZ=Object.freeze(["runtime.json","runtime"]),RZ={"config.json":"file","workspaces.json":"file","credentials.json":"file","runtime.json":"file",runtime:"directory",logs:"directory",".hunsu-bridge-home.json":"file"},vn=class extends Error{constructor(e,r){super(e,r),this.name="OwnedDataSafetyError"}},Qx={async lstat(t){try{return await lPe(t)}catch(e){if(er(e)&&e.code==="ENOENT")return;throw e}},realpath:pPe,readdir:fPe,unlink:hPe,rmdir:mPe};async function AZ(t){let e=t.fileSystem??Qx,r=Uo(t.canonicalHome);await SPe({canonicalHome:r,fileSystem:e,userHome:t.userHome,currentDirectory:t.currentDirectory});let n=await PR(e,r),i=[];for(let c of t.entries)Zx(c),await _Z(e,r,Yx(r,c),RZ[c])&&i.push(c);let o=BZ(n),s=new Set(t.entries),a=n.every(c=>s.has(c));return{canonicalHome:r,entries:[...t.entries],existingEntries:i,preservedUnknownEntries:o,homeDirectoryRemoved:a}}async function CZ(t,e=Qx){for(let i of t.entries)await TZ(e,t.canonicalHome,Yx(t.canonicalHome,i),RZ[i]);let r=await PR(e,t.canonicalHome),n=!1;if(r.length===0)try{await e.rmdir(t.canonicalHome),n=!0}catch(i){if(!er(i)||i.code!=="ENOENT"&&i.code!=="ENOTEMPTY"&&i.code!=="EEXIST")throw i;n=i.code==="ENOENT"}return{deleted:t.existingEntries.filter(i=>i!==".hunsu-bridge-home.json"),preservedUnknownEntries:BZ(r),homeDirectoryRemoved:n}}async function PZ(t){let e=t.fileSystem??Qx;LO(t.canonicalHome,t.path);let r=IZ(Uo(t.canonicalHome),Uo(t.path)).split(EZ),n=Uo(t.canonicalHome);for(let o of r.slice(0,-1)){Zx(o),n=Yx(n,o);let s=await Xx(e,n);if(!s?.isDirectory()||s.isSymbolicLink())throw new vn("An installation identity directory has an unsafe filesystem type.");await Df(e,t.canonicalHome,n)}let i=await Xx(e,t.path);if(!i||i.isSymbolicLink()||!i.isFile())throw new vn("An installation identity file has an unsafe filesystem type.");await Df(e,t.canonicalHome,t.path)}async function _Z(t,e,r,n){LO(e,r);let i=await Xx(t,r);if(!i)return!1;if(i.isSymbolicLink())return!0;if(i.isFile()){if(n==="directory")throw Jx();return await Df(t,e,r),!0}if(i.isDirectory()){if(n==="file")throw Jx();await Df(t,e,r);let o=await PR(t,r);for(let s of o)Zx(s),await _Z(t,e,Yx(r,s),"any");return!0}throw Jx()}async function TZ(t,e,r,n){LO(e,r);let i=await Xx(t,r);if(i){if(i.isSymbolicLink()){await t.unlink(r);return}if(i.isFile()){if(n==="directory")throw Jx();await Df(t,e,r),await t.unlink(r);return}if(!i.isDirectory()||n==="file")throw Jx();await Df(t,e,r);for(let o of await PR(t,r))Zx(o),await SZ(t,e,r),await TZ(t,e,Yx(r,o),"any");await SZ(t,e,r),await t.rmdir(r)}}async function SZ(t,e,r){let n=await Xx(t,r);if(!n?.isDirectory()||n.isSymbolicLink())throw new vn("A Hunsu-owned directory changed type during removal.");await Df(t,e,r)}async function Df(t,e,r){let n;try{n=Uo(await t.realpath(r))}catch(i){throw new vn("Canonical containment could not be established for Hunsu-owned data.",{cause:i})}if(!HO(e,n,!1))throw new vn("A Hunsu-owned entry resolves outside the canonical Hunsu home.")}async function SPe(t){let e=xPe(t.canonicalHome).root;if(wZ(t.canonicalHome,e))throw OO();let r=await bZ(t.fileSystem,t.userHome??gPe());if(wZ(t.canonicalHome,r))throw OO();let n=await bZ(t.fileSystem,t.currentDirectory??process.cwd());if(HO(t.canonicalHome,n,!0))throw OO()}async function bZ(t,e){try{return Uo(await t.realpath(e))}catch{return Uo(e)}}async function Xx(t,e){try{return await t.lstat(e)}catch(r){throw new vn("A Hunsu-owned entry could not be inspected safely.",{cause:r})}}async function PR(t,e){try{let r=await t.readdir(e);for(let n of r)Zx(n);return r.sort((n,i)=>n.localeCompare(i))}catch(r){if(er(r)&&r.code==="ENOENT")return[];throw r instanceof vn?r:new vn("A Hunsu-owned directory could not be inspected safely.",{cause:r})}}function BZ(t){let e=new Set(MO);return t.filter(r=>!e.has(r))}function LO(t,e){if(!HO(t,Uo(e),!1))throw new vn("A Hunsu-owned path is outside the canonical Hunsu home.")}function HO(t,e,r){let n=IZ(Uo(t),Uo(e));return n===""?r:n!==".."&&!n.startsWith(`..${EZ}`)&&!vPe(n)}function wZ(t,e){let r=Uo(t),n=Uo(e);return process.platform==="win32"?r.toLowerCase()===n.toLowerCase():r===n}function Zx(t){if(!t||t==="."||t===".."||yPe(t)!==t)throw new vn("A directory entry is not safe to report or remove.")}function OO(){return new vn("Hunsu Bridge refuses to remove data from a protected directory.")}function Jx(){return new vn("A Hunsu-owned entry has an unexpected filesystem type.")}async function NZ(t,e){if(t.deleteData&&t.confirmed!==!0)return{ok:!1,code:"CONFIRMATION_REQUIRED",message:"Deleting Hunsu Bridge data requires explicit confirmation."};if(t.dryRun)return UO(t,e);if(t.deleteData){let i=await UO({...t,dryRun:!0},e);if(!i.ok)return i}let r;try{r=await(e.acquireOperationLock?e.acquireOperationLock(e.paths):gp(e.paths,"remove"))}catch(i){return i instanceof Zo?{ok:!1,code:i.code,message:i.message}:_R()}let n;try{n=await UO(t,e)}finally{try{await r.release()}catch{return _R()}}return n}async function UO(t,e){if(t.deleteData&&t.confirmed!==!0)return{ok:!1,code:"CONFIRMATION_REQUIRED",message:"Deleting Hunsu Bridge data requires explicit confirmation."};let r=e.installStore??Pu(e.paths),n=e.ownershipStore??AR(e.paths),i=e.fileSystem??Qx,o;try{let a=await i.lstat(e.paths.home);if(a){if(a.isSymbolicLink())throw new vn("Hunsu Bridge refuses to remove data through a symbolic-link or junction home.");if(!a.isDirectory())throw new vn("The configured Hunsu home has an unexpected filesystem type.");let c=await n.canonicalHome(!1);o=await AZ({canonicalHome:c,entries:t.deleteData?MO:kZ,fileSystem:i,userHome:e.userHome,currentDirectory:e.currentDirectory}),t.deleteData&&await wPe({canonicalHome:c,installStore:r,ownershipStore:n,fileSystem:i})}else if(t.deleteData)return $O("Hunsu Bridge refused to delete data because installation ownership is unknown.")}catch(a){return a instanceof vn||a instanceof sn||t.deleteData?$O(a instanceof Error?a.message:"Hunsu Bridge could not verify ownership of the data directory."):_R()}if(t.dryRun)return DZ({removedRuntime:!0,deletedData:t.deleteData===!0,deleted:IPe(o),preservedUnknownEntries:o?.preservedUnknownEntries??[],homeDirectoryRemoved:o?.homeDirectoryRemoved??!0,dryRun:!0});let s=await e.serviceManager.uninstall();if(!s.ok)return{ok:!1,code:s.code,message:s.message};try{let a=o?await CZ(o,i):{deleted:[],preservedUnknownEntries:[],homeDirectoryRemoved:!0};return DZ({removedRuntime:!0,deletedData:t.deleteData===!0,deleted:a.deleted,preservedUnknownEntries:a.preservedUnknownEntries,homeDirectoryRemoved:a.homeDirectoryRemoved,dryRun:!1})}catch(a){return a instanceof vn?$O(a.message):_R()}}async function wPe(t){await PZ({canonicalHome:t.canonicalHome,path:bPe(t.canonicalHome,"runtime","install.json"),fileSystem:t.fileSystem});let e=await t.installStore.read();if(!e?.installationId)throw new sn("Hunsu Bridge refused to delete data because installation ownership is unknown.");let r=await t.ownershipStore.read();if(!r)throw new sn("Hunsu Bridge refused to delete data because the ownership marker is missing.");if(r.installationId!==e.installationId)throw new sn("Hunsu Bridge refused to delete data because the installation identity does not match.");if(!CR(r.home,t.canonicalHome))throw new sn("Hunsu Bridge refused to delete data because the canonical home does not match.");let n;try{n=await t.fileSystem.realpath(e.serviceInput.hunsuHome)}catch(i){throw new sn("Hunsu Bridge refused to delete data because the installed home cannot be verified.",{cause:i})}if(!CR(n,t.canonicalHome))throw new sn("Hunsu Bridge refused to delete data because the installed home does not match.")}function IPe(t){return t?.existingEntries.filter(e=>e!==".hunsu-bridge-home.json")??[]}function $O(t){return{ok:!1,code:"BRIDGE_DATA_DELETE_REFUSED",message:t}}function _R(){return{ok:!1,code:"RUNTIME_INSTALL_FAILED",message:"Hunsu Bridge runtime files could not be removed safely."}}function DZ(t){let e=t.preservedUnknownEntries.length>0?` ${t.preservedUnknownEntries.length} unknown home entries were preserved.`:"";return{ok:!0,code:"OK",message:t.dryRun?`Hunsu Bridge removal dry run completed.${e}`:t.deletedData?`Hunsu Bridge and its owned user data were removed.${e}`:`Hunsu Bridge runtime removed; config, Workspaces, and credentials were preserved.${e}`,value:t}}import{randomUUID as HPe}from"node:crypto";import{execFile as EPe}from"node:child_process";import{createHash as kPe}from"node:crypto";import{lstat as RPe,mkdir as APe,readFile as CPe,readdir as PPe,realpath as _Pe,rename as TPe,rmdir as BPe,unlink as DPe}from"node:fs/promises";import{isAbsolute as WO,posix as HZ,relative as UZ,resolve as As,win32 as jO}from"node:path";var Wr=class extends Error{code="RUNTIME_INSTALL_FAILED";constructor(e,r){super(e,r),this.name="StagedRuntimeInstallError"}},Si=class extends Error{code="ROLLBACK_FAILED";constructor(e="The failed staged runtime could not be restored or removed safely.",r){super(e,r),this.name="StagedRuntimeCleanupError"}},VO={async lstat(t){try{return await RPe(t)}catch(e){if(LPe(e)&&e.code==="ENOENT")return;throw e}},realpath:_Pe,readdir:PPe,async mkdir(t){await APe(t,{recursive:!0,mode:448})},unlink:DPe,rmdir:BPe,rename:TPe,readFile:CPe},$Z=(t={})=>e=>new Promise(r=>{EPe(e.command,e.args,{encoding:"utf8",...lb(e.command)?{env:Ms(t)}:{},windowsHide:!0,maxBuffer:1024*1024},(n,i,o)=>{r({exitCode:n&&"code"in n&&typeof n.code=="number"?n.code:n?1:0,stdout:i??"",stderr:o??(n instanceof Error?n.message:"")})})}),hQe=$Z();function GO(t){let e=t.platform??process.platform,r=e==="win32"?jO:HZ;if(!(e==="win32"?jO.isAbsolute:WO)(t.nodePath)||JO(t.nodePath))throw new Wr("The Node executable path must be absolute.");if(!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(t.transactionId))throw new Wr("The setup transaction id is invalid.");let i=Kx(t.source??kR()),o=mZ(i),s=t.paths.runtimeStagingDirectory,a=r.join(s,t.transactionId),c=r.join(t.paths.runtimeVersionsDirectory,o),u=r.join(t.paths.runtimeVersionsDirectory,`.${o}.previous`),d=["node_modules","@hunsu","bridge"],l=r.join(a,...d),f=r.join(c,...d),p=["install","--ignore-scripts","--omit=dev","--no-audit","--no-fund","--prefix",a,BO(i)];return{source:i,packageName:pZ(i),packageVersion:o,packageSpec:BO(i),transactionId:t.transactionId,home:t.paths.home,runtimeDirectory:t.paths.runtimeDirectory,stagingRoot:s,stagingPath:a,stagingCliPath:r.join(l,"dist","cli.js"),stagingManifestPath:r.join(l,"package.json"),runtimeVersionsDirectory:t.paths.runtimeVersionsDirectory,runtimePath:c,quarantinePath:u,cliPath:r.join(f,"dist","cli.js"),manifestPath:r.join(f,"package.json"),nodePath:t.nodePath,npmCommand:e==="win32"?NPe(t.npmCommand??"npm.cmd",p):{command:t.npmCommand??"npm",args:p}}}async function FZ(t){let e=t.fileSystem??VO,r=t.commandRunner??$Z(t.processEnv??{}),n=t.now??(()=>new Date),i=await KO(t.plan,e);await qZ(t.plan,e,i,t.nodeVersion??process.version),await Dd(t.plan.stagingRoot,t.plan.stagingPath,e,i),await e.mkdir(t.plan.stagingPath);let o=!1;try{if(await Nf(t.plan.stagingPath,i,e),await t.onPhase?.("npm-install"),(await r(t.plan.npmCommand)).exitCode!==0)throw new Wr("npm could not install the exact Hunsu Bridge runtime package.");await t.onPhase?.("candidate-verification");let a=await TR({root:t.plan.stagingPath,manifestPath:t.plan.stagingManifestPath,cliPath:t.plan.stagingCliPath,expectedName:t.plan.packageName,expectedVersion:t.plan.packageVersion,fileSystem:e,canonicalHome:i,nodeVersion:t.nodeVersion??process.version});if(await e.lstat(t.plan.runtimePath)){let c;try{c=await TR({root:t.plan.runtimePath,manifestPath:t.plan.manifestPath,cliPath:t.plan.cliPath,expectedName:t.plan.packageName,expectedVersion:t.plan.packageVersion,fileSystem:e,canonicalHome:i,nodeVersion:t.nodeVersion??process.version})}catch(u){if(qO(t.protectedRuntimePath,t.plan.runtimePath))throw new Wr("The currently recorded runtime is incomplete or invalid; preserve it and run offline repair before retrying setup.",{cause:u})}if(c?.cliSha256===a.cliSha256)return await Dd(t.plan.stagingRoot,t.plan.stagingPath,e,i),{installation:MZ(t.plan,c.cliSha256,n),reused:!0};await Nf(t.plan.runtimePath,i,e),await e.rename(t.plan.runtimePath,t.plan.quarantinePath),o=!0}try{await t.onPhase?.("staging-rename"),await e.rename(t.plan.stagingPath,t.plan.runtimePath)}catch(c){if(o)try{await e.rename(t.plan.quarantinePath,t.plan.runtimePath),o=!1}catch(u){throw new Si("The staged runtime activation failed and the previous version directory could not be restored.",{cause:u})}throw c}if(o)try{await Dd(t.plan.runtimeVersionsDirectory,t.plan.quarantinePath,e,i)}catch(c){try{await Dd(t.plan.runtimeVersionsDirectory,t.plan.runtimePath,e,i),await e.rename(t.plan.quarantinePath,t.plan.runtimePath)}catch(u){throw new Si("The replacement runtime could not be committed or rolled back safely.",{cause:u})}throw new Si("The replacement runtime could not remove its quarantine directory.",{cause:c})}return{installation:MZ(t.plan,a.cliSha256,n),reused:!1}}catch(s){try{await Dd(t.plan.stagingRoot,t.plan.stagingPath,e,i)}catch(a){throw new Si("The failed staged runtime could not be removed; remove the runtime staging directory before retrying setup.",{cause:a})}throw s instanceof Wr||s instanceof Si?s:new Wr("The staged Hunsu Bridge runtime could not be verified and activated.",{cause:s})}}async function zO(t){if(t.previous&&qO(t.previous.runtimePath,t.installation.runtimePath))return{removed:!1};let e=t.fileSystem??VO,r=GO({paths:t.paths,transactionId:"candidate-cleanup",nodePath:t.installation.nodePath,source:{kind:"registry-exact",packageName:"@hunsu/bridge",version:t.installation.packageVersion}}),n=await KO(r,e);if(!qO(r.runtimePath,t.installation.runtimePath))throw new Si("The candidate runtime path is not the exact owned version directory.");return await Dd(r.runtimeVersionsDirectory,r.runtimePath,e,n),{removed:!0}}async function jZ(t){let e=t.fileSystem??VO,r=await KO(t.plan,e);return await qZ(t.plan,e,r,t.nodeVersion??process.version),TR({root:t.plan.runtimePath,manifestPath:t.plan.manifestPath,cliPath:t.plan.cliPath,expectedName:t.plan.packageName,expectedVersion:t.plan.packageVersion,fileSystem:e,canonicalHome:r,nodeVersion:t.nodeVersion??process.version})}function NPe(t,e){if(!t.trim()||JO(t))throw new Wr("The npm command is invalid.");let r=e.map(LZ).join(", "),n=["$ErrorActionPreference = 'Stop'",`$npm = ${LZ(t)}`,`$arguments = @(${r})`,"& $npm @arguments","if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }"].join(`
274
274
  `);return{command:"powershell.exe",args:["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(n,"utf16le").toString("base64")]}}async function KO(t,e){let r=await e.lstat(t.home);if(!r?.isDirectory()||r.isSymbolicLink())throw new Wr("The configured Hunsu home has an unsafe filesystem type.");let n=As(await e.realpath(t.home));for(let i of[t.runtimeDirectory,t.stagingRoot,t.runtimeVersionsDirectory])await e.lstat(i)||await e.mkdir(i),await Nf(i,n,e);return eS(t.stagingRoot,t.stagingPath),eS(t.runtimeVersionsDirectory,t.runtimePath),eS(t.runtimeVersionsDirectory,t.quarantinePath),n}async function qZ(t,e,r,n){if(!await e.lstat(t.quarantinePath))return;if(await Nf(t.quarantinePath,r,e),!await e.lstat(t.runtimePath)){await e.rename(t.quarantinePath,t.runtimePath);return}let i=!1;try{await TR({root:t.runtimePath,manifestPath:t.manifestPath,cliPath:t.cliPath,expectedName:t.packageName,expectedVersion:t.packageVersion,fileSystem:e,canonicalHome:r,nodeVersion:n}),i=!0}catch{i=!1}if(i){await Dd(t.runtimeVersionsDirectory,t.quarantinePath,e,r);return}await Dd(t.runtimeVersionsDirectory,t.runtimePath,e,r),await e.rename(t.quarantinePath,t.runtimePath)}async function TR(t){await Nf(t.root,t.canonicalHome,t.fileSystem),await OZ(t.manifestPath,t.root,t.canonicalHome,t.fileSystem),await OZ(t.cliPath,t.root,t.canonicalHome,t.fileSystem);let e=await t.fileSystem.readFile(t.manifestPath),r;try{r=JSON.parse(e.toString("utf8"))}catch(o){throw new Wr("The installed runtime package manifest is invalid.",{cause:o})}if(!FO(r)||r.name!==t.expectedName||r.version!==t.expectedVersion)throw new Wr("The installed runtime package name or exact version does not match the candidate.");let n=FO(r.engines)&&typeof r.engines.node=="string"?r.engines.node:void 0;if(!n||!OPe(t.nodeVersion,n))throw new Wr("The installed runtime package has an unsupported Node engine contract.");for(let o of["dependencies","optionalDependencies","peerDependencies"]){let s=r[o];if(s!==void 0){if(!FO(s))throw new Wr("The installed runtime dependency contract is invalid.");for(let a of Object.values(s))if(typeof a!="string"||/^(?:workspace:|link:|file:)/u.test(a))throw new Wr("The installed runtime contains an unresolved workspace dependency.")}}let i=await t.fileSystem.readFile(t.cliPath);if(i.byteLength===0)throw new Wr("The installed runtime CLI is empty.");return{cliSha256:kPe("sha256").update(i).digest("hex")}}async function OZ(t,e,r,n){eS(e,t);let i=await n.lstat(t);if(!i?.isFile()||i.isSymbolicLink())throw new Wr("The installed runtime contains an unsafe manifest or CLI filesystem type.");let o=As(await n.realpath(t));if(!BR(r,o,!1)||!BR(As(await n.realpath(e)),o,!1))throw new Wr("The installed runtime manifest or CLI resolves outside its owned directory.")}async function Nf(t,e,r){let n=await r.lstat(t);if(!n?.isDirectory()||n.isSymbolicLink())throw new Wr("A runtime directory has an unsafe filesystem type.");let i=As(await r.realpath(t));if(!BR(e,i,!1))throw new Wr("A runtime directory resolves outside the canonical Hunsu home.")}async function Dd(t,e,r,n){eS(t,e);let i=await r.lstat(e);if(i){if(!i.isDirectory()||i.isSymbolicLink())throw new Si("A runtime cleanup target has an unsafe filesystem type.");await WZ(e,r,n)}}async function WZ(t,e,r){let n=await e.lstat(t);if(n){if(n.isSymbolicLink()){await e.unlink(t);return}if(n.isFile()){let i=As(await e.realpath(t));if(!BR(r,i,!1))throw new Si("A runtime file resolves outside the canonical Hunsu home.");await e.unlink(t);return}if(!n.isDirectory())throw new Si("A runtime cleanup entry has an unsupported filesystem type.");await Nf(t,r,e);for(let i of await e.readdir(t)){if(!i||i==="."||i===".."||i.includes("/")||i.includes("\\"))throw new Si("A runtime directory contains an invalid entry name.");await WZ(MPe(t,i),e,r)}await Nf(t,r,e),await e.rmdir(t)}}function MZ(t,e,r){return{packageVersion:t.packageVersion,runtimePath:t.runtimePath,nodePath:t.nodePath,cliPath:t.cliPath,cliSha256:e,installedAt:r().toISOString()}}function OPe(t,e){let r=t.trim().match(/^v?(\d+)\.(\d+)\.(\d+)/u),n=e.trim().match(/^>=(\d+)\.(\d+)(?:\.(\d+))?$/u);if(!r||!n)return!1;let i=r.slice(1,4).map(Number),o=[Number(n[1]),Number(n[2]),Number(n[3]??0)];for(let s=0;s<i.length;s+=1){if(i[s]>o[s])return!0;if(i[s]<o[s])return!1}return!0}function LZ(t){if(JO(t))throw new Wr("The npm command contains an unsafe value.");return`'${t.replaceAll("'","''")}'`}function eS(t,e){let r=UZ(As(t),As(e));if(!r||r.startsWith("..")||WO(r))throw new Wr("The runtime path is outside its Hunsu-owned directory.")}function BR(t,e,r){let n=UZ(As(t),As(e));return n===""?r:!n.startsWith("..")&&!WO(n)}function qO(t,e){if(!t)return!1;let r=As(t),n=As(e);return process.platform==="win32"?r.toLowerCase()===n.toLowerCase():r===n}function MPe(t,e){return t.includes("\\")?jO.join(t,e):HZ.join(t,e)}function JO(t){return/[\u0000-\u001f\u007f]/u.test(t)}function LPe(t){return t instanceof Error&&"code"in t}function FO(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var XO=Object.freeze({major:24,minor:18,patch:0});async function KZ(t){let e=t.deploymentProfile??"production";if(!Pn(e))return Fn("RUNTIME_INSTALL_FAILED","Bridge deployment profile must be production or preview.");let r=t.nodeVersion??process.version;if(!$Pe(r))return Fn("NODE_VERSION_UNSUPPORTED","Hunsu Bridge requires Node 24.18 or newer.");let n=t.createTransactionId?.()??`setup_${HPe()}`,i;try{i=GO({paths:t.paths,transactionId:n,nodePath:t.nodePath??process.execPath,source:t.runtimeSource??kR(),...t.npmCommand?{npmCommand:t.npmCommand}:{},...t.platform?{platform:t.platform}:{}})}catch{return Fn("RUNTIME_INSTALL_FAILED","The exact Hunsu Bridge runtime source or executable path is invalid.")}if(t.dryRun)return YZ(i,e,{idempotent:!1,upgraded:!1,started:!1,dryRun:!0});let o;try{o=await(t.acquireOperationLock?t.acquireOperationLock(t.paths):gp(t.paths,"setup",t.now?{now:t.now}:{}))}catch(a){return a instanceof Zo?Fn(a.code,a.message):Fn("RUNTIME_INSTALL_FAILED","The Bridge setup lock could not be acquired safely.")}let s;try{s=await UPe(t,i,r,e)}catch{s=Fn("RUNTIME_INSTALL_FAILED","Hunsu Bridge setup failed unexpectedly before activation.")}try{await o.release()}catch{return Fn("ROLLBACK_FAILED","Bridge setup finished but its operation lock could not be released; run `hunsu-bridge doctor --json` before retrying.")}return s}async function UPe(t,e,r,n){let i=t.installStore??Pu(t.paths),o=t.transactionStore??cw(t.paths),s=t.ownershipStore??AR(t.paths,{...t.platform?{platform:t.platform}:{},...t.processEnv?{processEnv:t.processEnv}:{}}),a=t.now??(()=>new Date);try{await xn(t,"profile-persistence"),await(t.configStore??Jo(t.paths)).ensureDeploymentProfile(n)}catch{return Fn("RUNTIME_INSTALL_FAILED",`HUNSU_HOME is already bound to a different Bridge deployment profile; use a clean home for ${n}.`)}let c;try{c=await o.read()}catch{return Fn("RUNTIME_INSTALL_FAILED","The pending Bridge setup transaction is invalid.")}if(c){let v=await VZ({options:t,transaction:c,transactionStore:o,installStore:i,installationId:c.previous?.installationId??null});if(!v.ok)return zZ(v.failures)}let u;try{u=await i.read()}catch{return Fn("RUNTIME_INSTALL_FAILED","The installed Hunsu Bridge runtime record is invalid.")}if(u&&u.serviceInput.deploymentProfile!==n)return Fn("RUNTIME_INSTALL_FAILED",`The installed Bridge runtime is ${u.serviceInput.deploymentProfile} and cannot switch to ${n} in the same HUNSU_HOME.`);let d;try{await xn(t,"ownership-marker"),d=(await vZ({store:s,...u?.installationId?{expectedInstallationId:u.installationId}:{},...t.now?{now:t.now}:{},...t.createInstallationId?{createInstallationId:t.createInstallationId}:{}})).installationId}catch{return Fn("RUNTIME_INSTALL_FAILED","The Hunsu home ownership marker could not be created or verified.")}try{await xn(t,"credential-ensure"),await t.credentialStore.ensure()}catch{return Fn("RUNTIME_INSTALL_FAILED","Hunsu Bridge credentials could not be created or preserved.")}let l,f,p=!1,g=!1;try{if(u&&u.current.packageVersion===e.packageVersion&&Cs(u.current.runtimePath,e.runtimePath)&&Cs(u.current.cliPath,e.cliPath))try{let z=await jZ({plan:e,...t.stagedFileSystem?{fileSystem:t.stagedFileSystem}:{},nodeVersion:r});u.current.cliSha256!==null&&u.current.cliSha256===z.cliSha256&&(l={...u.current,nodePath:e.nodePath,runtimePath:e.runtimePath,cliPath:e.cliPath,cliSha256:z.cliSha256},p=!0)}catch{}if(!l){let z=await FZ({plan:e,...t.npmRunner?{commandRunner:t.npmRunner}:{},...t.processEnv?{processEnv:t.processEnv}:{},...t.stagedFileSystem?{fileSystem:t.stagedFileSystem}:{},...t.now?{now:t.now}:{},nodeVersion:r,...u?{protectedRuntimePath:u.current.runtimePath}:{},onPhase:Ae=>xn(t,Ae)});l=z.installation,p=z.reused,g=!!(u&&Cs(u.current.runtimePath,l.runtimePath)&&!z.reused)}let v=a().toISOString();f={schema:o0,transactionId:e.transactionId,phase:"candidate-staged",candidate:l,previous:u??null,createdAt:v,updatedAt:v},await xn(t,"transaction-write"),await o.write(f);let b=XH(l,t.paths.home,n);if(u&&!GPe(u.serviceInput,b)){await xn(t,"previous-service-stop");let z=await t.serviceManager.stop();if(!z.ok&&z.code!=="SERVICE_NOT_INSTALLED")throw DR(z);f=await tS(o,f,"previous-stopped",a)}await xn(t,"service-definition-install");let C=await t.serviceManager.install(b);if(!C.ok)throw DR(C);f=await tS(o,f,"service-switched",a);let B=!1,_=await t.serviceManager.status().catch(()=>{});if(!_)throw Qc("SERVICE_STATUS_UNAVAILABLE","The candidate service status could not be read.");if((C.changed||g)&&(_.managerState==="running"||_.health==="healthy")){await xn(t,"service-start");let z=await t.serviceManager.restart();if(!z.ok)throw DR(z);B=!0}else if(_.managerState!=="running"&&_.health!=="healthy"){await xn(t,"service-start");let z=await t.serviceManager.start();if(!z.ok)throw DR(z);B=!0}f=await tS(o,f,"candidate-started",a);let F=await JZ(t.verifyRuntime,l);if(await xn(t,"health-verification"),!F.health)throw Qc("SETUP_VERIFICATION_FAILED","The candidate runtime health check failed.");if(await xn(t,"authentication-verification"),!F.authenticated)throw Qc("SETUP_VERIFICATION_FAILED","The candidate runtime control authentication check failed.");if(await xn(t,"version-verification"),F.version!==l.packageVersion||!Cs(F.runtimePath,l.runtimePath))throw Qc("SETUP_VERIFICATION_FAILED","The candidate runtime version or stable path check failed.");if(await xn(t,"profile-verification"),F.deploymentProfile!==n)throw Qc("SETUP_VERIFICATION_FAILED","The candidate runtime deployment profile check failed.");f=await tS(o,f,"candidate-verified",a),f=await tS(o,f,"committing",a);let he=FPe(d,l,u,b,a);return await xn(t,"install-record-commit"),await i.write(he),await o.clear(),YZ(e,n,{idempotent:!!(u&&p&&Cs(u.current.runtimePath,l.runtimePath)),upgraded:!!(u&&u.current.packageVersion!==l.packageVersion),started:B,dryRun:!1})}catch(v){let b=qPe(v);if(!l||!f)return Fn(b.code,b.message);let C=await VZ({options:t,transaction:f,transactionStore:o,installStore:i,installationId:d});return C.ok?f.previous?Fn("SETUP_VERIFICATION_FAILED",`${b.message} The previous verified runtime was restored.`):Fn(b.code,b.message):zZ(C.failures)}}async function VZ(t){let{options:e,transaction:r,transactionStore:n,installStore:i}=t,o=[],s=e.now??(()=>new Date);await n.write({...r,phase:"rolling-back",updatedAt:s().toISOString()}).catch(()=>{});let a=r.previous;return a?(await e.serviceManager.stop().catch(()=>{}),await Yc(o,"previous service definition restore",async()=>{await xn(e,"previous-definition-restore");let c=await e.serviceManager.install(a.serviceInput);if(!c.ok)throw new Error(c.code)}),await Yc(o,"previous runtime restart",async()=>{await xn(e,"previous-runtime-restart");let c=await e.serviceManager.start();if(!c.ok)throw new Error(c.code)}),await Yc(o,"previous runtime verification",async()=>{let c=await JZ(e.verifyRuntime,a.current);if(!jPe(c,a.current,a.serviceInput.deploymentProfile))throw new Error("previous runtime verification failed")}),await Yc(o,"previous install record restore",()=>i.write({...a,installationId:a.installationId??t.installationId})),await Yc(o,"candidate runtime cleanup",async()=>{await xn(e,"candidate-runtime-cleanup"),await zO({paths:e.paths,installation:r.candidate,previous:a.current,...e.stagedFileSystem?{fileSystem:e.stagedFileSystem}:{}})})):(await Yc(o,"candidate service cleanup",async()=>{await xn(e,"candidate-service-cleanup"),await e.serviceManager.stop().catch(()=>{}),await e.serviceManager.uninstall().catch(()=>{});let c=await e.serviceManager.status();if(c.installed||c.managerState==="running"||c.health==="healthy")throw new Error("candidate service remains active")}),await Yc(o,"install record cleanup",()=>i.clear()),await Yc(o,"candidate runtime cleanup",async()=>{await xn(e,"candidate-runtime-cleanup"),await zO({paths:e.paths,installation:r.candidate,previous:null,...e.stagedFileSystem?{fileSystem:e.stagedFileSystem}:{}})})),o.length===0&&await Yc(o,"transaction journal cleanup",()=>n.clear()),o.length===0?{ok:!0}:{ok:!1,failures:o}}function $Pe(t){let e=t.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u);if(!e)return!1;let r=[Number(e[1]),Number(e[2]),Number(e[3])],n=[XO.major,XO.minor,XO.patch];for(let i=0;i<n.length;i+=1){if(r[i]>n[i])return!0;if(r[i]<n[i])return!1}return!0}async function tS(t,e,r,n){let i={...e,phase:r,updatedAt:n().toISOString()};return await t.write(i),i}function FPe(t,e,r,n,i){let o=r&&r.current.packageVersion===e.packageVersion&&Cs(r.current.runtimePath,e.runtimePath);return{schema:i0,installationId:t,current:e,previous:o?r.previous:r?.current??null,serviceInput:n,updatedAt:i().toISOString()}}async function JZ(t,e){try{return await t(e)}catch{return{health:!1,authenticated:!1,version:"unavailable",runtimePath:"unavailable",deploymentProfile:"production"}}}function jPe(t,e,r){return t.health&&t.authenticated&&t.version===e.packageVersion&&Cs(t.runtimePath,e.runtimePath)&&t.deploymentProfile===r}async function xn(t,e){await t.onPhase?.(e)}async function Yc(t,e,r){try{await r()}catch{t.push(e)}}function DR(t){return Qc(t.code,t.message)}function Qc(t,e){return{code:t,message:e}}function qPe(t){if(WPe(t))return t;if(t instanceof Si)return Qc(t.code,t.message);if(t instanceof Error&&"code"in t&&typeof t.code=="string"){let e=t.code;if(XZ(e))return Qc(e,VPe(t))}return Qc("RUNTIME_INSTALL_FAILED","The Hunsu Bridge runtime transaction failed.")}function WPe(t){return typeof t=="object"&&t!==null&&"code"in t&&XZ(t.code)&&"message"in t&&typeof t.message=="string"}function XZ(t){return t==="NODE_VERSION_UNSUPPORTED"||t==="RUNTIME_INSTALL_FAILED"||t==="SETUP_IN_PROGRESS"||t==="SETUP_VERIFICATION_FAILED"||t==="ROLLBACK_FAILED"||t==="SERVICE_NOT_INSTALLED"||t==="SERVICE_ALREADY_INSTALLED"||t==="SERVICE_INSTALL_FAILED"||t==="SERVICE_START_FAILED"||t==="SERVICE_STOP_FAILED"||t==="SERVICE_STATUS_UNAVAILABLE"}function VPe(t){return t instanceof Si||t.message.includes("runtime")||t.message.includes("Bridge")?t.message:"The Hunsu Bridge runtime transaction failed."}function GPe(t,e){return Cs(t.nodePath,e.nodePath)&&Cs(t.cliPath,e.cliPath)&&Cs(t.hunsuHome,e.hunsuHome)&&t.packageVersion===e.packageVersion&&Cs(t.runtimePath,e.runtimePath)&&t.deploymentProfile===e.deploymentProfile}function Cs(t,e){let r=GZ(t),n=GZ(e);return process.platform==="win32"?r.toLowerCase()===n.toLowerCase():r===n}function GZ(t){return t.replaceAll("\\","/").replace(/\/$/u,"")}function zZ(t){return Fn("ROLLBACK_FAILED",`Bridge setup rollback could not restore: ${t.join(", ")}. Run \`hunsu-bridge doctor --json\` before retrying.`)}function YZ(t,e,r){let n=sS(e);return{ok:!0,code:"OK",message:r.dryRun?"Hunsu Bridge setup dry run completed.":r.idempotent?"Hunsu Bridge is already installed and verified.":"Hunsu Bridge installed and verified.",value:{packageVersion:t.packageVersion,deploymentProfile:e,runtimePath:t.runtimePath,cliPath:t.cliPath,npmCommand:t.npmCommand,commands:{status:`npx @hunsu/bridge@${n} status --profile ${e}`,doctor:`npx @hunsu/bridge@${n} doctor --profile ${e}`,remove:`npx @hunsu/bridge@${n} remove --profile ${e}`},...r}}}function Fn(t,e){return{ok:!1,code:t,message:e}}async function eee(t=process.argv.slice(2),e=ZPe){let r;try{r=EO(t)}catch(i){return Zc(ja(i),XQ(t),e)}let n=Rs(r,"json");try{if(Rs(r,"version")||r.positionals[0]==="version")return Zc(pr(`Hunsu Bridge ${bn}.`,{version:bn}),n,e);if(Rs(r,"help")||r.positionals[0]==="help"||r.positionals.length===0)return n?Zc(pr("Hunsu Bridge command help.",{usage:ZZ()}),!0,e):(e.stdout(ZZ()),0);let i=r.positionals[0],o=Or(r,"home"),s={...process.env},a=Ko({home:o,env:s}),c=lC({paths:a});if((i==="status"||i==="doctor"||i==="remove")&&await QPe(a,Or(r,"profile")),i==="dev"||i==="daemon"){let d=YO(Or(r,"profile")),l=await GQ({home:o,host:Or(r,"host"),port:YPe(Or(r,"port")),cwd:Or(r,"cwd"),runtimePath:Or(r,"runtime-path"),webUrl:Or(r,"web-url"),deploymentProfile:d,development:i==="dev",env:s}),f=pr(i==="dev"?"Hunsu Bridge development daemon is ready.":"Hunsu Bridge daemon is ready.",{endpoint:l.identity.endpoint,version:l.identity.version,protocolVersion:l.identity.protocolVersion,deploymentProfile:l.identity.deploymentProfile});return Zc(f,n,e),await JPe(l),0}let u=uZ({paths:a,controlClient:c,processEnv:s});if(i==="setup"){let d=YO(Or(r,"profile")),l=sS(d);if((Or(r,"channel")??l)!==l)throw new Fe("RUNTIME_INSTALL_FAILED",`The ${d} profile requires the ${l} channel.`);let p=await KZ({paths:a,deploymentProfile:d,credentialStore:vu(a,{processEnv:s}),serviceManager:u,processEnv:s,...Or(r,"runtime-package")?{runtimeSource:fZ(Or(r,"runtime-package"))}:{},dryRun:Rs(r,"dry-run"),verifyRuntime:g=>KPe(c,g.packageVersion,g.runtimePath,d)});return Zc(p.ok?pr(p.message,p.value):fr(p.code,p.message),n,e)}if(i==="remove"){let d=await NZ({deleteData:Rs(r,"delete-data"),confirmed:Rs(r,"confirm-delete-data"),dryRun:Rs(r,"dry-run")},{paths:a,serviceManager:u});return Zc(d.ok?pr(d.message,d.value):fr(d.code,d.message),n,e)}if(i==="service")return Zc(await zPe(r,u,a),n,e);if(YQ(i))return QQ({parsed:r,paths:a,client:c,emit:d=>Zc(d,n,e)});throw new Fe("BRIDGE_STATE_INVALID",`Unknown command: ${i}`)}catch(i){return Zc(ja(i),n,e)}}async function zPe(t,e,r){let n=t.positionals[1]??"status";if(n==="status")return pr("Hunsu Bridge service status is available.",await e.status());if(n==="install")return QZ(r,async()=>{let i=await Pu(r).read();return i?rS(await e.install(i.serviceInput)):fr("SERVICE_INSTALL_FAILED","Run `hunsu-bridge setup` before installing the service definition.")});if(n==="uninstall")return QZ(r,async()=>rS(await e.uninstall()));if(n==="start")return rS(await e.start());if(n==="stop")return rS(await e.stop());if(n==="restart")return rS(await e.restart());throw new Fe("BRIDGE_STATE_INVALID",`Unknown service command: ${n}`)}async function QZ(t,e){let r;try{r=await gp(t,"service-mutation")}catch(o){return o instanceof Zo?fr(o.code,o.message):fr("SERVICE_INSTALL_FAILED","The Bridge service mutation lock could not be acquired safely.")}let n,i;try{n=await e()}catch(o){i=o}try{await r.release()}catch{return fr("SERVICE_INSTALL_FAILED","The Bridge service mutation lock could not be released safely.")}if(i!==void 0)throw i;return n}function rS(t){return t.ok?pr(t.message,{manager:t.manager,changed:t.changed},t.code):fr(t.code,t.message)}async function KPe(t,e,r,n){for(let i=0;i<100;i+=1){let o=await t.health();if(o){let s=await t.request("/v1/control/status");return{health:!0,authenticated:s.ok,version:s.ok&&typeof s.value?.version=="string"?s.value.version:o.version,runtimePath:s.ok&&typeof s.value?.runtimePath=="string"?s.value.runtimePath:"unavailable",deploymentProfile:s.ok&&Pn(s.value?.deploymentProfile)?s.value.deploymentProfile:o.deploymentProfile}}await new Promise(s=>setTimeout(s,100))}return{health:!1,authenticated:!1,version:e,runtimePath:r,deploymentProfile:n}}async function JPe(t){let e=()=>{t.close()};process.once("SIGINT",e),process.once("SIGTERM",e);try{await t.waitUntilClosed()}finally{process.off("SIGINT",e),process.off("SIGTERM",e)}}function Zc(t,e,r){let n=XPe(t);return e?r.stdout(JSON.stringify(n)):n.ok?(r.stdout(n.message),n.value!==void 0&&r.stdout(JSON.stringify(n.value,null,2))):(r.stderr(`${n.code}: ${n.message}`),n.recovery?.command&&r.stderr(`Recovery: ${n.recovery.command}`)),n.ok?0:1}function XPe(t){try{let e=Xr(t);return _s(e),e}catch{return fr("DIAGNOSTICS_SENSITIVE_DATA_DETECTED","Sensitive data was removed from Bridge command output.")}}function YPe(t){if(t===void 0)return;let e=Number(t);if(!Number.isInteger(e)||e<0||e>65535)throw new Fe("BRIDGE_STATE_INVALID","--port must be an integer from 0 through 65535.");return e}function YO(t){let e=t??"production";if(!Pn(e))throw new Fe("BRIDGE_STATE_INVALID","--profile must be production or preview.");return e}async function QPe(t,e){if(e===void 0)return;let r=YO(e),n=(await Jo(t).read()).deploymentProfile;if(n!==r)throw new Fe("BRIDGE_STATE_INVALID",`This HUNSU_HOME uses the ${n} deployment profile, not ${r}.`)}function ZZ(){return`Usage: hunsu-bridge <command> [options]