@anthropic-ai/claude-agent-sdk 0.2.108 → 0.2.109

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.108
3
+ // Version: 0.2.109
4
4
  import{createRequire as hs}from"node:module";var _s=Object.create;var{getPrototypeOf:Ps,defineProperty:PU,getOwnPropertyNames:wL,getOwnPropertyDescriptor:vs}=Object,zL=Object.prototype.hasOwnProperty;function KL(A){return this[A]}var Ts,ks,gI=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?Ts??=new WeakMap:ks??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?_s(Ps(A)):{};let Y=Q||!A||!A.__esModule?PU(B,"default",{value:A,enumerable:!0}):B;for(let J of wL(A))if(!zL.call(Y,J))PU(Y,J,{get:KL.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},bs=(A)=>{var Q=(ZL??=new WeakMap).get(A),B;if(Q)return Q;if(Q=PU({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of wL(A))if(!zL.call(Q,I))PU(Q,I,{get:KL.bind(A,I),enumerable:!(B=vs(A,I))||B.enumerable})}return ZL.set(A,Q),Q},ZL,w=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var ys=(A)=>A;function fs(A,Q){this[A]=ys.bind(null,Q)}var tI=(A,Q)=>{for(var B in Q)PU(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:fs.bind(Q,B)})};var H=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var j=hs(import.meta.url),ms=Symbol.dispose||Symbol.for("Symbol.dispose"),us=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),UQ=(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[us];if(I===void 0)I=Q[ms];if(typeof I!=="function")throw TypeError("Object not disposable");A.push([B,I,Q])}else if(B)A.push([B]);return Q},FQ=(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()};function iA(A){if(!A)return!1;if(typeof A==="boolean")return A;let Q=String(A).toLowerCase().trim();return["1","true","yes","on"].includes(Q)}function EJ(){let A=new Set;return{subscribe(Q){return A.add(Q),()=>{A.delete(Q)}},emit(...Q){let B;for(let I of A)try{I(...Q)}catch(E){(B??=[]).push(E)}if(B)throw B.length===1?B[0]:AggregateError(B,"Signal listener(s) threw")},clear(){A.clear()}}}var f4=()=>{};var ds,xL;var RL=H(()=>{ds=typeof global=="object"&&global&&global.Object===Object&&global,xL=ds});var ns,os,CJ;var h4=H(()=>{RL();ns=typeof self=="object"&&self&&self.Object===Object&&self,os=xL||ns||Function("return this")(),CJ=os});var as,YJ;var R2=H(()=>{h4();as=CJ.Symbol,YJ=as});function ss(A){var Q=rs.call(A,kU),B=A[kU];try{A[kU]=void 0;var I=!0}catch(C){}var E=ts.call(A);if(I)if(Q)A[kU]=B;else delete A[kU];return E}var jL,rs,ts,kU,gL;var qL=H(()=>{R2();jL=Object.prototype,rs=jL.hasOwnProperty,ts=jL.toString,kU=YJ?YJ.toStringTag:void 0;gL=ss});function Qe(A){return Ae.call(A)}var es,Ae,OL;var SL=H(()=>{es=Object.prototype,Ae=es.toString;OL=Qe});function Ee(A){if(A==null)return A===void 0?Ie:Be;return _L&&_L in Object(A)?gL(A):OL(A)}var Be="[object Null]",Ie="[object Undefined]",_L,PL;var vL=H(()=>{R2();qL();SL();_L=YJ?YJ.toStringTag:void 0;PL=Ee});function Ce(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var m4;var j2=H(()=>{m4=Ce});function Fe(A){if(!m4(A))return!1;var Q=PL(A);return Q==Je||Q==Ge||Q==Ye||Q==Ue}var Ye="[object AsyncFunction]",Je="[object Function]",Ge="[object GeneratorFunction]",Ue="[object Proxy]",TL;var kL=H(()=>{vL();j2();TL=Fe});var Ne,u4;var bL=H(()=>{h4();Ne=CJ["__core-js_shared__"],u4=Ne});function De(A){return!!yL&&yL in A}var yL,fL;var hL=H(()=>{bL();yL=function(){var A=/[^.]+$/.exec(u4&&u4.keys&&u4.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();fL=De});function Ve(A){if(A!=null){try{return We.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var $e,We,mL;var uL=H(()=>{$e=Function.prototype,We=$e.toString;mL=Ve});function Le(A){if(!m4(A)||fL(A))return!1;var Q=TL(A)?He:Me;return Q.test(mL(A))}var Xe,Me,Ze,we,ze,Ke,He,cL;var pL=H(()=>{kL();hL();j2();uL();Xe=/[\\^$.*+?()[\]{}|]/g,Me=/^\[object .+?Constructor\]$/,Ze=Function.prototype,we=Object.prototype,ze=Ze.toString,Ke=we.hasOwnProperty,He=RegExp("^"+ze.call(Ke).replace(Xe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");cL=Le});function xe(A,Q){return A==null?void 0:A[Q]}var lL;var iL=H(()=>{lL=xe});function Re(A,Q){var B=lL(A,Q);return cL(B)?B:void 0}var c4;var g2=H(()=>{pL();iL();c4=Re});var je,eE;var bU=H(()=>{g2();je=c4(Object,"create"),eE=je});function ge(){this.__data__=eE?eE(null):{},this.size=0}var dL;var nL=H(()=>{bU();dL=ge});function qe(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var oL;var aL=H(()=>{oL=qe});function Pe(A){var Q=this.__data__;if(eE){var B=Q[A];return B===Oe?void 0:B}return _e.call(Q,A)?Q[A]:void 0}var Oe="__lodash_hash_undefined__",Se,_e,rL;var tL=H(()=>{bU();Se=Object.prototype,_e=Se.hasOwnProperty;rL=Pe});function ke(A){var Q=this.__data__;return eE?Q[A]!==void 0:Te.call(Q,A)}var ve,Te,sL;var eL=H(()=>{bU();ve=Object.prototype,Te=ve.hasOwnProperty;sL=ke});function ye(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=eE&&Q===void 0?be:Q,this}var be="__lodash_hash_undefined__",Ax;var Qx=H(()=>{bU();Ax=ye});function JJ(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var q2;var Bx=H(()=>{nL();aL();tL();eL();Qx();JJ.prototype.clear=dL;JJ.prototype.delete=oL;JJ.prototype.get=rL;JJ.prototype.has=sL;JJ.prototype.set=Ax;q2=JJ});function fe(){this.__data__=[],this.size=0}var Ix;var Ex=H(()=>{Ix=fe});function he(A,Q){return A===Q||A!==A&&Q!==Q}var Cx;var Yx=H(()=>{Cx=he});function me(A,Q){var B=A.length;while(B--)if(Cx(A[B][0],Q))return B;return-1}var nC;var yU=H(()=>{Yx();nC=me});function pe(A){var Q=this.__data__,B=nC(Q,A);if(B<0)return!1;var I=Q.length-1;if(B==I)Q.pop();else ce.call(Q,B,1);return--this.size,!0}var ue,ce,Jx;var Gx=H(()=>{yU();ue=Array.prototype,ce=ue.splice;Jx=pe});function le(A){var Q=this.__data__,B=nC(Q,A);return B<0?void 0:Q[B][1]}var Ux;var Fx=H(()=>{yU();Ux=le});function ie(A){return nC(this.__data__,A)>-1}var Nx;var Dx=H(()=>{yU();Nx=ie});function de(A,Q){var B=this.__data__,I=nC(B,A);if(I<0)++this.size,B.push([A,Q]);else B[I][1]=Q;return this}var $x;var Wx=H(()=>{yU();$x=de});function GJ(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 Vx;var Xx=H(()=>{Ex();Gx();Fx();Dx();Wx();GJ.prototype.clear=Ix;GJ.prototype.delete=Jx;GJ.prototype.get=Ux;GJ.prototype.has=Nx;GJ.prototype.set=$x;Vx=GJ});var ne,Mx;var Zx=H(()=>{g2();h4();ne=c4(CJ,"Map"),Mx=ne});function oe(){this.size=0,this.__data__={hash:new q2,map:new(Mx||Vx),string:new q2}}var wx;var zx=H(()=>{Bx();Xx();Zx();wx=oe});function ae(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var Kx;var Hx=H(()=>{Kx=ae});function re(A,Q){var B=A.__data__;return Kx(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var oC;var fU=H(()=>{Hx();oC=re});function te(A){var Q=oC(this,A).delete(A);return this.size-=Q?1:0,Q}var Lx;var xx=H(()=>{fU();Lx=te});function se(A){return oC(this,A).get(A)}var Rx;var jx=H(()=>{fU();Rx=se});function ee(A){return oC(this,A).has(A)}var gx;var qx=H(()=>{fU();gx=ee});function AAA(A,Q){var B=oC(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var Ox;var Sx=H(()=>{fU();Ox=AAA});function UJ(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 O2;var _x=H(()=>{zx();xx();jx();qx();Sx();UJ.prototype.clear=wx;UJ.prototype.delete=Lx;UJ.prototype.get=Rx;UJ.prototype.has=gx;UJ.prototype.set=Ox;O2=UJ});function S2(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(QAA);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(S2.Cache||O2),B}var QAA="Expected a function",NQ;var LE=H(()=>{_x();S2.Cache=O2;NQ=S2});import{homedir as BAA}from"os";import{join as IAA}from"path";function _2(A){let Q=process.env.NODE_OPTIONS;if(!Q)return!1;return Q.split(/\s+/).includes(A)}function Px(){return!1}function vx(){return{namespace:void 0,cluster:void 0}}var xE;var IB=H(()=>{f4();LE();f4();xE=NQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??IAA(BAA(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR)});function m(A,Q,B,I,E){if(I==="m")throw TypeError("Private method is not writable");if(I==="a"&&!E)throw TypeError("Private accessor was defined without a setter");if(typeof Q==="function"?A!==Q||!E:!Q.has(A))throw TypeError("Cannot write private member to an object whose class did not declare it");return I==="a"?E.call(A,B):E?E.value=B:Q.set(A,B),B}function g(A,Q,B,I){if(B==="a"&&!I)throw TypeError("Private accessor was defined without a getter");if(typeof Q==="function"?A!==Q||!I:!Q.has(A))throw TypeError("Cannot read private member from an object whose class did not declare it");return B==="m"?I:B==="a"?I.call(A):I?I.value:Q.get(A)}var AC=()=>{};var P2=function(){let{crypto:A}=globalThis;if(A?.randomUUID)return P2=A.randomUUID.bind(A),A.randomUUID();let Q=new Uint8Array(1),B=A?()=>A.getRandomValues(Q)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(I)=>(+I^B()&15>>+I/4).toString(16))};function QC(A){return typeof A==="object"&&A!==null&&(("name"in A)&&A.name==="AbortError"||("message"in A)&&String(A.message).includes("FetchRequestCanceledException"))}var hU=(A)=>{if(A instanceof Error)return A;if(typeof A==="object"&&A!==null){try{if(Object.prototype.toString.call(A)==="[object Error]"){let Q=Error(A.message,A.cause?{cause:A.cause}:{});if(A.stack)Q.stack=A.stack;if(A.cause&&!Q.cause)Q.cause=A.cause;if(A.name)Q.name=A.name;return Q}}catch{}try{return Error(JSON.stringify(A))}catch{}}return Error(A)};var o,EB,ZB,d0,mU,uU,cU,pU,lU,iU,dU,nU,oU;var uB=H(()=>{o=class o extends Error{};EB=class EB extends o{constructor(A,Q,B,I,E){super(`${EB.makeMessage(A,Q,B)}`);this.status=A,this.headers=I,this.requestID=I?.get("request-id"),this.error=Q,this.type=E??null}static makeMessage(A,Q,B){let I=Q?.message?typeof Q.message==="string"?Q.message:JSON.stringify(Q.message):Q?JSON.stringify(Q):B;if(A&&I)return`${A} ${I}`;if(A)return`${A} status code (no body)`;if(I)return I;return"(no status code or body)"}static generate(A,Q,B,I){if(!A||!I)return new d0({message:B,cause:hU(Q)});let E=Q,C=E?.error?.type;if(A===400)return new uU(A,E,B,I,C);if(A===401)return new cU(A,E,B,I,C);if(A===403)return new pU(A,E,B,I,C);if(A===404)return new lU(A,E,B,I,C);if(A===409)return new iU(A,E,B,I,C);if(A===422)return new dU(A,E,B,I,C);if(A===429)return new nU(A,E,B,I,C);if(A>=500)return new oU(A,E,B,I,C);return new EB(A,E,B,I,C)}};ZB=class ZB extends EB{constructor({message:A}={}){super(void 0,void 0,A||"Request was aborted.",void 0)}};d0=class d0 extends EB{constructor({message:A,cause:Q}){super(void 0,void 0,A||"Connection error.",void 0);if(Q)this.cause=Q}};mU=class mU extends d0{constructor({message:A}={}){super({message:A??"Request timed out."})}};uU=class uU extends EB{};cU=class cU extends EB{};pU=class pU extends EB{};lU=class lU extends EB{};iU=class iU extends EB{};dU=class dU extends EB{};nU=class nU extends EB{};oU=class oU extends EB{}});function p4(A){if(typeof A!=="object")return{};return A??{}}function k2(A){if(!A)return!0;for(let Q in A)return!1;return!0}function kx(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var CAA,Tx=(A)=>{return CAA.test(A)},v2=(A)=>(v2=Array.isArray,v2(A)),T2,bx=(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},l4=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var n0=H(()=>{uB();CAA=/^[a-z][a-z0-9+.-]*:/i,T2=v2});var yx=(A)=>new Promise((Q)=>setTimeout(Q,A));var aC="0.81.0";function YAA(){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 GAA(){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 ux=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},JAA=()=>{let A=YAA();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":aC,"X-Stainless-OS":hx(Deno.build.os),"X-Stainless-Arch":fx(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":aC,"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":aC,"X-Stainless-OS":hx(globalThis.process.platform??"unknown"),"X-Stainless-Arch":fx(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=GAA();if(Q)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":aC,"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":aC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},fx=(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"},hx=(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"},mx,cx=()=>{return mx??(mx=JAA())};var b2=()=>{};function px(){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 y2(...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 i4(A){let Q=Symbol.asyncIterator in A?A[Symbol.asyncIterator]():A[Symbol.iterator]();return y2({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 aU(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 lx(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 ix=({headers:A,body:Q})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Q)}};function dx(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 nx=H(()=>{uB()});function rx(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 rU(A){let Q;return(ox??(Q=new globalThis.TextEncoder,ox=Q.encode.bind(Q)))(A)}function f2(A){let Q;return(ax??(Q=new globalThis.TextDecoder,ax=Q.decode.bind(Q)))(A)}var ox,ax;class rC{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"?rU(A):A;m(this,CI,rx([g(this,CI,"f"),Q]),"f");let B=[],I;while((I=NAA(g(this,CI,"f"),g(this,YI,"f")))!=null){if(I.carriage&&g(this,YI,"f")==null){m(this,YI,I.index,"f");continue}if(g(this,YI,"f")!=null&&(I.index!==g(this,YI,"f")+1||I.carriage)){B.push(f2(g(this,CI,"f").subarray(0,g(this,YI,"f")-1))),m(this,CI,g(this,CI,"f").subarray(g(this,YI,"f")),"f"),m(this,YI,null,"f");continue}let E=g(this,YI,"f")!==null?I.preceding-1:I.preceding,C=f2(g(this,CI,"f").subarray(0,E));B.push(C),m(this,CI,g(this,CI,"f").subarray(I.index),"f"),m(this,YI,null,"f")}return B}flush(){if(!g(this,CI,"f").length)return[];return this.decode(`
5
5
  `)}}function NAA(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 tx(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 h2=H(()=>{AC();CI=new WeakMap,YI=new WeakMap;rC.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);rC.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function tU(){}function d4(A,Q,B){if(!Q||n4[A]>n4[B])return tU;else return Q[A].bind(Q)}function UB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return DAA;let I=sx.get(Q);if(I&&I[0]===B)return I[1];let E={error:d4("error",Q,B),warn:d4("warn",Q,B),info:d4("info",Q,B),debug:d4("debug",Q,B)};return sx.set(Q,[B,E]),E}var n4,m2=(A,Q,B)=>{if(!A)return;if(kx(n4,A))return A;UB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(n4))}`);return},DAA,sx,BC=(A)=>{if(A.options)A.options={...A.options},delete A.options.headers;if(A.headers)A.headers=Object.fromEntries((A.headers instanceof Headers?[...A.headers]:Object.entries(A.headers)).map(([Q,B])=>[Q,Q.toLowerCase()==="x-api-key"||Q.toLowerCase()==="authorization"||Q.toLowerCase()==="cookie"||Q.toLowerCase()==="set-cookie"?"***":B]));if("retryOfRequestLogID"in A){if(A.retryOfRequestLogID)A.retryOf=A.retryOfRequestLogID;delete A.retryOfRequestLogID}return A};var o4=H(()=>{n0();n4={off:0,error:200,warn:300,info:400,debug:500};DAA={error:tU,warn:tU,info:tU,debug:tU},sx=new WeakMap});async function*$AA(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 ex,I=new rC,E=aU(A.body);for await(let C of WAA(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*WAA(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"?rU(B):B,E=new Uint8Array(Q.length+I.length);E.set(Q),E.set(I,Q.length),Q=E;let C;while((C=tx(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class ex{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(A){if(A.endsWith("\r"))A=A.substring(0,A.length-1);if(!A){if(!this.event&&!this.data.length)return null;let E={event:this.event,data:this.data.join(`
@@ -181,7 +181,7 @@ ${E}`;break;case"retry":if(qr(E))Q[I]=E;break;case"id":if(Or(E))Q[I]=E;break;cas
181
181
  `)){let I=B.match(/^(ID|VERSION_ID)=(.*)$/);if(I&&I[1]&&I[2]){let E=I[2].replace(/^"|"$/g,"");if(I[1]==="ID")A.linuxDistroId=E;else A.linuxDistroVersion=E}}}catch{}return A});DQ();import{AsyncLocalStorage as B8A}from"async_hooks";var WCQ=new B8A;IB();function Y8A(){return Om(xE(),"sessions")}var qm=Promise.resolve();async function J8A(A){let Q=Om(Y8A(),`${process.pid}.json`),B=qm.then(async()=>{try{let I=_Q(await E8A(Q,"utf8"));await C8A(Q,HA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${JA(I)}`)}});qm=B,await B}async function Sm(A){await J8A({bridgeSessionId:A})}$Q();LC();pQ();gE();gE();$Q();IB();pQ();AE();import{mkdirSync as G8A,writeFileSync as U8A}from"fs";var MV="/home/claude/.claude/remote",tCQ=`${MV}/.oauth_token`,sCQ=`${MV}/.api_key`,ZV=`${MV}/.session_ingress_token`;function _m(A,Q,B){if(!iA(process.env.CLAUDE_CODE_REMOTE))return;try{G8A(MV,{recursive:!0,mode:448}),U8A(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): ${JA(I)}`,{level:"error"})}}function D3(A,Q){try{let I=dQ().readFileSync(A,{encoding:"utf8"}).trim();if(!I)return null;return Z(`Read ${Q} from well-known file ${A}`),I}catch(B){if(!YC(B))Z(`Failed to read ${Q} from ${A}: ${JA(B)}`,{level:"debug"});return null}}$Q();pQ();AE();function F8A(){let A=uR();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??ZV,E=D3(I,"session ingress token");return RJ(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"}),RJ(null),null;try{let I=dQ(),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"}),RJ(null),null;return Z(`Successfully read token from file descriptor ${B}`),RJ(C),_m(ZV,C,"session ingress token"),C}catch(I){Z(`Failed to read token from file descriptor ${B}: ${JA(I)}`,{level:"error"});let E=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??ZV,C=D3(E,"session ingress token");return RJ(C),C}}function KD(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return F8A()}function wV(){let A=KD();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 HD(A){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=A}DQ();class jG extends Error{retryAfterMs;constructor(A,Q){super(A);this.retryAfterMs=Q}}class qY{pending=[];pendingAtClose=0;draining=!1;closed=!1;backpressureResolvers=[];sleepResolve=null;flushResolvers=[];droppedBatches=0;config;constructor(A){this.config=A}get droppedBatchCount(){return this.droppedBatches}get pendingCount(){return this.closed?this.pendingAtClose:this.pending.length}async enqueue(A){if(this.closed)return;let Q=Array.isArray(A)?A:[A];if(Q.length===0)return;while(this.pending.length+Q.length>this.config.maxQueueSize&&!this.closed)await new Promise((B)=>{this.backpressureResolvers.push(B)});if(this.closed)return;this.pending.push(...Q),this.drain()}flush(){if(this.pending.length===0&&!this.draining)return Promise.resolve();return this.drain(),new Promise((A)=>{this.flushResolvers.push(A)})}close(){if(this.closed)return;this.closed=!0,this.pendingAtClose=this.pending.length,this.pending=[],this.sleepResolve?.(),this.sleepResolve=null;for(let A of this.backpressureResolvers)A();this.backpressureResolvers=[];for(let A of this.flushResolvers)A();this.flushResolvers=[]}async drain(){if(this.draining||this.closed)return;this.draining=!0;let A=0;try{while(this.pending.length>0&&!this.closed){let Q=this.takeBatch();if(Q.length===0)continue;try{await this.config.send(Q),A=0}catch(B){if(A++,this.config.maxConsecutiveFailures!==void 0&&A>=this.config.maxConsecutiveFailures){this.droppedBatches++,this.config.onBatchDropped?.(Q.length,A),A=0,this.releaseBackpressure();continue}this.pending=Q.concat(this.pending);let I=B instanceof jG?B.retryAfterMs:void 0;await this.sleep(this.retryDelay(A,I));continue}this.releaseBackpressure()}}finally{if(this.draining=!1,this.pending.length===0){for(let Q of this.flushResolvers)Q();this.flushResolvers=[]}}}takeBatch(){let{maxBatchSize:A,maxBatchBytes:Q}=this.config;if(Q===void 0)return this.pending.splice(0,A);let B=0,I=0;while(I<this.pending.length&&I<A){let E;try{E=Buffer.byteLength(HA(this.pending[I]))}catch{this.pending.splice(I,1);continue}if(I>0&&B+E>Q)break;B+=E,I++}return this.pending.splice(0,I)}retryDelay(A,Q){let B=Math.random()*this.config.jitterMs;if(Q!==void 0)return Math.max(this.config.baseDelayMs,Math.min(Q,this.config.maxDelayMs))+B;return Math.min(this.config.baseDelayMs*2**(A-1),this.config.maxDelayMs)+B}releaseBackpressure(){let A=this.backpressureResolvers;this.backpressureResolvers=[];for(let Q of A)Q()}sleep(A){return new Promise((Q)=>{this.sleepResolve=Q,setTimeout((B,I)=>{B.sleepResolve=null,I()},A,this,Q)})}}class $3{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}}$Q();LC();IB();LE();import{Agent as D8A}from"https";LE();function Pm(A){return[...new Set(A)]}$Q();IB();AE();var vm=["bundled","system"];function N8A(){let A=process.env.CLAUDE_CODE_CERT_STORE;if(A){let Q=[];for(let B of A.split(",")){let I=B.trim().toLowerCase();if(I==="bundled"||I==="system"){if(!Q.includes(I))Q.push(I)}else if(I)Z(`CA certs: unrecognized CLAUDE_CODE_CERT_STORE source '${I}', ignoring`,{level:"warn"})}return Q.length>0?Q:vm}if(_2("--use-system-ca")||_2("--use-openssl-ca"))return["system"];return vm}var gG=NQ(()=>{let A=N8A(),Q=process.env.NODE_EXTRA_CA_CERTS,B=A.includes("bundled"),I=A.includes("system");if(Z(`CA certs: stores=${A.join(",")}, extraCertsPath=${Q}`),typeof Bun>"u"&&!Q&&!process.env.CLAUDE_CODE_CERT_STORE)return;let E=j("tls"),C=E.getCACertificates;if(!B&&I&&!C){Z("CA certs: stores=system but system CA API unavailable, deferring to runtime");return}let Y=[];if(B)Y.push(...E.rootCertificates),Z(`CA certs: Loaded ${E.rootCertificates.length} bundled root certificates`);if(I)try{let J=C?.("system");if(J&&J.length>0)Y.push(...J),Z(`CA certs: Loaded ${J.length} system CA certificates`);else if(Z(`CA certs: system store ${C?"returned empty":"unavailable"}`),!B)Y.push(...E.rootCertificates)}catch(J){if(Z(`CA certs: Failed to load system CA certificates: ${J}`,{level:"error"}),!B)Y.push(...E.rootCertificates)}if(Q)try{let J=dQ().readFileSync(Q,{encoding:"utf8"});Y.push(J),Z(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${Q})`)}catch(J){Z(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${Q}): ${J}`,{level:"error"})}return Y.length>0?Pm(Y):void 0});$Q();AE();var LD=NQ(()=>{let A={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{A.cert=dQ().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=dQ().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}),Tm=NQ(()=>{let A=LD(),Q=gG();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return Z("mTLS: Creating HTTPS agent with custom certificates"),new D8A(B)});function W3(){let A=LD(),Q=gG();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}LE();var ir=gI(am(),1);$Q();IB();function tgA(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 fH(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function sgA(A=process.env){return A.no_proxy||A.NO_PROXY}function hH(A,Q=sgA()){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 dr(A,Q={}){let B=LD(),I=gG(),E={...B&&{cert:B.cert,key:B.key,passphrase:B.passphrase},...I&&{ca:I}};if(iA(process.env.CLAUDE_CODE_PROXY_RESOLVES_HOSTS))E.lookup=(C,Y,J)=>{J(null,C,tgA(Y))};return new ir.HttpsProxyAgent(A,{...E,...Q})}function nr(A={}){let Q=fH(),B=Tm(),I=PQ.create({proxy:!1});if(!Q){if(B)I.defaults.httpsAgent=B;return I}let E=dr(Q,A);return I.interceptors.request.use((C)=>{if(C.url&&hH(C.url))C.httpsAgent=B,C.httpAgent=B;else C.httpsAgent=E,C.httpAgent=E;return C}),I}var ZJQ=NQ((A)=>{let Q=lr(),B=LD(),I=gG(),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 or(A){let Q=fH();if(!Q)return;if(hH(A))return;return dr(Q)}function ar(A){let Q=fH();if(!Q)return;if(hH(A))return;return Q}jJ();LC();IB();var egA=30000,uH=null,rr=0;var R4=null,mH=null;function AqA(){tr(),R4=setInterval(()=>{if(u("debug","session_keepalive_heartbeat",{refcount:rr}),iA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))uH?.()},egA)}function tr(){if(mH!==null)clearTimeout(mH),mH=null}function Q2(A){if(uH=A,rr>0&&R4===null)AqA()}function j4(){if(uH=null,R4!==null)clearInterval(R4),R4=null;tr()}DQ();var wOA=`{"type":"keep_alive"}
182
182
  `,zOA=1000,KOA=1000,Js=30000,HOA=600000,LOA=1e4,xOA=300000,Ys=Js*2,ROA=new Set([1002,4001,4003]);class IL{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 $3(zOA)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){Z(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),u("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),Z(`WebSocketTransport: Opening ${this.url.href}`),u("info","cli_websocket_connect_opening");let A={...this.headers};if(this.lastSentId)A["X-Last-Request-Id"]=this.lastSentId,Z(`WebSocketTransport: Adding X-Last-Request-Id header: ${this.lastSentId}`);if(typeof Bun<"u"){let Q=new globalThis.WebSocket(this.url.href,{headers:A,proxy:ar(this.url.href),tls:W3()||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(() => (Cs(),Es)),B=new Q(this.url.href,{headers:A,agent:or(this.url.href),...W3()});this.ws=B,this.isBunWs=!1,B.on("open",this.onNodeOpen),B.on("message",this.onNodeMessage),B.on("error",this.onNodeError),B.on("close",this.onNodeClose),B.on("pong",this.onPong)}}onBunOpen=()=>{if(this.handleOpenEvent(),this.lastSentId)this.replayBufferedMessages("")};onBunMessage=(A)=>{let Q=typeof A.data==="string"?A.data:String(A.data);if(this.lastActivityTime=Date.now(),u("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onBunError=()=>{Z("WebSocketTransport: Error",{level:"error"}),u("error","cli_websocket_connect_error")};onBunClose=(A)=>{let Q=A.code===1000||A.code===1001;Z(`WebSocketTransport: Closed: ${A.code}`,Q?void 0:{level:"error"}),u("error","cli_websocket_connect_closed"),this.handleConnectionError(A.code)};onNodeOpen=()=>{let A=this.ws;if(this.handleOpenEvent(),!A)return;let B=A.upgradeReq;if(B?.headers?.["x-last-request-id"]){let I=B.headers["x-last-request-id"];this.replayBufferedMessages(I)}};onNodeMessage=(A)=>{let Q=A.toString();if(this.lastActivityTime=Date.now(),u("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onNodeError=(A)=>{Z(`WebSocketTransport: Error: ${A.message}`,{level:"error"}),u("error","cli_websocket_connect_error")};onNodeClose=(A,Q)=>{let B=A===1000||A===1001;Z(`WebSocketTransport: Closed: ${A}`,B?void 0:{level:"error"}),u("error","cli_websocket_connect_closed"),this.handleConnectionError(A)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let A=Date.now()-this.connectStartTime;if(Z("WebSocketTransport: Connected"),u("info","cli_websocket_connect_connected",{duration_ms:A}),this.isBridge&&this.reconnectStartTime!==null)sA("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(),Q2(()=>{this.write({type:"keep_alive"})})}sendLine(A){if(!this.ws||this.state!=="connected")return Z("WebSocketTransport: Not connected"),u("info","cli_websocket_send_not_connected"),!1;try{return this.ws.send(A),this.lastActivityTime=Date.now(),!0}catch(Q){return Z(`WebSocketTransport: Failed to send: ${Q}`,{level:"error"}),u("error","cli_websocket_send_error"),this.handleConnectionError(),!1}}removeWsListeners(A){if(this.isBunWs){let Q=A;Q.removeEventListener("open",this.onBunOpen),Q.removeEventListener("message",this.onBunMessage),Q.removeEventListener("error",this.onBunError),Q.removeEventListener("close",this.onBunClose),Q.removeEventListener("pong",this.onPong)}else{let Q=A;Q.off("open",this.onNodeOpen),Q.off("message",this.onNodeMessage),Q.off("error",this.onNodeError),Q.off("close",this.onNodeClose),Q.off("pong",this.onPong)}}doDisconnect(){if(this.stopPingInterval(),this.stopKeepaliveInterval(),j4(),this.ws)this.removeWsListeners(this.ws),this.ws.close(),this.ws=null}handleConnectionError(A){if(Z(`WebSocketTransport: Disconnected from ${this.url.href}`+(A!=null?` (code ${A})`:"")),u("info","cli_websocket_disconnected"),this.isBridge)sA("tengu_ws_transport_closed",{closeCode:A,msSinceLastActivity:this.lastActivityTime>0?Date.now()-this.lastActivityTime:-1,wasConnected:this.state==="connected",reconnectAttempts:this.reconnectAttempts});if(this.doDisconnect(),this.state==="closing"||this.state==="closed")return;let Q=!1;if(A===4003&&this.refreshHeaders){let E=this.refreshHeaders();if(E.Authorization!==this.headers.Authorization)Object.assign(this.headers,E),Q=!0,Z("WebSocketTransport: 4003 received but headers refreshed, scheduling reconnect"),u("info","cli_websocket_4003_token_refreshed")}if(A!=null&&ROA.has(A)&&!Q){Z(`WebSocketTransport: Permanent close code ${A}, not reconnecting`,{level:"error"}),u("error","cli_websocket_permanent_close",{closeCode:A}),this.state="closed",this.onCloseCallback?.(A);return}if(!this.autoReconnect){this.state="closed",this.onCloseCallback?.(A);return}let B=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=B;if(this.lastReconnectAttemptTime!==null&&B-this.lastReconnectAttemptTime>Ys)Z(`WebSocketTransport: Detected system sleep (${Math.round((B-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),u("info","cli_websocket_sleep_detected",{gapMs:B-this.lastReconnectAttemptTime}),this.reconnectStartTime=B,this.reconnectAttempts=0;this.lastReconnectAttemptTime=B;let I=B-this.reconnectStartTime;if(I<HOA){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(KOA*Math.pow(2,this.reconnectAttempts-1),Js),C=Math.max(0,E+E*0.25*(2*Math.random()-1));if(Z(`WebSocketTransport: Reconnecting in ${Math.round(C)}ms (attempt ${this.reconnectAttempts}, ${Math.round(I/1000)}s elapsed)`),u("error","cli_websocket_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.isBridge)sA("tengu_ws_transport_reconnecting",{attempt:this.reconnectAttempts,elapsedMs:I,delayMs:Math.round(C)});this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},C)}else if(Z(`WebSocketTransport: Reconnection time budget exhausted after ${Math.round(I/1000)}s for ${this.url.href}`,{level:"error"}),u("error","cli_websocket_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:I}),this.state="closed",this.onCloseCallback)this.onCloseCallback(A)}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.stopPingInterval(),this.stopKeepaliveInterval(),j4(),this.state="closing",this.doDisconnect()}[Symbol.dispose](){this.close()}replayBufferedMessages(A){let Q=this.messageBuffer.toArray();if(Q.length===0)return;let B=0;if(A){let E=Q.findIndex((C)=>("uuid"in C)&&C.uuid===A);if(E>=0){B=E+1;let C=Q.slice(B);if(this.messageBuffer.clear(),this.messageBuffer.addAll(C),C.length===0)this.lastSentId=null;Z(`WebSocketTransport: Evicted ${B} confirmed messages, ${C.length} remaining`),u("info","cli_websocket_evicted_confirmed_messages",{evicted:B,remaining:C.length})}}let I=Q.slice(B);if(I.length===0){Z("WebSocketTransport: No new messages to replay"),u("info","cli_websocket_no_messages_to_replay");return}Z(`WebSocketTransport: Replaying ${I.length} buffered messages`),u("info","cli_websocket_messages_to_replay",{count:I.length});for(let E of I){let C=HA(E)+`
183
183
  `;if(!this.sendLine(C)){this.handleConnectionError();break}}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnConnect(A){this.onConnectCallback=A}setOnClose(A){this.onCloseCallback=A}getStateLabel(){return this.state}async write(A){if("uuid"in A&&typeof A.uuid==="string")this.messageBuffer.add(A),this.lastSentId=A.uuid;let Q=HA(A)+`
184
- `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Ys){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),u("info","cli_websocket_sleep_detected_on_ping",{gapMs:B}),this.handleConnectionError();return}if(!this.pongReceived){Z("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),u("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),u("error","cli_websocket_ping_failed")}}},LOA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),iA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(wOA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),u("error","cli_websocket_keepalive_failed")}},xOA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var jOA=100,gOA=15000,qOA=3000;class EL extends IL{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=OOA(A),this.uploader=new qY({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{u("error","cli_hybrid_batch_dropped_max_failures",{batchSize:J,failures:G}),Y?.(J,G)},send:(J)=>this.postOnce(J)}),Z(`HybridTransport: POST URL = ${this.postUrl}`),u("info","cli_hybrid_transport_initialized")}async write(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),jOA);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,qOA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=KD();if(!Q){Z("HybridTransport: No session token available for POST"),u("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await PQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:gOA})}catch(E){throw Z(`HybridTransport: POST error: ${JA(E)}`),u("warn","cli_hybrid_post_network_error"),E}if(I.status>=200&&I.status<300){Z(`HybridTransport: POST success count=${A.length}`);return}if(I.status>=400&&I.status<500&&I.status!==429){Z(`HybridTransport: POST returned ${I.status} (permanent), dropping`),u("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),u("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function OOA(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 Fs}from"crypto";$Q();LC();pQ();DQ();function SOA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return _Q(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Gs(A){let Q=SOA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}$Q();LC();pQ();function _U(){return"claude-code/0.2.108"}class CL{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Us(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async drain(){if(this.inflight||this.closed)return;if(!this.pending)return;let A=this.pending;this.pending=null,this.inflight=this.sendWithRetry(A).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(A){let Q=A,B=0;while(!this.closed){if(await this.config.send(Q))return;if(B++,await hB(this.retryDelay(B)),this.pending&&!this.closed)Q=Us(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 Us(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 _OA=20000,POA=100;function Ns(){return!0}class W2 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var vOA=10;function TOA(){return{byMessage:new Map,scopeToMessage:new Map}}function V2(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function kOA(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(V2(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(V2(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(V2(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 bOA(A,Q){A.byMessage.delete(Q.message.id);let B=V2(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class YL{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=nr({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=TOA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??_OA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??wV,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 CL({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new jG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new jG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qY({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new jG("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 W2("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 W2("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState();if(!(await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)")).ok)throw new W2("worker_register_failed");this.currentState="idle",this.startHeartbeat(),Q2(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),u("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)u("info","cli_worker_state_restored",{duration_ms:C,had_state:E!==null});return E}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:null,durationMs:0};return{metadata:(await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state"))?.worker?.external_metadata??null,durationMs:Date.now()-A}}async request(A,Q,B,I,{timeout:E=1e4}={}){let C=this.getAuthHeaders();if(Object.keys(C).length===0)return{ok:!1};try{let Y=await this.http[A](`${this.sessionBaseUrl}${Q}`,B,{headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":_U()},validateStatus:Ns,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=KD(),G=J?Gs(J):null;if(G!==null&&G*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(G*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),u("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=vOA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),u("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),u("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${JA(Y)}`,{level:"warn"}),u("warn","cli_worker_request_error",{method:A,path:Q,error_code:eI(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),u("error","cli_worker_epoch_mismatch"),this.onEpochMismatch()}startHeartbeat(){this.stopHeartbeat();let A=()=>{let B=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(Q,this.heartbeatIntervalMs+B)},Q=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;A()};A()}stopHeartbeat(){if(this.heartbeatTimer)clearTimeout(this.heartbeatTimer),this.heartbeatTimer=null}async sendHeartbeat(){if(this.heartbeatInFlight)return;this.heartbeatInFlight=!0;try{if((await this.request("post","/worker/heartbeat",{session_id:this.sessionId,worker_epoch:this.workerEpoch},"Heartbeat",{timeout:5000})).ok)Z("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),POA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")bOA(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:Fs()}}}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=kOA(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:Fs()},...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":_U()},validateStatus:Ns,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${JA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(Y)}continue}if(E.status>=200&&E.status<300)return E.data;if(E.status===409)this.handleEpochMismatch();if(Z(`CCRClient: GET ${A} returned ${E.status} (attempt ${I}/10)`,{level:"warn"}),I<10){let C=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),u("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),j4(),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()}}$Q();LC();pQ();DQ();var yOA=1000,fOA=30000,hOA=600000,mOA=45000,uOA=new Set([401,403,404]),k4=10,cOA=500,pOA=8000,lOA={stream:!0};function iOA(){return!0}function dOA(A){let Q=[],B=0,I;while((I=A.indexOf(`
184
+ `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Ys){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),u("info","cli_websocket_sleep_detected_on_ping",{gapMs:B}),this.handleConnectionError();return}if(!this.pongReceived){Z("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),u("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),u("error","cli_websocket_ping_failed")}}},LOA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),iA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(wOA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),u("error","cli_websocket_keepalive_failed")}},xOA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var jOA=100,gOA=15000,qOA=3000;class EL extends IL{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=OOA(A),this.uploader=new qY({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{u("error","cli_hybrid_batch_dropped_max_failures",{batchSize:J,failures:G}),Y?.(J,G)},send:(J)=>this.postOnce(J)}),Z(`HybridTransport: POST URL = ${this.postUrl}`),u("info","cli_hybrid_transport_initialized")}async write(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),jOA);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,qOA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=KD();if(!Q){Z("HybridTransport: No session token available for POST"),u("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await PQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:gOA})}catch(E){throw Z(`HybridTransport: POST error: ${JA(E)}`),u("warn","cli_hybrid_post_network_error"),E}if(I.status>=200&&I.status<300){Z(`HybridTransport: POST success count=${A.length}`);return}if(I.status>=400&&I.status<500&&I.status!==429){Z(`HybridTransport: POST returned ${I.status} (permanent), dropping`),u("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),u("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function OOA(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 Fs}from"crypto";$Q();LC();pQ();DQ();function SOA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return _Q(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Gs(A){let Q=SOA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}$Q();LC();pQ();function _U(){return"claude-code/0.2.109"}class CL{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Us(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async drain(){if(this.inflight||this.closed)return;if(!this.pending)return;let A=this.pending;this.pending=null,this.inflight=this.sendWithRetry(A).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(A){let Q=A,B=0;while(!this.closed){if(await this.config.send(Q))return;if(B++,await hB(this.retryDelay(B)),this.pending&&!this.closed)Q=Us(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 Us(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 _OA=20000,POA=100;function Ns(){return!0}class W2 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var vOA=10;function TOA(){return{byMessage:new Map,scopeToMessage:new Map}}function V2(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function kOA(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(V2(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(V2(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(V2(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 bOA(A,Q){A.byMessage.delete(Q.message.id);let B=V2(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class YL{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=nr({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=TOA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??_OA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??wV,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 CL({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new jG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qY({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new jG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qY({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new jG("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 W2("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 W2("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState();if(!(await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)")).ok)throw new W2("worker_register_failed");this.currentState="idle",this.startHeartbeat(),Q2(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),u("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)u("info","cli_worker_state_restored",{duration_ms:C,had_state:E!==null});return E}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:null,durationMs:0};return{metadata:(await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state"))?.worker?.external_metadata??null,durationMs:Date.now()-A}}async request(A,Q,B,I,{timeout:E=1e4}={}){let C=this.getAuthHeaders();if(Object.keys(C).length===0)return{ok:!1};try{let Y=await this.http[A](`${this.sessionBaseUrl}${Q}`,B,{headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":_U()},validateStatus:Ns,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=KD(),G=J?Gs(J):null;if(G!==null&&G*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(G*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),u("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=vOA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),u("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),u("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${JA(Y)}`,{level:"warn"}),u("warn","cli_worker_request_error",{method:A,path:Q,error_code:eI(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),u("error","cli_worker_epoch_mismatch"),this.onEpochMismatch()}startHeartbeat(){this.stopHeartbeat();let A=()=>{let B=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(Q,this.heartbeatIntervalMs+B)},Q=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;A()};A()}stopHeartbeat(){if(this.heartbeatTimer)clearTimeout(this.heartbeatTimer),this.heartbeatTimer=null}async sendHeartbeat(){if(this.heartbeatInFlight)return;this.heartbeatInFlight=!0;try{if((await this.request("post","/worker/heartbeat",{session_id:this.sessionId,worker_epoch:this.workerEpoch},"Heartbeat",{timeout:5000})).ok)Z("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(A){if(A.type==="stream_event"){if(this.streamEventBuffer.push(A),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),POA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")bOA(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:Fs()}}}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=kOA(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:Fs()},...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":_U()},validateStatus:Ns,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${JA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(Y)}continue}if(E.status>=200&&E.status<300)return E.data;if(E.status===409)this.handleEpochMismatch();if(Z(`CCRClient: GET ${A} returned ${E.status} (attempt ${I}/10)`,{level:"warn"}),I<10){let C=Math.min(500*2**(I-1),30000)+Math.random()*500;await hB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),u("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),j4(),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()}}$Q();LC();pQ();DQ();var yOA=1000,fOA=30000,hOA=600000,mOA=45000,uOA=new Set([401,403,404]),k4=10,cOA=500,pOA=8000,lOA={stream:!0};function iOA(){return!0}function dOA(A){let Q=[],B=0,I;while((I=A.indexOf(`
185
185
 
186
186
  `,B))!==-1){let E=A.slice(B,I);if(B=I+2,!E.trim())continue;let C={},Y=!1;for(let J of E.split(`
187
187
  `)){if(J.startsWith(":")){Y=!0;continue}let G=J.indexOf(":");if(G===-1)continue;let U=J.slice(0,G),F=J[G+1]===" "?J.slice(G+2):J.slice(G+1);switch(U){case"event":C.event=F;break;case"id":C.id=F;break;case"data":C.data=C.data?C.data+`
@@ -191,4 +191,4 @@ ${E}`;break;case"retry":if(qr(E))Q[I]=E;break;case"id":if(Or(E))Q[I]=E;break;cas
191
191
  `);if(I.push(J),!G){E=J.endsWith(`
192
192
  `);continue}let{frames:U,remaining:F}=dOA(I.join(""));I=F?[F]:[],E=F.endsWith(`
193
193
  `);for(let N of U){if(this.resetLivenessTimer(),N.id){let D=parseInt(N.id,10);if(!isNaN(D)){if(this.seenSequenceNums.has(D))Z(`SSETransport: DUPLICATE frame seq=${D} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),u("warn","cli_sse_duplicate_sequence");else if(this.seenSequenceNums.add(D),this.seenSequenceNums.size>1000){let W=this.lastSequenceNum-200;for(let $ of this.seenSequenceNums)if($<W)this.seenSequenceNums.delete($)}if(D>this.lastSequenceNum)this.lastSequenceNum=D}}if(N.event&&N.data)this.handleSSEFrame(N.event,N.data);else if(N.data)Z("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),u("warn","cli_sse_frame_missing_event_field")}}}catch(C){if(this.abortController?.signal.aborted)return;Z(`SSETransport: Stream read error: ${JA(C)}`,{level:"error"}),u("error","cli_sse_stream_read_error")}finally{Q.releaseLock()}if(this.state!=="closing"&&this.state!=="closed")Z("SSETransport: Stream ended, reconnecting"),this.handleConnectionError()}handleSSEFrame(A,Q){if(A!=="client_event"){Z(`SSETransport: Unexpected SSE event type '${A}' on worker stream`,{level:"warn"}),u("warn","cli_sse_unexpected_event_type",{event_type:A});return}let B;try{B=_Q(Q)}catch(E){Z(`SSETransport: Failed to parse client_event data: ${JA(E)}`,{level:"error"});return}let I=B.payload;if(I&&typeof I==="object"&&"type"in I){let E=this.sessionId?` session=${this.sessionId}`:"";Z(`SSETransport: Event seq=${B.sequence_num} event_id=${B.event_id} event_type=${B.event_type} payload_type=${String(I.type)}${E}`),u("info","cli_sse_message_received"),this.onData?.(HA(I)+`
194
- `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<hOA){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(yOA*Math.pow(2,this.reconnectAttempts-1),fOA),I=Math.max(0,B+B*0.25*(2*Math.random()-1));Z(`SSETransport: Reconnecting in ${Math.round(I)}ms (attempt ${this.reconnectAttempts}, ${Math.round(Q/1000)}s elapsed)`),u("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}else Z(`SSETransport: Reconnection time budget exhausted after ${Math.round(Q/1000)}s`,{level:"error"}),u("error","cli_sse_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:Q}),this.state="closed",this.onCloseCallback?.()}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),u("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,mOA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),u("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":_U()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=k4;I++){try{let C=await PQ.post(this.postUrl,A,{headers:B,validateStatus:iOA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${HA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),u("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${k4}`),u("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${k4}`),u("warn","cli_sse_post_network_error",{attempt:I})}if(I===k4){Z(`SSETransport: POST failed after ${k4} attempts, continuing`),u("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(cOA*Math.pow(2,I-1),pOA);await hB(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}[Symbol.dispose](){this.close()}}function nOA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}$Q();pQ();function Ds(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 $s(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let X=C();if(!X)return{};return{Authorization:`Bearer ${X}`}};else HD(B);let J=A.epoch??await jm(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 JL(G,{},I,void 0,E,Y),F,N=new YL(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{Z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(X){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(X)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((X)=>{N.reportDelivery(X.event_id,"received"),N.reportDelivery(X.event_id,"processed")});let D,W=!1,$=!1;return{write(X){return N.writeEvent(X)},async writeBatch(X){for(let V of X){if($)break;await N.writeEvent(V)}},close(){$=!0,N.close(),U.close()},isConnectedStatus(){return W},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return W?"connected":"init";return"connecting"},setOnData(X){U.setOnData(X)},setOnClose(X){F=X,U.setOnClose((V)=>{N.close(),X(V??4092)})},setOnConnect(X){D=X},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(X,V){N.reportState(X,V)},reportMetadata(X){N.reportMetadata(X)},reportDelivery(X,V){N.reportDelivery(X,V)},flush(){return N.flush()},getInternalEventWriter(){return(X,V,M)=>N.writeInternalEvent(X,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{W=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),D?.()},(X)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${JA(X)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}$Q();pQ();var oOA="2023-06-01",aOA="ccr-byoc-2025-07-29";async function Ws({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 PQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:Z2(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${JA(W)}`),null}if(N.status!==200&&N.status!==201){let W=gY(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 Vs(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 PQ.post(Y,{},{headers:Z2(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=gY(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${JA(J)}`)}}async function X2(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:RG(Q),repo:B,pr_number:I},U;try{U=await PQ.post(J,G,{headers:Z2(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${JA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=gY(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}async function M2(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-thread`),!1;let J=`${E}/v1/code/slack/${A}-thread`,G={session_id:RG(Q),channel:B,thread_ts:I},U;try{U=await PQ.post(J,G,{headers:Z2(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-thread request failed: ${JA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=gY(U.data);return Z(`[bridge] ${A}-thread failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-thread ${B}/${I} ok`),!0}function Z2(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":oOA,"anthropic-beta":aOA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}IB();function Xs(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 GL{_active=!1;_pending=[];get active(){return this._active}get pendingCount(){return this._pending.length}start(){this._active=!0}end(){return this._active=!1,this._pending.splice(0)}enqueue(...A){if(!this._active)return!1;return this._pending.push(...A),!0}drop(){this._active=!1;let A=this._pending.length;return this._pending.length=0,A}deactivate(){this._active=!1}}pQ();$Q();var JSA=2000,Hs=60000,Ls=900000,GSA=0;async function xs(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:D,getCurrentTitle:W=()=>Y,toSDKMessages:$=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:X,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>iN,initialHistoryCap:L=200,initialMessages:z,previouslyFlushedUUIDs:x,onInboundMessage:q,onPermissionResponse:O,onInterrupt:P,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:WA,onStateChange:BA,onUserMessage:IA,onSessionEstablished:c,onInitError:OA,perpetual:p,initialSSESequenceNum:xA=0,onTransportPersistenceReady:mA,onTransportPersistenceTeardown:l}=A,HQ=++GSA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:CA}=await Promise.resolve().then(() => (zs(),ws)),aA=p?await CA(Q):null,zA=aA?.source==="repl"?aA:null;Z(`[bridge:repl] initBridgeCore #${HQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let BQ=Vm({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.108",onDebug:Z,onAuth401:X,getTrustedDeviceToken:V}),gQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Ks(),workerType:U,environmentId:Ks(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},XA,VB;try{let k=await BQ.registerBridgeEnvironment(gQ);XA=k.environment_id,VB=k.environment_secret}catch(k){if(Wm("registration_failed",`[bridge:repl] Environment registration failed: ${JA(k)}`),OA?.(`[bridge:repl] Environment registration failed: ${JA(k)}`),zA&&k instanceof NE&&(k.status===410||k.status!==401&&VV(k.errorType)))await d(Q);return BA?.("failed",JA(k)),null}Z(`[bridge:repl] Environment registered: ${XA}`),u("info","bridge_repl_env_registered"),sA("tengu_bridge_repl_env_registered",{});async function qQ(k,AA){if(XA!==k)return Z(`[bridge:repl] Env mismatch (requested ${k}, got ${XA}) — cannot reconnect in place`),!1;let fA=N3(AA),jA=fA===AA?[AA]:[AA,fA];for(let LQ of jA)try{return await BQ.reconnectSession(XA,LQ),Z(`[bridge:repl] Reconnected session ${LQ} in place on env ${XA}`),!0}catch(rI){Z(`[bridge:repl] reconnectSession(${LQ}) failed: ${JA(rI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let l0=zA?await qQ(zA.environmentId,zA.sessionId):!1;if(zA&&!l0)await d(Q);let GA,s=new Set,MQ=new Set;if(l0&&zA){if(GA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${GA}`),z&&x)for(let k of z)x.add(k.uuid)}else{let k=await N({environmentId:XA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!k)return Z("[bridge:repl] Session creation failed, deregistering environment"),OA?.("[bridge:repl] Session creation failed, deregistering environment"),sA("tengu_bridge_repl_session_failed",{}),await BQ.deregisterEnvironment(XA).catch(()=>{}),BA?.("failed","Session creation failed"),null;GA=k,Z(`[bridge:repl] Session created: ${GA}`)}c?.(GA),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),u("info","bridge_repl_session_created"),sA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:Px(),...Mm()});let GQ=new Set;if(z)for(let k of z)GQ.add(k.uuid);let vA=new XV(2000);for(let k of GQ)vA.add(k);let KE=new XV(2000),xB=new AbortController,YA=null,HE=0,rQ=l0?xA:0,rA=null,dI=null,pC=Xs(xB.signal),XB=pC.wake,QJ=pC.signal,MB=new GL,nI=!IA,lC=3,oI=0,rE=null;async function tE(){if(rE)return rE;rE=aI();try{return await rE}finally{rE=null}}async function aI(){if(oI++,HE++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${oI}/${lC})`),oI>lC)return Z(`[bridge:repl] Environment reconnect limit reached (${lC}), giving up`),!1;if(YA){let jA=YA.getLastSequenceNum();if(jA>rQ)rQ=jA;l?.(),YA.close(),YA=null}if(XB(),MB.drop(),rA){let jA=rA;if(await BQ.stopWork(XA,jA,!1).catch(()=>{}),rA!==jA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),oI=0,!0;rA=null,dI=null}if(xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let k=XA;gQ.reuseEnvironmentId=k;try{let jA=await BQ.registerBridgeEnvironment(gQ);XA=jA.environment_id,VB=jA.environment_secret}catch(jA){return gQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${JA(jA)}`),!1}if(gQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${k} got=${XA}`),xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(XA).catch(()=>{}),!1;if(YA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),oI=0,!0;if(await qQ(k,GA))return sA("tengu_bridge_repl_reconnected_in_place",{}),oI=0,!0;if(XA!==k)sA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(GA),xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(XA).catch(()=>{}),!1;let AA=W(),fA=await N({environmentId:XA,title:AA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!fA)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(fA),!1;if(GA=fA,Sm(RG(fA)).catch(()=>{}),c?.(GA),rQ=0,KE.clear(),nI=!IA,Z(`[bridge:repl] Re-created session: ${GA}`),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),x?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let jA of s){let LQ=jA.lastIndexOf("#");X2("subscribe",GA,jA.slice(0,LQ),Number(jA.slice(LQ+1)),J,F)}}if(MQ.size>0){Z(`[bridge:repl] Replaying ${MQ.size} Slack thread subscription(s) against new session`);for(let jA of MQ){let LQ=jA.indexOf("/");M2("subscribe",GA,jA.slice(0,LQ),jA.slice(LQ+1),J,F)}}return oI=0,!0}function iC(){return F()}function BJ(){let k=MB.end();if(k.length===0)return;if(!YA){Z(`[bridge:repl] Cannot drain ${k.length} pending message(s): no transport`);return}for(let jA of k)vA.add(jA.uuid);let fA=$(k).map((jA)=>({...jA,session_id:GA}));Z(`[bridge:repl] Drained ${k.length} pending message(s) after flush`),YA.writeBatch(fA)}let i0=null;function z2(){i0?.()}function DL(k){if(Z(`[bridge:repl] Transport permanently closed: code=${k}`),sA("tengu_bridge_repl_ws_closed",{code:k}),YA){let fA=YA.getLastSequenceNum();if(fA>rQ)rQ=fA;l?.(),YA=null}XB();let AA=MB.drop();if(AA>0)Z(`[bridge:repl] Dropping ${AA} pending message(s) on transport close (code=${k})`,{level:"warn"});if(k===1000){BA?.("failed","session ended"),xB.abort(),z2();return}BA?.("reconnecting",`Remote Control connection lost (code ${k})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${k}), attempting env reconnect`),tE().then((fA)=>{if(fA)return;if(xB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),sA("tengu_bridge_repl_reconnect_failed",{close_code:k}),BA?.("failed","reconnection failed"),z2()})}let $L,gs=null,qs={api:BQ,getCredentials:()=>({environmentId:XA,environmentSecret:VB}),signal:xB.signal,getPollIntervalConfig:M,onStateChange:BA,getWsState:()=>YA?.getStateLabel()??"null",isAtCapacity:()=>YA!==null,capacitySignal:QJ,onFatalError:z2,getHeartbeatInfo:()=>{if(!rA||!dI)return null;return{environmentId:XA,workId:rA,sessionToken:dI}},onHeartbeatFatal:(k)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${k.status}) — tearing down work item for fast re-dispatch`),YA){let AA=YA.getLastSequenceNum();if(AA>rQ)rQ=AA;l?.(),YA.close(),YA=null}if(MB.drop(),rA)BQ.stopWork(XA,rA,!1).catch((AA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${JA(AA)}`)});rA=null,dI=null,XB(),BA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await tE())return null;return{environmentId:XA,environmentSecret:VB}},onWorkReceived:(k,AA,fA,jA)=>{if(YA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${fA})`);if(Z(`[bridge:repl] Work received: workId=${fA} workSessionId=${k} currentSessionId=${GA} match=${U3(k,GA)}`),n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),!U3(k,GA)){Z(`[bridge:repl] Rejecting foreign session: expected=${GA} got=${k}`);return}rA=fA,dI=AA;let LQ=jA||iA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rI;if(!LQ){if(rI=iC(),!rI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}HD(rI)}if(sA("tengu_bridge_repl_work_received",{}),YA){l?.();let kQ=YA;YA=null;let uQ=kQ.getLastSequenceNum();if(uQ>rQ)rQ=uQ;kQ.close()}MB.deactivate();let Ss=(kQ)=>Hm(kQ,{transport:YA,sessionId:GA,onInterrupt:P,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:WA}),x2=!1,XL=(kQ)=>{if(YA=kQ,kQ.setOnConnect(()=>{if(YA!==kQ)return;if(Z("[bridge:repl] Ingress transport connected"),sA("tengu_bridge_repl_ws_connected",{}),!LQ){let uQ=iC();if(uQ)HD(uQ)}if(L2=!1,!x2&&z&&z.length>0){x2=!0;let uQ=L,fB=z.filter((b4)=>J3(b4)&&!x?.has(b4.uuid)),sE=uQ>0&&fB.length>uQ?fB.slice(-uQ):fB;if(sE.length<fB.length)Z(`[bridge:repl] Capped initial flush: ${fB.length} -> ${sE.length} (cap=${uQ})`),sA("tengu_bridge_repl_history_capped",{eligible_count:fB.length,capped_count:sE.length});let dC=$(sE);if(dC.length>0){Z(`[bridge:repl] Flushing ${dC.length} initial message(s) via transport`);let b4=dC.map((IJ)=>({...IJ,session_id:GA})),ML=kQ.droppedBatchCount;kQ.writeBatch(b4).then(()=>{if(kQ.droppedBatchCount>ML){Z(`[bridge:repl] Initial flush dropped ${kQ.droppedBatchCount-ML} batch(es) — not marking ${dC.length} UUID(s) as flushed`);return}if(x){for(let IJ of dC)if(IJ.uuid)x.add(IJ.uuid)}}).catch((IJ)=>Z(`[bridge:repl] Initial flush failed: ${IJ}`)).finally(()=>{if(YA!==kQ)return;BJ(),BA?.("connected")})}else BJ(),BA?.("connected")}else if(!MB.active)BA?.("connected")}),kQ.setOnData((uQ)=>{Km(uQ,vA,KE,q,O,Ss)}),gs=DL,kQ.setOnClose((uQ)=>{if(YA!==kQ)return;DL(uQ)}),!x2&&z&&z.length>0)MB.start();kQ.connect()};if(HE++,LQ){let kQ=Rm(J,k),uQ=HE;Z(`[bridge:repl] CCR v2: sessionUrl=${kQ} session=${k} gen=${uQ}`),$s({sessionUrl:kQ,ingressToken:AA,sessionId:k,initialSequenceNum:rQ}).then((fB)=>{if(xB.signal.aborted){fB.close();return}if(uQ!==HE){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${HE}`),fB.close();return}if(XL(fB),mA){let sE=fB.getInternalEventWriter?.(),dC=fB.getInternalEventReaders?.();if(sE&&dC)mA(sE,dC)}},(fB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(fB)}`,{level:"error"}),sA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==HE)return;if(rA)BQ.stopWork(XA,rA,!1).catch((sE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${JA(sE)}`)}),rA=null,dI=null;XB()})}else{let kQ=xm(G,k);Z(`[bridge:repl] Ingress URL: ${kQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${k}`);let uQ=rI??"";XL(Ds(new EL(new URL(kQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},k,()=>({Authorization:`Bearer ${iC()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{BA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),XB()}})))}}};USA(qs);let K2=p?setInterval(()=>{if(rE)return;n(Q,{sessionId:GA,environmentId:XA,source:"repl"})},3600000):null;K2?.unref?.();let WL=M().session_keepalive_interval_v2_ms,H2=WL>0?setInterval(()=>{if(!YA)return;Z("[bridge:repl] keep_alive sent"),YA.write({type:"keep_alive"}).catch((k)=>{Z(`[bridge:repl] keep_alive write failed: ${JA(k)}`)})},WL):null;H2?.unref?.();let L2=!1;i0=async()=>{if(L2){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${XA} session=${GA}`);return}L2=!0,l?.();let k=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${XA} session=${GA} workId=${rA??"none"} transportState=${YA?.getStateLabel()??"null"}`),K2!==null)clearInterval(K2);if(H2!==null)clearInterval(H2);if($L)process.off("SIGUSR2",$L);if(xB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),YA){let jA=YA.getLastSequenceNum();if(jA>rQ)rQ=jA}if(p){YA=null,MB.drop(),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${XA} session=${GA} alive on server, duration=${Date.now()-k}ms`);return}let AA=YA;if(YA=null,MB.drop(),AA)AA.write(G3(GA));let fA=rA?BQ.stopWork(XA,rA,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((jA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${JA(jA)}`)}):Promise.resolve();await Promise.all([fA,D(GA)]),AA?.close(),Z("[bridge:repl] Teardown: transport closed"),await BQ.deregisterEnvironment(XA).catch((jA)=>{Z(`[bridge:repl] Teardown deregister failed: ${JA(jA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${XA} duration=${Date.now()-k}ms`)};let Os=I0(()=>i0?.());Z(`[bridge:repl] Ready: env=${XA} session=${GA}`),BA?.("ready");let VL={get bridgeSessionId(){return GA},get environmentId(){return XA},getSSESequenceNum(){let k=YA?.getLastSequenceNum()??0;return Math.max(rQ,k)},sessionIngressUrl:G,writeMessages(k){let AA=k.filter((LQ)=>J3(LQ)&&!GQ.has(LQ.uuid)&&!vA.has(LQ.uuid));if(AA.length===0)return;if(!nI)for(let LQ of AA){let rI=zm(LQ);if(rI!==void 0&&IA?.(rI,GA)){nI=!0;break}}if(MB.enqueue(...AA)){Z(`[bridge:repl] Queued ${AA.length} message(s) during initial flush`);return}if(!YA){let LQ=AA.map((rI)=>rI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${AA.length} message(s) [${LQ}] for session=${GA}`,{level:"warn"});return}for(let LQ of AA)vA.add(LQ.uuid);Z(`[bridge:repl] Sending ${AA.length} message(s) via transport`);let jA=$(AA).map((LQ)=>({...LQ,session_id:GA}));YA.writeBatch(jA)},writeSdkMessages(k){let AA=k.filter((jA)=>!jA.uuid||!vA.has(jA.uuid));if(AA.length===0)return;if(!YA){Z(`[bridge:repl] Transport not configured, dropping ${AA.length} SDK message(s) for session=${GA}`,{level:"warn"});return}for(let jA of AA)if(jA.uuid)vA.add(jA.uuid);let fA=AA.map((jA)=>({...jA,session_id:GA}));YA.writeBatch(fA)},sendControlRequest(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let AA={...k,session_id:GA};YA.write(AA),Z(`[bridge:repl] Sent control_request request_id=${k.request_id}`)},sendControlResponse(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let AA={...k,session_id:GA};YA.write(AA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let AA={type:"control_cancel_request",request_id:k,session_id:GA};YA.write(AA),Z(`[bridge:repl] Sent control_cancel_request request_id=${k}`)},sendResult(){if(!YA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${GA}`);return}YA.write(G3(GA)),Z(`[bridge:repl] Sent result for session=${GA}`)},async subscribePR(k,AA){let fA=await X2("subscribe",GA,k,AA,J,F);if(fA)s.add(`${k}#${AA}`);return fA},async unsubscribePR(k,AA){let fA=await X2("unsubscribe",GA,k,AA,J,F);if(fA)s.delete(`${k}#${AA}`);return fA},async subscribeSlackThread(k,AA){let fA=await M2("subscribe",GA,k,AA,J,F);if(fA)MQ.add(`${k}/${AA}`);return fA},async unsubscribeSlackThread(k,AA){let fA=await M2("unsubscribe",GA,k,AA,J,F);if(fA)MQ.delete(`${k}/${AA}`);return fA},async teardown(){Os(),await i0?.(),Z("[bridge:repl] Torn down"),sA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return VL.teardown()}};return VL}async function USA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>iN,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,X=null,V=null,M=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:x}=Q(),q=F();try{let O=await A.pollForWork(z,x,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,X=null,V=null,I?.("ready");if(!O){let b=L;if(L=!1,J?.()&&G&&!b){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){sA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let BA=a>0?Date.now()+a:null,IA=!1,c=0;while(!B.aborted&&J()&&(BA===null||Date.now()<BA)){let p=F();if(p.non_exclusive_heartbeat_interval_ms<=0)break;let xA=N();if(!xA)break;let mA=G();try{await A.heartbeatWork(xA.environmentId,xA.workId,xA.sessionToken)}catch(l){if(Z(`[bridge:repl:heartbeat] Failed: ${JA(l)}`),l instanceof NE){if(mA.cleanup(),sA("tengu_bridge_heartbeat_error",{status:l.status,error_type:l.status===401||l.status===403?"auth_failed":"fatal"}),D)D(l),Z(`[bridge:repl:heartbeat] Fatal (status=${l.status}), work state cleared — fast-polling for re-dispatch`);else IA=!0;break}}c++,await hB(p.non_exclusive_heartbeat_interval_ms,mA.signal),mA.cleanup()}let OA=IA?"error":B.aborted?"shutdown":!J()?"capacity_changed":BA!==null&&Date.now()>=BA?"poll_due":"config_disabled";if(sA("tengu_bridge_heartbeat_mode_exited",{reason:OA,heartbeat_cycles:c}),!IA){if(OA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${c} cycles — falling through to pollForWork`);continue}}let WA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(WA>0){let BA=G(),IA=Date.now();await hB(WA,BA.signal),BA.cleanup();let c=Date.now()-IA-WA;if(c>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(c/1000)}s — process suspension detected, forcing one fast-poll cycle`),sA("tengu_bridge_repl_suspension_detected",{overrun_ms:c}),L=!0}}else await hB(q.poll_interval_ms_not_at_capacity,B);continue}let P;try{P=Lm(O.secret)}catch(b){Z(`[bridge:repl] Failed to decode work secret: ${JA(b)}`),sA("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,P.session_ingress_token)}catch(b){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${JA(b)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let b=O.data.id;try{tB(b,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${b}`);continue}E(b,P.session_ingress_token,O.id,P.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof NE&&O.status===404&&C){let c=Q().environmentId;if(z!==c){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${c} — skipping onEnvironmentLost`),$=0,X=null;continue}if(M++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${M}/3)`),sA("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 OA=await C();if(B.aborted)break;if(OA){$=0,X=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${OA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof NE){let c=VV(O.errorType),OA=Xm(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${OA?" (suppressed)":""}`),sA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),u(c?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!OA)I?.("failed",c?"session expired · /remote-control to reconnect":O.message);U?.();break}let P=Date.now();if(V!==null&&P-V>Hs*2)Z(`[bridge:repl] Detected system sleep (${Math.round((P-V)/1000)}s gap), resetting poll error budget`),u("info","bridge_repl_poll_sleep_detected",{gapMs:P-V}),$=0,X=null;if(V=P,$++,X===null)X=P;let b=P-X,a=$m(O),WA=Dm(O),BA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(b/1000)}s, ws=${BA}): ${WA}`),sA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:b}),$===1)I?.("reconnecting",WA);if(b>=Ls){Z(`[bridge:repl] Poll failures exceeded ${Ls/1000}s (${$} errors), giving up`),u("info","bridge_repl_poll_give_up"),sA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:b,lastStatus:a}),I?.("failed","connection to server lost");break}let IA=Math.min(JSA*2**($-1),Hs);if(F().non_exclusive_heartbeat_interval_ms>0){let c=N?.();if(c)try{await A.heartbeatWork(c.environmentId,c.workId,c.sessionToken)}catch{}}await hB(IA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function FSA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function NSA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function DSA(A,Q){if(NSA(A,Q))return"http://localhost:4000";if(FSA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function Rs(A,Q){let{toCompatSessionId:B}=bs(gm),I=B(A);return`${DSA(I,Q)}/code/${I}`}$Q();async function js(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:D=!1,initialSSESequenceNum:W,onConflict:$}=A,X=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},L=[],z=null,x=[],q=null,O=[],P=null,b=!1,a=null,WA={detail:null},BA=$SA(),IA=()=>xs({dir:Q,registrationDir:B,machineName:BA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:X,onInitError:console.error,createSession:({environmentId:l,title:HQ,signal:n})=>Ws({environmentId:l,title:HQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(l)=>Vs(l,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...iN,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(l){let HQ=FT(l);if(!HQ)return;L.push({content:HQ.content,uuid:HQ.uuid}),z?.(),z=null},onInterrupt(){x.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:l}}),q?.(),q=null},onSetMaxThinkingTokens(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:l}}),q?.(),q=null},onPermissionResponse(l){O.push(l),P?.(),P=null},onStateChange(l,HQ){if(a?.(l,HQ),l==="failed")WA.detail=HQ??"unknown failure",b=!0,z?.(),q?.(),P?.()}}),c=await IA();if(!c&&$&&WA.detail?.includes("409")){if(await $({machineName:BA,message:WA.detail})==="takeover")b=!1,WA.detail=null,c=await IA()}if(!c){let l=WA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${l}`),{ok:!1,error:{kind:WA.detail?.includes("409")?"conflict":WA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:l}}}async function*OA(){while(!b){while(L.length>0)if(yield L.shift(),b)return;await new Promise((l)=>{z=l})}}async function*p(){while(!b){while(x.length>0)if(yield x.shift(),b)return;await new Promise((l)=>{q=l})}}async function*xA(){while(!b){while(O.length>0)if(yield O.shift(),b)return;await new Promise((l)=>{P=l})}}return{ok:!0,handle:{get sessionUrl(){return Rs(c.bridgeSessionId,V)},get environmentId(){return c.environmentId},get bridgeSessionId(){return c.bridgeSessionId},getSSESequenceNum(){return c.getSSESequenceNum()},hasPendingPrompts(){return L.length>0},write(l){c.writeSdkMessages([l])},sendResult(){c.sendResult()},sendControlRequest(l){c.sendControlRequest(l)},sendControlResponse(l){c.sendControlResponse(l)},sendControlCancelRequest(l){c.sendControlCancelRequest(l)},inboundPrompts:OA,controlRequests:p,permissionResponses:xA,onStateChange(l){a=l},async teardown(){b=!0,z?.(),q?.(),P?.(),await c.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var VSA=1000,XSA=1e4,MSA=5000,ZSA=60000,NL=3;function wSA(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 zSA(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"&&HL(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function KSA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let X=await js($);if(!X.ok)return D(`bridge connection failed: ${X.error.kind} — ${X.error.detail}`),{ok:!1,error:X.error};let V=X.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,L=V.bridgeSessionId,z=[],x=null,q=!1,O=null,P=0,b=!0,a=0,WA=Promise.resolve();function BA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};WA=WA.then(()=>G.save(s).catch((MQ)=>{D(`stateAdapter.save threw: ${MQ}`)}))}function IA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}BA()}BA();let c=new AbortController,OA=new Map,p=null;function xA(){return p??=(async()=>{IA();for(let s of OA.keys())V.sendControlCancelRequest(s);OA.clear(),await V.teardown(),await WA})()}if(N.addEventListener("abort",()=>{c.abort(),xA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await xA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let mA="connected";V.onStateChange((s,MQ)=>{if(D(`bridge state=${s} detail=${MQ??""}`),mA=s,s==="ready"&&V.bridgeSessionId!==L)L=V.bridgeSessionId,BA();else if(s==="connected")IA();if(s==="failed")D(`bridge failed: ${MQ??"unknown"}`),c.abort(),xA().catch((GQ)=>D(`teardown threw: ${GQ}`))});let l=I?.horizonMs??600000,HQ=I?.leadMs??MSA,n=null,d=!1,CA=!1,aA="";async function zA(){if(!I)return;let s=await JT(I.dir).catch((GQ)=>{return D(`computeCronHorizon threw: ${GQ}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,CA=s.hasOverdue;let MQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(MQ!==aA)aA=MQ,D(MQ)}let BB;if(I)await zA(),BB=setInterval(zA,XSA),BB.unref?.();function BQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),x?.(),x=null}async function gQ(s,MQ,GQ){if(C){let rA=await C(s,MQ,GQ);if(rA)return Y?.(s,rA),rA}if(mA!=="connected"){D(`permission denied — bridge state=${mA}, request would drop`);let rA={behavior:"deny",message:`Cannot request permission: remote control is ${mA}. Try again in a moment.`};return Y?.(s,rA),rA}let vA=WSA();D(`permission request tool=${s} req=${vA}`);let{signal:KE,suggestions:xB,blockedPath:YA,toolUseID:HE}=GQ;V.sendControlRequest({type:"control_request",request_id:vA,request:{subtype:"can_use_tool",tool_name:s,display_name:LL(s),input:MQ,tool_use_id:HE,...xB&&{permission_suggestions:xB},...YA&&{blocked_path:YA},..."decisionReason"in GQ&&GQ.decisionReason&&{decision_reason:GQ.decisionReason},..."agentID"in GQ&&GQ.agentID&&{agent_id:GQ.agentID}}});let rQ;try{let rA=await new Promise((pC,XB)=>{OA.set(vA,pC),rQ=setTimeout((QJ,MB,nI,lC,oI)=>{if(QJ.delete(MB))nI(`permission timeout req=${MB}`),lC.sendControlCancelRequest(MB),oI({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},ZSA,OA,vA,D,V,pC),rQ.unref?.(),KE.addEventListener("abort",()=>{if(OA.delete(vA))V.sendControlCancelRequest(vA);XB(Error("aborted"))},{once:!0})});D(`permission response req=${vA} behavior=${rA.behavior}`);let dI=rA.behavior==="allow"?{behavior:"allow",updatedInput:rA.updatedInput,updatedPermissions:rA.updatedPermissions}:{behavior:"deny",message:rA.message??"Denied via remote control"};return Y?.(s,dI),dI}finally{if(rQ)clearTimeout(rQ);OA.delete(vA)}}let XA=!1;async function VB(){if(O!==null||XA||c.signal.aborted)return;if(XA=!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((vA)=>{x=vA})}}D(`spawning query resume=${M??"<fresh>"}`);let MQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(vA)=>D(`[child] ${vA.trimEnd()}`),canUseTool:gQ},GQ;try{if(GQ=await E(MQ),B)GQ={...GQ,env:{...GQ.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(vA){if(D(`buildQueryOptions threw: ${vA}`),XA=!1,a++,a>=NL)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!c.signal.aborted)VB();return}if(c.signal.aborted){XA=!1;return}try{O=Sv({prompt:s(),options:GQ})}finally{XA=!1}(async()=>{try{D("output pump started");for await(let vA of O){if(vA.type==="system"&&vA.subtype==="init"){if(vA.session_id!==M)M=vA.session_id,IA()}if(vA.type==="result")b=!0,a=0,d=!0,IA();if(!wSA(vA))continue;let KE=J?J(vA):vA;if(KE===null)continue;V.write(KE)}}catch(vA){D(`query threw: ${vA}`),a++}finally{D("output pump ended"),O=null;for(let vA of OA.keys())V.sendControlCancelRequest(vA);if(OA.clear(),z.length>0&&!c.signal.aborted)if(a>=NL)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else VB()}})()}let qQ=setInterval(()=>{let s=Date.now(),MQ=n!==null&&n-s<l;if(O===null){let GQ=n!==null&&n-s<HQ;if((GQ||CA&&!d)&&a<NL&&!c.signal.aborted)D(GQ?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),VB();return}if(q)return;if(!b||z.length>0)return;if(s-P<F)return;if(MQ)return;if(CA&&!d)return;D("idle conditions met → closing input gen"),IA(),q=!0,x?.(),x=null},VSA);if(qQ.unref?.(),U)D("initialPrompt → injecting"),P=Date.now(),BQ(U),VB();let l0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(c.signal.aborted)return;if(D("bridge prompt received"),P=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});BQ(s.content),VB()}})(),(async()=>{for await(let s of V.controlRequests()){if(c.signal.aborted)return;switch(s.request.subtype){case"interrupt":D("bridge interrupt"),O?.interrupt();break;case"set_model":D(`bridge setModel=${s.request.model??"<default>"}`),O?.setModel(s.request.model);break;case"set_max_thinking_tokens":D(`bridge setMaxThinkingTokens=${s.request.max_thinking_tokens}`),O?.setMaxThinkingTokens(s.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let s of V.permissionResponses()){if(c.signal.aborted)return;let MQ=zSA(s,OA,V.sendControlCancelRequest);if(MQ)D(`permission response for unknown req=${MQ} (stale)`)}})()]),clearInterval(qQ),BB)clearInterval(BB);O?.close(),await xA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(s){P=Date.now(),BQ(s),VB()},async interrupt(){await O?.interrupt()},done:l0,teardown:xA,[Symbol.asyncDispose]:xA}}}export{KSA as runAssistantWorker};
194
+ `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<hOA){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(yOA*Math.pow(2,this.reconnectAttempts-1),fOA),I=Math.max(0,B+B*0.25*(2*Math.random()-1));Z(`SSETransport: Reconnecting in ${Math.round(I)}ms (attempt ${this.reconnectAttempts}, ${Math.round(Q/1000)}s elapsed)`),u("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}else Z(`SSETransport: Reconnection time budget exhausted after ${Math.round(Q/1000)}s`,{level:"error"}),u("error","cli_sse_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:Q}),this.state="closed",this.onCloseCallback?.()}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),u("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,mOA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),u("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":_U()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=k4;I++){try{let C=await PQ.post(this.postUrl,A,{headers:B,validateStatus:iOA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${HA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),u("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${k4}`),u("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${k4}`),u("warn","cli_sse_post_network_error",{attempt:I})}if(I===k4){Z(`SSETransport: POST failed after ${k4} attempts, continuing`),u("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(cOA*Math.pow(2,I-1),pOA);await hB(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}[Symbol.dispose](){this.close()}}function nOA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}$Q();pQ();function Ds(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 $s(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let X=C();if(!X)return{};return{Authorization:`Bearer ${X}`}};else HD(B);let J=A.epoch??await jm(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 JL(G,{},I,void 0,E,Y),F,N=new YL(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{Z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(X){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(X)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((X)=>{N.reportDelivery(X.event_id,"received"),N.reportDelivery(X.event_id,"processed")});let D,W=!1,$=!1;return{write(X){return N.writeEvent(X)},async writeBatch(X){for(let V of X){if($)break;await N.writeEvent(V)}},close(){$=!0,N.close(),U.close()},isConnectedStatus(){return W},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return W?"connected":"init";return"connecting"},setOnData(X){U.setOnData(X)},setOnClose(X){F=X,U.setOnClose((V)=>{N.close(),X(V??4092)})},setOnConnect(X){D=X},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(X,V){N.reportState(X,V)},reportMetadata(X){N.reportMetadata(X)},reportDelivery(X,V){N.reportDelivery(X,V)},flush(){return N.flush()},getInternalEventWriter(){return(X,V,M)=>N.writeInternalEvent(X,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{W=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),D?.()},(X)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${JA(X)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}$Q();pQ();var oOA="2023-06-01",aOA="ccr-byoc-2025-07-29";async function Ws({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 PQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:Z2(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${JA(W)}`),null}if(N.status!==200&&N.status!==201){let W=gY(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 Vs(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 PQ.post(Y,{},{headers:Z2(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=gY(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${JA(J)}`)}}async function X2(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:RG(Q),repo:B,pr_number:I},U;try{U=await PQ.post(J,G,{headers:Z2(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${JA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=gY(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}async function M2(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-thread`),!1;let J=`${E}/v1/code/slack/${A}-thread`,G={session_id:RG(Q),channel:B,thread_ts:I},U;try{U=await PQ.post(J,G,{headers:Z2(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-thread request failed: ${JA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=gY(U.data);return Z(`[bridge] ${A}-thread failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-thread ${B}/${I} ok`),!0}function Z2(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":oOA,"anthropic-beta":aOA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}IB();function Xs(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 GL{_active=!1;_pending=[];get active(){return this._active}get pendingCount(){return this._pending.length}start(){this._active=!0}end(){return this._active=!1,this._pending.splice(0)}enqueue(...A){if(!this._active)return!1;return this._pending.push(...A),!0}drop(){this._active=!1;let A=this._pending.length;return this._pending.length=0,A}deactivate(){this._active=!1}}pQ();$Q();var JSA=2000,Hs=60000,Ls=900000,GSA=0;async function xs(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:D,getCurrentTitle:W=()=>Y,toSDKMessages:$=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:X,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>iN,initialHistoryCap:L=200,initialMessages:z,previouslyFlushedUUIDs:x,onInboundMessage:q,onPermissionResponse:O,onInterrupt:P,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:WA,onStateChange:BA,onUserMessage:IA,onSessionEstablished:c,onInitError:OA,perpetual:p,initialSSESequenceNum:xA=0,onTransportPersistenceReady:mA,onTransportPersistenceTeardown:l}=A,HQ=++GSA,{writeBridgePointer:n,clearBridgePointer:d,readBridgePointer:CA}=await Promise.resolve().then(() => (zs(),ws)),aA=p?await CA(Q):null,zA=aA?.source==="repl"?aA:null;Z(`[bridge:repl] initBridgeCore #${HQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let BQ=Vm({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.109",onDebug:Z,onAuth401:X,getTrustedDeviceToken:V}),gQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Ks(),workerType:U,environmentId:Ks(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},XA,VB;try{let k=await BQ.registerBridgeEnvironment(gQ);XA=k.environment_id,VB=k.environment_secret}catch(k){if(Wm("registration_failed",`[bridge:repl] Environment registration failed: ${JA(k)}`),OA?.(`[bridge:repl] Environment registration failed: ${JA(k)}`),zA&&k instanceof NE&&(k.status===410||k.status!==401&&VV(k.errorType)))await d(Q);return BA?.("failed",JA(k)),null}Z(`[bridge:repl] Environment registered: ${XA}`),u("info","bridge_repl_env_registered"),sA("tengu_bridge_repl_env_registered",{});async function qQ(k,AA){if(XA!==k)return Z(`[bridge:repl] Env mismatch (requested ${k}, got ${XA}) — cannot reconnect in place`),!1;let fA=N3(AA),jA=fA===AA?[AA]:[AA,fA];for(let LQ of jA)try{return await BQ.reconnectSession(XA,LQ),Z(`[bridge:repl] Reconnected session ${LQ} in place on env ${XA}`),!0}catch(rI){Z(`[bridge:repl] reconnectSession(${LQ}) failed: ${JA(rI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let l0=zA?await qQ(zA.environmentId,zA.sessionId):!1;if(zA&&!l0)await d(Q);let GA,s=new Set,MQ=new Set;if(l0&&zA){if(GA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${GA}`),z&&x)for(let k of z)x.add(k.uuid)}else{let k=await N({environmentId:XA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!k)return Z("[bridge:repl] Session creation failed, deregistering environment"),OA?.("[bridge:repl] Session creation failed, deregistering environment"),sA("tengu_bridge_repl_session_failed",{}),await BQ.deregisterEnvironment(XA).catch(()=>{}),BA?.("failed","Session creation failed"),null;GA=k,Z(`[bridge:repl] Session created: ${GA}`)}c?.(GA),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),u("info","bridge_repl_session_created"),sA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:Px(),...Mm()});let GQ=new Set;if(z)for(let k of z)GQ.add(k.uuid);let vA=new XV(2000);for(let k of GQ)vA.add(k);let KE=new XV(2000),xB=new AbortController,YA=null,HE=0,rQ=l0?xA:0,rA=null,dI=null,pC=Xs(xB.signal),XB=pC.wake,QJ=pC.signal,MB=new GL,nI=!IA,lC=3,oI=0,rE=null;async function tE(){if(rE)return rE;rE=aI();try{return await rE}finally{rE=null}}async function aI(){if(oI++,HE++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${oI}/${lC})`),oI>lC)return Z(`[bridge:repl] Environment reconnect limit reached (${lC}), giving up`),!1;if(YA){let jA=YA.getLastSequenceNum();if(jA>rQ)rQ=jA;l?.(),YA.close(),YA=null}if(XB(),MB.drop(),rA){let jA=rA;if(await BQ.stopWork(XA,jA,!1).catch(()=>{}),rA!==jA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),oI=0,!0;rA=null,dI=null}if(xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let k=XA;gQ.reuseEnvironmentId=k;try{let jA=await BQ.registerBridgeEnvironment(gQ);XA=jA.environment_id,VB=jA.environment_secret}catch(jA){return gQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${JA(jA)}`),!1}if(gQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${k} got=${XA}`),xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(XA).catch(()=>{}),!1;if(YA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),oI=0,!0;if(await qQ(k,GA))return sA("tengu_bridge_repl_reconnected_in_place",{}),oI=0,!0;if(XA!==k)sA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(GA),xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(XA).catch(()=>{}),!1;let AA=W(),fA=await N({environmentId:XA,title:AA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!fA)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(xB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(fA),!1;if(GA=fA,Sm(RG(fA)).catch(()=>{}),c?.(GA),rQ=0,KE.clear(),nI=!IA,Z(`[bridge:repl] Re-created session: ${GA}`),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),x?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let jA of s){let LQ=jA.lastIndexOf("#");X2("subscribe",GA,jA.slice(0,LQ),Number(jA.slice(LQ+1)),J,F)}}if(MQ.size>0){Z(`[bridge:repl] Replaying ${MQ.size} Slack thread subscription(s) against new session`);for(let jA of MQ){let LQ=jA.indexOf("/");M2("subscribe",GA,jA.slice(0,LQ),jA.slice(LQ+1),J,F)}}return oI=0,!0}function iC(){return F()}function BJ(){let k=MB.end();if(k.length===0)return;if(!YA){Z(`[bridge:repl] Cannot drain ${k.length} pending message(s): no transport`);return}for(let jA of k)vA.add(jA.uuid);let fA=$(k).map((jA)=>({...jA,session_id:GA}));Z(`[bridge:repl] Drained ${k.length} pending message(s) after flush`),YA.writeBatch(fA)}let i0=null;function z2(){i0?.()}function DL(k){if(Z(`[bridge:repl] Transport permanently closed: code=${k}`),sA("tengu_bridge_repl_ws_closed",{code:k}),YA){let fA=YA.getLastSequenceNum();if(fA>rQ)rQ=fA;l?.(),YA=null}XB();let AA=MB.drop();if(AA>0)Z(`[bridge:repl] Dropping ${AA} pending message(s) on transport close (code=${k})`,{level:"warn"});if(k===1000){BA?.("failed","session ended"),xB.abort(),z2();return}BA?.("reconnecting",`Remote Control connection lost (code ${k})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${k}), attempting env reconnect`),tE().then((fA)=>{if(fA)return;if(xB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),sA("tengu_bridge_repl_reconnect_failed",{close_code:k}),BA?.("failed","reconnection failed"),z2()})}let $L,gs=null,qs={api:BQ,getCredentials:()=>({environmentId:XA,environmentSecret:VB}),signal:xB.signal,getPollIntervalConfig:M,onStateChange:BA,getWsState:()=>YA?.getStateLabel()??"null",isAtCapacity:()=>YA!==null,capacitySignal:QJ,onFatalError:z2,getHeartbeatInfo:()=>{if(!rA||!dI)return null;return{environmentId:XA,workId:rA,sessionToken:dI}},onHeartbeatFatal:(k)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${k.status}) — tearing down work item for fast re-dispatch`),YA){let AA=YA.getLastSequenceNum();if(AA>rQ)rQ=AA;l?.(),YA.close(),YA=null}if(MB.drop(),rA)BQ.stopWork(XA,rA,!1).catch((AA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${JA(AA)}`)});rA=null,dI=null,XB(),BA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await tE())return null;return{environmentId:XA,environmentSecret:VB}},onWorkReceived:(k,AA,fA,jA)=>{if(YA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${fA})`);if(Z(`[bridge:repl] Work received: workId=${fA} workSessionId=${k} currentSessionId=${GA} match=${U3(k,GA)}`),n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),!U3(k,GA)){Z(`[bridge:repl] Rejecting foreign session: expected=${GA} got=${k}`);return}rA=fA,dI=AA;let LQ=jA||iA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rI;if(!LQ){if(rI=iC(),!rI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}HD(rI)}if(sA("tengu_bridge_repl_work_received",{}),YA){l?.();let kQ=YA;YA=null;let uQ=kQ.getLastSequenceNum();if(uQ>rQ)rQ=uQ;kQ.close()}MB.deactivate();let Ss=(kQ)=>Hm(kQ,{transport:YA,sessionId:GA,onInterrupt:P,onSetModel:b,onSetMaxThinkingTokens:a,onSetPermissionMode:WA}),x2=!1,XL=(kQ)=>{if(YA=kQ,kQ.setOnConnect(()=>{if(YA!==kQ)return;if(Z("[bridge:repl] Ingress transport connected"),sA("tengu_bridge_repl_ws_connected",{}),!LQ){let uQ=iC();if(uQ)HD(uQ)}if(L2=!1,!x2&&z&&z.length>0){x2=!0;let uQ=L,fB=z.filter((b4)=>J3(b4)&&!x?.has(b4.uuid)),sE=uQ>0&&fB.length>uQ?fB.slice(-uQ):fB;if(sE.length<fB.length)Z(`[bridge:repl] Capped initial flush: ${fB.length} -> ${sE.length} (cap=${uQ})`),sA("tengu_bridge_repl_history_capped",{eligible_count:fB.length,capped_count:sE.length});let dC=$(sE);if(dC.length>0){Z(`[bridge:repl] Flushing ${dC.length} initial message(s) via transport`);let b4=dC.map((IJ)=>({...IJ,session_id:GA})),ML=kQ.droppedBatchCount;kQ.writeBatch(b4).then(()=>{if(kQ.droppedBatchCount>ML){Z(`[bridge:repl] Initial flush dropped ${kQ.droppedBatchCount-ML} batch(es) — not marking ${dC.length} UUID(s) as flushed`);return}if(x){for(let IJ of dC)if(IJ.uuid)x.add(IJ.uuid)}}).catch((IJ)=>Z(`[bridge:repl] Initial flush failed: ${IJ}`)).finally(()=>{if(YA!==kQ)return;BJ(),BA?.("connected")})}else BJ(),BA?.("connected")}else if(!MB.active)BA?.("connected")}),kQ.setOnData((uQ)=>{Km(uQ,vA,KE,q,O,Ss)}),gs=DL,kQ.setOnClose((uQ)=>{if(YA!==kQ)return;DL(uQ)}),!x2&&z&&z.length>0)MB.start();kQ.connect()};if(HE++,LQ){let kQ=Rm(J,k),uQ=HE;Z(`[bridge:repl] CCR v2: sessionUrl=${kQ} session=${k} gen=${uQ}`),$s({sessionUrl:kQ,ingressToken:AA,sessionId:k,initialSequenceNum:rQ}).then((fB)=>{if(xB.signal.aborted){fB.close();return}if(uQ!==HE){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${HE}`),fB.close();return}if(XL(fB),mA){let sE=fB.getInternalEventWriter?.(),dC=fB.getInternalEventReaders?.();if(sE&&dC)mA(sE,dC)}},(fB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(fB)}`,{level:"error"}),sA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==HE)return;if(rA)BQ.stopWork(XA,rA,!1).catch((sE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${JA(sE)}`)}),rA=null,dI=null;XB()})}else{let kQ=xm(G,k);Z(`[bridge:repl] Ingress URL: ${kQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${k}`);let uQ=rI??"";XL(Ds(new EL(new URL(kQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},k,()=>({Authorization:`Bearer ${iC()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{BA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),XB()}})))}}};USA(qs);let K2=p?setInterval(()=>{if(rE)return;n(Q,{sessionId:GA,environmentId:XA,source:"repl"})},3600000):null;K2?.unref?.();let WL=M().session_keepalive_interval_v2_ms,H2=WL>0?setInterval(()=>{if(!YA)return;Z("[bridge:repl] keep_alive sent"),YA.write({type:"keep_alive"}).catch((k)=>{Z(`[bridge:repl] keep_alive write failed: ${JA(k)}`)})},WL):null;H2?.unref?.();let L2=!1;i0=async()=>{if(L2){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${XA} session=${GA}`);return}L2=!0,l?.();let k=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${XA} session=${GA} workId=${rA??"none"} transportState=${YA?.getStateLabel()??"null"}`),K2!==null)clearInterval(K2);if(H2!==null)clearInterval(H2);if($L)process.off("SIGUSR2",$L);if(xB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),YA){let jA=YA.getLastSequenceNum();if(jA>rQ)rQ=jA}if(p){YA=null,MB.drop(),await n(Q,{sessionId:GA,environmentId:XA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${XA} session=${GA} alive on server, duration=${Date.now()-k}ms`);return}let AA=YA;if(YA=null,MB.drop(),AA)AA.write(G3(GA));let fA=rA?BQ.stopWork(XA,rA,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((jA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${JA(jA)}`)}):Promise.resolve();await Promise.all([fA,D(GA)]),AA?.close(),Z("[bridge:repl] Teardown: transport closed"),await BQ.deregisterEnvironment(XA).catch((jA)=>{Z(`[bridge:repl] Teardown deregister failed: ${JA(jA)}`)}),await d(Q),Z(`[bridge:repl] Teardown complete: env=${XA} duration=${Date.now()-k}ms`)};let Os=I0(()=>i0?.());Z(`[bridge:repl] Ready: env=${XA} session=${GA}`),BA?.("ready");let VL={get bridgeSessionId(){return GA},get environmentId(){return XA},getSSESequenceNum(){let k=YA?.getLastSequenceNum()??0;return Math.max(rQ,k)},sessionIngressUrl:G,writeMessages(k){let AA=k.filter((LQ)=>J3(LQ)&&!GQ.has(LQ.uuid)&&!vA.has(LQ.uuid));if(AA.length===0)return;if(!nI)for(let LQ of AA){let rI=zm(LQ);if(rI!==void 0&&IA?.(rI,GA)){nI=!0;break}}if(MB.enqueue(...AA)){Z(`[bridge:repl] Queued ${AA.length} message(s) during initial flush`);return}if(!YA){let LQ=AA.map((rI)=>rI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${AA.length} message(s) [${LQ}] for session=${GA}`,{level:"warn"});return}for(let LQ of AA)vA.add(LQ.uuid);Z(`[bridge:repl] Sending ${AA.length} message(s) via transport`);let jA=$(AA).map((LQ)=>({...LQ,session_id:GA}));YA.writeBatch(jA)},writeSdkMessages(k){let AA=k.filter((jA)=>!jA.uuid||!vA.has(jA.uuid));if(AA.length===0)return;if(!YA){Z(`[bridge:repl] Transport not configured, dropping ${AA.length} SDK message(s) for session=${GA}`,{level:"warn"});return}for(let jA of AA)if(jA.uuid)vA.add(jA.uuid);let fA=AA.map((jA)=>({...jA,session_id:GA}));YA.writeBatch(fA)},sendControlRequest(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let AA={...k,session_id:GA};YA.write(AA),Z(`[bridge:repl] Sent control_request request_id=${k.request_id}`)},sendControlResponse(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let AA={...k,session_id:GA};YA.write(AA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(k){if(!YA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let AA={type:"control_cancel_request",request_id:k,session_id:GA};YA.write(AA),Z(`[bridge:repl] Sent control_cancel_request request_id=${k}`)},sendResult(){if(!YA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${GA}`);return}YA.write(G3(GA)),Z(`[bridge:repl] Sent result for session=${GA}`)},async subscribePR(k,AA){let fA=await X2("subscribe",GA,k,AA,J,F);if(fA)s.add(`${k}#${AA}`);return fA},async unsubscribePR(k,AA){let fA=await X2("unsubscribe",GA,k,AA,J,F);if(fA)s.delete(`${k}#${AA}`);return fA},async subscribeSlackThread(k,AA){let fA=await M2("subscribe",GA,k,AA,J,F);if(fA)MQ.add(`${k}/${AA}`);return fA},async unsubscribeSlackThread(k,AA){let fA=await M2("unsubscribe",GA,k,AA,J,F);if(fA)MQ.delete(`${k}/${AA}`);return fA},async teardown(){Os(),await i0?.(),Z("[bridge:repl] Torn down"),sA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return VL.teardown()}};return VL}async function USA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>iN,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,X=null,V=null,M=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:x}=Q(),q=F();try{let O=await A.pollForWork(z,x,B,q.reclaim_older_than_ms);if(M=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,X=null,V=null,I?.("ready");if(!O){let b=L;if(L=!1,J?.()&&G&&!b){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){sA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let BA=a>0?Date.now()+a:null,IA=!1,c=0;while(!B.aborted&&J()&&(BA===null||Date.now()<BA)){let p=F();if(p.non_exclusive_heartbeat_interval_ms<=0)break;let xA=N();if(!xA)break;let mA=G();try{await A.heartbeatWork(xA.environmentId,xA.workId,xA.sessionToken)}catch(l){if(Z(`[bridge:repl:heartbeat] Failed: ${JA(l)}`),l instanceof NE){if(mA.cleanup(),sA("tengu_bridge_heartbeat_error",{status:l.status,error_type:l.status===401||l.status===403?"auth_failed":"fatal"}),D)D(l),Z(`[bridge:repl:heartbeat] Fatal (status=${l.status}), work state cleared — fast-polling for re-dispatch`);else IA=!0;break}}c++,await hB(p.non_exclusive_heartbeat_interval_ms,mA.signal),mA.cleanup()}let OA=IA?"error":B.aborted?"shutdown":!J()?"capacity_changed":BA!==null&&Date.now()>=BA?"poll_due":"config_disabled";if(sA("tengu_bridge_heartbeat_mode_exited",{reason:OA,heartbeat_cycles:c}),!IA){if(OA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${c} cycles — falling through to pollForWork`);continue}}let WA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(WA>0){let BA=G(),IA=Date.now();await hB(WA,BA.signal),BA.cleanup();let c=Date.now()-IA-WA;if(c>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(c/1000)}s — process suspension detected, forcing one fast-poll cycle`),sA("tengu_bridge_repl_suspension_detected",{overrun_ms:c}),L=!0}}else await hB(q.poll_interval_ms_not_at_capacity,B);continue}let P;try{P=Lm(O.secret)}catch(b){Z(`[bridge:repl] Failed to decode work secret: ${JA(b)}`),sA("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,P.session_ingress_token)}catch(b){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${JA(b)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let b=O.data.id;try{tB(b,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${b}`);continue}E(b,P.session_ingress_token,O.id,P.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof NE&&O.status===404&&C){let c=Q().environmentId;if(z!==c){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${c} — skipping onEnvironmentLost`),$=0,X=null;continue}if(M++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${M}/3)`),sA("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 OA=await C();if(B.aborted)break;if(OA){$=0,X=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${OA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof NE){let c=VV(O.errorType),OA=Xm(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${OA?" (suppressed)":""}`),sA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),u(c?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!OA)I?.("failed",c?"session expired · /remote-control to reconnect":O.message);U?.();break}let P=Date.now();if(V!==null&&P-V>Hs*2)Z(`[bridge:repl] Detected system sleep (${Math.round((P-V)/1000)}s gap), resetting poll error budget`),u("info","bridge_repl_poll_sleep_detected",{gapMs:P-V}),$=0,X=null;if(V=P,$++,X===null)X=P;let b=P-X,a=$m(O),WA=Dm(O),BA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(b/1000)}s, ws=${BA}): ${WA}`),sA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:b}),$===1)I?.("reconnecting",WA);if(b>=Ls){Z(`[bridge:repl] Poll failures exceeded ${Ls/1000}s (${$} errors), giving up`),u("info","bridge_repl_poll_give_up"),sA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:b,lastStatus:a}),I?.("failed","connection to server lost");break}let IA=Math.min(JSA*2**($-1),Hs);if(F().non_exclusive_heartbeat_interval_ms>0){let c=N?.();if(c)try{await A.heartbeatWork(c.environmentId,c.workId,c.sessionToken)}catch{}}await hB(IA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function FSA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function NSA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function DSA(A,Q){if(NSA(A,Q))return"http://localhost:4000";if(FSA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function Rs(A,Q){let{toCompatSessionId:B}=bs(gm),I=B(A);return`${DSA(I,Q)}/code/${I}`}$Q();async function js(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:D=!1,initialSSESequenceNum:W,onConflict:$}=A,X=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},L=[],z=null,x=[],q=null,O=[],P=null,b=!1,a=null,WA={detail:null},BA=$SA(),IA=()=>xs({dir:Q,registrationDir:B,machineName:BA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:X,onInitError:console.error,createSession:({environmentId:l,title:HQ,signal:n})=>Ws({environmentId:l,title:HQ,tags:["claude-code-assistant"],signal:n},M),archiveSession:(l)=>Vs(l,M),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...iN,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(l){let HQ=FT(l);if(!HQ)return;L.push({content:HQ.content,uuid:HQ.uuid}),z?.(),z=null},onInterrupt(){x.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:l}}),q?.(),q=null},onSetMaxThinkingTokens(l){x.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:l}}),q?.(),q=null},onPermissionResponse(l){O.push(l),P?.(),P=null},onStateChange(l,HQ){if(a?.(l,HQ),l==="failed")WA.detail=HQ??"unknown failure",b=!0,z?.(),q?.(),P?.()}}),c=await IA();if(!c&&$&&WA.detail?.includes("409")){if(await $({machineName:BA,message:WA.detail})==="takeover")b=!1,WA.detail=null,c=await IA()}if(!c){let l=WA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${l}`),{ok:!1,error:{kind:WA.detail?.includes("409")?"conflict":WA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:l}}}async function*OA(){while(!b){while(L.length>0)if(yield L.shift(),b)return;await new Promise((l)=>{z=l})}}async function*p(){while(!b){while(x.length>0)if(yield x.shift(),b)return;await new Promise((l)=>{q=l})}}async function*xA(){while(!b){while(O.length>0)if(yield O.shift(),b)return;await new Promise((l)=>{P=l})}}return{ok:!0,handle:{get sessionUrl(){return Rs(c.bridgeSessionId,V)},get environmentId(){return c.environmentId},get bridgeSessionId(){return c.bridgeSessionId},getSSESequenceNum(){return c.getSSESequenceNum()},hasPendingPrompts(){return L.length>0},write(l){c.writeSdkMessages([l])},sendResult(){c.sendResult()},sendControlRequest(l){c.sendControlRequest(l)},sendControlResponse(l){c.sendControlResponse(l)},sendControlCancelRequest(l){c.sendControlCancelRequest(l)},inboundPrompts:OA,controlRequests:p,permissionResponses:xA,onStateChange(l){a=l},async teardown(){b=!0,z?.(),q?.(),P?.(),await c.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var VSA=1000,XSA=1e4,MSA=5000,ZSA=60000,NL=3;function wSA(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 zSA(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"&&HL(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function KSA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let X=await js($);if(!X.ok)return D(`bridge connection failed: ${X.error.kind} — ${X.error.detail}`),{ok:!1,error:X.error};let V=X.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=W?.claudeSessionId,L=V.bridgeSessionId,z=[],x=null,q=!1,O=null,P=0,b=!0,a=0,WA=Promise.resolve();function BA(){if(!G)return;let s={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};WA=WA.then(()=>G.save(s).catch((MQ)=>{D(`stateAdapter.save threw: ${MQ}`)}))}function IA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}BA()}BA();let c=new AbortController,OA=new Map,p=null;function xA(){return p??=(async()=>{IA();for(let s of OA.keys())V.sendControlCancelRequest(s);OA.clear(),await V.teardown(),await WA})()}if(N.addEventListener("abort",()=>{c.abort(),xA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await xA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let mA="connected";V.onStateChange((s,MQ)=>{if(D(`bridge state=${s} detail=${MQ??""}`),mA=s,s==="ready"&&V.bridgeSessionId!==L)L=V.bridgeSessionId,BA();else if(s==="connected")IA();if(s==="failed")D(`bridge failed: ${MQ??"unknown"}`),c.abort(),xA().catch((GQ)=>D(`teardown threw: ${GQ}`))});let l=I?.horizonMs??600000,HQ=I?.leadMs??MSA,n=null,d=!1,CA=!1,aA="";async function zA(){if(!I)return;let s=await JT(I.dir).catch((GQ)=>{return D(`computeCronHorizon threw: ${GQ}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,CA=s.hasOverdue;let MQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(MQ!==aA)aA=MQ,D(MQ)}let BB;if(I)await zA(),BB=setInterval(zA,XSA),BB.unref?.();function BQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),x?.(),x=null}async function gQ(s,MQ,GQ){if(C){let rA=await C(s,MQ,GQ);if(rA)return Y?.(s,rA),rA}if(mA!=="connected"){D(`permission denied — bridge state=${mA}, request would drop`);let rA={behavior:"deny",message:`Cannot request permission: remote control is ${mA}. Try again in a moment.`};return Y?.(s,rA),rA}let vA=WSA();D(`permission request tool=${s} req=${vA}`);let{signal:KE,suggestions:xB,blockedPath:YA,toolUseID:HE}=GQ;V.sendControlRequest({type:"control_request",request_id:vA,request:{subtype:"can_use_tool",tool_name:s,display_name:LL(s),input:MQ,tool_use_id:HE,...xB&&{permission_suggestions:xB},...YA&&{blocked_path:YA},..."decisionReason"in GQ&&GQ.decisionReason&&{decision_reason:GQ.decisionReason},..."agentID"in GQ&&GQ.agentID&&{agent_id:GQ.agentID}}});let rQ;try{let rA=await new Promise((pC,XB)=>{OA.set(vA,pC),rQ=setTimeout((QJ,MB,nI,lC,oI)=>{if(QJ.delete(MB))nI(`permission timeout req=${MB}`),lC.sendControlCancelRequest(MB),oI({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},ZSA,OA,vA,D,V,pC),rQ.unref?.(),KE.addEventListener("abort",()=>{if(OA.delete(vA))V.sendControlCancelRequest(vA);XB(Error("aborted"))},{once:!0})});D(`permission response req=${vA} behavior=${rA.behavior}`);let dI=rA.behavior==="allow"?{behavior:"allow",updatedInput:rA.updatedInput,updatedPermissions:rA.updatedPermissions}:{behavior:"deny",message:rA.message??"Denied via remote control"};return Y?.(s,dI),dI}finally{if(rQ)clearTimeout(rQ);OA.delete(vA)}}let XA=!1;async function VB(){if(O!==null||XA||c.signal.aborted)return;if(XA=!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((vA)=>{x=vA})}}D(`spawning query resume=${M??"<fresh>"}`);let MQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(vA)=>D(`[child] ${vA.trimEnd()}`),canUseTool:gQ},GQ;try{if(GQ=await E(MQ),B)GQ={...GQ,env:{...GQ.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(vA){if(D(`buildQueryOptions threw: ${vA}`),XA=!1,a++,a>=NL)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!c.signal.aborted)VB();return}if(c.signal.aborted){XA=!1;return}try{O=Sv({prompt:s(),options:GQ})}finally{XA=!1}(async()=>{try{D("output pump started");for await(let vA of O){if(vA.type==="system"&&vA.subtype==="init"){if(vA.session_id!==M)M=vA.session_id,IA()}if(vA.type==="result")b=!0,a=0,d=!0,IA();if(!wSA(vA))continue;let KE=J?J(vA):vA;if(KE===null)continue;V.write(KE)}}catch(vA){D(`query threw: ${vA}`),a++}finally{D("output pump ended"),O=null;for(let vA of OA.keys())V.sendControlCancelRequest(vA);if(OA.clear(),z.length>0&&!c.signal.aborted)if(a>=NL)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else VB()}})()}let qQ=setInterval(()=>{let s=Date.now(),MQ=n!==null&&n-s<l;if(O===null){let GQ=n!==null&&n-s<HQ;if((GQ||CA&&!d)&&a<NL&&!c.signal.aborted)D(GQ?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),VB();return}if(q)return;if(!b||z.length>0)return;if(s-P<F)return;if(MQ)return;if(CA&&!d)return;D("idle conditions met → closing input gen"),IA(),q=!0,x?.(),x=null},VSA);if(qQ.unref?.(),U)D("initialPrompt → injecting"),P=Date.now(),BQ(U),VB();let l0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(c.signal.aborted)return;if(D("bridge prompt received"),P=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});BQ(s.content),VB()}})(),(async()=>{for await(let s of V.controlRequests()){if(c.signal.aborted)return;switch(s.request.subtype){case"interrupt":D("bridge interrupt"),O?.interrupt();break;case"set_model":D(`bridge setModel=${s.request.model??"<default>"}`),O?.setModel(s.request.model);break;case"set_max_thinking_tokens":D(`bridge setMaxThinkingTokens=${s.request.max_thinking_tokens}`),O?.setMaxThinkingTokens(s.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let s of V.permissionResponses()){if(c.signal.aborted)return;let MQ=zSA(s,OA,V.sendControlCancelRequest);if(MQ)D(`permission response for unknown req=${MQ} (stale)`)}})()]),clearInterval(qQ),BB)clearInterval(BB);O?.close(),await xA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(s){P=Date.now(),BQ(s),VB()},async interrupt(){await O?.interrupt()},done:l0,teardown:xA,[Symbol.asyncDispose]:xA}}}export{KSA as runAssistantWorker};