@anthropic-ai/claude-agent-sdk 0.2.94 → 0.2.96

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.94
3
+ // Version: 0.2.96
4
4
  import{createRequire as hr}from"node:module";var Pr=Object.create;var{getPrototypeOf:_r,defineProperty:DU,getOwnPropertyNames:vH,getOwnPropertyDescriptor:vr}=Object,TH=Object.prototype.hasOwnProperty;function bH(A){return this[A]}var Tr,br,SI=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?Tr??=new WeakMap:br??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?Pr(_r(A)):{};let Y=Q||!A||!A.__esModule?DU(B,"default",{value:A,enumerable:!0}):B;for(let J of vH(A))if(!TH.call(Y,J))DU(Y,J,{get:bH.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},kr=(A)=>{var Q=(_H??=new WeakMap).get(A),B;if(Q)return Q;if(Q=DU({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of vH(A))if(!TH.call(Q,I))DU(Q,I,{get:bH.bind(A,I),enumerable:!(B=vr(A,I))||B.enumerable})}return _H.set(A,Q),Q},_H,X=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var yr=(A)=>A;function fr(A,Q){this[A]=yr.bind(null,Q)}var eI=(A,Q)=>{for(var B in Q)DU(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:fr.bind(Q,B)})};var R=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var g=hr(import.meta.url),mr=Symbol.dispose||Symbol.for("Symbol.dispose"),cr=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),JQ=(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[cr];if(I===void 0)I=Q[mr];if(typeof I!=="function")throw TypeError("Object not disposable");A.push([B,I,Q])}else if(B)A.push([B]);return Q},GQ=(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 ir,yH;var fH=R(()=>{ir=typeof global=="object"&&global&&global.Object===Object&&global,yH=ir});var lr,dr,cY;var Z1=R(()=>{fH();lr=typeof self=="object"&&self&&self.Object===Object&&self,dr=yH||lr||Function("return this")(),cY=dr});var nr,uY;var t9=R(()=>{Z1();nr=cY.Symbol,uY=nr});function rr(A){var Q=or.call(A,VU),B=A[VU];try{A[VU]=void 0;var I=!0}catch(C){}var E=ar.call(A);if(I)if(Q)A[VU]=B;else delete A[VU];return E}var hH,or,ar,VU,mH;var cH=R(()=>{t9();hH=Object.prototype,or=hH.hasOwnProperty,ar=hH.toString,VU=uY?uY.toStringTag:void 0;mH=rr});function er(A){return sr.call(A)}var tr,sr,uH;var pH=R(()=>{tr=Object.prototype,sr=tr.toString;uH=er});function Bt(A){if(A==null)return A===void 0?Qt:At;return iH&&iH in Object(A)?mH(A):uH(A)}var At="[object Null]",Qt="[object Undefined]",iH,lH;var dH=R(()=>{t9();cH();pH();iH=uY?uY.toStringTag:void 0;lH=Bt});function It(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var z1;var s9=R(()=>{z1=It});function Gt(A){if(!z1(A))return!1;var Q=lH(A);return Q==Ct||Q==Yt||Q==Et||Q==Jt}var Et="[object AsyncFunction]",Ct="[object Function]",Yt="[object GeneratorFunction]",Jt="[object Proxy]",nH;var oH=R(()=>{dH();s9();nH=Gt});var Ut,K1;var aH=R(()=>{Z1();Ut=cY["__core-js_shared__"],K1=Ut});function Ft(A){return!!rH&&rH in A}var rH,tH;var sH=R(()=>{aH();rH=function(){var A=/[^.]+$/.exec(K1&&K1.keys&&K1.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();tH=Ft});function $t(A){if(A!=null){try{return Dt.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var Nt,Dt,eH;var AL=R(()=>{Nt=Function.prototype,Dt=Nt.toString;eH=$t});function Kt(A){if(!z1(A)||tH(A))return!1;var Q=nH(A)?zt:Vt;return Q.test(eH(A))}var Wt,Vt,wt,Mt,Xt,Zt,zt,QL;var BL=R(()=>{oH();sH();s9();AL();Wt=/[\\^$.*+?()[\]{}|]/g,Vt=/^\[object .+?Constructor\]$/,wt=Function.prototype,Mt=Object.prototype,Xt=wt.toString,Zt=Mt.hasOwnProperty,zt=RegExp("^"+Xt.call(Zt).replace(Wt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");QL=Kt});function Ht(A,Q){return A==null?void 0:A[Q]}var IL;var EL=R(()=>{IL=Ht});function Lt(A,Q){var B=IL(A,Q);return QL(B)?B:void 0}var H1;var e9=R(()=>{BL();EL();H1=Lt});var xt,nE;var wU=R(()=>{e9();xt=H1(Object,"create"),nE=xt});function gt(){this.__data__=nE?nE(null):{},this.size=0}var CL;var YL=R(()=>{wU();CL=gt});function Rt(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var JL;var GL=R(()=>{JL=Rt});function St(A){var Q=this.__data__;if(nE){var B=Q[A];return B===jt?void 0:B}return Ot.call(Q,A)?Q[A]:void 0}var jt="__lodash_hash_undefined__",qt,Ot,UL;var FL=R(()=>{wU();qt=Object.prototype,Ot=qt.hasOwnProperty;UL=St});function vt(A){var Q=this.__data__;return nE?Q[A]!==void 0:_t.call(Q,A)}var Pt,_t,NL;var DL=R(()=>{wU();Pt=Object.prototype,_t=Pt.hasOwnProperty;NL=vt});function bt(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=nE&&Q===void 0?Tt:Q,this}var Tt="__lodash_hash_undefined__",$L;var WL=R(()=>{wU();$L=bt});function pY(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 A2;var VL=R(()=>{YL();GL();FL();DL();WL();pY.prototype.clear=CL;pY.prototype.delete=JL;pY.prototype.get=UL;pY.prototype.has=NL;pY.prototype.set=$L;A2=pY});function kt(){this.__data__=[],this.size=0}var wL;var ML=R(()=>{wL=kt});function yt(A,Q){return A===Q||A!==A&&Q!==Q}var XL;var ZL=R(()=>{XL=yt});function ft(A,Q){var B=A.length;while(B--)if(XL(A[B][0],Q))return B;return-1}var kC;var MU=R(()=>{ZL();kC=ft});function ct(A){var Q=this.__data__,B=kC(Q,A);if(B<0)return!1;var I=Q.length-1;if(B==I)Q.pop();else mt.call(Q,B,1);return--this.size,!0}var ht,mt,zL;var KL=R(()=>{MU();ht=Array.prototype,mt=ht.splice;zL=ct});function ut(A){var Q=this.__data__,B=kC(Q,A);return B<0?void 0:Q[B][1]}var HL;var LL=R(()=>{MU();HL=ut});function pt(A){return kC(this.__data__,A)>-1}var xL;var gL=R(()=>{MU();xL=pt});function it(A,Q){var B=this.__data__,I=kC(B,A);if(I<0)++this.size,B.push([A,Q]);else B[I][1]=Q;return this}var RL;var jL=R(()=>{MU();RL=it});function iY(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 qL;var OL=R(()=>{ML();KL();LL();gL();jL();iY.prototype.clear=wL;iY.prototype.delete=zL;iY.prototype.get=HL;iY.prototype.has=xL;iY.prototype.set=RL;qL=iY});var lt,SL;var PL=R(()=>{e9();Z1();lt=H1(cY,"Map"),SL=lt});function dt(){this.size=0,this.__data__={hash:new A2,map:new(SL||qL),string:new A2}}var _L;var vL=R(()=>{VL();OL();PL();_L=dt});function nt(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var TL;var bL=R(()=>{TL=nt});function ot(A,Q){var B=A.__data__;return TL(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var yC;var XU=R(()=>{bL();yC=ot});function at(A){var Q=yC(this,A).delete(A);return this.size-=Q?1:0,Q}var kL;var yL=R(()=>{XU();kL=at});function rt(A){return yC(this,A).get(A)}var fL;var hL=R(()=>{XU();fL=rt});function tt(A){return yC(this,A).has(A)}var mL;var cL=R(()=>{XU();mL=tt});function st(A,Q){var B=yC(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var uL;var pL=R(()=>{XU();uL=st});function lY(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 Q2;var iL=R(()=>{vL();yL();hL();cL();pL();lY.prototype.clear=_L;lY.prototype.delete=kL;lY.prototype.get=fL;lY.prototype.has=mL;lY.prototype.set=uL;Q2=lY});function B2(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(et);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(B2.Cache||Q2),B}var et="Expected a function",gQ;var oE=R(()=>{iL();B2.Cache=Q2;gQ=B2});import{homedir as As}from"os";import{join as Qs}from"path";function I2(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=A.toLowerCase().trim();return["1","true","yes","on"].includes(Q)}function lL(){return!1}function dL(){return{namespace:void 0,cluster:void 0}}var fC;var wB=R(()=>{oE();fC=gQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??Qs(As(),".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 j(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 aE=()=>{};var E2=function(){let{crypto:A}=globalThis;if(A?.randomUUID)return E2=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 rE(A){return typeof A==="object"&&A!==null&&(("name"in A)&&A.name==="AbortError"||("message"in A)&&String(A.message).includes("FetchRequestCanceledException"))}var ZU=(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,MB,v0,zU,KU,HU,LU,xU,gU,RU,jU,qU;var hB=R(()=>{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 v0({message:B,cause:ZU(Q)});let E=Q,C=E?.error?.type;if(A===400)return new KU(A,E,B,I,C);if(A===401)return new HU(A,E,B,I,C);if(A===403)return new LU(A,E,B,I,C);if(A===404)return new xU(A,E,B,I,C);if(A===409)return new gU(A,E,B,I,C);if(A===422)return new RU(A,E,B,I,C);if(A===429)return new jU(A,E,B,I,C);if(A>=500)return new qU(A,E,B,I,C);return new EB(A,E,B,I,C)}};MB=class MB extends EB{constructor({message:A}={}){super(void 0,void 0,A||"Request was aborted.",void 0)}};v0=class v0 extends EB{constructor({message:A,cause:Q}){super(void 0,void 0,A||"Connection error.",void 0);if(Q)this.cause=Q}};zU=class zU extends v0{constructor({message:A}={}){super({message:A??"Request timed out."})}};KU=class KU extends EB{};HU=class HU extends EB{};LU=class LU extends EB{};xU=class xU extends EB{};gU=class gU extends EB{};RU=class RU extends EB{};jU=class jU extends EB{};qU=class qU extends EB{}});function L1(A){if(typeof A!=="object")return{};return A??{}}function J2(A){if(!A)return!0;for(let Q in A)return!1;return!0}function oL(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var Is,nL=(A)=>{return Is.test(A)},C2=(A)=>(C2=Array.isArray,C2(A)),Y2,aL=(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},x1=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var T0=R(()=>{hB();Is=/^[a-z][a-z0-9+.-]*:/i,Y2=C2});var rL=(A)=>new Promise((Q)=>setTimeout(Q,A));var hC="0.81.0";function Es(){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 Ys(){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 Ax=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},Cs=()=>{let A=Es();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":sL(Deno.build.os),"X-Stainless-Arch":tL(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":hC,"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":hC,"X-Stainless-OS":sL(globalThis.process.platform??"unknown"),"X-Stainless-Arch":tL(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=Ys();if(Q)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"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":hC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},tL=(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"},sL=(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"},eL,Qx=()=>{return eL??(eL=Cs())};var G2=()=>{};function Bx(){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 U2(...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 g1(A){let Q=Symbol.asyncIterator in A?A[Symbol.asyncIterator]():A[Symbol.iterator]();return U2({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 OU(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 Ix(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 Ex=({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 Yx=R(()=>{hB()});function Ux(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 SU(A){let Q;return(Jx??(Q=new globalThis.TextEncoder,Jx=Q.encode.bind(Q)))(A)}function F2(A){let Q;return(Gx??(Q=new globalThis.TextDecoder,Gx=Q.decode.bind(Q)))(A)}var Jx,Gx;class mC{constructor(){CI.set(this,void 0),YI.set(this,void 0),m(this,CI,new Uint8Array,"f"),m(this,YI,null,"f")}decode(A){if(A==null)return[];let Q=A instanceof ArrayBuffer?new Uint8Array(A):typeof A==="string"?SU(A):A;m(this,CI,Ux([j(this,CI,"f"),Q]),"f");let B=[],I;while((I=Us(j(this,CI,"f"),j(this,YI,"f")))!=null){if(I.carriage&&j(this,YI,"f")==null){m(this,YI,I.index,"f");continue}if(j(this,YI,"f")!=null&&(I.index!==j(this,YI,"f")+1||I.carriage)){B.push(F2(j(this,CI,"f").subarray(0,j(this,YI,"f")-1))),m(this,CI,j(this,CI,"f").subarray(j(this,YI,"f")),"f"),m(this,YI,null,"f");continue}let E=j(this,YI,"f")!==null?I.preceding-1:I.preceding,C=F2(j(this,CI,"f").subarray(0,E));B.push(C),m(this,CI,j(this,CI,"f").subarray(I.index),"f"),m(this,YI,null,"f")}return B}flush(){if(!j(this,CI,"f").length)return[];return this.decode(`
5
5
  `)}}function Us(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 Fx(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 CI,YI;var N2=R(()=>{aE();CI=new WeakMap,YI=new WeakMap;mC.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);mC.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function PU(){}function R1(A,Q,B){if(!Q||j1[A]>j1[B])return PU;else return Q[A].bind(Q)}function GB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return Fs;let I=Nx.get(Q);if(I&&I[0]===B)return I[1];let E={error:R1("error",Q,B),warn:R1("warn",Q,B),info:R1("info",Q,B),debug:R1("debug",Q,B)};return Nx.set(Q,[B,E]),E}var j1,D2=(A,Q,B)=>{if(!A)return;if(oL(j1,A))return A;GB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(j1))}`);return},Fs,Nx,tE=(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 q1=R(()=>{T0();j1={off:0,error:200,warn:300,info:400,debug:500};Fs={error:PU,warn:PU,info:PU,debug:PU},Nx=new WeakMap});async function*Ns(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 Dx,I=new mC,E=OU(A.body);for await(let C of Ds(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*Ds(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"?SU(B):B,E=new Uint8Array(Q.length+I.length);E.set(Q),E.set(I,Q.length),Q=E;let C;while((C=Fx(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class Dx{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(`
@@ -176,7 +176,7 @@ ${I.message}`:V,z=[H,Q,A].filter(Boolean).join(`
176
176
  `)){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});UQ();import{AsyncLocalStorage as s9A}from"async_hooks";var PAQ=new s9A;wB();function B2A(){return Of(fC(),"sessions")}var qf=Promise.resolve();async function I2A(A){let Q=Of(B2A(),`${process.pid}.json`),B=qf.then(async()=>{try{let I=lQ(await A2A(Q,"utf8"));await Q2A(Q,LA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${CA(I)}`)}});qf=B,await B}async function Sf(A){await I2A({bridgeSessionId:A})}bQ();oQ();BC();BC();bQ();wB();oQ();LE();import{mkdirSync as E2A,writeFileSync as C2A}from"fs";var iW="/home/claude/.claude/remote",WQQ=`${iW}/.oauth_token`,VQQ=`${iW}/.api_key`,lW=`${iW}/.session_ingress_token`;function Pf(A,Q,B){if(!sA(process.env.CLAUDE_CODE_REMOTE))return;try{E2A(iW,{recursive:!0,mode:448}),C2A(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): ${CA(I)}`,{level:"error"})}}function xK(A,Q){try{let I=sQ().readFileSync(A,{encoding:"utf8"}).trim();if(!I)return null;return Z(`Read ${Q} from well-known file ${A}`),I}catch(B){if(!EJ(B))Z(`Failed to read ${Q} from ${A}: ${CA(B)}`,{level:"debug"});return null}}bQ();oQ();LE();function Y2A(){let A=tx();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??lW,E=xK(I,"session ingress token");return JJ(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"}),JJ(null),null;try{let I=sQ(),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"}),JJ(null),null;return Z(`Successfully read token from file descriptor ${B}`),JJ(C),Pf(lW,C,"session ingress token"),C}catch(I){Z(`Failed to read token from file descriptor ${B}: ${CA(I)}`,{level:"error"});let E=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??lW,C=xK(E,"session ingress token");return JJ(C),C}}function BD(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return Y2A()}function dW(){let A=BD();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 ID(A){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=A}UQ();class CG extends Error{retryAfterMs;constructor(A,Q){super(A);this.retryAfterMs=Q}}class $Y{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 CG?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(LA(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 gK{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}}bQ();wB();oE();import{Agent as J2A}from"https";oE();bQ();wB();LE();var YG=gQ(()=>{let A=I2("--use-system-ca")||I2("--use-openssl-ca"),Q=process.env.NODE_EXTRA_CA_CERTS;if(Z(`CA certs: useSystemCA=${A}, extraCertsPath=${Q}`),!A&&!Q)return;let B=g("tls"),I=[];if(A){let E=B.getCACertificates,C=E?.("system");if(C&&C.length>0)I.push(...C),Z(`CA certs: Loaded ${I.length} system CA certificates (--use-system-ca)`);else if(!E&&!Q){Z("CA certs: --use-system-ca set but system CA API unavailable, deferring to runtime");return}else I.push(...B.rootCertificates),Z(`CA certs: Loaded ${I.length} bundled root certificates as base (--use-system-ca fallback)`)}else I.push(...B.rootCertificates),Z(`CA certs: Loaded ${I.length} bundled root certificates as base`);if(Q)try{let E=sQ().readFileSync(Q,{encoding:"utf8"});I.push(E),Z(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${Q})`)}catch(E){Z(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${Q}): ${E}`,{level:"error"})}return I.length>0?I:void 0});bQ();LE();var ED=gQ(()=>{let A={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{A.cert=sQ().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=sQ().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}),_f=gQ(()=>{let A=ED(),Q=YG();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return Z("mTLS: Creating HTTPS agent with custom certificates"),new J2A(B)});function RK(){let A=ED(),Q=YG();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}oE();var po=SI(of(),1);bQ();wB();function dxA(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 r7(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function nxA(A=process.env){return A.no_proxy||A.NO_PROXY}function t7(A,Q=nxA()){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 io(A,Q={}){let B=ED(),I=YG(),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,dxA(Y))};return new po.HttpsProxyAgent(A,{...E,...Q})}function lo(A={}){let Q=r7(),B=_f(),I=hQ.create({proxy:!1});if(!Q){if(B)I.defaults.httpsAgent=B;return I}let E=io(Q,A);return I.interceptors.request.use((C)=>{if(C.url&&t7(C.url))C.httpsAgent=B,C.httpAgent=B;else C.httpsAgent=E,C.httpAgent=E;return C}),I}var vIQ=gQ((A)=>{let Q=uo(),B=ED(),I=YG(),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 no(A){let Q=r7();if(!Q)return;if(t7(A))return;return io(Q)}function oo(A){let Q=r7();if(!Q)return;if(t7(A))return;return Q}GF();wB();var oxA=30000,e7=null,ao=0;var Y1=null,s7=null;function axA(){ro(),Y1=setInterval(()=>{if(l("debug","session_keepalive_heartbeat",{refcount:ao}),sA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))e7?.()},oxA)}function ro(){if(s7!==null)clearTimeout(s7),s7=null}function q9(A){if(e7=A,ao>0&&Y1===null)axA()}function J1(){if(e7=null,Y1!==null)clearInterval(Y1),Y1=null;ro()}UQ();var WRA=`{"type":"keep_alive"}
177
177
  `,VRA=1000,wRA=1000,Yr=30000,MRA=600000,XRA=1e4,ZRA=300000,Cr=Yr*2,zRA=new Set([1002,4001,4003]);class VH{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 gK(VRA)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){Z(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),l("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),Z(`WebSocketTransport: Opening ${this.url.href}`),l("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:oo(this.url.href),tls:RK()||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(() => (Er(),Ir)),B=new Q(this.url.href,{headers:A,agent:no(this.url.href),...RK()});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(),l("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onBunError=()=>{Z("WebSocketTransport: Error",{level:"error"}),l("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"}),l("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(),l("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onNodeError=(A)=>{Z(`WebSocketTransport: Error: ${A.message}`,{level:"error"}),l("error","cli_websocket_connect_error")};onNodeClose=(A,Q)=>{let B=A===1000||A===1001;Z(`WebSocketTransport: Closed: ${A}`,B?void 0:{level:"error"}),l("error","cli_websocket_connect_closed"),this.handleConnectionError(A)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let A=Date.now()-this.connectStartTime;if(Z("WebSocketTransport: Connected"),l("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(),q9(()=>{this.write({type:"keep_alive"})})}sendLine(A){if(!this.ws||this.state!=="connected")return Z("WebSocketTransport: Not connected"),l("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"}),l("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(),J1(),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})`:"")),l("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"),l("info","cli_websocket_4003_token_refreshed")}if(A!=null&&zRA.has(A)&&!Q){Z(`WebSocketTransport: Permanent close code ${A}, not reconnecting`,{level:"error"}),l("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>Cr)Z(`WebSocketTransport: Detected system sleep (${Math.round((B-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),l("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<MRA){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(wRA*Math.pow(2,this.reconnectAttempts-1),Yr),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)`),l("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"}),l("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(),J1(),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`),l("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"),l("info","cli_websocket_no_messages_to_replay");return}Z(`WebSocketTransport: Replaying ${I.length} buffered messages`),l("info","cli_websocket_messages_to_replay",{count:I.length});for(let E of I){let C=LA(E)+`
178
178
  `;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=LA(A)+`
179
- `;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>Cr){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),l("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"}),l("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),l("error","cli_websocket_ping_failed")}}},XRA)}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(WRA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),l("error","cli_websocket_keepalive_failed")}},ZRA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var KRA=100,HRA=15000,LRA=3000;class wH extends VH{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=xRA(A),this.uploader=new $Y({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{l("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}`),l("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(),KRA);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,LRA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=BD();if(!Q){Z("HybridTransport: No session token available for POST"),l("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await hQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:HRA})}catch(E){throw Z(`HybridTransport: POST error: ${CA(E)}`),l("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`),l("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),l("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function xRA(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 Ur}from"crypto";bQ();oQ();UQ();function gRA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return lQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Jr(A){let Q=gRA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}bQ();oQ();function aI(A,Q,B){return new Promise((I,E)=>{if(Q?.aborted){if(B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I();return}let C=setTimeout((J,G,U)=>{J?.removeEventListener("abort",G),U()},A,Q,Y,I);function Y(){if(clearTimeout(C),B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I()}if(Q?.addEventListener("abort",Y,{once:!0}),B?.unref)C.unref()})}function FU(){return"claude-code/0.2.94"}class MH{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Gr(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 aI(this.retryDelay(B)),this.pending&&!this.closed)Q=Gr(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 Gr(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 RRA=20000,jRA=100;function Fr(){return!0}class c9 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var qRA=10;function ORA(){return{byMessage:new Map,scopeToMessage:new Map}}function u9(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function SRA(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(u9(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(u9(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(u9(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 PRA(A,Q){A.byMessage.delete(Q.message.id);let B=u9(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class XH{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=lo({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=ORA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??RRA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??dW,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 MH({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 $Y({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 CG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new $Y({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 CG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new $Y({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 CG("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 c9("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 c9("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}},"PUT worker (init)")).ok)throw new c9("worker_register_failed");this.currentState="idle",this.startHeartbeat(),q9(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),l("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)l("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":FU()},validateStatus:Fr,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=BD(),G=J?Jr(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"}),l("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=qRA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),l("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),l("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: ${CA(Y)}`,{level:"warn"}),l("warn","cli_worker_request_error",{method:A,path:Q,error_code:QC(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,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),l("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(),jRA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")PRA(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:Ur()}}}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=SRA(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:Ur()},...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":FU()},validateStatus:Fr,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${CA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await aI(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 aI(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),l("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(),J1(),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()}}bQ();oQ();UQ();var _RA=1000,vRA=30000,TRA=600000,bRA=45000,kRA=new Set([401,403,404]),w1=10,yRA=500,fRA=8000,hRA={stream:!0};function mRA(){return!0}function cRA(A){let Q=[],B=0,I;while((I=A.indexOf(`
179
+ `;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>Cr){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),l("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"}),l("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),l("error","cli_websocket_ping_failed")}}},XRA)}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(WRA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),l("error","cli_websocket_keepalive_failed")}},ZRA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var KRA=100,HRA=15000,LRA=3000;class wH extends VH{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=xRA(A),this.uploader=new $Y({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{l("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}`),l("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(),KRA);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,LRA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=BD();if(!Q){Z("HybridTransport: No session token available for POST"),l("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await hQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:HRA})}catch(E){throw Z(`HybridTransport: POST error: ${CA(E)}`),l("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`),l("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),l("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function xRA(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 Ur}from"crypto";bQ();oQ();UQ();function gRA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return lQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Jr(A){let Q=gRA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}bQ();oQ();function aI(A,Q,B){return new Promise((I,E)=>{if(Q?.aborted){if(B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I();return}let C=setTimeout((J,G,U)=>{J?.removeEventListener("abort",G),U()},A,Q,Y,I);function Y(){if(clearTimeout(C),B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I()}if(Q?.addEventListener("abort",Y,{once:!0}),B?.unref)C.unref()})}function FU(){return"claude-code/0.2.96"}class MH{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Gr(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 aI(this.retryDelay(B)),this.pending&&!this.closed)Q=Gr(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 Gr(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 RRA=20000,jRA=100;function Fr(){return!0}class c9 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var qRA=10;function ORA(){return{byMessage:new Map,scopeToMessage:new Map}}function u9(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function SRA(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(u9(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(u9(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(u9(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 PRA(A,Q){A.byMessage.delete(Q.message.id);let B=u9(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class XH{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=lo({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=ORA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??RRA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??dW,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 MH({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 $Y({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 CG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new $Y({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 CG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new $Y({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 CG("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 c9("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 c9("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}},"PUT worker (init)")).ok)throw new c9("worker_register_failed");this.currentState="idle",this.startHeartbeat(),q9(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),l("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)l("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":FU()},validateStatus:Fr,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=BD(),G=J?Jr(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"}),l("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=qRA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),l("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),l("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: ${CA(Y)}`,{level:"warn"}),l("warn","cli_worker_request_error",{method:A,path:Q,error_code:QC(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,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),l("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(),jRA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")PRA(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:Ur()}}}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=SRA(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:Ur()},...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":FU()},validateStatus:Fr,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${CA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await aI(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 aI(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),l("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(),J1(),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()}}bQ();oQ();UQ();var _RA=1000,vRA=30000,TRA=600000,bRA=45000,kRA=new Set([401,403,404]),w1=10,yRA=500,fRA=8000,hRA={stream:!0};function mRA(){return!0}function cRA(A){let Q=[],B=0,I;while((I=A.indexOf(`
180
180
 
181
181
  `,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(`
182
182
  `)){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+`
@@ -186,4 +186,4 @@ ${I.message}`:V,z=[H,Q,A].filter(Boolean).join(`
186
186
  `);if(I.push(J),!G){E=J.endsWith(`
187
187
  `);continue}let{frames:U,remaining:F}=cRA(I.join(""));I=F?[F]:[],E=F.endsWith(`
188
188
  `);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"}),l("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"}),l("warn","cli_sse_frame_missing_event_field")}}}catch(C){if(this.abortController?.signal.aborted)return;Z(`SSETransport: Stream read error: ${CA(C)}`,{level:"error"}),l("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"}),l("warn","cli_sse_unexpected_event_type",{event_type:A});return}let B;try{B=lQ(Q)}catch(E){Z(`SSETransport: Failed to parse client_event data: ${CA(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}`),l("info","cli_sse_message_received"),this.onData?.(LA(I)+`
189
- `)}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<TRA){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(_RA*Math.pow(2,this.reconnectAttempts-1),vRA),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)`),l("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"}),l("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"}),l("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,bRA)}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"),l("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":FU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=w1;I++){try{let C=await hQ.post(this.postUrl,A,{headers:B,validateStatus:mRA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${LA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),l("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${w1}`),l("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${CA(C)}, attempt ${I}/${w1}`),l("warn","cli_sse_post_network_error",{attempt:I})}if(I===w1){Z(`SSETransport: POST failed after ${w1} attempts, continuing`),l("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(yRA*Math.pow(2,I-1),fRA);await aI(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 uRA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}bQ();oQ();function Nr(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 Dr(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let w=C();if(!w)return{};return{Authorization:`Bearer ${w}`}};else ID(B);let J=A.epoch??await dk(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 ZH(G,{},I,void 0,E,Y),F,N=new XH(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(w){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${CA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{N.reportDelivery(w.event_id,"received"),N.reportDelivery(w.event_id,"processed")});let D,W=!1,$=!1;return{write(w){return N.writeEvent(w)},async writeBatch(w){for(let V of w){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(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{N.close(),w(V??4092)})},setOnConnect(w){D=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w){N.reportState(w)},reportMetadata(w){N.reportMetadata(w)},reportDelivery(w,V){N.reportDelivery(w,V)},flush(){return N.flush()},getInternalEventWriter(){return(w,V,M)=>N.writeInternalEvent(w,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?.()},(w)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${CA(w)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}bQ();oQ();var pRA="2023-06-01",iRA="ccr-byoc-2025-07-29";async function $r({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 hQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:zH(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${CA(W)}`),null}if(N.status!==200&&N.status!==201){let W=BG(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 Wr(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 hQ.post(Y,{},{headers:zH(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=BG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${CA(J)}`)}}async function p9(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:tN(Q),repo:B,pr_number:I},U;try{U=await hQ.post(J,G,{headers:zH(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${CA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=BG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function zH(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":pRA,"anthropic-beta":iRA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}wB();function Vr(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 KH{_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}}oQ();bQ();var BjA=2000,Kr=60000,Hr=900000,IjA=0;async function Lr(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:w,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>ON,initialHistoryCap:H=200,initialMessages:z,previouslyFlushedUUIDs:L,onInboundMessage:q,onPermissionResponse:O,onInterrupt:_,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:NA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:u,onInitError:jA,perpetual:c,initialSSESequenceNum:HA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:p}=A,MQ=++IjA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:xA}=await Promise.resolve().then(() => (Zr(),Xr)),kA=c?await xA(Q):null,zA=kA?.source==="repl"?kA:null;Z(`[bridge:repl] initBridgeCore #${MQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let CQ=bk({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.94",onDebug:Z,onAuth401:w,getTrustedDeviceToken:V}),HQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:zr(),workerType:U,environmentId:zr(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},DA,WB;try{let k=await CQ.registerBridgeEnvironment(HQ);DA=k.environment_id,WB=k.environment_secret}catch(k){if(Tk("registration_failed",`[bridge:repl] Environment registration failed: ${CA(k)}`),jA?.(`[bridge:repl] Environment registration failed: ${CA(k)}`),zA&&k instanceof FE&&(k.status===410||k.status!==401&&OW(k.errorType)))await d(Q);return QA?.("failed",CA(k)),null}Z(`[bridge:repl] Environment registered: ${DA}`),l("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function PQ(k,UA){if(DA!==k)return Z(`[bridge:repl] Env mismatch (requested ${k}, got ${DA}) — cannot reconnect in place`),!1;let QQ=p5(UA),OA=QQ===UA?[UA]:[UA,QQ];for(let uQ of OA)try{return await CQ.reconnectSession(DA,uQ),Z(`[bridge:repl] Reconnected session ${uQ} in place on env ${DA}`),!0}catch(sI){Z(`[bridge:repl] reconnectSession(${uQ}) failed: ${CA(sI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let _0=zA?await PQ(zA.environmentId,zA.sessionId):!1;if(zA&&!_0)await d(Q);let VA,s=new Set;if(_0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&L)for(let k of z)L.add(k.uuid)}else{let k=await N({environmentId:DA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!k)return Z("[bridge:repl] Session creation failed, deregistering environment"),jA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await CQ.deregisterEnvironment(DA).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=k,Z(`[bridge:repl] Session created: ${VA}`)}u?.(VA),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),l("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:lL(),...yk()});let LQ=new Set;if(z)for(let k of z)LQ.add(k.uuid);let nA=new SW(2000);for(let k of LQ)nA.add(k);let iA=new SW(2000),VB=new AbortController,EA=null,jI=0,_Q=_0?HA:0,xQ=null,cQ=null,rI=Vr(VB.signal),tI=rI.wake,NU=rI.signal,II=new KH,qI=!BA,EI=3,OI=0,zE=null;async function gH(){if(zE)return zE;zE=Rr();try{return await zE}finally{zE=null}}async function Rr(){if(OI++,jI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${OI}/${EI})`),OI>EI)return Z(`[bridge:repl] Environment reconnect limit reached (${EI}), giving up`),!1;if(EA){let OA=EA.getLastSequenceNum();if(OA>_Q)_Q=OA;p?.(),EA.close(),EA=null}if(tI(),II.drop(),xQ){let OA=xQ;if(await CQ.stopWork(DA,OA,!1).catch(()=>{}),xQ!==OA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),OI=0,!0;xQ=null,cQ=null}if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let k=DA;HQ.reuseEnvironmentId=k;try{let OA=await CQ.registerBridgeEnvironment(HQ);DA=OA.environment_id,WB=OA.environment_secret}catch(OA){return HQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${CA(OA)}`),!1}if(HQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${k} got=${DA}`),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await CQ.deregisterEnvironment(DA).catch(()=>{}),!1;if(EA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OI=0,!0;if(await PQ(k,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OI=0,!0;if(DA!==k)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await CQ.deregisterEnvironment(DA).catch(()=>{}),!1;let UA=W(),QQ=await N({environmentId:DA,title:UA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!QQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(QQ),!1;if(VA=QQ,Sf(tN(QQ)).catch(()=>{}),u?.(VA),_Q=0,iA.clear(),qI=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),L?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let OA of s){let uQ=OA.lastIndexOf("#");p9("subscribe",VA,OA.slice(0,uQ),Number(OA.slice(uQ+1)),J,F)}}return OI=0,!0}function l9(){return F()}function RH(){let k=II.end();if(k.length===0)return;if(!EA){Z(`[bridge:repl] Cannot drain ${k.length} pending message(s): no transport`);return}for(let OA of k)nA.add(OA.uuid);let QQ=$(k).map((OA)=>({...OA,session_id:VA}));Z(`[bridge:repl] Drained ${k.length} pending message(s) after flush`),EA.writeBatch(QQ)}let M1=null;function d9(){M1?.()}function jH(k){if(Z(`[bridge:repl] Transport permanently closed: code=${k}`),rA("tengu_bridge_repl_ws_closed",{code:k}),EA){let QQ=EA.getLastSequenceNum();if(QQ>_Q)_Q=QQ;p?.(),EA=null}tI();let UA=II.drop();if(UA>0)Z(`[bridge:repl] Dropping ${UA} pending message(s) on transport close (code=${k})`,{level:"warn"});if(k===1000){QA?.("failed","session ended"),VB.abort(),d9();return}QA?.("reconnecting",`Remote Control connection lost (code ${k})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${k}), attempting env reconnect`),gH().then((QQ)=>{if(QQ)return;if(VB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:k}),QA?.("failed","reconnection failed"),d9()})}let qH,jr=null,qr={api:CQ,getCredentials:()=>({environmentId:DA,environmentSecret:WB}),signal:VB.signal,getPollIntervalConfig:M,onStateChange:QA,getWsState:()=>EA?.getStateLabel()??"null",isAtCapacity:()=>EA!==null,capacitySignal:NU,onFatalError:d9,getHeartbeatInfo:()=>{if(!xQ||!cQ)return null;return{environmentId:DA,workId:xQ,sessionToken:cQ}},onHeartbeatFatal:(k)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${k.status}) — tearing down work item for fast re-dispatch`),EA){let UA=EA.getLastSequenceNum();if(UA>_Q)_Q=UA;p?.(),EA.close(),EA=null}if(II.drop(),xQ)CQ.stopWork(DA,xQ,!1).catch((UA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${CA(UA)}`)});xQ=null,cQ=null,tI(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await gH())return null;return{environmentId:DA,environmentSecret:WB}},onWorkReceived:(k,UA,QQ,OA)=>{if(EA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${QQ})`);if(Z(`[bridge:repl] Work received: workId=${QQ} workSessionId=${k} currentSessionId=${VA} match=${c5(k,VA)}`),n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),!c5(k,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${k}`);return}xQ=QQ,cQ=UA;let uQ=OA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),sI;if(!uQ){if(sI=l9(),!sI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}ID(sI)}if(rA("tengu_bridge_repl_work_received",{}),EA){p?.();let vQ=EA;EA=null;let pQ=vQ.getLastSequenceNum();if(pQ>_Q)_Q=pQ;vQ.close()}II.deactivate();let Sr=(vQ)=>uk(vQ,{transport:EA,sessionId:VA,onInterrupt:_,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:NA}),r9=!1,SH=(vQ)=>{if(EA=vQ,vQ.setOnConnect(()=>{if(EA!==vQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!uQ){let pQ=l9();if(pQ)ID(pQ)}if(a9=!1,!r9&&z&&z.length>0){r9=!0;let pQ=H,yB=z.filter((X1)=>h5(X1)&&!L?.has(X1.uuid)),dE=pQ>0&&yB.length>pQ?yB.slice(-pQ):yB;if(dE.length<yB.length)Z(`[bridge:repl] Capped initial flush: ${yB.length} -> ${dE.length} (cap=${pQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:yB.length,capped_count:dE.length});let bC=$(dE);if(bC.length>0){Z(`[bridge:repl] Flushing ${bC.length} initial message(s) via transport`);let X1=bC.map((mY)=>({...mY,session_id:VA})),PH=vQ.droppedBatchCount;vQ.writeBatch(X1).then(()=>{if(vQ.droppedBatchCount>PH){Z(`[bridge:repl] Initial flush dropped ${vQ.droppedBatchCount-PH} batch(es) — not marking ${bC.length} UUID(s) as flushed`);return}if(L){for(let mY of bC)if(mY.uuid)L.add(mY.uuid)}}).catch((mY)=>Z(`[bridge:repl] Initial flush failed: ${mY}`)).finally(()=>{if(EA!==vQ)return;RH(),QA?.("connected")})}else RH(),QA?.("connected")}else if(!II.active)QA?.("connected")}),vQ.setOnData((pQ)=>{ck(pQ,nA,iA,q,O,Sr)}),jr=jH,vQ.setOnClose((pQ)=>{if(EA!==vQ)return;jH(pQ)}),!r9&&z&&z.length>0)II.start();vQ.connect()};if(jI++,uQ){let vQ=lk(J,k),pQ=jI;Z(`[bridge:repl] CCR v2: sessionUrl=${vQ} session=${k} gen=${pQ}`),Dr({sessionUrl:vQ,ingressToken:UA,sessionId:k,initialSequenceNum:_Q}).then((yB)=>{if(VB.signal.aborted){yB.close();return}if(pQ!==jI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${pQ} current=${jI}`),yB.close();return}if(SH(yB),fA){let dE=yB.getInternalEventWriter?.(),bC=yB.getInternalEventReaders?.();if(dE&&bC)fA(dE,bC)}},(yB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${CA(yB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),pQ!==jI)return;if(xQ)CQ.stopWork(DA,xQ,!1).catch((dE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${CA(dE)}`)}),xQ=null,cQ=null;tI()})}else{let vQ=ik(G,k);Z(`[bridge:repl] Ingress URL: ${vQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${k}`);let pQ=sI??"";SH(Nr(new wH(new URL(vQ),{Authorization:`Bearer ${pQ}`,"anthropic-version":"2023-06-01"},k,()=>({Authorization:`Bearer ${l9()??pQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),tI()}})))}}};EjA(qr);let n9=c?setInterval(()=>{if(zE)return;n(Q,{sessionId:VA,environmentId:DA,source:"repl"})},3600000):null;n9?.unref?.();let OH=M().session_keepalive_interval_v2_ms,o9=OH>0?setInterval(()=>{if(!EA)return;Z("[bridge:repl] keep_alive sent"),EA.write({type:"keep_alive"}).catch((k)=>{Z(`[bridge:repl] keep_alive write failed: ${CA(k)}`)})},OH):null;o9?.unref?.();let a9=!1;M1=async()=>{if(a9){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${DA} session=${VA}`);return}a9=!0,p?.();let k=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${DA} session=${VA} workId=${xQ??"none"} transportState=${EA?.getStateLabel()??"null"}`),n9!==null)clearInterval(n9);if(o9!==null)clearInterval(o9);if(qH)process.off("SIGUSR2",qH);if(VB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),EA){let OA=EA.getLastSequenceNum();if(OA>_Q)_Q=OA}if(c){EA=null,II.drop(),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${DA} session=${VA} alive on server, duration=${Date.now()-k}ms`);return}let UA=EA;if(EA=null,II.drop(),UA)UA.write(m5(VA));let QQ=xQ?CQ.stopWork(DA,xQ,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((OA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${CA(OA)}`)}):Promise.resolve();await Promise.all([QQ,D(VA)]),UA?.close(),Z("[bridge:repl] Teardown: transport closed"),await CQ.deregisterEnvironment(DA).catch((OA)=>{Z(`[bridge:repl] Teardown deregister failed: ${CA(OA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${DA} duration=${Date.now()-k}ms`)};let Or=GJ(()=>M1?.());return Z(`[bridge:repl] Ready: env=${DA} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return DA},getSSESequenceNum(){let k=EA?.getLastSequenceNum()??0;return Math.max(_Q,k)},sessionIngressUrl:G,writeMessages(k){let UA=k.filter((uQ)=>h5(uQ)&&!LQ.has(uQ.uuid)&&!nA.has(uQ.uuid));if(UA.length===0)return;if(!qI)for(let uQ of UA){let sI=mk(uQ);if(sI!==void 0&&BA?.(sI,VA)){qI=!0;break}}if(II.enqueue(...UA)){Z(`[bridge:repl] Queued ${UA.length} message(s) during initial flush`);return}if(!EA){let uQ=UA.map((sI)=>sI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${UA.length} message(s) [${uQ}] for session=${VA}`,{level:"warn"});return}for(let uQ of UA)nA.add(uQ.uuid);Z(`[bridge:repl] Sending ${UA.length} message(s) via transport`);let OA=$(UA).map((uQ)=>({...uQ,session_id:VA}));EA.writeBatch(OA)},writeSdkMessages(k){let UA=k.filter((OA)=>!OA.uuid||!nA.has(OA.uuid));if(UA.length===0)return;if(!EA){Z(`[bridge:repl] Transport not configured, dropping ${UA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let OA of UA)if(OA.uuid)nA.add(OA.uuid);let QQ=UA.map((OA)=>({...OA,session_id:VA}));EA.writeBatch(QQ)},sendControlRequest(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let UA={...k,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_request request_id=${k.request_id}`)},sendControlResponse(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let UA={...k,session_id:VA};EA.write(UA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let UA={type:"control_cancel_request",request_id:k,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_cancel_request request_id=${k}`)},sendResult(){if(!EA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}EA.write(m5(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(k,UA){let QQ=await p9("subscribe",VA,k,UA,J,F);if(QQ)s.add(`${k}#${UA}`);return QQ},async unsubscribePR(k,UA){let QQ=await p9("unsubscribe",VA,k,UA,J,F);if(QQ)s.delete(`${k}#${UA}`);return QQ},async teardown(){Or(),await M1?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function EjA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>ON,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,w=null,V=null,M=0,H=!1;while(!B.aborted){let{environmentId:z,environmentSecret:L}=Q(),q=F();try{let O=await A.pollForWork(z,L,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,w=null,V=null,I?.("ready");if(!O){let b=H;if(H=!1,J?.()&&G&&!b){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,u=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let c=F();if(c.non_exclusive_heartbeat_interval_ms<=0)break;let HA=N();if(!HA)break;let fA=G();try{await A.heartbeatWork(HA.environmentId,HA.workId,HA.sessionToken)}catch(p){if(Z(`[bridge:repl:heartbeat] Failed: ${CA(p)}`),p instanceof FE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:p.status,error_type:p.status===401||p.status===403?"auth_failed":"fatal"}),D)D(p),Z(`[bridge:repl:heartbeat] Fatal (status=${p.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}u++,await aI(c.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let jA=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:jA,heartbeat_cycles:u}),!BA){if(jA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${u} cycles — falling through to pollForWork`);continue}}let NA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(NA>0){let QA=G(),BA=Date.now();await aI(NA,QA.signal),QA.cleanup();let u=Date.now()-BA-NA;if(u>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(u/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:u}),H=!0}}else await aI(q.poll_interval_ms_not_at_capacity,B);continue}let _;try{_=pk(O.secret)}catch(b){Z(`[bridge:repl] Failed to decode work secret: ${CA(b)}`),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(b){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${CA(b)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let b=O.data.id;try{aB(b,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${b}`);continue}E(b,_.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 FE&&O.status===404&&C){let u=Q().environmentId;if(z!==u){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${u} — skipping onEnvironmentLost`),$=0,w=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 jA=await C();if(B.aborted)break;if(jA){$=0,w=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${jA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof FE){let u=OW(O.errorType),jA=kk(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${jA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),l(u?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!jA)I?.("failed",u?"session expired · /remote-control to reconnect":O.message);U?.();break}let _=Date.now();if(V!==null&&_-V>Kr*2)Z(`[bridge:repl] Detected system sleep (${Math.round((_-V)/1000)}s gap), resetting poll error budget`),l("info","bridge_repl_poll_sleep_detected",{gapMs:_-V}),$=0,w=null;if(V=_,$++,w===null)w=_;let b=_-w,a=vk(O),NA=_k(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(b/1000)}s, ws=${QA}): ${NA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:b}),$===1)I?.("reconnecting",NA);if(b>=Hr){Z(`[bridge:repl] Poll failures exceeded ${Hr/1000}s (${$} errors), giving up`),l("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:b,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(BjA*2**($-1),Kr);if(F().non_exclusive_heartbeat_interval_ms>0){let u=N?.();if(u)try{await A.heartbeatWork(u.environmentId,u.workId,u.sessionToken)}catch{}}await aI(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function CjA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function YjA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function JjA(A,Q){if(YjA(A,Q))return"http://localhost:4000";if(CjA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function xr(A,Q){let{toCompatSessionId:B}=kr(nk),I=B(A);return`${JjA(I,Q)}/code/${I}`}bQ();async function gr(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,w=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},H=[],z=null,L=[],q=null,O=[],_=null,b=!1,a=null,NA={detail:null},QA=GjA(),BA=()=>Lr({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:w,onInitError:console.error,createSession:({environmentId:p,title:MQ,signal:n})=>$r({environmentId:p,title:MQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(p)=>Wr(p,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...ON,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(p){let MQ=Av(p);if(!MQ)return;H.push({content:MQ.content,uuid:MQ.uuid}),z?.(),z=null},onInterrupt(){L.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(p){L.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:p}}),q?.(),q=null},onSetMaxThinkingTokens(p){L.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:p}}),q?.(),q=null},onPermissionResponse(p){O.push(p),_?.(),_=null},onStateChange(p,MQ){if(a?.(p,MQ),p==="failed")NA.detail=MQ??"unknown failure",b=!0,z?.(),q?.(),_?.()}}),u=await BA();if(!u&&$&&NA.detail?.includes("409")){if(await $({machineName:QA,message:NA.detail})==="takeover")b=!1,NA.detail=null,u=await BA()}if(!u){let p=NA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${p}`),{ok:!1,error:{kind:NA.detail?.includes("409")?"conflict":NA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:p}}}async function*jA(){while(!b){while(H.length>0)if(yield H.shift(),b)return;await new Promise((p)=>{z=p})}}async function*c(){while(!b){while(L.length>0)if(yield L.shift(),b)return;await new Promise((p)=>{q=p})}}async function*HA(){while(!b){while(O.length>0)if(yield O.shift(),b)return;await new Promise((p)=>{_=p})}}return{ok:!0,handle:{get sessionUrl(){return xr(u.bridgeSessionId,V)},get environmentId(){return u.environmentId},get bridgeSessionId(){return u.bridgeSessionId},getSSESequenceNum(){return u.getSSESequenceNum()},hasPendingPrompts(){return H.length>0},write(p){u.writeSdkMessages([p])},sendResult(){u.sendResult()},sendControlRequest(p){u.sendControlRequest(p)},sendControlResponse(p){u.sendControlResponse(p)},sendControlCancelRequest(p){u.sendControlCancelRequest(p)},inboundPrompts:jA,controlRequests:c,permissionResponses:HA,onStateChange(p){a=p},async teardown(){b=!0,z?.(),q?.(),_?.(),await u.teardown()}}}}var FjA=1000,NjA=1e4,DjA=5000,$jA=60000,xH=3;function WjA(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 VjA(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"&&kH(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function wjA(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 w=await gr($);if(!w.ok)return D(`bridge connection failed: ${w.error.kind} — ${w.error.detail}`),{ok:!1,error:w.error};let V=w.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,H=V.bridgeSessionId,z=[],L=null,q=!1,O=null,_=0,b=!0,a=0,NA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};NA=NA.then(()=>G.save(s).catch((LQ)=>{D(`stateAdapter.save threw: ${LQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let u=new AbortController,jA=new Map,c=null;function HA(){return c??=(async()=>{BA();for(let s of jA.keys())V.sendControlCancelRequest(s);jA.clear(),await V.teardown(),await NA})()}if(N.addEventListener("abort",()=>{u.abort(),HA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await HA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,LQ)=>{if(D(`bridge state=${s} detail=${LQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==H)H=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${LQ??"unknown"}`),u.abort(),HA().catch((nA)=>D(`teardown threw: ${nA}`))});let p=I?.horizonMs??600000,MQ=I?.leadMs??DjA,n=null,d=!1,xA=!1,kA="";async function zA(){if(!I)return;let s=await t_(I.dir).catch((nA)=>{return D(`computeCronHorizon threw: ${nA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,xA=s.hasOverdue;let LQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(LQ!==kA)kA=LQ,D(LQ)}let SQ;if(I)await zA(),SQ=setInterval(zA,NjA),SQ.unref?.();function CQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),L?.(),L=null}async function HQ(s,LQ,nA){if(C){let cQ=await C(s,LQ,nA);if(cQ)return Y?.(s,cQ),cQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let cQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,cQ),cQ}let iA=UjA();D(`permission request tool=${s} req=${iA}`);let{signal:VB,suggestions:EA,blockedPath:jI,toolUseID:_Q}=nA;V.sendControlRequest({type:"control_request",request_id:iA,request:{subtype:"can_use_tool",tool_name:s,input:LQ,tool_use_id:_Q,...EA?{permission_suggestions:EA}:{},...jI?{blocked_path:jI}:{},..."decisionReason"in nA&&nA.decisionReason?{decision_reason:nA.decisionReason}:{},..."agentID"in nA&&nA.agentID?{agent_id:nA.agentID}:{}}});let xQ;try{let cQ=await new Promise((tI,NU)=>{jA.set(iA,tI),xQ=setTimeout((II,qI,EI,OI,zE)=>{if(II.delete(qI))EI(`permission timeout req=${qI}`),OI.sendControlCancelRequest(qI),zE({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},$jA,jA,iA,D,V,tI),xQ.unref?.(),VB.addEventListener("abort",()=>{if(jA.delete(iA))V.sendControlCancelRequest(iA);NU(Error("aborted"))},{once:!0})});D(`permission response req=${iA} behavior=${cQ.behavior}`);let rI=cQ.behavior==="allow"?{behavior:"allow",updatedInput:cQ.updatedInput,updatedPermissions:cQ.updatedPermissions}:{behavior:"deny",message:cQ.message??"Denied via remote control"};return Y?.(s,rI),rI}finally{if(xQ)clearTimeout(xQ);jA.delete(iA)}}let DA=!1;async function WB(){if(O!==null||DA||u.signal.aborted)return;if(DA=!0,q=!1,z.length>0)b=!1;async function*s(){while(!q){while(z.length>0)if(b=!1,yield z.shift(),q)return;await new Promise((iA)=>{L=iA})}}D(`spawning query resume=${M??"<fresh>"}`);let LQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(iA)=>D(`[child] ${iA.trimEnd()}`),canUseTool:HQ},nA;try{if(nA=await E(LQ),B)nA={...nA,env:{...nA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(iA){if(D(`buildQueryOptions threw: ${iA}`),DA=!1,a++,a>=xH)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!u.signal.aborted)WB();return}if(u.signal.aborted){DA=!1;return}try{O=R_({prompt:s(),options:nA})}finally{DA=!1}(async()=>{try{D("output pump started");for await(let iA of O){if(iA.type==="system"&&iA.subtype==="init"){if(iA.session_id!==M)M=iA.session_id,BA()}if(iA.type==="result")b=!0,a=0,d=!0,BA();if(!WjA(iA))continue;let VB=J?J(iA):iA;if(VB===null)continue;V.write(VB)}}catch(iA){D(`query threw: ${iA}`),a++}finally{D("output pump ended"),O=null;for(let iA of jA.keys())V.sendControlCancelRequest(iA);if(jA.clear(),z.length>0&&!u.signal.aborted)if(a>=xH)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else WB()}})()}let PQ=setInterval(()=>{let s=Date.now(),LQ=n!==null&&n-s<p;if(O===null){let nA=n!==null&&n-s<MQ;if((nA||xA&&!d)&&a<xH&&!u.signal.aborted)D(nA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),WB();return}if(q)return;if(!b||z.length>0)return;if(s-_<F)return;if(LQ)return;if(xA&&!d)return;D("idle conditions met → closing input gen"),BA(),q=!0,L?.(),L=null},FjA);if(PQ.unref?.(),U)D("initialPrompt → injecting"),_=Date.now(),CQ(U),WB();let _0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(u.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});CQ(s.content),WB()}})(),(async()=>{for await(let s of V.controlRequests()){if(u.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(u.signal.aborted)return;let LQ=VjA(s,jA,V.sendControlCancelRequest);if(LQ)D(`permission response for unknown req=${LQ} (stale)`)}})()]),clearInterval(PQ),SQ)clearInterval(SQ);O?.close(),await HA(),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(),CQ(s),WB()},async interrupt(){await O?.interrupt()},done:_0,teardown:HA}}}export{wjA as runAssistantWorker};
189
+ `)}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<TRA){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(_RA*Math.pow(2,this.reconnectAttempts-1),vRA),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)`),l("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"}),l("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"}),l("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,bRA)}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"),l("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":FU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=w1;I++){try{let C=await hQ.post(this.postUrl,A,{headers:B,validateStatus:mRA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${LA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),l("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${w1}`),l("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${CA(C)}, attempt ${I}/${w1}`),l("warn","cli_sse_post_network_error",{attempt:I})}if(I===w1){Z(`SSETransport: POST failed after ${w1} attempts, continuing`),l("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(yRA*Math.pow(2,I-1),fRA);await aI(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 uRA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}bQ();oQ();function Nr(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 Dr(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let w=C();if(!w)return{};return{Authorization:`Bearer ${w}`}};else ID(B);let J=A.epoch??await dk(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 ZH(G,{},I,void 0,E,Y),F,N=new XH(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(w){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${CA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{N.reportDelivery(w.event_id,"received"),N.reportDelivery(w.event_id,"processed")});let D,W=!1,$=!1;return{write(w){return N.writeEvent(w)},async writeBatch(w){for(let V of w){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(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{N.close(),w(V??4092)})},setOnConnect(w){D=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w){N.reportState(w)},reportMetadata(w){N.reportMetadata(w)},reportDelivery(w,V){N.reportDelivery(w,V)},flush(){return N.flush()},getInternalEventWriter(){return(w,V,M)=>N.writeInternalEvent(w,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?.()},(w)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${CA(w)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}bQ();oQ();var pRA="2023-06-01",iRA="ccr-byoc-2025-07-29";async function $r({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 hQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:zH(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${CA(W)}`),null}if(N.status!==200&&N.status!==201){let W=BG(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 Wr(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 hQ.post(Y,{},{headers:zH(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=BG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${CA(J)}`)}}async function p9(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:tN(Q),repo:B,pr_number:I},U;try{U=await hQ.post(J,G,{headers:zH(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${CA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=BG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function zH(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":pRA,"anthropic-beta":iRA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}wB();function Vr(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 KH{_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}}oQ();bQ();var BjA=2000,Kr=60000,Hr=900000,IjA=0;async function Lr(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:w,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>ON,initialHistoryCap:H=200,initialMessages:z,previouslyFlushedUUIDs:L,onInboundMessage:q,onPermissionResponse:O,onInterrupt:_,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:NA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:u,onInitError:jA,perpetual:c,initialSSESequenceNum:HA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:p}=A,MQ=++IjA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:xA}=await Promise.resolve().then(() => (Zr(),Xr)),kA=c?await xA(Q):null,zA=kA?.source==="repl"?kA:null;Z(`[bridge:repl] initBridgeCore #${MQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let CQ=bk({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.96",onDebug:Z,onAuth401:w,getTrustedDeviceToken:V}),HQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:zr(),workerType:U,environmentId:zr(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},DA,WB;try{let k=await CQ.registerBridgeEnvironment(HQ);DA=k.environment_id,WB=k.environment_secret}catch(k){if(Tk("registration_failed",`[bridge:repl] Environment registration failed: ${CA(k)}`),jA?.(`[bridge:repl] Environment registration failed: ${CA(k)}`),zA&&k instanceof FE&&(k.status===410||k.status!==401&&OW(k.errorType)))await d(Q);return QA?.("failed",CA(k)),null}Z(`[bridge:repl] Environment registered: ${DA}`),l("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function PQ(k,UA){if(DA!==k)return Z(`[bridge:repl] Env mismatch (requested ${k}, got ${DA}) — cannot reconnect in place`),!1;let QQ=p5(UA),OA=QQ===UA?[UA]:[UA,QQ];for(let uQ of OA)try{return await CQ.reconnectSession(DA,uQ),Z(`[bridge:repl] Reconnected session ${uQ} in place on env ${DA}`),!0}catch(sI){Z(`[bridge:repl] reconnectSession(${uQ}) failed: ${CA(sI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let _0=zA?await PQ(zA.environmentId,zA.sessionId):!1;if(zA&&!_0)await d(Q);let VA,s=new Set;if(_0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&L)for(let k of z)L.add(k.uuid)}else{let k=await N({environmentId:DA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!k)return Z("[bridge:repl] Session creation failed, deregistering environment"),jA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await CQ.deregisterEnvironment(DA).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=k,Z(`[bridge:repl] Session created: ${VA}`)}u?.(VA),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),l("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:lL(),...yk()});let LQ=new Set;if(z)for(let k of z)LQ.add(k.uuid);let nA=new SW(2000);for(let k of LQ)nA.add(k);let iA=new SW(2000),VB=new AbortController,EA=null,jI=0,_Q=_0?HA:0,xQ=null,cQ=null,rI=Vr(VB.signal),tI=rI.wake,NU=rI.signal,II=new KH,qI=!BA,EI=3,OI=0,zE=null;async function gH(){if(zE)return zE;zE=Rr();try{return await zE}finally{zE=null}}async function Rr(){if(OI++,jI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${OI}/${EI})`),OI>EI)return Z(`[bridge:repl] Environment reconnect limit reached (${EI}), giving up`),!1;if(EA){let OA=EA.getLastSequenceNum();if(OA>_Q)_Q=OA;p?.(),EA.close(),EA=null}if(tI(),II.drop(),xQ){let OA=xQ;if(await CQ.stopWork(DA,OA,!1).catch(()=>{}),xQ!==OA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),OI=0,!0;xQ=null,cQ=null}if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let k=DA;HQ.reuseEnvironmentId=k;try{let OA=await CQ.registerBridgeEnvironment(HQ);DA=OA.environment_id,WB=OA.environment_secret}catch(OA){return HQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${CA(OA)}`),!1}if(HQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${k} got=${DA}`),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await CQ.deregisterEnvironment(DA).catch(()=>{}),!1;if(EA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OI=0,!0;if(await PQ(k,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OI=0,!0;if(DA!==k)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await CQ.deregisterEnvironment(DA).catch(()=>{}),!1;let UA=W(),QQ=await N({environmentId:DA,title:UA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!QQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(QQ),!1;if(VA=QQ,Sf(tN(QQ)).catch(()=>{}),u?.(VA),_Q=0,iA.clear(),qI=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),L?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let OA of s){let uQ=OA.lastIndexOf("#");p9("subscribe",VA,OA.slice(0,uQ),Number(OA.slice(uQ+1)),J,F)}}return OI=0,!0}function l9(){return F()}function RH(){let k=II.end();if(k.length===0)return;if(!EA){Z(`[bridge:repl] Cannot drain ${k.length} pending message(s): no transport`);return}for(let OA of k)nA.add(OA.uuid);let QQ=$(k).map((OA)=>({...OA,session_id:VA}));Z(`[bridge:repl] Drained ${k.length} pending message(s) after flush`),EA.writeBatch(QQ)}let M1=null;function d9(){M1?.()}function jH(k){if(Z(`[bridge:repl] Transport permanently closed: code=${k}`),rA("tengu_bridge_repl_ws_closed",{code:k}),EA){let QQ=EA.getLastSequenceNum();if(QQ>_Q)_Q=QQ;p?.(),EA=null}tI();let UA=II.drop();if(UA>0)Z(`[bridge:repl] Dropping ${UA} pending message(s) on transport close (code=${k})`,{level:"warn"});if(k===1000){QA?.("failed","session ended"),VB.abort(),d9();return}QA?.("reconnecting",`Remote Control connection lost (code ${k})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${k}), attempting env reconnect`),gH().then((QQ)=>{if(QQ)return;if(VB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:k}),QA?.("failed","reconnection failed"),d9()})}let qH,jr=null,qr={api:CQ,getCredentials:()=>({environmentId:DA,environmentSecret:WB}),signal:VB.signal,getPollIntervalConfig:M,onStateChange:QA,getWsState:()=>EA?.getStateLabel()??"null",isAtCapacity:()=>EA!==null,capacitySignal:NU,onFatalError:d9,getHeartbeatInfo:()=>{if(!xQ||!cQ)return null;return{environmentId:DA,workId:xQ,sessionToken:cQ}},onHeartbeatFatal:(k)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${k.status}) — tearing down work item for fast re-dispatch`),EA){let UA=EA.getLastSequenceNum();if(UA>_Q)_Q=UA;p?.(),EA.close(),EA=null}if(II.drop(),xQ)CQ.stopWork(DA,xQ,!1).catch((UA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${CA(UA)}`)});xQ=null,cQ=null,tI(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await gH())return null;return{environmentId:DA,environmentSecret:WB}},onWorkReceived:(k,UA,QQ,OA)=>{if(EA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${QQ})`);if(Z(`[bridge:repl] Work received: workId=${QQ} workSessionId=${k} currentSessionId=${VA} match=${c5(k,VA)}`),n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),!c5(k,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${k}`);return}xQ=QQ,cQ=UA;let uQ=OA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),sI;if(!uQ){if(sI=l9(),!sI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}ID(sI)}if(rA("tengu_bridge_repl_work_received",{}),EA){p?.();let vQ=EA;EA=null;let pQ=vQ.getLastSequenceNum();if(pQ>_Q)_Q=pQ;vQ.close()}II.deactivate();let Sr=(vQ)=>uk(vQ,{transport:EA,sessionId:VA,onInterrupt:_,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:NA}),r9=!1,SH=(vQ)=>{if(EA=vQ,vQ.setOnConnect(()=>{if(EA!==vQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!uQ){let pQ=l9();if(pQ)ID(pQ)}if(a9=!1,!r9&&z&&z.length>0){r9=!0;let pQ=H,yB=z.filter((X1)=>h5(X1)&&!L?.has(X1.uuid)),dE=pQ>0&&yB.length>pQ?yB.slice(-pQ):yB;if(dE.length<yB.length)Z(`[bridge:repl] Capped initial flush: ${yB.length} -> ${dE.length} (cap=${pQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:yB.length,capped_count:dE.length});let bC=$(dE);if(bC.length>0){Z(`[bridge:repl] Flushing ${bC.length} initial message(s) via transport`);let X1=bC.map((mY)=>({...mY,session_id:VA})),PH=vQ.droppedBatchCount;vQ.writeBatch(X1).then(()=>{if(vQ.droppedBatchCount>PH){Z(`[bridge:repl] Initial flush dropped ${vQ.droppedBatchCount-PH} batch(es) — not marking ${bC.length} UUID(s) as flushed`);return}if(L){for(let mY of bC)if(mY.uuid)L.add(mY.uuid)}}).catch((mY)=>Z(`[bridge:repl] Initial flush failed: ${mY}`)).finally(()=>{if(EA!==vQ)return;RH(),QA?.("connected")})}else RH(),QA?.("connected")}else if(!II.active)QA?.("connected")}),vQ.setOnData((pQ)=>{ck(pQ,nA,iA,q,O,Sr)}),jr=jH,vQ.setOnClose((pQ)=>{if(EA!==vQ)return;jH(pQ)}),!r9&&z&&z.length>0)II.start();vQ.connect()};if(jI++,uQ){let vQ=lk(J,k),pQ=jI;Z(`[bridge:repl] CCR v2: sessionUrl=${vQ} session=${k} gen=${pQ}`),Dr({sessionUrl:vQ,ingressToken:UA,sessionId:k,initialSequenceNum:_Q}).then((yB)=>{if(VB.signal.aborted){yB.close();return}if(pQ!==jI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${pQ} current=${jI}`),yB.close();return}if(SH(yB),fA){let dE=yB.getInternalEventWriter?.(),bC=yB.getInternalEventReaders?.();if(dE&&bC)fA(dE,bC)}},(yB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${CA(yB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),pQ!==jI)return;if(xQ)CQ.stopWork(DA,xQ,!1).catch((dE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${CA(dE)}`)}),xQ=null,cQ=null;tI()})}else{let vQ=ik(G,k);Z(`[bridge:repl] Ingress URL: ${vQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${k}`);let pQ=sI??"";SH(Nr(new wH(new URL(vQ),{Authorization:`Bearer ${pQ}`,"anthropic-version":"2023-06-01"},k,()=>({Authorization:`Bearer ${l9()??pQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),tI()}})))}}};EjA(qr);let n9=c?setInterval(()=>{if(zE)return;n(Q,{sessionId:VA,environmentId:DA,source:"repl"})},3600000):null;n9?.unref?.();let OH=M().session_keepalive_interval_v2_ms,o9=OH>0?setInterval(()=>{if(!EA)return;Z("[bridge:repl] keep_alive sent"),EA.write({type:"keep_alive"}).catch((k)=>{Z(`[bridge:repl] keep_alive write failed: ${CA(k)}`)})},OH):null;o9?.unref?.();let a9=!1;M1=async()=>{if(a9){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${DA} session=${VA}`);return}a9=!0,p?.();let k=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${DA} session=${VA} workId=${xQ??"none"} transportState=${EA?.getStateLabel()??"null"}`),n9!==null)clearInterval(n9);if(o9!==null)clearInterval(o9);if(qH)process.off("SIGUSR2",qH);if(VB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),EA){let OA=EA.getLastSequenceNum();if(OA>_Q)_Q=OA}if(c){EA=null,II.drop(),await n(Q,{sessionId:VA,environmentId:DA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${DA} session=${VA} alive on server, duration=${Date.now()-k}ms`);return}let UA=EA;if(EA=null,II.drop(),UA)UA.write(m5(VA));let QQ=xQ?CQ.stopWork(DA,xQ,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((OA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${CA(OA)}`)}):Promise.resolve();await Promise.all([QQ,D(VA)]),UA?.close(),Z("[bridge:repl] Teardown: transport closed"),await CQ.deregisterEnvironment(DA).catch((OA)=>{Z(`[bridge:repl] Teardown deregister failed: ${CA(OA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${DA} duration=${Date.now()-k}ms`)};let Or=GJ(()=>M1?.());return Z(`[bridge:repl] Ready: env=${DA} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return DA},getSSESequenceNum(){let k=EA?.getLastSequenceNum()??0;return Math.max(_Q,k)},sessionIngressUrl:G,writeMessages(k){let UA=k.filter((uQ)=>h5(uQ)&&!LQ.has(uQ.uuid)&&!nA.has(uQ.uuid));if(UA.length===0)return;if(!qI)for(let uQ of UA){let sI=mk(uQ);if(sI!==void 0&&BA?.(sI,VA)){qI=!0;break}}if(II.enqueue(...UA)){Z(`[bridge:repl] Queued ${UA.length} message(s) during initial flush`);return}if(!EA){let uQ=UA.map((sI)=>sI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${UA.length} message(s) [${uQ}] for session=${VA}`,{level:"warn"});return}for(let uQ of UA)nA.add(uQ.uuid);Z(`[bridge:repl] Sending ${UA.length} message(s) via transport`);let OA=$(UA).map((uQ)=>({...uQ,session_id:VA}));EA.writeBatch(OA)},writeSdkMessages(k){let UA=k.filter((OA)=>!OA.uuid||!nA.has(OA.uuid));if(UA.length===0)return;if(!EA){Z(`[bridge:repl] Transport not configured, dropping ${UA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let OA of UA)if(OA.uuid)nA.add(OA.uuid);let QQ=UA.map((OA)=>({...OA,session_id:VA}));EA.writeBatch(QQ)},sendControlRequest(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let UA={...k,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_request request_id=${k.request_id}`)},sendControlResponse(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let UA={...k,session_id:VA};EA.write(UA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(k){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let UA={type:"control_cancel_request",request_id:k,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_cancel_request request_id=${k}`)},sendResult(){if(!EA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}EA.write(m5(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(k,UA){let QQ=await p9("subscribe",VA,k,UA,J,F);if(QQ)s.add(`${k}#${UA}`);return QQ},async unsubscribePR(k,UA){let QQ=await p9("unsubscribe",VA,k,UA,J,F);if(QQ)s.delete(`${k}#${UA}`);return QQ},async teardown(){Or(),await M1?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function EjA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>ON,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,w=null,V=null,M=0,H=!1;while(!B.aborted){let{environmentId:z,environmentSecret:L}=Q(),q=F();try{let O=await A.pollForWork(z,L,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,w=null,V=null,I?.("ready");if(!O){let b=H;if(H=!1,J?.()&&G&&!b){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,u=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let c=F();if(c.non_exclusive_heartbeat_interval_ms<=0)break;let HA=N();if(!HA)break;let fA=G();try{await A.heartbeatWork(HA.environmentId,HA.workId,HA.sessionToken)}catch(p){if(Z(`[bridge:repl:heartbeat] Failed: ${CA(p)}`),p instanceof FE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:p.status,error_type:p.status===401||p.status===403?"auth_failed":"fatal"}),D)D(p),Z(`[bridge:repl:heartbeat] Fatal (status=${p.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}u++,await aI(c.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let jA=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:jA,heartbeat_cycles:u}),!BA){if(jA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${u} cycles — falling through to pollForWork`);continue}}let NA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(NA>0){let QA=G(),BA=Date.now();await aI(NA,QA.signal),QA.cleanup();let u=Date.now()-BA-NA;if(u>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(u/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:u}),H=!0}}else await aI(q.poll_interval_ms_not_at_capacity,B);continue}let _;try{_=pk(O.secret)}catch(b){Z(`[bridge:repl] Failed to decode work secret: ${CA(b)}`),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(b){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${CA(b)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let b=O.data.id;try{aB(b,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${b}`);continue}E(b,_.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 FE&&O.status===404&&C){let u=Q().environmentId;if(z!==u){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${u} — skipping onEnvironmentLost`),$=0,w=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 jA=await C();if(B.aborted)break;if(jA){$=0,w=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${jA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof FE){let u=OW(O.errorType),jA=kk(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${jA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),l(u?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!jA)I?.("failed",u?"session expired · /remote-control to reconnect":O.message);U?.();break}let _=Date.now();if(V!==null&&_-V>Kr*2)Z(`[bridge:repl] Detected system sleep (${Math.round((_-V)/1000)}s gap), resetting poll error budget`),l("info","bridge_repl_poll_sleep_detected",{gapMs:_-V}),$=0,w=null;if(V=_,$++,w===null)w=_;let b=_-w,a=vk(O),NA=_k(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(b/1000)}s, ws=${QA}): ${NA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:b}),$===1)I?.("reconnecting",NA);if(b>=Hr){Z(`[bridge:repl] Poll failures exceeded ${Hr/1000}s (${$} errors), giving up`),l("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:b,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(BjA*2**($-1),Kr);if(F().non_exclusive_heartbeat_interval_ms>0){let u=N?.();if(u)try{await A.heartbeatWork(u.environmentId,u.workId,u.sessionToken)}catch{}}await aI(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function CjA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function YjA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function JjA(A,Q){if(YjA(A,Q))return"http://localhost:4000";if(CjA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function xr(A,Q){let{toCompatSessionId:B}=kr(nk),I=B(A);return`${JjA(I,Q)}/code/${I}`}bQ();async function gr(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,w=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},H=[],z=null,L=[],q=null,O=[],_=null,b=!1,a=null,NA={detail:null},QA=GjA(),BA=()=>Lr({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:w,onInitError:console.error,createSession:({environmentId:p,title:MQ,signal:n})=>$r({environmentId:p,title:MQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(p)=>Wr(p,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...ON,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(p){let MQ=Av(p);if(!MQ)return;H.push({content:MQ.content,uuid:MQ.uuid}),z?.(),z=null},onInterrupt(){L.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(p){L.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:p}}),q?.(),q=null},onSetMaxThinkingTokens(p){L.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:p}}),q?.(),q=null},onPermissionResponse(p){O.push(p),_?.(),_=null},onStateChange(p,MQ){if(a?.(p,MQ),p==="failed")NA.detail=MQ??"unknown failure",b=!0,z?.(),q?.(),_?.()}}),u=await BA();if(!u&&$&&NA.detail?.includes("409")){if(await $({machineName:QA,message:NA.detail})==="takeover")b=!1,NA.detail=null,u=await BA()}if(!u){let p=NA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${p}`),{ok:!1,error:{kind:NA.detail?.includes("409")?"conflict":NA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:p}}}async function*jA(){while(!b){while(H.length>0)if(yield H.shift(),b)return;await new Promise((p)=>{z=p})}}async function*c(){while(!b){while(L.length>0)if(yield L.shift(),b)return;await new Promise((p)=>{q=p})}}async function*HA(){while(!b){while(O.length>0)if(yield O.shift(),b)return;await new Promise((p)=>{_=p})}}return{ok:!0,handle:{get sessionUrl(){return xr(u.bridgeSessionId,V)},get environmentId(){return u.environmentId},get bridgeSessionId(){return u.bridgeSessionId},getSSESequenceNum(){return u.getSSESequenceNum()},hasPendingPrompts(){return H.length>0},write(p){u.writeSdkMessages([p])},sendResult(){u.sendResult()},sendControlRequest(p){u.sendControlRequest(p)},sendControlResponse(p){u.sendControlResponse(p)},sendControlCancelRequest(p){u.sendControlCancelRequest(p)},inboundPrompts:jA,controlRequests:c,permissionResponses:HA,onStateChange(p){a=p},async teardown(){b=!0,z?.(),q?.(),_?.(),await u.teardown()}}}}var FjA=1000,NjA=1e4,DjA=5000,$jA=60000,xH=3;function WjA(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 VjA(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"&&kH(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function wjA(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 w=await gr($);if(!w.ok)return D(`bridge connection failed: ${w.error.kind} — ${w.error.detail}`),{ok:!1,error:w.error};let V=w.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,H=V.bridgeSessionId,z=[],L=null,q=!1,O=null,_=0,b=!0,a=0,NA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};NA=NA.then(()=>G.save(s).catch((LQ)=>{D(`stateAdapter.save threw: ${LQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let u=new AbortController,jA=new Map,c=null;function HA(){return c??=(async()=>{BA();for(let s of jA.keys())V.sendControlCancelRequest(s);jA.clear(),await V.teardown(),await NA})()}if(N.addEventListener("abort",()=>{u.abort(),HA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await HA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,LQ)=>{if(D(`bridge state=${s} detail=${LQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==H)H=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${LQ??"unknown"}`),u.abort(),HA().catch((nA)=>D(`teardown threw: ${nA}`))});let p=I?.horizonMs??600000,MQ=I?.leadMs??DjA,n=null,d=!1,xA=!1,kA="";async function zA(){if(!I)return;let s=await t_(I.dir).catch((nA)=>{return D(`computeCronHorizon threw: ${nA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,xA=s.hasOverdue;let LQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(LQ!==kA)kA=LQ,D(LQ)}let SQ;if(I)await zA(),SQ=setInterval(zA,NjA),SQ.unref?.();function CQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),L?.(),L=null}async function HQ(s,LQ,nA){if(C){let cQ=await C(s,LQ,nA);if(cQ)return Y?.(s,cQ),cQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let cQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,cQ),cQ}let iA=UjA();D(`permission request tool=${s} req=${iA}`);let{signal:VB,suggestions:EA,blockedPath:jI,toolUseID:_Q}=nA;V.sendControlRequest({type:"control_request",request_id:iA,request:{subtype:"can_use_tool",tool_name:s,input:LQ,tool_use_id:_Q,...EA?{permission_suggestions:EA}:{},...jI?{blocked_path:jI}:{},..."decisionReason"in nA&&nA.decisionReason?{decision_reason:nA.decisionReason}:{},..."agentID"in nA&&nA.agentID?{agent_id:nA.agentID}:{}}});let xQ;try{let cQ=await new Promise((tI,NU)=>{jA.set(iA,tI),xQ=setTimeout((II,qI,EI,OI,zE)=>{if(II.delete(qI))EI(`permission timeout req=${qI}`),OI.sendControlCancelRequest(qI),zE({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},$jA,jA,iA,D,V,tI),xQ.unref?.(),VB.addEventListener("abort",()=>{if(jA.delete(iA))V.sendControlCancelRequest(iA);NU(Error("aborted"))},{once:!0})});D(`permission response req=${iA} behavior=${cQ.behavior}`);let rI=cQ.behavior==="allow"?{behavior:"allow",updatedInput:cQ.updatedInput,updatedPermissions:cQ.updatedPermissions}:{behavior:"deny",message:cQ.message??"Denied via remote control"};return Y?.(s,rI),rI}finally{if(xQ)clearTimeout(xQ);jA.delete(iA)}}let DA=!1;async function WB(){if(O!==null||DA||u.signal.aborted)return;if(DA=!0,q=!1,z.length>0)b=!1;async function*s(){while(!q){while(z.length>0)if(b=!1,yield z.shift(),q)return;await new Promise((iA)=>{L=iA})}}D(`spawning query resume=${M??"<fresh>"}`);let LQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(iA)=>D(`[child] ${iA.trimEnd()}`),canUseTool:HQ},nA;try{if(nA=await E(LQ),B)nA={...nA,env:{...nA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(iA){if(D(`buildQueryOptions threw: ${iA}`),DA=!1,a++,a>=xH)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!u.signal.aborted)WB();return}if(u.signal.aborted){DA=!1;return}try{O=R_({prompt:s(),options:nA})}finally{DA=!1}(async()=>{try{D("output pump started");for await(let iA of O){if(iA.type==="system"&&iA.subtype==="init"){if(iA.session_id!==M)M=iA.session_id,BA()}if(iA.type==="result")b=!0,a=0,d=!0,BA();if(!WjA(iA))continue;let VB=J?J(iA):iA;if(VB===null)continue;V.write(VB)}}catch(iA){D(`query threw: ${iA}`),a++}finally{D("output pump ended"),O=null;for(let iA of jA.keys())V.sendControlCancelRequest(iA);if(jA.clear(),z.length>0&&!u.signal.aborted)if(a>=xH)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else WB()}})()}let PQ=setInterval(()=>{let s=Date.now(),LQ=n!==null&&n-s<p;if(O===null){let nA=n!==null&&n-s<MQ;if((nA||xA&&!d)&&a<xH&&!u.signal.aborted)D(nA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),WB();return}if(q)return;if(!b||z.length>0)return;if(s-_<F)return;if(LQ)return;if(xA&&!d)return;D("idle conditions met → closing input gen"),BA(),q=!0,L?.(),L=null},FjA);if(PQ.unref?.(),U)D("initialPrompt → injecting"),_=Date.now(),CQ(U),WB();let _0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(u.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});CQ(s.content),WB()}})(),(async()=>{for await(let s of V.controlRequests()){if(u.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(u.signal.aborted)return;let LQ=VjA(s,jA,V.sendControlCancelRequest);if(LQ)D(`permission response for unknown req=${LQ} (stale)`)}})()]),clearInterval(PQ),SQ)clearInterval(SQ);O?.close(),await HA(),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(),CQ(s),WB()},async interrupt(){await O?.interrupt()},done:_0,teardown:HA}}}export{wjA as runAssistantWorker};