@anthropic-ai/claude-agent-sdk 0.2.105 → 0.2.107

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/assistant.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // (c) Anthropic PBC. All rights reserved. Use is subject to the Legal Agreements outlined here: https://code.claude.com/docs/en/legal-and-compliance.
2
2
 
3
- // Version: 0.2.105
3
+ // Version: 0.2.107
4
4
  import{createRequire as Ts}from"node:module";var js=Object.create;var{getPrototypeOf:gs,defineProperty:SU,getOwnPropertyNames:VL,getOwnPropertyDescriptor:qs}=Object,XL=Object.prototype.hasOwnProperty;function ML(A){return this[A]}var Os,Ss,SI=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?Os??=new WeakMap:Ss??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?js(gs(A)):{};let Y=Q||!A||!A.__esModule?SU(B,"default",{value:A,enumerable:!0}):B;for(let J of VL(A))if(!XL.call(Y,J))SU(Y,J,{get:ML.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},vs=(A)=>{var Q=(WL??=new WeakMap).get(A),B;if(Q)return Q;if(Q=SU({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of VL(A))if(!XL.call(Q,I))SU(Q,I,{get:ML.bind(A,I),enumerable:!(B=qs(A,I))||B.enumerable})}return WL.set(A,Q),Q},WL,w=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var _s=(A)=>A;function Ps(A,Q){this[A]=_s.bind(null,Q)}var eI=(A,Q)=>{for(var B in Q)SU(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:Ps.bind(Q,B)})};var H=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var j=Ts(import.meta.url),ks=Symbol.dispose||Symbol.for("Symbol.dispose"),bs=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),GQ=(A,Q,B)=>{if(Q!=null){if(typeof Q!=="object"&&typeof Q!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var I;if(B)I=Q[bs];if(I===void 0)I=Q[ks];if(typeof I!=="function")throw TypeError("Object not disposable");A.push([B,I,Q])}else if(B)A.push([B]);return Q},UQ=(A,Q,B)=>{var I=typeof SuppressedError==="function"?SuppressedError:function(Y,J,G,U){return U=Error(G),U.name="SuppressedError",U.error=Y,U.suppressed=J,U},E=(Y)=>Q=B?new I(Y,Q,"An error was suppressed during disposal"):(B=!0,Y),C=(Y)=>{while(Y=A.pop())try{var J=Y[1]&&Y[1].call(Y[2]);if(Y[0])return Promise.resolve(J).then(C,(G)=>(E(G),C()))}catch(G){E(G)}if(B)throw Q};return C()};var ms,zL;var KL=H(()=>{ms=typeof global=="object"&&global&&global.Object===Object&&global,zL=ms});var us,cs,IJ;var y4=H(()=>{KL();us=typeof self=="object"&&self&&self.Object===Object&&self,cs=zL||us||Function("return this")(),IJ=cs});var ps,EJ;var K2=H(()=>{y4();ps=IJ.Symbol,EJ=ps});function ds(A){var Q=ls.call(A,PU),B=A[PU];try{A[PU]=void 0;var I=!0}catch(C){}var E=is.call(A);if(I)if(Q)A[PU]=B;else delete A[PU];return E}var HL,ls,is,PU,LL;var xL=H(()=>{K2();HL=Object.prototype,ls=HL.hasOwnProperty,is=HL.toString,PU=EJ?EJ.toStringTag:void 0;LL=ds});function as(A){return os.call(A)}var ns,os,RL;var jL=H(()=>{ns=Object.prototype,os=ns.toString;RL=as});function ss(A){if(A==null)return A===void 0?ts:rs;return gL&&gL in Object(A)?LL(A):RL(A)}var rs="[object Null]",ts="[object Undefined]",gL,qL;var OL=H(()=>{K2();xL();jL();gL=EJ?EJ.toStringTag:void 0;qL=ss});function es(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var f4;var H2=H(()=>{f4=es});function Ee(A){if(!f4(A))return!1;var Q=qL(A);return Q==Qe||Q==Be||Q==Ae||Q==Ie}var Ae="[object AsyncFunction]",Qe="[object Function]",Be="[object GeneratorFunction]",Ie="[object Proxy]",SL;var vL=H(()=>{OL();H2();SL=Ee});var Ce,h4;var _L=H(()=>{y4();Ce=IJ["__core-js_shared__"],h4=Ce});function Ye(A){return!!PL&&PL in A}var PL,TL;var kL=H(()=>{_L();PL=function(){var A=/[^.]+$/.exec(h4&&h4.keys&&h4.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();TL=Ye});function Ue(A){if(A!=null){try{return Ge.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var Je,Ge,bL;var yL=H(()=>{Je=Function.prototype,Ge=Je.toString;bL=Ue});function Me(A){if(!f4(A)||TL(A))return!1;var Q=SL(A)?Xe:Ne;return Q.test(bL(A))}var Fe,Ne,De,$e,We,Ve,Xe,fL;var hL=H(()=>{vL();kL();H2();yL();Fe=/[\\^$.*+?()[\]{}|]/g,Ne=/^\[object .+?Constructor\]$/,De=Function.prototype,$e=Object.prototype,We=De.toString,Ve=$e.hasOwnProperty,Xe=RegExp("^"+We.call(Ve).replace(Fe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");fL=Me});function Ze(A,Q){return A==null?void 0:A[Q]}var mL;var uL=H(()=>{mL=Ze});function we(A,Q){var B=mL(A,Q);return fL(B)?B:void 0}var m4;var L2=H(()=>{hL();uL();m4=we});var ze,eE;var TU=H(()=>{L2();ze=m4(Object,"create"),eE=ze});function Ke(){this.__data__=eE?eE(null):{},this.size=0}var cL;var pL=H(()=>{TU();cL=Ke});function He(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var lL;var iL=H(()=>{lL=He});function je(A){var Q=this.__data__;if(eE){var B=Q[A];return B===Le?void 0:B}return Re.call(Q,A)?Q[A]:void 0}var Le="__lodash_hash_undefined__",xe,Re,dL;var nL=H(()=>{TU();xe=Object.prototype,Re=xe.hasOwnProperty;dL=je});function Oe(A){var Q=this.__data__;return eE?Q[A]!==void 0:qe.call(Q,A)}var ge,qe,oL;var aL=H(()=>{TU();ge=Object.prototype,qe=ge.hasOwnProperty;oL=Oe});function ve(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=eE&&Q===void 0?Se:Q,this}var Se="__lodash_hash_undefined__",rL;var tL=H(()=>{TU();rL=ve});function CJ(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var x2;var sL=H(()=>{pL();iL();nL();aL();tL();CJ.prototype.clear=cL;CJ.prototype.delete=lL;CJ.prototype.get=dL;CJ.prototype.has=oL;CJ.prototype.set=rL;x2=CJ});function _e(){this.__data__=[],this.size=0}var eL;var Ax=H(()=>{eL=_e});function Pe(A,Q){return A===Q||A!==A&&Q!==Q}var Qx;var Bx=H(()=>{Qx=Pe});function Te(A,Q){var B=A.length;while(B--)if(Qx(A[B][0],Q))return B;return-1}var dC;var kU=H(()=>{Bx();dC=Te});function ye(A){var Q=this.__data__,B=dC(Q,A);if(B<0)return!1;var I=Q.length-1;if(B==I)Q.pop();else be.call(Q,B,1);return--this.size,!0}var ke,be,Ix;var Ex=H(()=>{kU();ke=Array.prototype,be=ke.splice;Ix=ye});function fe(A){var Q=this.__data__,B=dC(Q,A);return B<0?void 0:Q[B][1]}var Cx;var Yx=H(()=>{kU();Cx=fe});function he(A){return dC(this.__data__,A)>-1}var Jx;var Gx=H(()=>{kU();Jx=he});function me(A,Q){var B=this.__data__,I=dC(B,A);if(I<0)++this.size,B.push([A,Q]);else B[I][1]=Q;return this}var Ux;var Fx=H(()=>{kU();Ux=me});function YJ(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var Nx;var Dx=H(()=>{Ax();Ex();Yx();Gx();Fx();YJ.prototype.clear=eL;YJ.prototype.delete=Ix;YJ.prototype.get=Cx;YJ.prototype.has=Jx;YJ.prototype.set=Ux;Nx=YJ});var ue,$x;var Wx=H(()=>{L2();y4();ue=m4(IJ,"Map"),$x=ue});function ce(){this.size=0,this.__data__={hash:new x2,map:new($x||Nx),string:new x2}}var Vx;var Xx=H(()=>{sL();Dx();Wx();Vx=ce});function pe(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var Mx;var Zx=H(()=>{Mx=pe});function le(A,Q){var B=A.__data__;return Mx(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var nC;var bU=H(()=>{Zx();nC=le});function ie(A){var Q=nC(this,A).delete(A);return this.size-=Q?1:0,Q}var wx;var zx=H(()=>{bU();wx=ie});function de(A){return nC(this,A).get(A)}var Kx;var Hx=H(()=>{bU();Kx=de});function ne(A){return nC(this,A).has(A)}var Lx;var xx=H(()=>{bU();Lx=ne});function oe(A,Q){var B=nC(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var Rx;var jx=H(()=>{bU();Rx=oe});function JJ(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var R2;var gx=H(()=>{Xx();zx();Hx();xx();jx();JJ.prototype.clear=Vx;JJ.prototype.delete=wx;JJ.prototype.get=Kx;JJ.prototype.has=Lx;JJ.prototype.set=Rx;R2=JJ});function j2(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(ae);var B=function(){var I=arguments,E=Q?Q.apply(this,I):I[0],C=B.cache;if(C.has(E))return C.get(E);var Y=A.apply(this,I);return B.cache=C.set(E,Y)||C,Y};return B.cache=new(j2.Cache||R2),B}var ae="Expected a function",FQ;var jE=H(()=>{gx();j2.Cache=R2;FQ=j2});import{homedir as re}from"os";import{join as te}from"path";function g2(A){let Q=process.env.NODE_OPTIONS;if(!Q)return!1;return Q.split(/\s+/).includes(A)}function sA(A){if(!A)return!1;if(typeof A==="boolean")return A;let Q=String(A).toLowerCase().trim();return["1","true","yes","on"].includes(Q)}function qx(){return!1}function Ox(){return{namespace:void 0,cluster:void 0}}var gE;var IB=H(()=>{jE();gE=FQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??te(re(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR)});function m(A,Q,B,I,E){if(I==="m")throw TypeError("Private method is not writable");if(I==="a"&&!E)throw TypeError("Private accessor was defined without a setter");if(typeof Q==="function"?A!==Q||!E:!Q.has(A))throw TypeError("Cannot write private member to an object whose class did not declare it");return I==="a"?E.call(A,B):E?E.value=B:Q.set(A,B),B}function g(A,Q,B,I){if(B==="a"&&!I)throw TypeError("Private accessor was defined without a getter");if(typeof Q==="function"?A!==Q||!I:!Q.has(A))throw TypeError("Cannot read private member from an object whose class did not declare it");return B==="m"?I:B==="a"?I.call(A):I?I.value:Q.get(A)}var AC=()=>{};var q2=function(){let{crypto:A}=globalThis;if(A?.randomUUID)return q2=A.randomUUID.bind(A),A.randomUUID();let Q=new Uint8Array(1),B=A?()=>A.getRandomValues(Q)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(I)=>(+I^B()&15>>+I/4).toString(16))};function QC(A){return typeof A==="object"&&A!==null&&(("name"in A)&&A.name==="AbortError"||("message"in A)&&String(A.message).includes("FetchRequestCanceledException"))}var yU=(A)=>{if(A instanceof Error)return A;if(typeof A==="object"&&A!==null){try{if(Object.prototype.toString.call(A)==="[object Error]"){let Q=Error(A.message,A.cause?{cause:A.cause}:{});if(A.stack)Q.stack=A.stack;if(A.cause&&!Q.cause)Q.cause=A.cause;if(A.name)Q.name=A.name;return Q}}catch{}try{return Error(JSON.stringify(A))}catch{}}return Error(A)};var o,EB,ZB,d0,fU,hU,mU,uU,cU,pU,lU,iU,dU;var uB=H(()=>{o=class o extends Error{};EB=class EB extends o{constructor(A,Q,B,I,E){super(`${EB.makeMessage(A,Q,B)}`);this.status=A,this.headers=I,this.requestID=I?.get("request-id"),this.error=Q,this.type=E??null}static makeMessage(A,Q,B){let I=Q?.message?typeof Q.message==="string"?Q.message:JSON.stringify(Q.message):Q?JSON.stringify(Q):B;if(A&&I)return`${A} ${I}`;if(A)return`${A} status code (no body)`;if(I)return I;return"(no status code or body)"}static generate(A,Q,B,I){if(!A||!I)return new d0({message:B,cause:yU(Q)});let E=Q,C=E?.error?.type;if(A===400)return new hU(A,E,B,I,C);if(A===401)return new mU(A,E,B,I,C);if(A===403)return new uU(A,E,B,I,C);if(A===404)return new cU(A,E,B,I,C);if(A===409)return new pU(A,E,B,I,C);if(A===422)return new lU(A,E,B,I,C);if(A===429)return new iU(A,E,B,I,C);if(A>=500)return new dU(A,E,B,I,C);return new EB(A,E,B,I,C)}};ZB=class ZB extends EB{constructor({message:A}={}){super(void 0,void 0,A||"Request was aborted.",void 0)}};d0=class d0 extends EB{constructor({message:A,cause:Q}){super(void 0,void 0,A||"Connection error.",void 0);if(Q)this.cause=Q}};fU=class fU extends d0{constructor({message:A}={}){super({message:A??"Request timed out."})}};hU=class hU extends EB{};mU=class mU extends EB{};uU=class uU extends EB{};cU=class cU extends EB{};pU=class pU extends EB{};lU=class lU extends EB{};iU=class iU extends EB{};dU=class dU extends EB{}});function u4(A){if(typeof A!=="object")return{};return A??{}}function v2(A){if(!A)return!0;for(let Q in A)return!1;return!0}function vx(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var ee,Sx=(A)=>{return ee.test(A)},O2=(A)=>(O2=Array.isArray,O2(A)),S2,_x=(A,Q)=>{if(typeof Q!=="number"||!Number.isInteger(Q))throw new o(`${A} must be an integer`);if(Q<0)throw new o(`${A} must be a positive integer`);return Q},c4=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var n0=H(()=>{uB();ee=/^[a-z][a-z0-9+.-]*:/i,S2=O2});var Px=(A)=>new Promise((Q)=>setTimeout(Q,A));var oC="0.81.0";function AAA(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function BAA(){if(typeof navigator>"u"||!navigator)return null;let A=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Q,pattern:B}of A){let I=B.exec(navigator.userAgent);if(I){let E=I[1]||0,C=I[2]||0,Y=I[3]||0;return{browser:Q,version:`${E}.${C}.${Y}`}}}return null}var yx=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},QAA=()=>{let A=AAA();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":oC,"X-Stainless-OS":kx(Deno.build.os),"X-Stainless-Arch":Tx(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":oC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(A==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":oC,"X-Stainless-OS":kx(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Tx(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=BAA();if(Q)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":oC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Q.browser}`,"X-Stainless-Runtime-Version":Q.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":oC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},Tx=(A)=>{if(A==="x32")return"x32";if(A==="x86_64"||A==="x64")return"x64";if(A==="arm")return"arm";if(A==="aarch64"||A==="arm64")return"arm64";if(A)return`other:${A}`;return"unknown"},kx=(A)=>{if(A=A.toLowerCase(),A.includes("ios"))return"iOS";if(A==="android")return"Android";if(A==="darwin")return"MacOS";if(A==="win32")return"Windows";if(A==="freebsd")return"FreeBSD";if(A==="openbsd")return"OpenBSD";if(A==="linux")return"Linux";if(A)return`Other:${A}`;return"Unknown"},bx,fx=()=>{return bx??(bx=QAA())};var _2=()=>{};function hx(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function P2(...A){let Q=globalThis.ReadableStream;if(typeof Q>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Q(...A)}function p4(A){let Q=Symbol.asyncIterator in A?A[Symbol.asyncIterator]():A[Symbol.iterator]();return P2({start(){},async pull(B){let{done:I,value:E}=await Q.next();if(I)B.close();else B.enqueue(E)},async cancel(){await Q.return?.()}})}function nU(A){if(A[Symbol.asyncIterator])return A;let Q=A.getReader();return{async next(){try{let B=await Q.read();if(B?.done)Q.releaseLock();return B}catch(B){throw Q.releaseLock(),B}},async return(){let B=Q.cancel();return Q.releaseLock(),await B,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function mx(A){if(A===null||typeof A!=="object")return;if(A[Symbol.asyncIterator]){await A[Symbol.asyncIterator]().return?.();return}let Q=A.getReader(),B=Q.cancel();Q.releaseLock(),await B}var ux=({headers:A,body:Q})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Q)}};function cx(A){return Object.entries(A).filter(([Q,B])=>typeof B<"u").map(([Q,B])=>{if(typeof B==="string"||typeof B==="number"||typeof B==="boolean")return`${encodeURIComponent(Q)}=${encodeURIComponent(B)}`;if(B===null)return`${encodeURIComponent(Q)}=`;throw new o(`Cannot stringify type ${typeof B}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}var px=H(()=>{uB()});function dx(A){let Q=0;for(let E of A)Q+=E.length;let B=new Uint8Array(Q),I=0;for(let E of A)B.set(E,I),I+=E.length;return B}function oU(A){let Q;return(lx??(Q=new globalThis.TextEncoder,lx=Q.encode.bind(Q)))(A)}function T2(A){let Q;return(ix??(Q=new globalThis.TextDecoder,ix=Q.decode.bind(Q)))(A)}var lx,ix;class aC{constructor(){JI.set(this,void 0),GI.set(this,void 0),m(this,JI,new Uint8Array,"f"),m(this,GI,null,"f")}decode(A){if(A==null)return[];let Q=A instanceof ArrayBuffer?new Uint8Array(A):typeof A==="string"?oU(A):A;m(this,JI,dx([g(this,JI,"f"),Q]),"f");let B=[],I;while((I=CAA(g(this,JI,"f"),g(this,GI,"f")))!=null){if(I.carriage&&g(this,GI,"f")==null){m(this,GI,I.index,"f");continue}if(g(this,GI,"f")!=null&&(I.index!==g(this,GI,"f")+1||I.carriage)){B.push(T2(g(this,JI,"f").subarray(0,g(this,GI,"f")-1))),m(this,JI,g(this,JI,"f").subarray(g(this,GI,"f")),"f"),m(this,GI,null,"f");continue}let E=g(this,GI,"f")!==null?I.preceding-1:I.preceding,C=T2(g(this,JI,"f").subarray(0,E));B.push(C),m(this,JI,g(this,JI,"f").subarray(I.index),"f"),m(this,GI,null,"f")}return B}flush(){if(!g(this,JI,"f").length)return[];return this.decode(`
5
5
  `)}}function CAA(A,Q){for(let E=Q??0;E<A.length;E++){if(A[E]===10)return{preceding:E,index:E+1,carriage:!1};if(A[E]===13)return{preceding:E,index:E+1,carriage:!0}}return null}function nx(A){for(let I=0;I<A.length-1;I++){if(A[I]===10&&A[I+1]===10)return I+2;if(A[I]===13&&A[I+1]===13)return I+2;if(A[I]===13&&A[I+1]===10&&I+3<A.length&&A[I+2]===13&&A[I+3]===10)return I+4}return-1}var JI,GI;var k2=H(()=>{AC();JI=new WeakMap,GI=new WeakMap;aC.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);aC.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function aU(){}function l4(A,Q,B){if(!Q||i4[A]>i4[B])return aU;else return Q[A].bind(Q)}function FB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return YAA;let I=ox.get(Q);if(I&&I[0]===B)return I[1];let E={error:l4("error",Q,B),warn:l4("warn",Q,B),info:l4("info",Q,B),debug:l4("debug",Q,B)};return ox.set(Q,[B,E]),E}var i4,b2=(A,Q,B)=>{if(!A)return;if(vx(i4,A))return A;FB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(i4))}`);return},YAA,ox,BC=(A)=>{if(A.options)A.options={...A.options},delete A.options.headers;if(A.headers)A.headers=Object.fromEntries((A.headers instanceof Headers?[...A.headers]:Object.entries(A.headers)).map(([Q,B])=>[Q,Q.toLowerCase()==="x-api-key"||Q.toLowerCase()==="authorization"||Q.toLowerCase()==="cookie"||Q.toLowerCase()==="set-cookie"?"***":B]));if("retryOfRequestLogID"in A){if(A.retryOfRequestLogID)A.retryOf=A.retryOfRequestLogID;delete A.retryOfRequestLogID}return A};var d4=H(()=>{n0();i4={off:0,error:200,warn:300,info:400,debug:500};YAA={error:aU,warn:aU,info:aU,debug:aU},ox=new WeakMap});async function*JAA(A,Q){if(!A.body){if(Q.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new o("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new o("Attempted to iterate over a response with no body")}let B=new ax,I=new aC,E=nU(A.body);for await(let C of GAA(E))for(let Y of I.decode(C)){let J=B.decode(Y);if(J)yield J}for(let C of I.flush()){let Y=B.decode(C);if(Y)yield Y}}async function*GAA(A){let Q=new Uint8Array;for await(let B of A){if(B==null)continue;let I=B instanceof ArrayBuffer?new Uint8Array(B):typeof B==="string"?oU(B):B,E=new Uint8Array(Q.length+I.length);E.set(Q),E.set(I,Q.length),Q=E;let C;while((C=nx(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class ax{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(A){if(A.endsWith("\r"))A=A.substring(0,A.length-1);if(!A){if(!this.event&&!this.data.length)return null;let E={event:this.event,data:this.data.join(`
@@ -181,7 +181,7 @@ ${E}`;break;case"retry":if(Lr(E))Q[I]=E;break;case"id":if(xr(E))Q[I]=E;break;cas
181
181
  `)){let I=B.match(/^(ID|VERSION_ID)=(.*)$/);if(I&&I[1]&&I[2]){let E=I[2].replace(/^"|"$/g,"");if(I[1]==="ID")A.linuxDistroId=E;else A.linuxDistroVersion=E}}}catch{}return A});NQ();import{AsyncLocalStorage as rMA}from"async_hooks";var ACQ=new rMA;IB();function A8A(){return xm(gE(),"sessions")}var Lm=Promise.resolve();async function Q8A(A){let Q=xm(A8A(),`${process.pid}.json`),B=Lm.then(async()=>{try{let I=OQ(await sMA(Q,"utf8"));await eMA(Q,HA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${YA(I)}`)}});Lm=B,await B}async function Rm(A){await Q8A({bridgeSessionId:A})}VQ();LC();pQ();SE();SE();VQ();IB();pQ();BE();import{mkdirSync as B8A,writeFileSync as I8A}from"fs";var XV="/home/claude/.claude/remote",yCQ=`${XV}/.oauth_token`,fCQ=`${XV}/.api_key`,MV=`${XV}/.session_ingress_token`;function jm(A,Q,B){if(!sA(process.env.CLAUDE_CODE_REMOTE))return;try{B8A(XV,{recursive:!0,mode:448}),I8A(A,Q,{encoding:"utf8",mode:384}),Z(`Persisted ${B} to ${A} for subprocess access`)}catch(I){Z(`Failed to persist ${B} to disk (non-fatal): ${YA(I)}`,{level:"error"})}}function G3(A,Q){try{let I=nQ().readFileSync(A,{encoding:"utf8"}).trim();if(!I)return null;return Z(`Read ${Q} from well-known file ${A}`),I}catch(B){if(!YC(B))Z(`Failed to read ${Q} from ${A}: ${YA(B)}`,{level:"debug"});return null}}VQ();pQ();BE();function E8A(){let A=bR();if(A!==void 0)return A;let Q=process.env.CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR;if(!Q){let I=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??MV,E=G3(I,"session ingress token");return LJ(E),E}let B=parseInt(Q,10);if(Number.isNaN(B))return Z(`CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR must be a valid file descriptor number, got: ${Q}`,{level:"error"}),LJ(null),null;try{let I=nQ(),E=process.platform==="darwin"||process.platform==="freebsd"?`/dev/fd/${B}`:`/proc/self/fd/${B}`,C=I.readFileSync(E,{encoding:"utf8"}).trim();if(!C)return Z("File descriptor contained empty token",{level:"error"}),LJ(null),null;return Z(`Successfully read token from file descriptor ${B}`),LJ(C),jm(MV,C,"session ingress token"),C}catch(I){Z(`Failed to read token from file descriptor ${B}: ${YA(I)}`,{level:"error"});let E=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??MV,C=G3(E,"session ingress token");return LJ(C),C}}function zD(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return E8A()}function ZV(){let A=zD();if(!A)return{};if(A.startsWith("sk-ant-sid")){let Q={Cookie:`sessionKey=${A}`},B=process.env.CLAUDE_CODE_ORGANIZATION_UUID;if(B)Q["X-Organization-Uuid"]=B;return Q}return{Authorization:`Bearer ${A}`}}function KD(A){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=A}NQ();class LG extends Error{retryAfterMs;constructor(A,Q){super(A);this.retryAfterMs=Q}}class qY{pending=[];pendingAtClose=0;draining=!1;closed=!1;backpressureResolvers=[];sleepResolve=null;flushResolvers=[];droppedBatches=0;config;constructor(A){this.config=A}get droppedBatchCount(){return this.droppedBatches}get pendingCount(){return this.closed?this.pendingAtClose:this.pending.length}async enqueue(A){if(this.closed)return;let Q=Array.isArray(A)?A:[A];if(Q.length===0)return;while(this.pending.length+Q.length>this.config.maxQueueSize&&!this.closed)await new Promise((B)=>{this.backpressureResolvers.push(B)});if(this.closed)return;this.pending.push(...Q),this.drain()}flush(){if(this.pending.length===0&&!this.draining)return Promise.resolve();return this.drain(),new Promise((A)=>{this.flushResolvers.push(A)})}close(){if(this.closed)return;this.closed=!0,this.pendingAtClose=this.pending.length,this.pending=[],this.sleepResolve?.(),this.sleepResolve=null;for(let A of this.backpressureResolvers)A();this.backpressureResolvers=[];for(let A of this.flushResolvers)A();this.flushResolvers=[]}async drain(){if(this.draining||this.closed)return;this.draining=!0;let A=0;try{while(this.pending.length>0&&!this.closed){let Q=this.takeBatch();if(Q.length===0)continue;try{await this.config.send(Q),A=0}catch(B){if(A++,this.config.maxConsecutiveFailures!==void 0&&A>=this.config.maxConsecutiveFailures){this.droppedBatches++,this.config.onBatchDropped?.(Q.length,A),A=0,this.releaseBackpressure();continue}this.pending=Q.concat(this.pending);let I=B instanceof LG?B.retryAfterMs:void 0;await this.sleep(this.retryDelay(A,I));continue}this.releaseBackpressure()}}finally{if(this.draining=!1,this.pending.length===0){for(let Q of this.flushResolvers)Q();this.flushResolvers=[]}}}takeBatch(){let{maxBatchSize:A,maxBatchBytes:Q}=this.config;if(Q===void 0)return this.pending.splice(0,A);let B=0,I=0;while(I<this.pending.length&&I<A){let E;try{E=Buffer.byteLength(HA(this.pending[I]))}catch{this.pending.splice(I,1);continue}if(I>0&&B+E>Q)break;B+=E,I++}return this.pending.splice(0,I)}retryDelay(A,Q){let B=Math.random()*this.config.jitterMs;if(Q!==void 0)return Math.max(this.config.baseDelayMs,Math.min(Q,this.config.maxDelayMs))+B;return Math.min(this.config.baseDelayMs*2**(A-1),this.config.maxDelayMs)+B}releaseBackpressure(){let A=this.backpressureResolvers;this.backpressureResolvers=[];for(let Q of A)Q()}sleep(A){return new Promise((Q)=>{this.sleepResolve=Q,setTimeout((B,I)=>{B.sleepResolve=null,I()},A,this,Q)})}}class U3{capacity;buffer;head=0;size=0;constructor(A){this.capacity=A;this.buffer=Array(A)}add(A){if(this.buffer[this.head]=A,this.head=(this.head+1)%this.capacity,this.size<this.capacity)this.size++}addAll(A){for(let Q of A)this.add(Q)}getRecent(A){let Q=[],B=this.size<this.capacity?0:this.head,I=Math.min(A,this.size);for(let E=0;E<I;E++){let C=(B+this.size-I+E)%this.capacity;Q.push(this.buffer[C])}return Q}toArray(){if(this.size===0)return[];let A=[],Q=this.size<this.capacity?0:this.head;for(let B=0;B<this.size;B++){let I=(Q+B)%this.capacity;A.push(this.buffer[I])}return A}clear(){this.buffer.length=0,this.head=0,this.size=0}length(){return this.size}}VQ();LC();IB();jE();import{Agent as Y8A}from"https";jE();function gm(A){return[...new Set(A)]}VQ();IB();BE();var qm=["bundled","system"];function C8A(){let A=process.env.CLAUDE_CODE_CERT_STORE;if(A){let Q=[];for(let B of A.split(",")){let I=B.trim().toLowerCase();if(I==="bundled"||I==="system"){if(!Q.includes(I))Q.push(I)}else if(I)Z(`CA certs: unrecognized CLAUDE_CODE_CERT_STORE source '${I}', ignoring`,{level:"warn"})}return Q.length>0?Q:qm}if(g2("--use-system-ca")||g2("--use-openssl-ca"))return["system"];return qm}var xG=FQ(()=>{let A=C8A(),Q=process.env.NODE_EXTRA_CA_CERTS,B=A.includes("bundled"),I=A.includes("system");if(Z(`CA certs: stores=${A.join(",")}, extraCertsPath=${Q}`),typeof Bun>"u"&&!Q&&!process.env.CLAUDE_CODE_CERT_STORE)return;let E=j("tls"),C=E.getCACertificates;if(!B&&I&&!C){Z("CA certs: stores=system but system CA API unavailable, deferring to runtime");return}let Y=[];if(B)Y.push(...E.rootCertificates),Z(`CA certs: Loaded ${E.rootCertificates.length} bundled root certificates`);if(I)try{let J=C?.("system");if(J&&J.length>0)Y.push(...J),Z(`CA certs: Loaded ${J.length} system CA certificates`);else if(Z(`CA certs: system store ${C?"returned empty":"unavailable"}`),!B)Y.push(...E.rootCertificates)}catch(J){if(Z(`CA certs: Failed to load system CA certificates: ${J}`,{level:"error"}),!B)Y.push(...E.rootCertificates)}if(Q)try{let J=nQ().readFileSync(Q,{encoding:"utf8"});Y.push(J),Z(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${Q})`)}catch(J){Z(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${Q}): ${J}`,{level:"error"})}return Y.length>0?gm(Y):void 0});VQ();BE();var HD=FQ(()=>{let A={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{A.cert=nQ().readFileSync(process.env.CLAUDE_CODE_CLIENT_CERT,{encoding:"utf8"}),Z("mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT")}catch(Q){Z(`mTLS: Failed to load client certificate: ${Q}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY)try{A.key=nQ().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY,{encoding:"utf8"}),Z("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY")}catch(Q){Z(`mTLS: Failed to load client key: ${Q}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE)A.passphrase=process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE,Z("mTLS: Using client key passphrase");if(Object.keys(A).length===0)return;return A}),Om=FQ(()=>{let A=HD(),Q=xG();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return Z("mTLS: Creating HTTPS agent with custom certificates"),new Y8A(B)});function F3(){let A=HD(),Q=xG();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}jE();var mr=SI(lm(),1);VQ();IB();function igA(A){switch(A.family){case 0:case 4:case 6:return A.family;case"IPv6":return 6;case"IPv4":case void 0:return 4;default:throw Error(`Unsupported address family: ${A.family}`)}}function TH(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function dgA(A=process.env){return A.no_proxy||A.NO_PROXY}function kH(A,Q=dgA()){if(!Q)return!1;if(Q==="*")return!0;try{let B=new URL(A),I=B.hostname.toLowerCase(),E=B.port||(B.protocol==="https:"?"443":"80"),C=`${I}:${E}`;return Q.split(/[,\s]+/).filter(Boolean).some((J)=>{if(J=J.toLowerCase().trim(),J.includes(":"))return C===J;if(J.startsWith(".")){let G=J;return I===J.substring(1)||I.endsWith(G)}return I===J})}catch{return!1}}function ur(A,Q={}){let B=HD(),I=xG(),E={...B&&{cert:B.cert,key:B.key,passphrase:B.passphrase},...I&&{ca:I}};if(sA(process.env.CLAUDE_CODE_PROXY_RESOLVES_HOSTS))E.lookup=(C,Y,J)=>{J(null,C,igA(Y))};return new mr.HttpsProxyAgent(A,{...E,...Q})}function cr(A={}){let Q=TH(),B=Om(),I=fQ.create({proxy:!1});if(!Q){if(B)I.defaults.httpsAgent=B;return I}let E=ur(Q,A);return I.interceptors.request.use((C)=>{if(C.url&&kH(C.url))C.httpsAgent=B,C.httpAgent=B;else C.httpsAgent=E,C.httpAgent=E;return C}),I}var EJQ=FQ((A)=>{let Q=hr(),B=HD(),I=xG(),E={httpProxy:A,httpsProxy:A,noProxy:process.env.NO_PROXY||process.env.no_proxy};if(B||I){let C={...B&&{cert:B.cert,key:B.key,passphrase:B.passphrase},...I&&{ca:I}};E.connect=C,E.requestTls=C}return new Q.EnvHttpProxyAgent(E)});function pr(A){let Q=TH();if(!Q)return;if(kH(A))return;return ur(Q)}function lr(A){let Q=TH();if(!Q)return;if(kH(A))return;return Q}xJ();LC();IB();var ngA=30000,yH=null,ir=0;var x4=null,bH=null;function ogA(){dr(),x4=setInterval(()=>{if(u("debug","session_keepalive_heartbeat",{refcount:ir}),sA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))yH?.()},ngA)}function dr(){if(bH!==null)clearTimeout(bH),bH=null}function A2(A){if(yH=A,ir>0&&x4===null)ogA()}function R4(){if(yH=null,x4!==null)clearInterval(x4),x4=null;dr()}NQ();var $OA=`{"type":"keep_alive"}
182
182
  `,WOA=1000,VOA=1000,Bs=30000,XOA=600000,MOA=1e4,ZOA=300000,Qs=Bs*2,wOA=new Set([1002,4001,4003]);class eH{ws=null;lastSentId=null;url;state="idle";onData;onCloseCallback;onConnectCallback;headers;sessionId;autoReconnect;isBridge;reconnectAttempts=0;reconnectStartTime=null;reconnectTimer=null;lastReconnectAttemptTime=null;lastActivityTime=0;pingInterval=null;pongReceived=!0;keepAliveInterval=null;messageBuffer;isBunWs=!1;connectStartTime=0;refreshHeaders;constructor(A,Q={},B,I,E){this.url=A,this.headers=Q,this.sessionId=B,this.refreshHeaders=I,this.autoReconnect=E?.autoReconnect??!0,this.isBridge=E?.isBridge??!1,this.messageBuffer=new U3(WOA)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){Z(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),u("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),Z(`WebSocketTransport: Opening ${this.url.href}`),u("info","cli_websocket_connect_opening");let A={...this.headers};if(this.lastSentId)A["X-Last-Request-Id"]=this.lastSentId,Z(`WebSocketTransport: Adding X-Last-Request-Id header: ${this.lastSentId}`);if(typeof Bun<"u"){let Q=new globalThis.WebSocket(this.url.href,{headers:A,proxy:lr(this.url.href),tls:F3()||void 0});this.ws=Q,this.isBunWs=!0,Q.addEventListener("open",this.onBunOpen),Q.addEventListener("message",this.onBunMessage),Q.addEventListener("error",this.onBunError),Q.addEventListener("close",this.onBunClose),Q.addEventListener("pong",this.onPong)}else{let{default:Q}=await Promise.resolve().then(() => (As(),et)),B=new Q(this.url.href,{headers:A,agent:pr(this.url.href),...F3()});this.ws=B,this.isBunWs=!1,B.on("open",this.onNodeOpen),B.on("message",this.onNodeMessage),B.on("error",this.onNodeError),B.on("close",this.onNodeClose),B.on("pong",this.onPong)}}onBunOpen=()=>{if(this.handleOpenEvent(),this.lastSentId)this.replayBufferedMessages("")};onBunMessage=(A)=>{let Q=typeof A.data==="string"?A.data:String(A.data);if(this.lastActivityTime=Date.now(),u("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onBunError=()=>{Z("WebSocketTransport: Error",{level:"error"}),u("error","cli_websocket_connect_error")};onBunClose=(A)=>{let Q=A.code===1000||A.code===1001;Z(`WebSocketTransport: Closed: ${A.code}`,Q?void 0:{level:"error"}),u("error","cli_websocket_connect_closed"),this.handleConnectionError(A.code)};onNodeOpen=()=>{let A=this.ws;if(this.handleOpenEvent(),!A)return;let B=A.upgradeReq;if(B?.headers?.["x-last-request-id"]){let I=B.headers["x-last-request-id"];this.replayBufferedMessages(I)}};onNodeMessage=(A)=>{let Q=A.toString();if(this.lastActivityTime=Date.now(),u("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onNodeError=(A)=>{Z(`WebSocketTransport: Error: ${A.message}`,{level:"error"}),u("error","cli_websocket_connect_error")};onNodeClose=(A,Q)=>{let B=A===1000||A===1001;Z(`WebSocketTransport: Closed: ${A}`,B?void 0:{level:"error"}),u("error","cli_websocket_connect_closed"),this.handleConnectionError(A)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let A=Date.now()-this.connectStartTime;if(Z("WebSocketTransport: Connected"),u("info","cli_websocket_connect_connected",{duration_ms:A}),this.isBridge&&this.reconnectStartTime!==null)rA("tengu_ws_transport_reconnected",{attempts:this.reconnectAttempts,downtimeMs:Date.now()-this.reconnectStartTime});this.reconnectAttempts=0,this.reconnectStartTime=null,this.lastReconnectAttemptTime=null,this.lastActivityTime=Date.now(),this.state="connected",this.onConnectCallback?.(),this.startPingInterval(),this.startKeepaliveInterval(),A2(()=>{this.write({type:"keep_alive"})})}sendLine(A){if(!this.ws||this.state!=="connected")return Z("WebSocketTransport: Not connected"),u("info","cli_websocket_send_not_connected"),!1;try{return this.ws.send(A),this.lastActivityTime=Date.now(),!0}catch(Q){return Z(`WebSocketTransport: Failed to send: ${Q}`,{level:"error"}),u("error","cli_websocket_send_error"),this.handleConnectionError(),!1}}removeWsListeners(A){if(this.isBunWs){let Q=A;Q.removeEventListener("open",this.onBunOpen),Q.removeEventListener("message",this.onBunMessage),Q.removeEventListener("error",this.onBunError),Q.removeEventListener("close",this.onBunClose),Q.removeEventListener("pong",this.onPong)}else{let Q=A;Q.off("open",this.onNodeOpen),Q.off("message",this.onNodeMessage),Q.off("error",this.onNodeError),Q.off("close",this.onNodeClose),Q.off("pong",this.onPong)}}doDisconnect(){if(this.stopPingInterval(),this.stopKeepaliveInterval(),R4(),this.ws)this.removeWsListeners(this.ws),this.ws.close(),this.ws=null}handleConnectionError(A){if(Z(`WebSocketTransport: Disconnected from ${this.url.href}`+(A!=null?` (code ${A})`:"")),u("info","cli_websocket_disconnected"),this.isBridge)rA("tengu_ws_transport_closed",{closeCode:A,msSinceLastActivity:this.lastActivityTime>0?Date.now()-this.lastActivityTime:-1,wasConnected:this.state==="connected",reconnectAttempts:this.reconnectAttempts});if(this.doDisconnect(),this.state==="closing"||this.state==="closed")return;let Q=!1;if(A===4003&&this.refreshHeaders){let E=this.refreshHeaders();if(E.Authorization!==this.headers.Authorization)Object.assign(this.headers,E),Q=!0,Z("WebSocketTransport: 4003 received but headers refreshed, scheduling reconnect"),u("info","cli_websocket_4003_token_refreshed")}if(A!=null&&wOA.has(A)&&!Q){Z(`WebSocketTransport: Permanent close code ${A}, not reconnecting`,{level:"error"}),u("error","cli_websocket_permanent_close",{closeCode:A}),this.state="closed",this.onCloseCallback?.(A);return}if(!this.autoReconnect){this.state="closed",this.onCloseCallback?.(A);return}let B=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=B;if(this.lastReconnectAttemptTime!==null&&B-this.lastReconnectAttemptTime>Qs)Z(`WebSocketTransport: Detected system sleep (${Math.round((B-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),u("info","cli_websocket_sleep_detected",{gapMs:B-this.lastReconnectAttemptTime}),this.reconnectStartTime=B,this.reconnectAttempts=0;this.lastReconnectAttemptTime=B;let I=B-this.reconnectStartTime;if(I<XOA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(!Q&&this.refreshHeaders){let Y=this.refreshHeaders();Object.assign(this.headers,Y),Z("WebSocketTransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let E=Math.min(VOA*Math.pow(2,this.reconnectAttempts-1),Bs),C=Math.max(0,E+E*0.25*(2*Math.random()-1));if(Z(`WebSocketTransport: Reconnecting in ${Math.round(C)}ms (attempt ${this.reconnectAttempts}, ${Math.round(I/1000)}s elapsed)`),u("error","cli_websocket_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.isBridge)rA("tengu_ws_transport_reconnecting",{attempt:this.reconnectAttempts,elapsedMs:I,delayMs:Math.round(C)});this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},C)}else if(Z(`WebSocketTransport: Reconnection time budget exhausted after ${Math.round(I/1000)}s for ${this.url.href}`,{level:"error"}),u("error","cli_websocket_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:I}),this.state="closed",this.onCloseCallback)this.onCloseCallback(A)}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.stopPingInterval(),this.stopKeepaliveInterval(),R4(),this.state="closing",this.doDisconnect()}replayBufferedMessages(A){let Q=this.messageBuffer.toArray();if(Q.length===0)return;let B=0;if(A){let E=Q.findIndex((C)=>("uuid"in C)&&C.uuid===A);if(E>=0){B=E+1;let C=Q.slice(B);if(this.messageBuffer.clear(),this.messageBuffer.addAll(C),C.length===0)this.lastSentId=null;Z(`WebSocketTransport: Evicted ${B} confirmed messages, ${C.length} remaining`),u("info","cli_websocket_evicted_confirmed_messages",{evicted:B,remaining:C.length})}}let I=Q.slice(B);if(I.length===0){Z("WebSocketTransport: No new messages to replay"),u("info","cli_websocket_no_messages_to_replay");return}Z(`WebSocketTransport: Replaying ${I.length} buffered messages`),u("info","cli_websocket_messages_to_replay",{count:I.length});for(let E of I){let C=HA(E)+`
183
183
  `;if(!this.sendLine(C)){this.handleConnectionError();break}}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnConnect(A){this.onConnectCallback=A}setOnClose(A){this.onCloseCallback=A}getStateLabel(){return this.state}async write(A){if("uuid"in A&&typeof A.uuid==="string")this.messageBuffer.add(A),this.lastSentId=A.uuid;let Q=HA(A)+`
184
- `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Qs){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),u("info","cli_websocket_sleep_detected_on_ping",{gapMs:B}),this.handleConnectionError();return}if(!this.pongReceived){Z("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),u("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),u("error","cli_websocket_ping_failed")}}},MOA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),sA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send($OA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),u("error","cli_websocket_keepalive_failed")}},ZOA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var zOA=100,KOA=15000,HOA=3000;class AL extends eH{postUrl;uploader;streamEventBuffer=[];streamEventTimer=null;constructor(A,Q={},B,I,E){super(A,Q,B,I,E);let{maxConsecutiveFailures:C,onBatchDropped:Y}=E??{};this.postUrl=LOA(A),this.uploader=new qY({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{u("error","cli_hybrid_batch_dropped_max_failures",{batchSize:J,failures:G}),Y?.(J,G)},send:(J)=>this.postOnce(J)}),Z(`HybridTransport: POST URL = ${this.postUrl}`),u("info","cli_hybrid_transport_initialized")}async write(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),zOA);return}return await this.uploader.enqueue([...this.takeStreamEvents(),A]),this.uploader.flush()}async writeBatch(A){return await this.uploader.enqueue([...this.takeStreamEvents(),...A]),this.uploader.flush()}get droppedBatchCount(){return this.uploader.droppedBatchCount}flush(){return this.uploader.enqueue(this.takeStreamEvents()),this.uploader.flush()}takeStreamEvents(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;let A=this.streamEventBuffer;return this.streamEventBuffer=[],A}flushStreamEvents(){this.streamEventTimer=null,this.uploader.enqueue(this.takeStreamEvents())}close(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[];let A=this.uploader,Q;Promise.race([A.flush(),new Promise((B)=>{Q=setTimeout(B,HOA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=zD();if(!Q){Z("HybridTransport: No session token available for POST"),u("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await fQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:KOA})}catch(E){throw Z(`HybridTransport: POST error: ${YA(E)}`),u("warn","cli_hybrid_post_network_error"),E}if(I.status>=200&&I.status<300){Z(`HybridTransport: POST success count=${A.length}`);return}if(I.status>=400&&I.status<500&&I.status!==429){Z(`HybridTransport: POST returned ${I.status} (permanent), dropping`),u("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),u("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function LOA(A){let Q=A.protocol==="wss:"?"https:":"http:",B=A.pathname;if(B=B.replace("/ws/","/session/"),!B.endsWith("/events"))B=B.endsWith("/")?B+"events":B+"/events";return`${Q}//${A.host}${B}${A.search}`}import{randomUUID as Cs}from"crypto";VQ();LC();pQ();NQ();function xOA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return OQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Is(A){let Q=xOA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}VQ();LC();pQ();function qU(){return"claude-code/0.2.105"}class QL{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Es(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async drain(){if(this.inflight||this.closed)return;if(!this.pending)return;let A=this.pending;this.pending=null,this.inflight=this.sendWithRetry(A).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(A){let Q=A,B=0;while(!this.closed){if(await this.config.send(Q))return;if(B++,await hB(this.retryDelay(B)),this.pending&&!this.closed)Q=Es(Q,this.pending),this.pending=null}}retryDelay(A){let Q=Math.min(this.config.baseDelayMs*2**(A-1),this.config.maxDelayMs),B=Math.random()*this.config.jitterMs;return Q+B}}function Es(A,Q){let B={...A};for(let[I,E]of Object.entries(Q))if((I==="external_metadata"||I==="internal_metadata")&&B[I]&&typeof B[I]==="object"&&typeof E==="object"&&E!==null)B[I]={...B[I],...E};else B[I]=E;return B}var ROA=20000,jOA=100;function Ys(){return!0}class $2 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var gOA=10;function qOA(){return{byMessage:new Map,scopeToMessage:new Map}}function W2(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function OOA(A,Q){let B=[],I=new Map;for(let E of A)switch(E.event.type){case"message_start":{let C=E.event.message.id,Y=Q.scopeToMessage.get(W2(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(W2(E),C),Q.byMessage.set(C,[]),B.push(E);break}case"content_block_delta":{if(E.event.delta.type!=="text_delta"){B.push(E);break}let C=Q.scopeToMessage.get(W2(E)),Y=C?Q.byMessage.get(C):void 0;if(!Y){B.push(E);break}let J=Y[E.event.index]??=[];J.push(E.event.delta.text);let G=I.get(J);if(G){G.event.delta.text=J.join("");break}let U={type:"stream_event",uuid:E.uuid,session_id:E.session_id,parent_tool_use_id:E.parent_tool_use_id,event:{type:"content_block_delta",index:E.event.index,delta:{type:"text_delta",text:J.join("")}}};I.set(J,U),B.push(U);break}default:B.push(E)}return B}function SOA(A,Q){A.byMessage.delete(Q.message.id);let B=W2(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class BL{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=cr({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=qOA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ROA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??ZV,Q.protocol!=="http:"&&Q.protocol!=="https:")throw Error(`CCRClient: Expected http(s) URL, got ${Q.protocol}`);let I=Q.pathname.replace(/\/$/,"");this.sessionBaseUrl=`${Q.protocol}//${Q.host}${I}`,this.sessionId=I.split("/").pop()||"",this.workerState=new QL({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new LG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new LG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qY({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new LG("delivery POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),A.setOnEvent((E)=>{this.reportDelivery(E.event_id,"received")})}async initialize(A){let Q=Date.now();if(Object.keys(this.getAuthHeaders()).length===0)throw new $2("no_auth_headers");if(A===void 0){let Y=process.env.CLAUDE_CODE_WORKER_EPOCH;A=Y?parseInt(Y,10):NaN}if(isNaN(A))throw new $2("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState();if(!(await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)")).ok)throw new $2("worker_register_failed");this.currentState="idle",this.startHeartbeat(),A2(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),u("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)u("info","cli_worker_state_restored",{duration_ms:C,had_state:E!==null});return E}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:null,durationMs:0};return{metadata:(await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state"))?.worker?.external_metadata??null,durationMs:Date.now()-A}}async request(A,Q,B,I,{timeout:E=1e4}={}){let C=this.getAuthHeaders();if(Object.keys(C).length===0)return{ok:!1};try{let Y=await this.http[A](`${this.sessionBaseUrl}${Q}`,B,{headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":qU()},validateStatus:Ys,timeout:E});if(Y.status>=200&&Y.status<300)return this.consecutiveAuthFailures=0,{ok:!0};if(Y.status===409)this.handleEpochMismatch();if(Y.status===401||Y.status===403){let J=zD(),G=J?Is(J):null;if(G!==null&&G*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(G*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),u("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=gOA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),u("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),u("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${YA(Y)}`,{level:"warn"}),u("warn","cli_worker_request_error",{method:A,path:Q,error_code:QE(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),u("error","cli_worker_epoch_mismatch"),this.onEpochMismatch()}startHeartbeat(){this.stopHeartbeat();let A=()=>{let B=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(Q,this.heartbeatIntervalMs+B)},Q=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;A()};A()}stopHeartbeat(){if(this.heartbeatTimer)clearTimeout(this.heartbeatTimer),this.heartbeatTimer=null}async sendHeartbeat(){if(this.heartbeatInFlight)return;this.heartbeatInFlight=!0;try{if((await this.request("post","/worker/heartbeat",{session_id:this.sessionId,worker_epoch:this.workerEpoch},"Heartbeat",{timeout:5000})).ok)Z("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),jOA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")SOA(this.streamTextAccumulator,A);await this.eventUploader.enqueue(this.toClientEvent(A))}toClientEvent(A){let Q=A;return{payload:{...Q,uuid:typeof Q.uuid==="string"?Q.uuid:Cs()}}}async flushStreamEventBuffer(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;if(this.streamEventBuffer.length===0)return;let A=this.streamEventBuffer;this.streamEventBuffer=[];let Q=OOA(A,this.streamTextAccumulator);await this.eventUploader.enqueue(Q.map((B)=>({payload:B,ephemeral:!0})))}async writeInternalEvent(A,Q,{isCompaction:B=!1,agentId:I}={}){let E={payload:{type:A,...Q,uuid:typeof Q.uuid==="string"?Q.uuid:Cs()},...B&&{is_compaction:!0},...I&&{agent_id:I}};await this.internalEventUploader.enqueue(E)}flushInternalEvents(){return this.internalEventUploader.flush()}flushDeliveryAcks(){return this.deliveryUploader.flush()}async flush(){return await this.flushStreamEventBuffer(),this.eventUploader.flush()}async readInternalEvents(){return this.paginatedGet("/worker/internal-events",{},"internal_events")}async readSubagentInternalEvents(){return this.paginatedGet("/worker/internal-events",{subagents:"true"},"subagent_events")}async paginatedGet(A,Q,B){let I=this.getAuthHeaders();if(Object.keys(I).length===0)return null;let E=[],C;do{let Y=new URL(`${this.sessionBaseUrl}${A}`);for(let[G,U]of Object.entries(Q))Y.searchParams.set(G,U);if(C)Y.searchParams.set("cursor",C);let J=await this.getWithRetry(Y.toString(),I,B);if(!J)return null;E.push(...J.data??[]),C=J.next_cursor}while(C);return Z(`CCRClient: Read ${E.length} internal events from ${A}${Q.subagents?" (subagents)":""}`),E}async getWithRetry(A,Q,B){for(let I=1;I<=10;I++){let E;try{E=await this.http.get(A,{headers:{...Q,"anthropic-version":"2023-06-01","User-Agent":qU()},validateStatus:Ys,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${YA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(Y)}continue}if(E.status>=200&&E.status<300)return E.data;if(E.status===409)this.handleEpochMismatch();if(Z(`CCRClient: GET ${A} returned ${E.status} (attempt ${I}/10)`,{level:"warn"}),I<10){let C=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),u("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),R4(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}VQ();LC();pQ();NQ();var vOA=1000,_OA=30000,POA=600000,TOA=45000,kOA=new Set([401,403,404]),T4=10,bOA=500,yOA=8000,fOA={stream:!0};function hOA(){return!0}function mOA(A){let Q=[],B=0,I;while((I=A.indexOf(`
184
+ `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Qs){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),u("info","cli_websocket_sleep_detected_on_ping",{gapMs:B}),this.handleConnectionError();return}if(!this.pongReceived){Z("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),u("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),u("error","cli_websocket_ping_failed")}}},MOA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),sA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send($OA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),u("error","cli_websocket_keepalive_failed")}},ZOA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var zOA=100,KOA=15000,HOA=3000;class AL extends eH{postUrl;uploader;streamEventBuffer=[];streamEventTimer=null;constructor(A,Q={},B,I,E){super(A,Q,B,I,E);let{maxConsecutiveFailures:C,onBatchDropped:Y}=E??{};this.postUrl=LOA(A),this.uploader=new qY({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{u("error","cli_hybrid_batch_dropped_max_failures",{batchSize:J,failures:G}),Y?.(J,G)},send:(J)=>this.postOnce(J)}),Z(`HybridTransport: POST URL = ${this.postUrl}`),u("info","cli_hybrid_transport_initialized")}async write(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),zOA);return}return await this.uploader.enqueue([...this.takeStreamEvents(),A]),this.uploader.flush()}async writeBatch(A){return await this.uploader.enqueue([...this.takeStreamEvents(),...A]),this.uploader.flush()}get droppedBatchCount(){return this.uploader.droppedBatchCount}flush(){return this.uploader.enqueue(this.takeStreamEvents()),this.uploader.flush()}takeStreamEvents(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;let A=this.streamEventBuffer;return this.streamEventBuffer=[],A}flushStreamEvents(){this.streamEventTimer=null,this.uploader.enqueue(this.takeStreamEvents())}close(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[];let A=this.uploader,Q;Promise.race([A.flush(),new Promise((B)=>{Q=setTimeout(B,HOA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=zD();if(!Q){Z("HybridTransport: No session token available for POST"),u("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await fQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:KOA})}catch(E){throw Z(`HybridTransport: POST error: ${YA(E)}`),u("warn","cli_hybrid_post_network_error"),E}if(I.status>=200&&I.status<300){Z(`HybridTransport: POST success count=${A.length}`);return}if(I.status>=400&&I.status<500&&I.status!==429){Z(`HybridTransport: POST returned ${I.status} (permanent), dropping`),u("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),u("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function LOA(A){let Q=A.protocol==="wss:"?"https:":"http:",B=A.pathname;if(B=B.replace("/ws/","/session/"),!B.endsWith("/events"))B=B.endsWith("/")?B+"events":B+"/events";return`${Q}//${A.host}${B}${A.search}`}import{randomUUID as Cs}from"crypto";VQ();LC();pQ();NQ();function xOA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return OQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Is(A){let Q=xOA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}VQ();LC();pQ();function qU(){return"claude-code/0.2.107"}class QL{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Es(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async drain(){if(this.inflight||this.closed)return;if(!this.pending)return;let A=this.pending;this.pending=null,this.inflight=this.sendWithRetry(A).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(A){let Q=A,B=0;while(!this.closed){if(await this.config.send(Q))return;if(B++,await hB(this.retryDelay(B)),this.pending&&!this.closed)Q=Es(Q,this.pending),this.pending=null}}retryDelay(A){let Q=Math.min(this.config.baseDelayMs*2**(A-1),this.config.maxDelayMs),B=Math.random()*this.config.jitterMs;return Q+B}}function Es(A,Q){let B={...A};for(let[I,E]of Object.entries(Q))if((I==="external_metadata"||I==="internal_metadata")&&B[I]&&typeof B[I]==="object"&&typeof E==="object"&&E!==null)B[I]={...B[I],...E};else B[I]=E;return B}var ROA=20000,jOA=100;function Ys(){return!0}class $2 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var gOA=10;function qOA(){return{byMessage:new Map,scopeToMessage:new Map}}function W2(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function OOA(A,Q){let B=[],I=new Map;for(let E of A)switch(E.event.type){case"message_start":{let C=E.event.message.id,Y=Q.scopeToMessage.get(W2(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(W2(E),C),Q.byMessage.set(C,[]),B.push(E);break}case"content_block_delta":{if(E.event.delta.type!=="text_delta"){B.push(E);break}let C=Q.scopeToMessage.get(W2(E)),Y=C?Q.byMessage.get(C):void 0;if(!Y){B.push(E);break}let J=Y[E.event.index]??=[];J.push(E.event.delta.text);let G=I.get(J);if(G){G.event.delta.text=J.join("");break}let U={type:"stream_event",uuid:E.uuid,session_id:E.session_id,parent_tool_use_id:E.parent_tool_use_id,event:{type:"content_block_delta",index:E.event.index,delta:{type:"text_delta",text:J.join("")}}};I.set(J,U),B.push(U);break}default:B.push(E)}return B}function SOA(A,Q){A.byMessage.delete(Q.message.id);let B=W2(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class BL{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=cr({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=qOA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ROA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??ZV,Q.protocol!=="http:"&&Q.protocol!=="https:")throw Error(`CCRClient: Expected http(s) URL, got ${Q.protocol}`);let I=Q.pathname.replace(/\/$/,"");this.sessionBaseUrl=`${Q.protocol}//${Q.host}${I}`,this.sessionId=I.split("/").pop()||"",this.workerState=new QL({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new LG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new LG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qY({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new LG("delivery POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),A.setOnEvent((E)=>{this.reportDelivery(E.event_id,"received")})}async initialize(A){let Q=Date.now();if(Object.keys(this.getAuthHeaders()).length===0)throw new $2("no_auth_headers");if(A===void 0){let Y=process.env.CLAUDE_CODE_WORKER_EPOCH;A=Y?parseInt(Y,10):NaN}if(isNaN(A))throw new $2("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState();if(!(await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)")).ok)throw new $2("worker_register_failed");this.currentState="idle",this.startHeartbeat(),A2(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),u("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)u("info","cli_worker_state_restored",{duration_ms:C,had_state:E!==null});return E}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:null,durationMs:0};return{metadata:(await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state"))?.worker?.external_metadata??null,durationMs:Date.now()-A}}async request(A,Q,B,I,{timeout:E=1e4}={}){let C=this.getAuthHeaders();if(Object.keys(C).length===0)return{ok:!1};try{let Y=await this.http[A](`${this.sessionBaseUrl}${Q}`,B,{headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":qU()},validateStatus:Ys,timeout:E});if(Y.status>=200&&Y.status<300)return this.consecutiveAuthFailures=0,{ok:!0};if(Y.status===409)this.handleEpochMismatch();if(Y.status===401||Y.status===403){let J=zD(),G=J?Is(J):null;if(G!==null&&G*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(G*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),u("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=gOA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),u("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),u("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${YA(Y)}`,{level:"warn"}),u("warn","cli_worker_request_error",{method:A,path:Q,error_code:QE(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),u("error","cli_worker_epoch_mismatch"),this.onEpochMismatch()}startHeartbeat(){this.stopHeartbeat();let A=()=>{let B=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(Q,this.heartbeatIntervalMs+B)},Q=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;A()};A()}stopHeartbeat(){if(this.heartbeatTimer)clearTimeout(this.heartbeatTimer),this.heartbeatTimer=null}async sendHeartbeat(){if(this.heartbeatInFlight)return;this.heartbeatInFlight=!0;try{if((await this.request("post","/worker/heartbeat",{session_id:this.sessionId,worker_epoch:this.workerEpoch},"Heartbeat",{timeout:5000})).ok)Z("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),jOA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")SOA(this.streamTextAccumulator,A);await this.eventUploader.enqueue(this.toClientEvent(A))}toClientEvent(A){let Q=A;return{payload:{...Q,uuid:typeof Q.uuid==="string"?Q.uuid:Cs()}}}async flushStreamEventBuffer(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;if(this.streamEventBuffer.length===0)return;let A=this.streamEventBuffer;this.streamEventBuffer=[];let Q=OOA(A,this.streamTextAccumulator);await this.eventUploader.enqueue(Q.map((B)=>({payload:B,ephemeral:!0})))}async writeInternalEvent(A,Q,{isCompaction:B=!1,agentId:I}={}){let E={payload:{type:A,...Q,uuid:typeof Q.uuid==="string"?Q.uuid:Cs()},...B&&{is_compaction:!0},...I&&{agent_id:I}};await this.internalEventUploader.enqueue(E)}flushInternalEvents(){return this.internalEventUploader.flush()}flushDeliveryAcks(){return this.deliveryUploader.flush()}async flush(){return await this.flushStreamEventBuffer(),this.eventUploader.flush()}async readInternalEvents(){return this.paginatedGet("/worker/internal-events",{},"internal_events")}async readSubagentInternalEvents(){return this.paginatedGet("/worker/internal-events",{subagents:"true"},"subagent_events")}async paginatedGet(A,Q,B){let I=this.getAuthHeaders();if(Object.keys(I).length===0)return null;let E=[],C;do{let Y=new URL(`${this.sessionBaseUrl}${A}`);for(let[G,U]of Object.entries(Q))Y.searchParams.set(G,U);if(C)Y.searchParams.set("cursor",C);let J=await this.getWithRetry(Y.toString(),I,B);if(!J)return null;E.push(...J.data??[]),C=J.next_cursor}while(C);return Z(`CCRClient: Read ${E.length} internal events from ${A}${Q.subagents?" (subagents)":""}`),E}async getWithRetry(A,Q,B){for(let I=1;I<=10;I++){let E;try{E=await this.http.get(A,{headers:{...Q,"anthropic-version":"2023-06-01","User-Agent":qU()},validateStatus:Ys,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${YA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(Y)}continue}if(E.status>=200&&E.status<300)return E.data;if(E.status===409)this.handleEpochMismatch();if(Z(`CCRClient: GET ${A} returned ${E.status} (attempt ${I}/10)`,{level:"warn"}),I<10){let C=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),u("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),R4(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}VQ();LC();pQ();NQ();var vOA=1000,_OA=30000,POA=600000,TOA=45000,kOA=new Set([401,403,404]),T4=10,bOA=500,yOA=8000,fOA={stream:!0};function hOA(){return!0}function mOA(A){let Q=[],B=0,I;while((I=A.indexOf(`
185
185
 
186
186
  `,B))!==-1){let E=A.slice(B,I);if(B=I+2,!E.trim())continue;let C={},Y=!1;for(let J of E.split(`
187
187
  `)){if(J.startsWith(":")){Y=!0;continue}let G=J.indexOf(":");if(G===-1)continue;let U=J.slice(0,G),F=J[G+1]===" "?J.slice(G+2):J.slice(G+1);switch(U){case"event":C.event=F;break;case"id":C.id=F;break;case"data":C.data=C.data?C.data+`
@@ -191,4 +191,4 @@ ${E}`;break;case"retry":if(Lr(E))Q[I]=E;break;case"id":if(xr(E))Q[I]=E;break;cas
191
191
  `);if(I.push(J),!G){E=J.endsWith(`
192
192
  `);continue}let{frames:U,remaining:F}=mOA(I.join(""));I=F?[F]:[],E=F.endsWith(`
193
193
  `);for(let N of U){if(this.resetLivenessTimer(),N.id){let D=parseInt(N.id,10);if(!isNaN(D)){if(this.seenSequenceNums.has(D))Z(`SSETransport: DUPLICATE frame seq=${D} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),u("warn","cli_sse_duplicate_sequence");else if(this.seenSequenceNums.add(D),this.seenSequenceNums.size>1000){let W=this.lastSequenceNum-200;for(let $ of this.seenSequenceNums)if($<W)this.seenSequenceNums.delete($)}if(D>this.lastSequenceNum)this.lastSequenceNum=D}}if(N.event&&N.data)this.handleSSEFrame(N.event,N.data);else if(N.data)Z("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),u("warn","cli_sse_frame_missing_event_field")}}}catch(C){if(this.abortController?.signal.aborted)return;Z(`SSETransport: Stream read error: ${YA(C)}`,{level:"error"}),u("error","cli_sse_stream_read_error")}finally{Q.releaseLock()}if(this.state!=="closing"&&this.state!=="closed")Z("SSETransport: Stream ended, reconnecting"),this.handleConnectionError()}handleSSEFrame(A,Q){if(A!=="client_event"){Z(`SSETransport: Unexpected SSE event type '${A}' on worker stream`,{level:"warn"}),u("warn","cli_sse_unexpected_event_type",{event_type:A});return}let B;try{B=OQ(Q)}catch(E){Z(`SSETransport: Failed to parse client_event data: ${YA(E)}`,{level:"error"});return}let I=B.payload;if(I&&typeof I==="object"&&"type"in I){let E=this.sessionId?` session=${this.sessionId}`:"";Z(`SSETransport: Event seq=${B.sequence_num} event_id=${B.event_id} event_type=${B.event_type} payload_type=${String(I.type)}${E}`),u("info","cli_sse_message_received"),this.onData?.(HA(I)+`
194
- `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<POA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let E=this.refreshHeaders();Object.assign(this.headers,E),Z("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let B=Math.min(vOA*Math.pow(2,this.reconnectAttempts-1),_OA),I=Math.max(0,B+B*0.25*(2*Math.random()-1));Z(`SSETransport: Reconnecting in ${Math.round(I)}ms (attempt ${this.reconnectAttempts}, ${Math.round(Q/1000)}s elapsed)`),u("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}else Z(`SSETransport: Reconnection time budget exhausted after ${Math.round(Q/1000)}s`,{level:"error"}),u("error","cli_sse_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:Q}),this.state="closed",this.onCloseCallback?.()}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),u("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,TOA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),u("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":qU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=T4;I++){try{let C=await fQ.post(this.postUrl,A,{headers:B,validateStatus:hOA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${HA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),u("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${T4}`),u("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${YA(C)}, attempt ${I}/${T4}`),u("warn","cli_sse_post_network_error",{attempt:I})}if(I===T4){Z(`SSETransport: POST failed after ${T4} attempts, continuing`),u("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(bOA*Math.pow(2,I-1),yOA);await hB(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}}function uOA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}VQ();pQ();function Js(A){return{write:(Q)=>A.write(Q),writeBatch:(Q)=>A.writeBatch(Q),close:()=>A.close(),isConnectedStatus:()=>A.isConnectedStatus(),getStateLabel:()=>A.getStateLabel(),setOnData:(Q)=>A.setOnData(Q),setOnClose:(Q)=>A.setOnClose(Q),setOnConnect:(Q)=>A.setOnConnect(Q),connect:()=>void A.connect(),getLastSequenceNum:()=>0,get droppedBatchCount(){return A.droppedBatchCount},reportState:()=>{},reportMetadata:()=>{},reportDelivery:()=>{},flush:()=>Promise.resolve()}}async function Gs(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let X=C();if(!X)return{};return{Authorization:`Bearer ${X}`}};else KD(B);let J=A.epoch??await Km(Q,B);Z(`[bridge:repl] CCR v2: worker sessionId=${I} epoch=${J}${A.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let G=new URL(Q);G.pathname=G.pathname.replace(/\/$/,"")+"/worker/events/stream";let U=new IL(G,{},I,void 0,E,Y),F,N=new BL(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{Z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(X){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${YA(X)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((X)=>{N.reportDelivery(X.event_id,"received"),N.reportDelivery(X.event_id,"processed")});let D,W=!1,$=!1;return{write(X){return N.writeEvent(X)},async writeBatch(X){for(let V of X){if($)break;await N.writeEvent(V)}},close(){$=!0,N.close(),U.close()},isConnectedStatus(){return W},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return W?"connected":"init";return"connecting"},setOnData(X){U.setOnData(X)},setOnClose(X){F=X,U.setOnClose((V)=>{N.close(),X(V??4092)})},setOnConnect(X){D=X},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(X){N.reportState(X)},reportMetadata(X){N.reportMetadata(X)},reportDelivery(X,V){N.reportDelivery(X,V)},flush(){return N.flush()},getInternalEventWriter(){return(X,V,M)=>N.writeInternalEvent(X,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{W=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),D?.()},(X)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${YA(X)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}VQ();pQ();var cOA="2023-06-01",pOA="ccr-byoc-2025-07-29";async function Us({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return Z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await fQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:EL(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${YA(W)}`),null}if(N.status!==200&&N.status!==201){let W=HG(N.data);return Z(`[bridge] Session creation failed with status ${N.status}${W?`: ${W}`:""}`),null}let D=N.data;if(!D||typeof D!=="object"||!("id"in D)||typeof D.id!=="string")return Z("[bridge] No session ID in response"),null;return D.id}async function Fs(A,Q){let{baseUrl:B,getAccessToken:I,orgUUID:E}=Q,C=I();if(!C){Z("[bridge] No access token for session archive");return}let Y=`${B}/v1/sessions/${A}/archive`;Z(`[bridge] Archiving session ${A}`);try{let J=await fQ.post(Y,{},{headers:EL(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=HG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${YA(J)}`)}}async function V2(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-pr`),!1;let J=`${E}/v1/code/github/${A}-pr`,G={session_id:wD(Q),repo:B,pr_number:I},U;try{U=await fQ.post(J,G,{headers:EL(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${YA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=HG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function EL(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":cOA,"anthropic-beta":pOA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}IB();function Ns(A){let Q=new AbortController;function B(){Q.abort(),Q=new AbortController}function I(){let E=new AbortController,C=()=>E.abort();if(A.aborted||Q.signal.aborted)return E.abort(),{signal:E.signal,cleanup:()=>{}};A.addEventListener("abort",C,{once:!0});let Y=Q.signal;return Y.addEventListener("abort",C,{once:!0}),{signal:E.signal,cleanup:()=>{A.removeEventListener("abort",C),Y.removeEventListener("abort",C)}}}return{signal:I,wake:B}}class CL{_active=!1;_pending=[];get active(){return this._active}get pendingCount(){return this._pending.length}start(){this._active=!0}end(){return this._active=!1,this._pending.splice(0)}enqueue(...A){if(!this._active)return!1;return this._pending.push(...A),!0}drop(){this._active=!1;let A=this._pending.length;return this._pending.length=0,A}deactivate(){this._active=!1}}pQ();VQ();var QSA=2000,Ms=60000,Zs=900000,BSA=0;async function ws(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:D,getCurrentTitle:W=()=>Y,toSDKMessages:$=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:X,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>pN,initialHistoryCap:L=200,initialMessages:z,previouslyFlushedUUIDs:x,onInboundMessage:q,onPermissionResponse:O,onInterrupt:_,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:c,onInitError:qA,perpetual:p,initialSSESequenceNum:RA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:l}=A,zQ=++BSA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:CA}=await Promise.resolve().then(() => (Vs(),Ws)),nA=p?await CA(Q):null,zA=nA?.source==="repl"?nA:null;Z(`[bridge:repl] initBridgeCore #${zQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let QQ=Fm({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.105",onDebug:Z,onAuth401:X,getTrustedDeviceToken:V}),xQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Xs(),workerType:U,environmentId:Xs(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},WA,XB;try{let b=await QQ.registerBridgeEnvironment(xQ);WA=b.environment_id,XB=b.environment_secret}catch(b){if(Um("registration_failed",`[bridge:repl] Environment registration failed: ${YA(b)}`),qA?.(`[bridge:repl] Environment registration failed: ${YA(b)}`),zA&&b instanceof WE&&(b.status===410||b.status!==401&&WV(b.errorType)))await d(Q);return QA?.("failed",YA(b)),null}Z(`[bridge:repl] Environment registered: ${WA}`),u("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function RQ(b,FA){if(WA!==b)return Z(`[bridge:repl] Env mismatch (requested ${b}, got ${WA}) — cannot reconnect in place`),!1;let BQ=J3(FA),SA=BQ===FA?[FA]:[FA,BQ];for(let mQ of SA)try{return await QQ.reconnectSession(WA,mQ),Z(`[bridge:repl] Reconnected session ${mQ} in place on env ${WA}`),!0}catch(sI){Z(`[bridge:repl] reconnectSession(${mQ}) failed: ${YA(sI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let p0=zA?await RQ(zA.environmentId,zA.sessionId):!1;if(zA&&!p0)await d(Q);let VA,s=new Set;if(p0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&x)for(let b of z)x.add(b.uuid)}else{let b=await N({environmentId:WA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!b)return Z("[bridge:repl] Session creation failed, deregistering environment"),qA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await QQ.deregisterEnvironment(WA).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=b,Z(`[bridge:repl] Session created: ${VA}`)}c?.(VA),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),u("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:qx(),...Dm()});let jQ=new Set;if(z)for(let b of z)jQ.add(b.uuid);let oA=new VV(2000);for(let b of jQ)oA.add(b);let pA=new VV(2000),UB=new AbortController,IA=null,aI=0,MB=p0?RA:0,_Q=null,dQ=null,l0=Ns(UB.signal),rI=l0.wake,CI=l0.signal,vB=new CL,xE=!BA,tI=3,OI=0,RE=null;async function OU(){if(RE)return RE;RE=pC();try{return await RE}finally{RE=null}}async function pC(){if(OI++,aI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${OI}/${tI})`),OI>tI)return Z(`[bridge:repl] Environment reconnect limit reached (${tI}), giving up`),!1;if(IA){let SA=IA.getLastSequenceNum();if(SA>MB)MB=SA;l?.(),IA.close(),IA=null}if(rI(),vB.drop(),_Q){let SA=_Q;if(await QQ.stopWork(WA,SA,!1).catch(()=>{}),_Q!==SA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),OI=0,!0;_Q=null,dQ=null}if(UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let b=WA;xQ.reuseEnvironmentId=b;try{let SA=await QQ.registerBridgeEnvironment(xQ);WA=SA.environment_id,XB=SA.environment_secret}catch(SA){return xQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${YA(SA)}`),!1}if(xQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${b} got=${WA}`),UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await QQ.deregisterEnvironment(WA).catch(()=>{}),!1;if(IA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OI=0,!0;if(await RQ(b,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OI=0,!0;if(WA!==b)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await QQ.deregisterEnvironment(WA).catch(()=>{}),!1;let FA=W(),BQ=await N({environmentId:WA,title:FA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!BQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(BQ),!1;if(VA=BQ,Rm(wD(BQ)).catch(()=>{}),c?.(VA),MB=0,pA.clear(),xE=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),x?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let SA of s){let mQ=SA.lastIndexOf("#");V2("subscribe",VA,SA.slice(0,mQ),Number(SA.slice(mQ+1)),J,F)}}return OI=0,!0}function YI(){return F()}function i0(){let b=vB.end();if(b.length===0)return;if(!IA){Z(`[bridge:repl] Cannot drain ${b.length} pending message(s): no transport`);return}for(let SA of b)oA.add(SA.uuid);let BQ=$(b).map((SA)=>({...SA,session_id:VA}));Z(`[bridge:repl] Drained ${b.length} pending message(s) after flush`),IA.writeBatch(BQ)}let lC=null;function QJ(){lC?.()}function UL(b){if(Z(`[bridge:repl] Transport permanently closed: code=${b}`),rA("tengu_bridge_repl_ws_closed",{code:b}),IA){let BQ=IA.getLastSequenceNum();if(BQ>MB)MB=BQ;l?.(),IA=null}rI();let FA=vB.drop();if(FA>0)Z(`[bridge:repl] Dropping ${FA} pending message(s) on transport close (code=${b})`,{level:"warn"});if(b===1000){QA?.("failed","session ended"),UB.abort(),QJ();return}QA?.("reconnecting",`Remote Control connection lost (code ${b})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${b}), attempting env reconnect`),OU().then((BQ)=>{if(BQ)return;if(UB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:b}),QA?.("failed","reconnection failed"),QJ()})}let FL,Hs=null,Ls={api:QQ,getCredentials:()=>({environmentId:WA,environmentSecret:XB}),signal:UB.signal,getPollIntervalConfig:M,onStateChange:QA,getWsState:()=>IA?.getStateLabel()??"null",isAtCapacity:()=>IA!==null,capacitySignal:CI,onFatalError:QJ,getHeartbeatInfo:()=>{if(!_Q||!dQ)return null;return{environmentId:WA,workId:_Q,sessionToken:dQ}},onHeartbeatFatal:(b)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${b.status}) — tearing down work item for fast re-dispatch`),IA){let FA=IA.getLastSequenceNum();if(FA>MB)MB=FA;l?.(),IA.close(),IA=null}if(vB.drop(),_Q)QQ.stopWork(WA,_Q,!1).catch((FA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${YA(FA)}`)});_Q=null,dQ=null,rI(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await OU())return null;return{environmentId:WA,environmentSecret:XB}},onWorkReceived:(b,FA,BQ,SA)=>{if(IA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${BQ})`);if(Z(`[bridge:repl] Work received: workId=${BQ} workSessionId=${b} currentSessionId=${VA} match=${C3(b,VA)}`),n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),!C3(b,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${b}`);return}_Q=BQ,dQ=FA;let mQ=SA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),sI;if(!mQ){if(sI=YI(),!sI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}KD(sI)}if(rA("tengu_bridge_repl_work_received",{}),IA){l?.();let PQ=IA;IA=null;let uQ=PQ.getLastSequenceNum();if(uQ>MB)MB=uQ;PQ.close()}vB.deactivate();let Rs=(PQ)=>Mm(PQ,{transport:IA,sessionId:VA,onInterrupt:_,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA}),z2=!1,DL=(PQ)=>{if(IA=PQ,PQ.setOnConnect(()=>{if(IA!==PQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!mQ){let uQ=YI();if(uQ)KD(uQ)}if(w2=!1,!z2&&z&&z.length>0){z2=!0;let uQ=L,fB=z.filter((k4)=>I3(k4)&&!x?.has(k4.uuid)),sE=uQ>0&&fB.length>uQ?fB.slice(-uQ):fB;if(sE.length<fB.length)Z(`[bridge:repl] Capped initial flush: ${fB.length} -> ${sE.length} (cap=${uQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:fB.length,capped_count:sE.length});let iC=$(sE);if(iC.length>0){Z(`[bridge:repl] Flushing ${iC.length} initial message(s) via transport`);let k4=iC.map((BJ)=>({...BJ,session_id:VA})),$L=PQ.droppedBatchCount;PQ.writeBatch(k4).then(()=>{if(PQ.droppedBatchCount>$L){Z(`[bridge:repl] Initial flush dropped ${PQ.droppedBatchCount-$L} batch(es) — not marking ${iC.length} UUID(s) as flushed`);return}if(x){for(let BJ of iC)if(BJ.uuid)x.add(BJ.uuid)}}).catch((BJ)=>Z(`[bridge:repl] Initial flush failed: ${BJ}`)).finally(()=>{if(IA!==PQ)return;i0(),QA?.("connected")})}else i0(),QA?.("connected")}else if(!vB.active)QA?.("connected")}),PQ.setOnData((uQ)=>{Xm(uQ,oA,pA,q,O,Rs)}),Hs=UL,PQ.setOnClose((uQ)=>{if(IA!==PQ)return;UL(uQ)}),!z2&&z&&z.length>0)vB.start();PQ.connect()};if(aI++,mQ){let PQ=zm(J,b),uQ=aI;Z(`[bridge:repl] CCR v2: sessionUrl=${PQ} session=${b} gen=${uQ}`),Gs({sessionUrl:PQ,ingressToken:FA,sessionId:b,initialSequenceNum:MB}).then((fB)=>{if(UB.signal.aborted){fB.close();return}if(uQ!==aI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${aI}`),fB.close();return}if(DL(fB),fA){let sE=fB.getInternalEventWriter?.(),iC=fB.getInternalEventReaders?.();if(sE&&iC)fA(sE,iC)}},(fB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${YA(fB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==aI)return;if(_Q)QQ.stopWork(WA,_Q,!1).catch((sE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${YA(sE)}`)}),_Q=null,dQ=null;rI()})}else{let PQ=wm(G,b);Z(`[bridge:repl] Ingress URL: ${PQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${b}`);let uQ=sI??"";DL(Js(new AL(new URL(PQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},b,()=>({Authorization:`Bearer ${YI()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),rI()}})))}}};ISA(Ls);let M2=p?setInterval(()=>{if(RE)return;n(Q,{sessionId:VA,environmentId:WA,source:"repl"})},3600000):null;M2?.unref?.();let NL=M().session_keepalive_interval_v2_ms,Z2=NL>0?setInterval(()=>{if(!IA)return;Z("[bridge:repl] keep_alive sent"),IA.write({type:"keep_alive"}).catch((b)=>{Z(`[bridge:repl] keep_alive write failed: ${YA(b)}`)})},NL):null;Z2?.unref?.();let w2=!1;lC=async()=>{if(w2){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${WA} session=${VA}`);return}w2=!0,l?.();let b=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${WA} session=${VA} workId=${_Q??"none"} transportState=${IA?.getStateLabel()??"null"}`),M2!==null)clearInterval(M2);if(Z2!==null)clearInterval(Z2);if(FL)process.off("SIGUSR2",FL);if(UB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),IA){let SA=IA.getLastSequenceNum();if(SA>MB)MB=SA}if(p){IA=null,vB.drop(),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${WA} session=${VA} alive on server, duration=${Date.now()-b}ms`);return}let FA=IA;if(IA=null,vB.drop(),FA)FA.write(E3(VA));let BQ=_Q?QQ.stopWork(WA,_Q,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((SA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${YA(SA)}`)}):Promise.resolve();await Promise.all([BQ,D(VA)]),FA?.close(),Z("[bridge:repl] Teardown: transport closed"),await QQ.deregisterEnvironment(WA).catch((SA)=>{Z(`[bridge:repl] Teardown deregister failed: ${YA(SA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${WA} duration=${Date.now()-b}ms`)};let xs=B0(()=>lC?.());return Z(`[bridge:repl] Ready: env=${WA} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return WA},getSSESequenceNum(){let b=IA?.getLastSequenceNum()??0;return Math.max(MB,b)},sessionIngressUrl:G,writeMessages(b){let FA=b.filter((mQ)=>I3(mQ)&&!jQ.has(mQ.uuid)&&!oA.has(mQ.uuid));if(FA.length===0)return;if(!xE)for(let mQ of FA){let sI=Vm(mQ);if(sI!==void 0&&BA?.(sI,VA)){xE=!0;break}}if(vB.enqueue(...FA)){Z(`[bridge:repl] Queued ${FA.length} message(s) during initial flush`);return}if(!IA){let mQ=FA.map((sI)=>sI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${FA.length} message(s) [${mQ}] for session=${VA}`,{level:"warn"});return}for(let mQ of FA)oA.add(mQ.uuid);Z(`[bridge:repl] Sending ${FA.length} message(s) via transport`);let SA=$(FA).map((mQ)=>({...mQ,session_id:VA}));IA.writeBatch(SA)},writeSdkMessages(b){let FA=b.filter((SA)=>!SA.uuid||!oA.has(SA.uuid));if(FA.length===0)return;if(!IA){Z(`[bridge:repl] Transport not configured, dropping ${FA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let SA of FA)if(SA.uuid)oA.add(SA.uuid);let BQ=FA.map((SA)=>({...SA,session_id:VA}));IA.writeBatch(BQ)},sendControlRequest(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let FA={...b,session_id:VA};IA.write(FA),Z(`[bridge:repl] Sent control_request request_id=${b.request_id}`)},sendControlResponse(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let FA={...b,session_id:VA};IA.write(FA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let FA={type:"control_cancel_request",request_id:b,session_id:VA};IA.write(FA),Z(`[bridge:repl] Sent control_cancel_request request_id=${b}`)},sendResult(){if(!IA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}IA.write(E3(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(b,FA){let BQ=await V2("subscribe",VA,b,FA,J,F);if(BQ)s.add(`${b}#${FA}`);return BQ},async unsubscribePR(b,FA){let BQ=await V2("unsubscribe",VA,b,FA,J,F);if(BQ)s.delete(`${b}#${FA}`);return BQ},async teardown(){xs(),await lC?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function ISA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>pN,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,X=null,V=null,M=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:x}=Q(),q=F();try{let O=await A.pollForWork(z,x,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,X=null,V=null,I?.("ready");if(!O){let k=L;if(L=!1,J?.()&&G&&!k){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let QA=a>0?Date.now()+a:null,BA=!1,c=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let p=F();if(p.non_exclusive_heartbeat_interval_ms<=0)break;let RA=N();if(!RA)break;let fA=G();try{await A.heartbeatWork(RA.environmentId,RA.workId,RA.sessionToken)}catch(l){if(Z(`[bridge:repl:heartbeat] Failed: ${YA(l)}`),l instanceof WE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:l.status,error_type:l.status===401||l.status===403?"auth_failed":"fatal"}),D)D(l),Z(`[bridge:repl:heartbeat] Fatal (status=${l.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}c++,await hB(p.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let qA=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":QA!==null&&Date.now()>=QA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:qA,heartbeat_cycles:c}),!BA){if(qA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${c} cycles — falling through to pollForWork`);continue}}let DA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(DA>0){let QA=G(),BA=Date.now();await hB(DA,QA.signal),QA.cleanup();let c=Date.now()-BA-DA;if(c>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(c/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:c}),L=!0}}else await hB(q.poll_interval_ms_not_at_capacity,B);continue}let _;try{_=Zm(O.secret)}catch(k){Z(`[bridge:repl] Failed to decode work secret: ${YA(k)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,O.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${O.id}`);try{await A.acknowledgeWork(z,O.id,_.session_ingress_token)}catch(k){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${YA(k)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let k=O.data.id;try{tB(k,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${k}`);continue}E(k,_.session_ingress_token,O.id,_.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof WE&&O.status===404&&C){let c=Q().environmentId;if(z!==c){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${c} — skipping onEnvironmentLost`),$=0,X=null;continue}if(M++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${M}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:M}),M>3){Z("[bridge:repl] Environment re-registration limit reached (3), giving up"),I?.("failed","Environment deleted and re-registration limit reached"),U?.();break}I?.("reconnecting","environment lost, recreating session");let qA=await C();if(B.aborted)break;if(qA){$=0,X=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${qA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof WE){let c=WV(O.errorType),qA=Nm(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${qA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),u(c?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!qA)I?.("failed",c?"session expired · /remote-control to reconnect":O.message);U?.();break}let _=Date.now();if(V!==null&&_-V>Ms*2)Z(`[bridge:repl] Detected system sleep (${Math.round((_-V)/1000)}s gap), resetting poll error budget`),u("info","bridge_repl_poll_sleep_detected",{gapMs:_-V}),$=0,X=null;if(V=_,$++,X===null)X=_;let k=_-X,a=Gm(O),DA=Jm(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(k/1000)}s, ws=${QA}): ${DA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:k}),$===1)I?.("reconnecting",DA);if(k>=Zs){Z(`[bridge:repl] Poll failures exceeded ${Zs/1000}s (${$} errors), giving up`),u("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:k,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(QSA*2**($-1),Ms);if(F().non_exclusive_heartbeat_interval_ms>0){let c=N?.();if(c)try{await A.heartbeatWork(c.environmentId,c.workId,c.sessionToken)}catch{}}await hB(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function ESA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function CSA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function YSA(A,Q){if(CSA(A,Q))return"http://localhost:4000";if(ESA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function zs(A,Q){let{toCompatSessionId:B}=vs(Hm),I=B(A);return`${YSA(I,Q)}/code/${I}`}VQ();async function Ks(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:D=!1,initialSSESequenceNum:W,onConflict:$}=A,X=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},L=[],z=null,x=[],q=null,O=[],_=null,k=!1,a=null,DA={detail:null},QA=JSA(),BA=()=>ws({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:X,onInitError:console.error,createSession:({environmentId:l,title:zQ,signal:n})=>Us({environmentId:l,title:zQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(l)=>Fs(l,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...pN,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(l){let zQ=CT(l);if(!zQ)return;L.push({content:zQ.content,uuid:zQ.uuid}),z?.(),z=null},onInterrupt(){x.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:l}}),q?.(),q=null},onSetMaxThinkingTokens(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:l}}),q?.(),q=null},onPermissionResponse(l){O.push(l),_?.(),_=null},onStateChange(l,zQ){if(a?.(l,zQ),l==="failed")DA.detail=zQ??"unknown failure",k=!0,z?.(),q?.(),_?.()}}),c=await BA();if(!c&&$&&DA.detail?.includes("409")){if(await $({machineName:QA,message:DA.detail})==="takeover")k=!1,DA.detail=null,c=await BA()}if(!c){let l=DA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${l}`),{ok:!1,error:{kind:DA.detail?.includes("409")?"conflict":DA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:l}}}async function*qA(){while(!k){while(L.length>0)if(yield L.shift(),k)return;await new Promise((l)=>{z=l})}}async function*p(){while(!k){while(x.length>0)if(yield x.shift(),k)return;await new Promise((l)=>{q=l})}}async function*RA(){while(!k){while(O.length>0)if(yield O.shift(),k)return;await new Promise((l)=>{_=l})}}return{ok:!0,handle:{get sessionUrl(){return zs(c.bridgeSessionId,V)},get environmentId(){return c.environmentId},get bridgeSessionId(){return c.bridgeSessionId},getSSESequenceNum(){return c.getSSESequenceNum()},hasPendingPrompts(){return L.length>0},write(l){c.writeSdkMessages([l])},sendResult(){c.sendResult()},sendControlRequest(l){c.sendControlRequest(l)},sendControlResponse(l){c.sendControlResponse(l)},sendControlCancelRequest(l){c.sendControlCancelRequest(l)},inboundPrompts:qA,controlRequests:p,permissionResponses:RA,onStateChange(l){a=l},async teardown(){k=!0,z?.(),q?.(),_?.(),await c.teardown()}}}}var USA=1000,FSA=1e4,NSA=5000,DSA=60000,GL=3;function $SA(A){if((A.type==="user"||A.type==="assistant")&&A.parent_tool_use_id!==null)return!1;if(A.type==="user"){let Q=A.message.content;if(!(Array.isArray(Q)&&Q.some((I)=>I.type==="tool_result")))return!1}return!0}function WSA(A,Q,B){let I=A.response?.request_id;if(!I)return null;let E=Q.get(I);if(!E)return I;Q.delete(I),B(I);let C=A.response;if(C.subtype==="success"&&ZL(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function VSA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let X=await Ks($);if(!X.ok)return D(`bridge connection failed: ${X.error.kind} — ${X.error.detail}`),{ok:!1,error:X.error};let V=X.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,L=V.bridgeSessionId,z=[],x=null,q=!1,O=null,_=0,k=!0,a=0,DA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};DA=DA.then(()=>G.save(s).catch((jQ)=>{D(`stateAdapter.save threw: ${jQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let c=new AbortController,qA=new Map,p=null;function RA(){return p??=(async()=>{BA();for(let s of qA.keys())V.sendControlCancelRequest(s);qA.clear(),await V.teardown(),await DA})()}if(N.addEventListener("abort",()=>{c.abort(),RA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await RA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,jQ)=>{if(D(`bridge state=${s} detail=${jQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==L)L=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${jQ??"unknown"}`),c.abort(),RA().catch((oA)=>D(`teardown threw: ${oA}`))});let l=I?.horizonMs??600000,zQ=I?.leadMs??NSA,n=null,d=!1,CA=!1,nA="";async function zA(){if(!I)return;let s=await BT(I.dir).catch((oA)=>{return D(`computeCronHorizon threw: ${oA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,CA=s.hasOverdue;let jQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(jQ!==nA)nA=jQ,D(jQ)}let BB;if(I)await zA(),BB=setInterval(zA,FSA),BB.unref?.();function QQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),x?.(),x=null}async function xQ(s,jQ,oA){if(C){let dQ=await C(s,jQ,oA);if(dQ)return Y?.(s,dQ),dQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let dQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,dQ),dQ}let pA=GSA();D(`permission request tool=${s} req=${pA}`);let{signal:UB,suggestions:IA,blockedPath:aI,toolUseID:MB}=oA;V.sendControlRequest({type:"control_request",request_id:pA,request:{subtype:"can_use_tool",tool_name:s,display_name:wL(s),input:jQ,tool_use_id:MB,...IA?{permission_suggestions:IA}:{},...aI?{blocked_path:aI}:{},..."decisionReason"in oA&&oA.decisionReason?{decision_reason:oA.decisionReason}:{},..."agentID"in oA&&oA.agentID?{agent_id:oA.agentID}:{}}});let _Q;try{let dQ=await new Promise((rI,CI)=>{qA.set(pA,rI),_Q=setTimeout((vB,xE,tI,OI,RE)=>{if(vB.delete(xE))tI(`permission timeout req=${xE}`),OI.sendControlCancelRequest(xE),RE({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},DSA,qA,pA,D,V,rI),_Q.unref?.(),UB.addEventListener("abort",()=>{if(qA.delete(pA))V.sendControlCancelRequest(pA);CI(Error("aborted"))},{once:!0})});D(`permission response req=${pA} behavior=${dQ.behavior}`);let l0=dQ.behavior==="allow"?{behavior:"allow",updatedInput:dQ.updatedInput,updatedPermissions:dQ.updatedPermissions}:{behavior:"deny",message:dQ.message??"Denied via remote control"};return Y?.(s,l0),l0}finally{if(_Q)clearTimeout(_Q);qA.delete(pA)}}let WA=!1;async function XB(){if(O!==null||WA||c.signal.aborted)return;if(WA=!0,q=!1,z.length>0)k=!1;async function*s(){while(!q){while(z.length>0)if(k=!1,yield z.shift(),q)return;await new Promise((pA)=>{x=pA})}}D(`spawning query resume=${M??"<fresh>"}`);let jQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(pA)=>D(`[child] ${pA.trimEnd()}`),canUseTool:xQ},oA;try{if(oA=await E(jQ),B)oA={...oA,env:{...oA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(pA){if(D(`buildQueryOptions threw: ${pA}`),WA=!1,a++,a>=GL)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!c.signal.aborted)XB();return}if(c.signal.aborted){WA=!1;return}try{O=RP({prompt:s(),options:oA})}finally{WA=!1}(async()=>{try{D("output pump started");for await(let pA of O){if(pA.type==="system"&&pA.subtype==="init"){if(pA.session_id!==M)M=pA.session_id,BA()}if(pA.type==="result")k=!0,a=0,d=!0,BA();if(!$SA(pA))continue;let UB=J?J(pA):pA;if(UB===null)continue;V.write(UB)}}catch(pA){D(`query threw: ${pA}`),a++}finally{D("output pump ended"),O=null;for(let pA of qA.keys())V.sendControlCancelRequest(pA);if(qA.clear(),z.length>0&&!c.signal.aborted)if(a>=GL)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else XB()}})()}let RQ=setInterval(()=>{let s=Date.now(),jQ=n!==null&&n-s<l;if(O===null){let oA=n!==null&&n-s<zQ;if((oA||CA&&!d)&&a<GL&&!c.signal.aborted)D(oA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),XB();return}if(q)return;if(!k||z.length>0)return;if(s-_<F)return;if(jQ)return;if(CA&&!d)return;D("idle conditions met → closing input gen"),BA(),q=!0,x?.(),x=null},USA);if(RQ.unref?.(),U)D("initialPrompt → injecting"),_=Date.now(),QQ(U),XB();let p0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(c.signal.aborted)return;if(D("bridge prompt received"),_=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});QQ(s.content),XB()}})(),(async()=>{for await(let s of V.controlRequests()){if(c.signal.aborted)return;switch(s.request.subtype){case"interrupt":D("bridge interrupt"),O?.interrupt();break;case"set_model":D(`bridge setModel=${s.request.model??"<default>"}`),O?.setModel(s.request.model);break;case"set_max_thinking_tokens":D(`bridge setMaxThinkingTokens=${s.request.max_thinking_tokens}`),O?.setMaxThinkingTokens(s.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let s of V.permissionResponses()){if(c.signal.aborted)return;let jQ=WSA(s,qA,V.sendControlCancelRequest);if(jQ)D(`permission response for unknown req=${jQ} (stale)`)}})()]),clearInterval(RQ),BB)clearInterval(BB);O?.close(),await RA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(s){_=Date.now(),QQ(s),XB()},async interrupt(){await O?.interrupt()},done:p0,teardown:RA}}}export{VSA as runAssistantWorker};
194
+ `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<POA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let E=this.refreshHeaders();Object.assign(this.headers,E),Z("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let B=Math.min(vOA*Math.pow(2,this.reconnectAttempts-1),_OA),I=Math.max(0,B+B*0.25*(2*Math.random()-1));Z(`SSETransport: Reconnecting in ${Math.round(I)}ms (attempt ${this.reconnectAttempts}, ${Math.round(Q/1000)}s elapsed)`),u("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}else Z(`SSETransport: Reconnection time budget exhausted after ${Math.round(Q/1000)}s`,{level:"error"}),u("error","cli_sse_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:Q}),this.state="closed",this.onCloseCallback?.()}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),u("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,TOA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),u("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":qU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=T4;I++){try{let C=await fQ.post(this.postUrl,A,{headers:B,validateStatus:hOA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${HA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),u("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${T4}`),u("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${YA(C)}, attempt ${I}/${T4}`),u("warn","cli_sse_post_network_error",{attempt:I})}if(I===T4){Z(`SSETransport: POST failed after ${T4} attempts, continuing`),u("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(bOA*Math.pow(2,I-1),yOA);await hB(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}}function uOA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}VQ();pQ();function Js(A){return{write:(Q)=>A.write(Q),writeBatch:(Q)=>A.writeBatch(Q),close:()=>A.close(),isConnectedStatus:()=>A.isConnectedStatus(),getStateLabel:()=>A.getStateLabel(),setOnData:(Q)=>A.setOnData(Q),setOnClose:(Q)=>A.setOnClose(Q),setOnConnect:(Q)=>A.setOnConnect(Q),connect:()=>void A.connect(),getLastSequenceNum:()=>0,get droppedBatchCount(){return A.droppedBatchCount},reportState:()=>{},reportMetadata:()=>{},reportDelivery:()=>{},flush:()=>Promise.resolve()}}async function Gs(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let X=C();if(!X)return{};return{Authorization:`Bearer ${X}`}};else KD(B);let J=A.epoch??await Km(Q,B);Z(`[bridge:repl] CCR v2: worker sessionId=${I} epoch=${J}${A.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let G=new URL(Q);G.pathname=G.pathname.replace(/\/$/,"")+"/worker/events/stream";let U=new IL(G,{},I,void 0,E,Y),F,N=new BL(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{Z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(X){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${YA(X)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((X)=>{N.reportDelivery(X.event_id,"received"),N.reportDelivery(X.event_id,"processed")});let D,W=!1,$=!1;return{write(X){return N.writeEvent(X)},async writeBatch(X){for(let V of X){if($)break;await N.writeEvent(V)}},close(){$=!0,N.close(),U.close()},isConnectedStatus(){return W},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return W?"connected":"init";return"connecting"},setOnData(X){U.setOnData(X)},setOnClose(X){F=X,U.setOnClose((V)=>{N.close(),X(V??4092)})},setOnConnect(X){D=X},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(X){N.reportState(X)},reportMetadata(X){N.reportMetadata(X)},reportDelivery(X,V){N.reportDelivery(X,V)},flush(){return N.flush()},getInternalEventWriter(){return(X,V,M)=>N.writeInternalEvent(X,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{W=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),D?.()},(X)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${YA(X)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}VQ();pQ();var cOA="2023-06-01",pOA="ccr-byoc-2025-07-29";async function Us({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return Z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await fQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:EL(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${YA(W)}`),null}if(N.status!==200&&N.status!==201){let W=HG(N.data);return Z(`[bridge] Session creation failed with status ${N.status}${W?`: ${W}`:""}`),null}let D=N.data;if(!D||typeof D!=="object"||!("id"in D)||typeof D.id!=="string")return Z("[bridge] No session ID in response"),null;return D.id}async function Fs(A,Q){let{baseUrl:B,getAccessToken:I,orgUUID:E}=Q,C=I();if(!C){Z("[bridge] No access token for session archive");return}let Y=`${B}/v1/sessions/${A}/archive`;Z(`[bridge] Archiving session ${A}`);try{let J=await fQ.post(Y,{},{headers:EL(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=HG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${YA(J)}`)}}async function V2(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-pr`),!1;let J=`${E}/v1/code/github/${A}-pr`,G={session_id:wD(Q),repo:B,pr_number:I},U;try{U=await fQ.post(J,G,{headers:EL(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${YA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=HG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function EL(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":cOA,"anthropic-beta":pOA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}IB();function Ns(A){let Q=new AbortController;function B(){Q.abort(),Q=new AbortController}function I(){let E=new AbortController,C=()=>E.abort();if(A.aborted||Q.signal.aborted)return E.abort(),{signal:E.signal,cleanup:()=>{}};A.addEventListener("abort",C,{once:!0});let Y=Q.signal;return Y.addEventListener("abort",C,{once:!0}),{signal:E.signal,cleanup:()=>{A.removeEventListener("abort",C),Y.removeEventListener("abort",C)}}}return{signal:I,wake:B}}class CL{_active=!1;_pending=[];get active(){return this._active}get pendingCount(){return this._pending.length}start(){this._active=!0}end(){return this._active=!1,this._pending.splice(0)}enqueue(...A){if(!this._active)return!1;return this._pending.push(...A),!0}drop(){this._active=!1;let A=this._pending.length;return this._pending.length=0,A}deactivate(){this._active=!1}}pQ();VQ();var QSA=2000,Ms=60000,Zs=900000,BSA=0;async function ws(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:D,getCurrentTitle:W=()=>Y,toSDKMessages:$=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:X,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>pN,initialHistoryCap:L=200,initialMessages:z,previouslyFlushedUUIDs:x,onInboundMessage:q,onPermissionResponse:O,onInterrupt:_,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:c,onInitError:qA,perpetual:p,initialSSESequenceNum:RA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:l}=A,zQ=++BSA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:CA}=await Promise.resolve().then(() => (Vs(),Ws)),nA=p?await CA(Q):null,zA=nA?.source==="repl"?nA:null;Z(`[bridge:repl] initBridgeCore #${zQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let QQ=Fm({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.107",onDebug:Z,onAuth401:X,getTrustedDeviceToken:V}),xQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Xs(),workerType:U,environmentId:Xs(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},WA,XB;try{let b=await QQ.registerBridgeEnvironment(xQ);WA=b.environment_id,XB=b.environment_secret}catch(b){if(Um("registration_failed",`[bridge:repl] Environment registration failed: ${YA(b)}`),qA?.(`[bridge:repl] Environment registration failed: ${YA(b)}`),zA&&b instanceof WE&&(b.status===410||b.status!==401&&WV(b.errorType)))await d(Q);return QA?.("failed",YA(b)),null}Z(`[bridge:repl] Environment registered: ${WA}`),u("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function RQ(b,FA){if(WA!==b)return Z(`[bridge:repl] Env mismatch (requested ${b}, got ${WA}) — cannot reconnect in place`),!1;let BQ=J3(FA),SA=BQ===FA?[FA]:[FA,BQ];for(let mQ of SA)try{return await QQ.reconnectSession(WA,mQ),Z(`[bridge:repl] Reconnected session ${mQ} in place on env ${WA}`),!0}catch(sI){Z(`[bridge:repl] reconnectSession(${mQ}) failed: ${YA(sI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let p0=zA?await RQ(zA.environmentId,zA.sessionId):!1;if(zA&&!p0)await d(Q);let VA,s=new Set;if(p0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&x)for(let b of z)x.add(b.uuid)}else{let b=await N({environmentId:WA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!b)return Z("[bridge:repl] Session creation failed, deregistering environment"),qA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await QQ.deregisterEnvironment(WA).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=b,Z(`[bridge:repl] Session created: ${VA}`)}c?.(VA),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),u("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:qx(),...Dm()});let jQ=new Set;if(z)for(let b of z)jQ.add(b.uuid);let oA=new VV(2000);for(let b of jQ)oA.add(b);let pA=new VV(2000),UB=new AbortController,IA=null,aI=0,MB=p0?RA:0,_Q=null,dQ=null,l0=Ns(UB.signal),rI=l0.wake,CI=l0.signal,vB=new CL,xE=!BA,tI=3,OI=0,RE=null;async function OU(){if(RE)return RE;RE=pC();try{return await RE}finally{RE=null}}async function pC(){if(OI++,aI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${OI}/${tI})`),OI>tI)return Z(`[bridge:repl] Environment reconnect limit reached (${tI}), giving up`),!1;if(IA){let SA=IA.getLastSequenceNum();if(SA>MB)MB=SA;l?.(),IA.close(),IA=null}if(rI(),vB.drop(),_Q){let SA=_Q;if(await QQ.stopWork(WA,SA,!1).catch(()=>{}),_Q!==SA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),OI=0,!0;_Q=null,dQ=null}if(UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let b=WA;xQ.reuseEnvironmentId=b;try{let SA=await QQ.registerBridgeEnvironment(xQ);WA=SA.environment_id,XB=SA.environment_secret}catch(SA){return xQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${YA(SA)}`),!1}if(xQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${b} got=${WA}`),UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await QQ.deregisterEnvironment(WA).catch(()=>{}),!1;if(IA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OI=0,!0;if(await RQ(b,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OI=0,!0;if(WA!==b)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await QQ.deregisterEnvironment(WA).catch(()=>{}),!1;let FA=W(),BQ=await N({environmentId:WA,title:FA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!BQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(UB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(BQ),!1;if(VA=BQ,Rm(wD(BQ)).catch(()=>{}),c?.(VA),MB=0,pA.clear(),xE=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),x?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let SA of s){let mQ=SA.lastIndexOf("#");V2("subscribe",VA,SA.slice(0,mQ),Number(SA.slice(mQ+1)),J,F)}}return OI=0,!0}function YI(){return F()}function i0(){let b=vB.end();if(b.length===0)return;if(!IA){Z(`[bridge:repl] Cannot drain ${b.length} pending message(s): no transport`);return}for(let SA of b)oA.add(SA.uuid);let BQ=$(b).map((SA)=>({...SA,session_id:VA}));Z(`[bridge:repl] Drained ${b.length} pending message(s) after flush`),IA.writeBatch(BQ)}let lC=null;function QJ(){lC?.()}function UL(b){if(Z(`[bridge:repl] Transport permanently closed: code=${b}`),rA("tengu_bridge_repl_ws_closed",{code:b}),IA){let BQ=IA.getLastSequenceNum();if(BQ>MB)MB=BQ;l?.(),IA=null}rI();let FA=vB.drop();if(FA>0)Z(`[bridge:repl] Dropping ${FA} pending message(s) on transport close (code=${b})`,{level:"warn"});if(b===1000){QA?.("failed","session ended"),UB.abort(),QJ();return}QA?.("reconnecting",`Remote Control connection lost (code ${b})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${b}), attempting env reconnect`),OU().then((BQ)=>{if(BQ)return;if(UB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:b}),QA?.("failed","reconnection failed"),QJ()})}let FL,Hs=null,Ls={api:QQ,getCredentials:()=>({environmentId:WA,environmentSecret:XB}),signal:UB.signal,getPollIntervalConfig:M,onStateChange:QA,getWsState:()=>IA?.getStateLabel()??"null",isAtCapacity:()=>IA!==null,capacitySignal:CI,onFatalError:QJ,getHeartbeatInfo:()=>{if(!_Q||!dQ)return null;return{environmentId:WA,workId:_Q,sessionToken:dQ}},onHeartbeatFatal:(b)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${b.status}) — tearing down work item for fast re-dispatch`),IA){let FA=IA.getLastSequenceNum();if(FA>MB)MB=FA;l?.(),IA.close(),IA=null}if(vB.drop(),_Q)QQ.stopWork(WA,_Q,!1).catch((FA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${YA(FA)}`)});_Q=null,dQ=null,rI(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await OU())return null;return{environmentId:WA,environmentSecret:XB}},onWorkReceived:(b,FA,BQ,SA)=>{if(IA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${BQ})`);if(Z(`[bridge:repl] Work received: workId=${BQ} workSessionId=${b} currentSessionId=${VA} match=${C3(b,VA)}`),n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),!C3(b,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${b}`);return}_Q=BQ,dQ=FA;let mQ=SA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),sI;if(!mQ){if(sI=YI(),!sI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}KD(sI)}if(rA("tengu_bridge_repl_work_received",{}),IA){l?.();let PQ=IA;IA=null;let uQ=PQ.getLastSequenceNum();if(uQ>MB)MB=uQ;PQ.close()}vB.deactivate();let Rs=(PQ)=>Mm(PQ,{transport:IA,sessionId:VA,onInterrupt:_,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA}),z2=!1,DL=(PQ)=>{if(IA=PQ,PQ.setOnConnect(()=>{if(IA!==PQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!mQ){let uQ=YI();if(uQ)KD(uQ)}if(w2=!1,!z2&&z&&z.length>0){z2=!0;let uQ=L,fB=z.filter((k4)=>I3(k4)&&!x?.has(k4.uuid)),sE=uQ>0&&fB.length>uQ?fB.slice(-uQ):fB;if(sE.length<fB.length)Z(`[bridge:repl] Capped initial flush: ${fB.length} -> ${sE.length} (cap=${uQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:fB.length,capped_count:sE.length});let iC=$(sE);if(iC.length>0){Z(`[bridge:repl] Flushing ${iC.length} initial message(s) via transport`);let k4=iC.map((BJ)=>({...BJ,session_id:VA})),$L=PQ.droppedBatchCount;PQ.writeBatch(k4).then(()=>{if(PQ.droppedBatchCount>$L){Z(`[bridge:repl] Initial flush dropped ${PQ.droppedBatchCount-$L} batch(es) — not marking ${iC.length} UUID(s) as flushed`);return}if(x){for(let BJ of iC)if(BJ.uuid)x.add(BJ.uuid)}}).catch((BJ)=>Z(`[bridge:repl] Initial flush failed: ${BJ}`)).finally(()=>{if(IA!==PQ)return;i0(),QA?.("connected")})}else i0(),QA?.("connected")}else if(!vB.active)QA?.("connected")}),PQ.setOnData((uQ)=>{Xm(uQ,oA,pA,q,O,Rs)}),Hs=UL,PQ.setOnClose((uQ)=>{if(IA!==PQ)return;UL(uQ)}),!z2&&z&&z.length>0)vB.start();PQ.connect()};if(aI++,mQ){let PQ=zm(J,b),uQ=aI;Z(`[bridge:repl] CCR v2: sessionUrl=${PQ} session=${b} gen=${uQ}`),Gs({sessionUrl:PQ,ingressToken:FA,sessionId:b,initialSequenceNum:MB}).then((fB)=>{if(UB.signal.aborted){fB.close();return}if(uQ!==aI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${aI}`),fB.close();return}if(DL(fB),fA){let sE=fB.getInternalEventWriter?.(),iC=fB.getInternalEventReaders?.();if(sE&&iC)fA(sE,iC)}},(fB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${YA(fB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==aI)return;if(_Q)QQ.stopWork(WA,_Q,!1).catch((sE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${YA(sE)}`)}),_Q=null,dQ=null;rI()})}else{let PQ=wm(G,b);Z(`[bridge:repl] Ingress URL: ${PQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${b}`);let uQ=sI??"";DL(Js(new AL(new URL(PQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},b,()=>({Authorization:`Bearer ${YI()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),rI()}})))}}};ISA(Ls);let M2=p?setInterval(()=>{if(RE)return;n(Q,{sessionId:VA,environmentId:WA,source:"repl"})},3600000):null;M2?.unref?.();let NL=M().session_keepalive_interval_v2_ms,Z2=NL>0?setInterval(()=>{if(!IA)return;Z("[bridge:repl] keep_alive sent"),IA.write({type:"keep_alive"}).catch((b)=>{Z(`[bridge:repl] keep_alive write failed: ${YA(b)}`)})},NL):null;Z2?.unref?.();let w2=!1;lC=async()=>{if(w2){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${WA} session=${VA}`);return}w2=!0,l?.();let b=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${WA} session=${VA} workId=${_Q??"none"} transportState=${IA?.getStateLabel()??"null"}`),M2!==null)clearInterval(M2);if(Z2!==null)clearInterval(Z2);if(FL)process.off("SIGUSR2",FL);if(UB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),IA){let SA=IA.getLastSequenceNum();if(SA>MB)MB=SA}if(p){IA=null,vB.drop(),await n(Q,{sessionId:VA,environmentId:WA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${WA} session=${VA} alive on server, duration=${Date.now()-b}ms`);return}let FA=IA;if(IA=null,vB.drop(),FA)FA.write(E3(VA));let BQ=_Q?QQ.stopWork(WA,_Q,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((SA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${YA(SA)}`)}):Promise.resolve();await Promise.all([BQ,D(VA)]),FA?.close(),Z("[bridge:repl] Teardown: transport closed"),await QQ.deregisterEnvironment(WA).catch((SA)=>{Z(`[bridge:repl] Teardown deregister failed: ${YA(SA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${WA} duration=${Date.now()-b}ms`)};let xs=B0(()=>lC?.());return Z(`[bridge:repl] Ready: env=${WA} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return WA},getSSESequenceNum(){let b=IA?.getLastSequenceNum()??0;return Math.max(MB,b)},sessionIngressUrl:G,writeMessages(b){let FA=b.filter((mQ)=>I3(mQ)&&!jQ.has(mQ.uuid)&&!oA.has(mQ.uuid));if(FA.length===0)return;if(!xE)for(let mQ of FA){let sI=Vm(mQ);if(sI!==void 0&&BA?.(sI,VA)){xE=!0;break}}if(vB.enqueue(...FA)){Z(`[bridge:repl] Queued ${FA.length} message(s) during initial flush`);return}if(!IA){let mQ=FA.map((sI)=>sI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${FA.length} message(s) [${mQ}] for session=${VA}`,{level:"warn"});return}for(let mQ of FA)oA.add(mQ.uuid);Z(`[bridge:repl] Sending ${FA.length} message(s) via transport`);let SA=$(FA).map((mQ)=>({...mQ,session_id:VA}));IA.writeBatch(SA)},writeSdkMessages(b){let FA=b.filter((SA)=>!SA.uuid||!oA.has(SA.uuid));if(FA.length===0)return;if(!IA){Z(`[bridge:repl] Transport not configured, dropping ${FA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let SA of FA)if(SA.uuid)oA.add(SA.uuid);let BQ=FA.map((SA)=>({...SA,session_id:VA}));IA.writeBatch(BQ)},sendControlRequest(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let FA={...b,session_id:VA};IA.write(FA),Z(`[bridge:repl] Sent control_request request_id=${b.request_id}`)},sendControlResponse(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let FA={...b,session_id:VA};IA.write(FA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(b){if(!IA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let FA={type:"control_cancel_request",request_id:b,session_id:VA};IA.write(FA),Z(`[bridge:repl] Sent control_cancel_request request_id=${b}`)},sendResult(){if(!IA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}IA.write(E3(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(b,FA){let BQ=await V2("subscribe",VA,b,FA,J,F);if(BQ)s.add(`${b}#${FA}`);return BQ},async unsubscribePR(b,FA){let BQ=await V2("unsubscribe",VA,b,FA,J,F);if(BQ)s.delete(`${b}#${FA}`);return BQ},async teardown(){xs(),await lC?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function ISA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>pN,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,X=null,V=null,M=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:x}=Q(),q=F();try{let O=await A.pollForWork(z,x,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,X=null,V=null,I?.("ready");if(!O){let k=L;if(L=!1,J?.()&&G&&!k){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let QA=a>0?Date.now()+a:null,BA=!1,c=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let p=F();if(p.non_exclusive_heartbeat_interval_ms<=0)break;let RA=N();if(!RA)break;let fA=G();try{await A.heartbeatWork(RA.environmentId,RA.workId,RA.sessionToken)}catch(l){if(Z(`[bridge:repl:heartbeat] Failed: ${YA(l)}`),l instanceof WE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:l.status,error_type:l.status===401||l.status===403?"auth_failed":"fatal"}),D)D(l),Z(`[bridge:repl:heartbeat] Fatal (status=${l.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}c++,await hB(p.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let qA=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":QA!==null&&Date.now()>=QA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:qA,heartbeat_cycles:c}),!BA){if(qA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${c} cycles — falling through to pollForWork`);continue}}let DA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(DA>0){let QA=G(),BA=Date.now();await hB(DA,QA.signal),QA.cleanup();let c=Date.now()-BA-DA;if(c>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(c/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:c}),L=!0}}else await hB(q.poll_interval_ms_not_at_capacity,B);continue}let _;try{_=Zm(O.secret)}catch(k){Z(`[bridge:repl] Failed to decode work secret: ${YA(k)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,O.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${O.id}`);try{await A.acknowledgeWork(z,O.id,_.session_ingress_token)}catch(k){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${YA(k)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let k=O.data.id;try{tB(k,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${k}`);continue}E(k,_.session_ingress_token,O.id,_.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof WE&&O.status===404&&C){let c=Q().environmentId;if(z!==c){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${c} — skipping onEnvironmentLost`),$=0,X=null;continue}if(M++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${M}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:M}),M>3){Z("[bridge:repl] Environment re-registration limit reached (3), giving up"),I?.("failed","Environment deleted and re-registration limit reached"),U?.();break}I?.("reconnecting","environment lost, recreating session");let qA=await C();if(B.aborted)break;if(qA){$=0,X=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${qA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof WE){let c=WV(O.errorType),qA=Nm(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${qA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),u(c?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!qA)I?.("failed",c?"session expired · /remote-control to reconnect":O.message);U?.();break}let _=Date.now();if(V!==null&&_-V>Ms*2)Z(`[bridge:repl] Detected system sleep (${Math.round((_-V)/1000)}s gap), resetting poll error budget`),u("info","bridge_repl_poll_sleep_detected",{gapMs:_-V}),$=0,X=null;if(V=_,$++,X===null)X=_;let k=_-X,a=Gm(O),DA=Jm(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(k/1000)}s, ws=${QA}): ${DA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:k}),$===1)I?.("reconnecting",DA);if(k>=Zs){Z(`[bridge:repl] Poll failures exceeded ${Zs/1000}s (${$} errors), giving up`),u("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:k,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(QSA*2**($-1),Ms);if(F().non_exclusive_heartbeat_interval_ms>0){let c=N?.();if(c)try{await A.heartbeatWork(c.environmentId,c.workId,c.sessionToken)}catch{}}await hB(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function ESA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function CSA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function YSA(A,Q){if(CSA(A,Q))return"http://localhost:4000";if(ESA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function zs(A,Q){let{toCompatSessionId:B}=vs(Hm),I=B(A);return`${YSA(I,Q)}/code/${I}`}VQ();async function Ks(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:D=!1,initialSSESequenceNum:W,onConflict:$}=A,X=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},L=[],z=null,x=[],q=null,O=[],_=null,k=!1,a=null,DA={detail:null},QA=JSA(),BA=()=>ws({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:X,onInitError:console.error,createSession:({environmentId:l,title:zQ,signal:n})=>Us({environmentId:l,title:zQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(l)=>Fs(l,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...pN,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(l){let zQ=CT(l);if(!zQ)return;L.push({content:zQ.content,uuid:zQ.uuid}),z?.(),z=null},onInterrupt(){x.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:l}}),q?.(),q=null},onSetMaxThinkingTokens(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:l}}),q?.(),q=null},onPermissionResponse(l){O.push(l),_?.(),_=null},onStateChange(l,zQ){if(a?.(l,zQ),l==="failed")DA.detail=zQ??"unknown failure",k=!0,z?.(),q?.(),_?.()}}),c=await BA();if(!c&&$&&DA.detail?.includes("409")){if(await $({machineName:QA,message:DA.detail})==="takeover")k=!1,DA.detail=null,c=await BA()}if(!c){let l=DA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${l}`),{ok:!1,error:{kind:DA.detail?.includes("409")?"conflict":DA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:l}}}async function*qA(){while(!k){while(L.length>0)if(yield L.shift(),k)return;await new Promise((l)=>{z=l})}}async function*p(){while(!k){while(x.length>0)if(yield x.shift(),k)return;await new Promise((l)=>{q=l})}}async function*RA(){while(!k){while(O.length>0)if(yield O.shift(),k)return;await new Promise((l)=>{_=l})}}return{ok:!0,handle:{get sessionUrl(){return zs(c.bridgeSessionId,V)},get environmentId(){return c.environmentId},get bridgeSessionId(){return c.bridgeSessionId},getSSESequenceNum(){return c.getSSESequenceNum()},hasPendingPrompts(){return L.length>0},write(l){c.writeSdkMessages([l])},sendResult(){c.sendResult()},sendControlRequest(l){c.sendControlRequest(l)},sendControlResponse(l){c.sendControlResponse(l)},sendControlCancelRequest(l){c.sendControlCancelRequest(l)},inboundPrompts:qA,controlRequests:p,permissionResponses:RA,onStateChange(l){a=l},async teardown(){k=!0,z?.(),q?.(),_?.(),await c.teardown()}}}}var USA=1000,FSA=1e4,NSA=5000,DSA=60000,GL=3;function $SA(A){if((A.type==="user"||A.type==="assistant")&&A.parent_tool_use_id!==null)return!1;if(A.type==="user"){let Q=A.message.content;if(!(Array.isArray(Q)&&Q.some((I)=>I.type==="tool_result")))return!1}return!0}function WSA(A,Q,B){let I=A.response?.request_id;if(!I)return null;let E=Q.get(I);if(!E)return I;Q.delete(I),B(I);let C=A.response;if(C.subtype==="success"&&ZL(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function VSA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let X=await Ks($);if(!X.ok)return D(`bridge connection failed: ${X.error.kind} — ${X.error.detail}`),{ok:!1,error:X.error};let V=X.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,L=V.bridgeSessionId,z=[],x=null,q=!1,O=null,_=0,k=!0,a=0,DA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};DA=DA.then(()=>G.save(s).catch((jQ)=>{D(`stateAdapter.save threw: ${jQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let c=new AbortController,qA=new Map,p=null;function RA(){return p??=(async()=>{BA();for(let s of qA.keys())V.sendControlCancelRequest(s);qA.clear(),await V.teardown(),await DA})()}if(N.addEventListener("abort",()=>{c.abort(),RA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await RA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,jQ)=>{if(D(`bridge state=${s} detail=${jQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==L)L=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${jQ??"unknown"}`),c.abort(),RA().catch((oA)=>D(`teardown threw: ${oA}`))});let l=I?.horizonMs??600000,zQ=I?.leadMs??NSA,n=null,d=!1,CA=!1,nA="";async function zA(){if(!I)return;let s=await BT(I.dir).catch((oA)=>{return D(`computeCronHorizon threw: ${oA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,CA=s.hasOverdue;let jQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(jQ!==nA)nA=jQ,D(jQ)}let BB;if(I)await zA(),BB=setInterval(zA,FSA),BB.unref?.();function QQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),x?.(),x=null}async function xQ(s,jQ,oA){if(C){let dQ=await C(s,jQ,oA);if(dQ)return Y?.(s,dQ),dQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let dQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,dQ),dQ}let pA=GSA();D(`permission request tool=${s} req=${pA}`);let{signal:UB,suggestions:IA,blockedPath:aI,toolUseID:MB}=oA;V.sendControlRequest({type:"control_request",request_id:pA,request:{subtype:"can_use_tool",tool_name:s,display_name:wL(s),input:jQ,tool_use_id:MB,...IA?{permission_suggestions:IA}:{},...aI?{blocked_path:aI}:{},..."decisionReason"in oA&&oA.decisionReason?{decision_reason:oA.decisionReason}:{},..."agentID"in oA&&oA.agentID?{agent_id:oA.agentID}:{}}});let _Q;try{let dQ=await new Promise((rI,CI)=>{qA.set(pA,rI),_Q=setTimeout((vB,xE,tI,OI,RE)=>{if(vB.delete(xE))tI(`permission timeout req=${xE}`),OI.sendControlCancelRequest(xE),RE({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},DSA,qA,pA,D,V,rI),_Q.unref?.(),UB.addEventListener("abort",()=>{if(qA.delete(pA))V.sendControlCancelRequest(pA);CI(Error("aborted"))},{once:!0})});D(`permission response req=${pA} behavior=${dQ.behavior}`);let l0=dQ.behavior==="allow"?{behavior:"allow",updatedInput:dQ.updatedInput,updatedPermissions:dQ.updatedPermissions}:{behavior:"deny",message:dQ.message??"Denied via remote control"};return Y?.(s,l0),l0}finally{if(_Q)clearTimeout(_Q);qA.delete(pA)}}let WA=!1;async function XB(){if(O!==null||WA||c.signal.aborted)return;if(WA=!0,q=!1,z.length>0)k=!1;async function*s(){while(!q){while(z.length>0)if(k=!1,yield z.shift(),q)return;await new Promise((pA)=>{x=pA})}}D(`spawning query resume=${M??"<fresh>"}`);let jQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(pA)=>D(`[child] ${pA.trimEnd()}`),canUseTool:xQ},oA;try{if(oA=await E(jQ),B)oA={...oA,env:{...oA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(pA){if(D(`buildQueryOptions threw: ${pA}`),WA=!1,a++,a>=GL)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!c.signal.aborted)XB();return}if(c.signal.aborted){WA=!1;return}try{O=RP({prompt:s(),options:oA})}finally{WA=!1}(async()=>{try{D("output pump started");for await(let pA of O){if(pA.type==="system"&&pA.subtype==="init"){if(pA.session_id!==M)M=pA.session_id,BA()}if(pA.type==="result")k=!0,a=0,d=!0,BA();if(!$SA(pA))continue;let UB=J?J(pA):pA;if(UB===null)continue;V.write(UB)}}catch(pA){D(`query threw: ${pA}`),a++}finally{D("output pump ended"),O=null;for(let pA of qA.keys())V.sendControlCancelRequest(pA);if(qA.clear(),z.length>0&&!c.signal.aborted)if(a>=GL)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else XB()}})()}let RQ=setInterval(()=>{let s=Date.now(),jQ=n!==null&&n-s<l;if(O===null){let oA=n!==null&&n-s<zQ;if((oA||CA&&!d)&&a<GL&&!c.signal.aborted)D(oA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),XB();return}if(q)return;if(!k||z.length>0)return;if(s-_<F)return;if(jQ)return;if(CA&&!d)return;D("idle conditions met → closing input gen"),BA(),q=!0,x?.(),x=null},USA);if(RQ.unref?.(),U)D("initialPrompt → injecting"),_=Date.now(),QQ(U),XB();let p0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(c.signal.aborted)return;if(D("bridge prompt received"),_=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});QQ(s.content),XB()}})(),(async()=>{for await(let s of V.controlRequests()){if(c.signal.aborted)return;switch(s.request.subtype){case"interrupt":D("bridge interrupt"),O?.interrupt();break;case"set_model":D(`bridge setModel=${s.request.model??"<default>"}`),O?.setModel(s.request.model);break;case"set_max_thinking_tokens":D(`bridge setMaxThinkingTokens=${s.request.max_thinking_tokens}`),O?.setMaxThinkingTokens(s.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let s of V.permissionResponses()){if(c.signal.aborted)return;let jQ=WSA(s,qA,V.sendControlCancelRequest);if(jQ)D(`permission response for unknown req=${jQ} (stale)`)}})()]),clearInterval(RQ),BB)clearInterval(BB);O?.close(),await RA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(s){_=Date.now(),QQ(s),XB()},async interrupt(){await O?.interrupt()},done:p0,teardown:RA}}}export{VSA as runAssistantWorker};