@anthropic-ai/claude-agent-sdk 0.2.97 → 0.2.100

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.97
3
+ // Version: 0.2.100
4
4
  import{createRequire as mr}from"node:module";var vr=Object.create;var{getPrototypeOf:_r,defineProperty:DU,getOwnPropertyNames:_H,getOwnPropertyDescriptor:Tr}=Object,TH=Object.prototype.hasOwnProperty;function kH(A){return this[A]}var kr,br,qI=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?kr??=new WeakMap:br??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?vr(_r(A)):{};let Y=Q||!A||!A.__esModule?DU(B,"default",{value:A,enumerable:!0}):B;for(let J of _H(A))if(!TH.call(Y,J))DU(Y,J,{get:kH.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},yr=(A)=>{var Q=(vH??=new WeakMap).get(A),B;if(Q)return Q;if(Q=DU({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of _H(A))if(!TH.call(Q,I))DU(Q,I,{get:kH.bind(A,I),enumerable:!(B=Tr(A,I))||B.enumerable})}return vH.set(A,Q),Q},vH,X=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var fr=(A)=>A;function hr(A,Q){this[A]=fr.bind(null,Q)}var tI=(A,Q)=>{for(var B in Q)DU(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:hr.bind(Q,B)})};var R=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var g=mr(import.meta.url),cr=Symbol.dispose||Symbol.for("Symbol.dispose"),ur=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),GQ=(A,Q,B)=>{if(Q!=null){if(typeof Q!=="object"&&typeof Q!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var I;if(B)I=Q[ur];if(I===void 0)I=Q[cr];if(typeof I!=="function")throw TypeError("Object not disposable");A.push([B,I,Q])}else if(B)A.push([B]);return Q},UQ=(A,Q,B)=>{var I=typeof SuppressedError==="function"?SuppressedError:function(Y,J,G,U){return U=Error(G),U.name="SuppressedError",U.error=Y,U.suppressed=J,U},E=(Y)=>Q=B?new I(Y,Q,"An error was suppressed during disposal"):(B=!0,Y),C=(Y)=>{while(Y=A.pop())try{var J=Y[1]&&Y[1].call(Y[2]);if(Y[0])return Promise.resolve(J).then(C,(G)=>(E(G),C()))}catch(G){E(G)}if(B)throw Q};return C()};var lr,fH;var hH=R(()=>{lr=typeof global=="object"&&global&&global.Object===Object&&global,fH=lr});var dr,nr,uY;var z1=R(()=>{hH();dr=typeof self=="object"&&self&&self.Object===Object&&self,nr=fH||dr||Function("return this")(),uY=nr});var or,pY;var s9=R(()=>{z1();or=uY.Symbol,pY=or});function tr(A){var Q=ar.call(A,VU),B=A[VU];try{A[VU]=void 0;var I=!0}catch(C){}var E=rr.call(A);if(I)if(Q)A[VU]=B;else delete A[VU];return E}var mH,ar,rr,VU,cH;var uH=R(()=>{s9();mH=Object.prototype,ar=mH.hasOwnProperty,rr=mH.toString,VU=pY?pY.toStringTag:void 0;cH=tr});function At(A){return er.call(A)}var sr,er,pH;var iH=R(()=>{sr=Object.prototype,er=sr.toString;pH=At});function It(A){if(A==null)return A===void 0?Bt:Qt;return lH&&lH in Object(A)?cH(A):pH(A)}var Qt="[object Null]",Bt="[object Undefined]",lH,dH;var nH=R(()=>{s9();uH();iH();lH=pY?pY.toStringTag:void 0;dH=It});function Et(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var K1;var e9=R(()=>{K1=Et});function Ut(A){if(!K1(A))return!1;var Q=dH(A);return Q==Yt||Q==Jt||Q==Ct||Q==Gt}var Ct="[object AsyncFunction]",Yt="[object Function]",Jt="[object GeneratorFunction]",Gt="[object Proxy]",oH;var aH=R(()=>{nH();e9();oH=Ut});var Ft,H1;var rH=R(()=>{z1();Ft=uY["__core-js_shared__"],H1=Ft});function Nt(A){return!!tH&&tH in A}var tH,sH;var eH=R(()=>{rH();tH=function(){var A=/[^.]+$/.exec(H1&&H1.keys&&H1.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();sH=Nt});function Wt(A){if(A!=null){try{return $t.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var Dt,$t,AL;var QL=R(()=>{Dt=Function.prototype,$t=Dt.toString;AL=Wt});function Ht(A){if(!K1(A)||sH(A))return!1;var Q=oH(A)?Kt:Mt;return Q.test(AL(A))}var Vt,Mt,wt,Xt,Zt,zt,Kt,BL;var IL=R(()=>{aH();eH();e9();QL();Vt=/[\\^$.*+?()[\]{}|]/g,Mt=/^\[object .+?Constructor\]$/,wt=Function.prototype,Xt=Object.prototype,Zt=wt.toString,zt=Xt.hasOwnProperty,Kt=RegExp("^"+Zt.call(zt).replace(Vt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");BL=Ht});function Lt(A,Q){return A==null?void 0:A[Q]}var EL;var CL=R(()=>{EL=Lt});function xt(A,Q){var B=EL(A,Q);return BL(B)?B:void 0}var L1;var A2=R(()=>{IL();CL();L1=xt});var gt,lE;var MU=R(()=>{A2();gt=L1(Object,"create"),lE=gt});function Rt(){this.__data__=lE?lE(null):{},this.size=0}var YL;var JL=R(()=>{MU();YL=Rt});function jt(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var GL;var UL=R(()=>{GL=jt});function Pt(A){var Q=this.__data__;if(lE){var B=Q[A];return B===qt?void 0:B}return St.call(Q,A)?Q[A]:void 0}var qt="__lodash_hash_undefined__",Ot,St,FL;var NL=R(()=>{MU();Ot=Object.prototype,St=Ot.hasOwnProperty;FL=Pt});function Tt(A){var Q=this.__data__;return lE?Q[A]!==void 0:_t.call(Q,A)}var vt,_t,DL;var $L=R(()=>{MU();vt=Object.prototype,_t=vt.hasOwnProperty;DL=Tt});function bt(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=lE&&Q===void 0?kt:Q,this}var kt="__lodash_hash_undefined__",WL;var VL=R(()=>{MU();WL=bt});function iY(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var Q2;var ML=R(()=>{JL();UL();NL();$L();VL();iY.prototype.clear=YL;iY.prototype.delete=GL;iY.prototype.get=FL;iY.prototype.has=DL;iY.prototype.set=WL;Q2=iY});function yt(){this.__data__=[],this.size=0}var wL;var XL=R(()=>{wL=yt});function ft(A,Q){return A===Q||A!==A&&Q!==Q}var ZL;var zL=R(()=>{ZL=ft});function ht(A,Q){var B=A.length;while(B--)if(ZL(A[B][0],Q))return B;return-1}var bC;var wU=R(()=>{zL();bC=ht});function ut(A){var Q=this.__data__,B=bC(Q,A);if(B<0)return!1;var I=Q.length-1;if(B==I)Q.pop();else ct.call(Q,B,1);return--this.size,!0}var mt,ct,KL;var HL=R(()=>{wU();mt=Array.prototype,ct=mt.splice;KL=ut});function pt(A){var Q=this.__data__,B=bC(Q,A);return B<0?void 0:Q[B][1]}var LL;var xL=R(()=>{wU();LL=pt});function it(A){return bC(this.__data__,A)>-1}var gL;var RL=R(()=>{wU();gL=it});function lt(A,Q){var B=this.__data__,I=bC(B,A);if(I<0)++this.size,B.push([A,Q]);else B[I][1]=Q;return this}var jL;var qL=R(()=>{wU();jL=lt});function lY(A){var Q=-1,B=A==null?0:A.length;this.clear();while(++Q<B){var I=A[Q];this.set(I[0],I[1])}}var OL;var SL=R(()=>{XL();HL();xL();RL();qL();lY.prototype.clear=wL;lY.prototype.delete=KL;lY.prototype.get=LL;lY.prototype.has=gL;lY.prototype.set=jL;OL=lY});var dt,PL;var vL=R(()=>{A2();z1();dt=L1(uY,"Map"),PL=dt});function nt(){this.size=0,this.__data__={hash:new Q2,map:new(PL||OL),string:new Q2}}var _L;var TL=R(()=>{ML();SL();vL();_L=nt});function ot(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var kL;var bL=R(()=>{kL=ot});function at(A,Q){var B=A.__data__;return kL(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var yC;var XU=R(()=>{bL();yC=at});function rt(A){var Q=yC(this,A).delete(A);return this.size-=Q?1:0,Q}var yL;var fL=R(()=>{XU();yL=rt});function tt(A){return yC(this,A).get(A)}var hL;var mL=R(()=>{XU();hL=tt});function st(A){return yC(this,A).has(A)}var cL;var uL=R(()=>{XU();cL=st});function et(A,Q){var B=yC(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var pL;var iL=R(()=>{XU();pL=et});function dY(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 B2;var lL=R(()=>{TL();fL();mL();uL();iL();dY.prototype.clear=_L;dY.prototype.delete=yL;dY.prototype.get=hL;dY.prototype.has=cL;dY.prototype.set=pL;B2=dY});function I2(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(As);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(I2.Cache||B2),B}var As="Expected a function",gQ;var dE=R(()=>{lL();I2.Cache=B2;gQ=I2});import{homedir as Qs}from"os";import{join as Bs}from"path";function E2(A){let Q=process.env.NODE_OPTIONS;if(!Q)return!1;return Q.split(/\s+/).includes(A)}function sA(A){if(!A)return!1;if(typeof A==="boolean")return A;let Q=A.toLowerCase().trim();return["1","true","yes","on"].includes(Q)}function dL(){return!1}function nL(){return{namespace:void 0,cluster:void 0}}var fC;var wB=R(()=>{dE();fC=gQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??Bs(Qs(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR)});function m(A,Q,B,I,E){if(I==="m")throw TypeError("Private method is not writable");if(I==="a"&&!E)throw TypeError("Private accessor was defined without a setter");if(typeof Q==="function"?A!==Q||!E:!Q.has(A))throw TypeError("Cannot write private member to an object whose class did not declare it");return I==="a"?E.call(A,B):E?E.value=B:Q.set(A,B),B}function j(A,Q,B,I){if(B==="a"&&!I)throw TypeError("Private accessor was defined without a getter");if(typeof Q==="function"?A!==Q||!I:!Q.has(A))throw TypeError("Cannot read private member from an object whose class did not declare it");return B==="m"?I:B==="a"?I.call(A):I?I.value:Q.get(A)}var nE=()=>{};var C2=function(){let{crypto:A}=globalThis;if(A?.randomUUID)return C2=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 oE(A){return typeof A==="object"&&A!==null&&(("name"in A)&&A.name==="AbortError"||("message"in A)&&String(A.message).includes("FetchRequestCanceledException"))}var ZU=(A)=>{if(A instanceof Error)return A;if(typeof A==="object"&&A!==null){try{if(Object.prototype.toString.call(A)==="[object Error]"){let Q=Error(A.message,A.cause?{cause:A.cause}:{});if(A.stack)Q.stack=A.stack;if(A.cause&&!Q.cause)Q.cause=A.cause;if(A.name)Q.name=A.name;return Q}}catch{}try{return Error(JSON.stringify(A))}catch{}}return Error(A)};var o,IB,XB,_0,zU,KU,HU,LU,xU,gU,RU,jU,qU;var uB=R(()=>{o=class o extends Error{};IB=class IB extends o{constructor(A,Q,B,I,E){super(`${IB.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 _0({message:B,cause:ZU(Q)});let E=Q,C=E?.error?.type;if(A===400)return new KU(A,E,B,I,C);if(A===401)return new HU(A,E,B,I,C);if(A===403)return new LU(A,E,B,I,C);if(A===404)return new xU(A,E,B,I,C);if(A===409)return new gU(A,E,B,I,C);if(A===422)return new RU(A,E,B,I,C);if(A===429)return new jU(A,E,B,I,C);if(A>=500)return new qU(A,E,B,I,C);return new IB(A,E,B,I,C)}};XB=class XB extends IB{constructor({message:A}={}){super(void 0,void 0,A||"Request was aborted.",void 0)}};_0=class _0 extends IB{constructor({message:A,cause:Q}){super(void 0,void 0,A||"Connection error.",void 0);if(Q)this.cause=Q}};zU=class zU extends _0{constructor({message:A}={}){super({message:A??"Request timed out."})}};KU=class KU extends IB{};HU=class HU extends IB{};LU=class LU extends IB{};xU=class xU extends IB{};gU=class gU extends IB{};RU=class RU extends IB{};jU=class jU extends IB{};qU=class qU extends IB{}});function x1(A){if(typeof A!=="object")return{};return A??{}}function G2(A){if(!A)return!0;for(let Q in A)return!1;return!0}function aL(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var Es,oL=(A)=>{return Es.test(A)},Y2=(A)=>(Y2=Array.isArray,Y2(A)),J2,rL=(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},g1=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var T0=R(()=>{uB();Es=/^[a-z][a-z0-9+.-]*:/i,J2=Y2});var tL=(A)=>new Promise((Q)=>setTimeout(Q,A));var hC="0.81.0";function Cs(){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 Js(){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 Qx=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},Ys=()=>{let A=Cs();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":eL(Deno.build.os),"X-Stainless-Arch":sL(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(A==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":eL(globalThis.process.platform??"unknown"),"X-Stainless-Arch":sL(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=Js();if(Q)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Q.browser}`,"X-Stainless-Runtime-Version":Q.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":hC,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},sL=(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"},eL=(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"},Ax,Bx=()=>{return Ax??(Ax=Ys())};var U2=()=>{};function Ix(){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 F2(...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 R1(A){let Q=Symbol.asyncIterator in A?A[Symbol.asyncIterator]():A[Symbol.iterator]();return F2({start(){},async pull(B){let{done:I,value:E}=await Q.next();if(I)B.close();else B.enqueue(E)},async cancel(){await Q.return?.()}})}function OU(A){if(A[Symbol.asyncIterator])return A;let Q=A.getReader();return{async next(){try{let B=await Q.read();if(B?.done)Q.releaseLock();return B}catch(B){throw Q.releaseLock(),B}},async return(){let B=Q.cancel();return Q.releaseLock(),await B,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Ex(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 Cx=({headers:A,body:Q})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Q)}};function Yx(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 Jx=R(()=>{uB()});function Fx(A){let Q=0;for(let E of A)Q+=E.length;let B=new Uint8Array(Q),I=0;for(let E of A)B.set(E,I),I+=E.length;return B}function SU(A){let Q;return(Gx??(Q=new globalThis.TextEncoder,Gx=Q.encode.bind(Q)))(A)}function N2(A){let Q;return(Ux??(Q=new globalThis.TextDecoder,Ux=Q.decode.bind(Q)))(A)}var Gx,Ux;class mC{constructor(){YI.set(this,void 0),JI.set(this,void 0),m(this,YI,new Uint8Array,"f"),m(this,JI,null,"f")}decode(A){if(A==null)return[];let Q=A instanceof ArrayBuffer?new Uint8Array(A):typeof A==="string"?SU(A):A;m(this,YI,Fx([j(this,YI,"f"),Q]),"f");let B=[],I;while((I=Fs(j(this,YI,"f"),j(this,JI,"f")))!=null){if(I.carriage&&j(this,JI,"f")==null){m(this,JI,I.index,"f");continue}if(j(this,JI,"f")!=null&&(I.index!==j(this,JI,"f")+1||I.carriage)){B.push(N2(j(this,YI,"f").subarray(0,j(this,JI,"f")-1))),m(this,YI,j(this,YI,"f").subarray(j(this,JI,"f")),"f"),m(this,JI,null,"f");continue}let E=j(this,JI,"f")!==null?I.preceding-1:I.preceding,C=N2(j(this,YI,"f").subarray(0,E));B.push(C),m(this,YI,j(this,YI,"f").subarray(I.index),"f"),m(this,JI,null,"f")}return B}flush(){if(!j(this,YI,"f").length)return[];return this.decode(`
5
5
  `)}}function Fs(A,Q){for(let E=Q??0;E<A.length;E++){if(A[E]===10)return{preceding:E,index:E+1,carriage:!1};if(A[E]===13)return{preceding:E,index:E+1,carriage:!0}}return null}function Nx(A){for(let I=0;I<A.length-1;I++){if(A[I]===10&&A[I+1]===10)return I+2;if(A[I]===13&&A[I+1]===13)return I+2;if(A[I]===13&&A[I+1]===10&&I+3<A.length&&A[I+2]===13&&A[I+3]===10)return I+4}return-1}var YI,JI;var D2=R(()=>{nE();YI=new WeakMap,JI=new WeakMap;mC.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);mC.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function PU(){}function j1(A,Q,B){if(!Q||q1[A]>q1[B])return PU;else return Q[A].bind(Q)}function UB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return Ns;let I=Dx.get(Q);if(I&&I[0]===B)return I[1];let E={error:j1("error",Q,B),warn:j1("warn",Q,B),info:j1("info",Q,B),debug:j1("debug",Q,B)};return Dx.set(Q,[B,E]),E}var q1,$2=(A,Q,B)=>{if(!A)return;if(aL(q1,A))return A;UB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(q1))}`);return},Ns,Dx,aE=(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 O1=R(()=>{T0();q1={off:0,error:200,warn:300,info:400,debug:500};Ns={error:PU,warn:PU,info:PU,debug:PU},Dx=new WeakMap});async function*Ds(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 $x,I=new mC,E=OU(A.body);for await(let C of $s(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*$s(A){let Q=new Uint8Array;for await(let B of A){if(B==null)continue;let I=B instanceof ArrayBuffer?new Uint8Array(B):typeof B==="string"?SU(B):B,E=new Uint8Array(Q.length+I.length);E.set(Q),E.set(I,Q.length),Q=E;let C;while((C=Nx(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class $x{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(`
@@ -149,7 +149,7 @@ ${E}`;break;case"retry":if(jo(E))Q[I]=E;break;case"id":if(qo(E))Q[I]=E;break;cas
149
149
  `),YJ=ps(A,{recursive:!0}).then(()=>{}).catch(()=>{}),YJ}function pB(A){if(JJ===null)return;let B=`${new Date().toISOString()} ${A}
150
150
  `;is().then(()=>{if(JJ)us(JJ,B).catch(()=>{})})}FQ();FQ();function Le(A){let Q=A.trim();return Q.startsWith("{")&&Q.endsWith("}")}function Dg(A,Q){let B={...A};if(Q){let I=Q.enabled===!0&&Q.failIfUnavailable===void 0?{...Q,failIfUnavailable:!0}:Q,E=B.settings;if(E&&!Le(E))throw Error("Cannot use both a settings file path and the sandbox option. Include the sandbox configuration in your settings file instead.");let C={sandbox:I};if(E)try{C={...iQ(E),sandbox:I}}catch{}B.settings=LA(C)}return B}var Re=2000;class E4{options;process;processStdin;processStdout;ready=!1;abortController;exitError;exitListeners=[];processExitHandler;abortHandler;constructor(A){this.options=A;this.abortController=A.abortController||$U(),this.initialize()}getDefaultExecutable(){return WU()?"bun":"node"}spawnLocalProcess(A){let{command:Q,args:B,cwd:I,env:E,signal:C}=A,Y=sA(E.DEBUG_CLAUDE_AGENT_SDK)||this.options.stderr?"pipe":"ignore",J=xe(Q,B,{cwd:I,stdio:["pipe","pipe",Y],signal:C,env:E,windowsHide:!0});if(sA(E.DEBUG_CLAUDE_AGENT_SDK)||this.options.stderr)J.stderr.on("data",(U)=>{let F=U.toString();if(pB(F),this.options.stderr)this.options.stderr(F)});return{stdin:J.stdin,stdout:J.stdout,get killed(){return J.killed},get exitCode(){return J.exitCode},kill:J.kill.bind(J),on:J.on.bind(J),once:J.once.bind(J),off:J.off.bind(J)}}initialize(){try{let{additionalDirectories:A=[],agent:Q,betas:B,cwd:I,executable:E=this.getDefaultExecutable(),executableArgs:C=[],extraArgs:Y={},pathToClaudeCodeExecutable:J,env:G={...process.env},thinkingConfig:U,maxTurns:F,maxBudgetUsd:N,taskBudget:D,model:W,fallbackModel:$,jsonSchema:M,permissionMode:V,allowDangerouslySkipPermissions:w,permissionPromptToolName:H,continueConversation:z,resume:L,settingSources:q,allowedTools:O=[],disallowedTools:v=[],tools:k,mcpServers:a,strictMcpConfig:DA,canUseTool:QA,includePartialMessages:BA,plugins:p,sandbox:xA}=this.options,c=["--output-format","stream-json","--verbose","--input-format","stream-json"];if(U){switch(U.type){case"enabled":if(U.budgetTokens===void 0)c.push("--thinking","adaptive");else c.push("--max-thinking-tokens",U.budgetTokens.toString());break;case"disabled":c.push("--thinking","disabled");break;case"adaptive":c.push("--thinking","adaptive");break}if(U.type!=="disabled"&&U.display)c.push("--thinking-display",U.display)}if(this.options.effort)c.push("--effort",this.options.effort);if(F)c.push("--max-turns",F.toString());if(N!==void 0)c.push("--max-budget-usd",N.toString());if(D)c.push("--task-budget",D.total.toString());if(W)c.push("--model",W);if(Q)c.push("--agent",Q);if(B&&B.length>0)c.push("--betas",B.join(","));if(M)c.push("--json-schema",LA(M));if(this.options.debugFile)c.push("--debug-file",this.options.debugFile);else if(this.options.debug)c.push("--debug");if(sA(G.DEBUG_CLAUDE_AGENT_SDK))c.push("--debug-to-stderr");if(QA){if(H)throw Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");c.push("--permission-prompt-tool","stdio")}else if(H)c.push("--permission-prompt-tool",H);if(z)c.push("--continue");if(L)c.push("--resume",L);if(this.options.proactive)c.push("--proactive");if(this.options.assistant)c.push("--assistant");if(this.options.channels&&this.options.channels.length>0)c.push("--channels",...this.options.channels);if(O.length>0)c.push("--allowedTools",O.join(","));if(v.length>0)c.push("--disallowedTools",v.join(","));if(k!==void 0)if(Array.isArray(k))if(k.length===0)c.push("--tools","");else c.push("--tools",k.join(","));else c.push("--tools","default");if(a&&Object.keys(a).length>0)c.push("--mcp-config",LA({mcpServers:a}));if(q!==void 0)c.push(`--setting-sources=${q.join(",")}`);if(DA)c.push("--strict-mcp-config");if(V)c.push("--permission-mode",V);if(w)c.push("--allow-dangerously-skip-permissions");if($){if(W&&$===W)throw Error("Fallback model cannot be the same as the main model. Please specify a different model for fallbackModel option.");c.push("--fallback-model",$)}if(this.options.includeHookEvents)c.push("--include-hook-events");if(BA)c.push("--include-partial-messages");if(this.options.sessionMirror)c.push("--session-mirror");for(let vA of A)c.push("--add-dir",vA);if(p&&p.length>0)for(let vA of p)if(vA.type==="local")c.push("--plugin-dir",vA.path);else throw Error(`Unsupported plugin type: ${vA.type}`);if(this.options.forkSession)c.push("--fork-session");if(this.options.resumeSessionAt)c.push("--resume-session-at",this.options.resumeSessionAt);if(this.options.sessionId)c.push("--session-id",this.options.sessionId);if(this.options.persistSession===!1)c.push("--no-session-persistence");let HA={...Y??{}};if(this.options.settings)HA.settings=this.options.settings;let fA=Dg(HA,xA);for(let[vA,zA]of Object.entries(fA))if(zA===null)c.push(`--${vA}`);else c.push(`--${vA}`,zA);if(!G.CLAUDE_CODE_ENTRYPOINT)G.CLAUDE_CODE_ENTRYPOINT="sdk-ts";if(delete G.NODE_OPTIONS,sA(G.DEBUG_CLAUDE_AGENT_SDK))G.DEBUG="1";else delete G.DEBUG;let i=je(J),XQ=i?J:E,n=i?[...C,...c]:[...C,J,...c],u={command:XQ,args:n,cwd:I,env:G,signal:this.abortController.signal};if(this.options.spawnClaudeCodeProcess)pB(`Spawning Claude Code (custom): ${XQ} ${n.join(" ")}`),this.process=this.options.spawnClaudeCodeProcess(u);else pB(`Spawning Claude Code: ${XQ} ${n.join(" ")}`),this.process=this.spawnLocalProcess(u);this.processStdin=this.process.stdin,this.processStdout=this.process.stdout;let qA=()=>{if(this.process&&!this.process.killed)this.process.kill("SIGTERM")};this.processExitHandler=qA,this.abortHandler=qA,process.on("exit",this.processExitHandler),this.abortController.signal.addEventListener("abort",this.abortHandler),this.process.on("error",(vA)=>{if(this.ready=!1,this.abortController.signal.aborted)this.exitError=new cB("Claude Code process aborted by user");else if(CJ(vA)){let zA=i?`Claude Code native binary not found at ${J}. Please ensure Claude Code is installed via native installer or specify a valid path with options.pathToClaudeCodeExecutable.`:`Claude Code executable not found at ${J}. Is options.pathToClaudeCodeExecutable set?`;this.exitError=ReferenceError(zA),pB(this.exitError.message)}else this.exitError=Error(`Failed to spawn Claude Code process: ${vA.message}`),pB(this.exitError.message)}),this.process.on("exit",(vA,zA)=>{if(this.ready=!1,this.abortController.signal.aborted)this.exitError=new cB("Claude Code process aborted by user");else{let SQ=this.getProcessExitError(vA,zA);if(SQ)this.exitError=SQ,pB(SQ.message)}}),this.ready=!0}catch(A){throw this.ready=!1,A}}getProcessExitError(A,Q){if(A!==0&&A!==null)return Error(`Claude Code process exited with code ${A}`);else if(Q)return Error(`Claude Code process terminated by signal ${Q}`);return}write(A){if(this.abortController.signal.aborted)throw new cB("Operation aborted");if(!this.ready||!this.processStdin)throw Error("ProcessTransport is not ready for writing");if(this.processStdin.writableEnded){pB("[ProcessTransport] Dropping write to ended stdin stream");return}if(this.process?.killed||this.process?.exitCode!==null)throw Error("Cannot write to terminated process");if(this.exitError)throw Error(`Cannot write to process that exited with error: ${this.exitError.message}`);pB(`[ProcessTransport] Writing to stdin: ${A.substring(0,100)}`);try{if(!this.processStdin.write(A))pB("[ProcessTransport] Write buffer full, data queued")}catch(Q){throw this.ready=!1,Error(`Failed to write to process stdin: ${CA(Q)}`)}}close(){if(this.processStdin)this.processStdin.end(),this.processStdin=void 0;if(this.abortHandler)this.abortController.signal.removeEventListener("abort",this.abortHandler),this.abortHandler=void 0;for(let{handler:Q}of this.exitListeners)this.process?.off("exit",Q);this.exitListeners=[];let A=this.process;if(A&&!A.killed&&A.exitCode===null)setTimeout((Q)=>{if(Q.killed||Q.exitCode!==null)return;Q.kill("SIGTERM"),setTimeout((B)=>{if(B.exitCode===null)B.kill("SIGKILL")},5000,Q).unref()},Re,A).unref(),A.once("exit",()=>{if(this.processExitHandler)process.off("exit",this.processExitHandler),this.processExitHandler=void 0});else if(this.processExitHandler)process.off("exit",this.processExitHandler),this.processExitHandler=void 0;this.ready=!1}isReady(){return this.ready}async*readMessages(){if(!this.processStdout)throw Error("ProcessTransport output stream not available");if(this.exitError)throw this.exitError;let A=ge({input:this.processStdout}),Q=this.process?(()=>{let B=this.process,I=()=>A.close();return B.on("error",I),()=>B.off("error",I)})():void 0;if(this.exitError)A.close();try{for await(let B of A)if(B.trim()){let I;try{I=iQ(B)}catch(E){pB(`Non-JSON stdout: ${B}`);continue}yield I}if(this.exitError)throw this.exitError;await this.waitForExit()}catch(B){throw B}finally{Q?.(),A.close()}}endInput(){if(this.processStdin)this.processStdin.end()}getInputStream(){return this.processStdin}onExit(A){if(!this.process)return()=>{};let Q=(B,I)=>{let E=this.getProcessExitError(B,I);A(E)};return this.process.on("exit",Q),this.exitListeners.push({callback:A,handler:Q}),()=>{if(this.process)this.process.off("exit",Q);let B=this.exitListeners.findIndex((I)=>I.handler===Q);if(B!==-1)this.exitListeners.splice(B,1)}}async waitForExit(){if(!this.process){if(this.exitError)throw this.exitError;return}if(this.process.exitCode!==null||this.process.killed||this.exitError){if(this.exitError)throw this.exitError;return}return new Promise((A,Q)=>{let B=(E,C)=>{if(this.abortController.signal.aborted){Q(new cB("Operation aborted"));return}let Y=this.getProcessExitError(E,C);if(Y)Q(Y);else A()};this.process.once("exit",B);let I=(E)=>{this.process.off("exit",B),Q(E)};this.process.once("error",I),this.process.once("exit",()=>{this.process.off("error",I)})})}}function je(A){return![".js",".mjs",".tsx",".ts",".jsx"].some((B)=>A.endsWith(B))}function DM(A,Q=process.platform,B=process.arch){let I;if(Q==="linux")I=[`@anthropic-ai/claude-agent-sdk-linux-${B}-musl/cli`,`@anthropic-ai/claude-agent-sdk-linux-${B}/cli`];else if(Q==="win32")I=[`@anthropic-ai/claude-agent-sdk-win32-${B}/cli.exe`];else I=[`@anthropic-ai/claude-agent-sdk-${Q}-${B}/cli`];for(let E of I)try{return A(E)}catch{}return null}FQ();class FJ{returned;queue=[];readResolve;readReject;isDone=!1;hasError;started=!1;constructor(A){this.returned=A}[Symbol.asyncIterator](){if(this.started)throw Error("Stream can only be iterated once");return this.started=!0,this}next(){if(this.queue.length>0)return Promise.resolve({done:!1,value:this.queue.shift()});if(this.isDone)return Promise.resolve({done:!0,value:void 0});if(this.hasError)return Promise.reject(this.hasError);return new Promise((A,Q)=>{this.readResolve=A,this.readReject=Q})}enqueue(A){if(this.readResolve){let Q=this.readResolve;this.readResolve=void 0,this.readReject=void 0,Q({done:!1,value:A})}else this.queue.push(A)}done(){if(this.isDone=!0,this.readResolve){let A=this.readResolve;this.readResolve=void 0,this.readReject=void 0,A({done:!0,value:void 0})}}error(A){if(this.hasError=A,this.readReject){let Q=this.readReject;this.readResolve=void 0,this.readReject=void 0,Q(A)}}return(){if(this.isDone=!0,this.returned)this.returned();return Promise.resolve({done:!0,value:void 0})}}class $M{sendMcpMessage;isClosed=!1;constructor(A){this.sendMcpMessage=A}onclose;onerror;onmessage;async start(){}async send(A){if(this.isClosed)throw Error("Transport is closed");this.sendMcpMessage(A)}async close(){if(this.isClosed)return;this.isClosed=!0,this.onclose?.()}}YM();TQ();nQ();class C4{transport;isSingleUserTurn;canUseTool;hooks;abortController;jsonSchema;initConfig;onElicitation;pendingControlResponses=new Map;cleanupPerformed=!1;sdkMessages;inputStream=new FJ;initialization;cancelControllers=new Map;hookCallbacks=new Map;nextCallbackId=0;sdkMcpTransports=new Map;sdkMcpServerInstances=new Map;pendingMcpResponses=new Map;firstResultReceivedResolve;firstResultReceived=!1;lastErrorResultText;transcriptMirrorBatcher;setIsSingleUserTurn(A){this.isSingleUserTurn=A}setTranscriptMirrorBatcher(A){this.transcriptMirrorBatcher=A}hasBidirectionalNeeds(){return this.sdkMcpTransports.size>0||this.hooks!==void 0&&Object.keys(this.hooks).length>0||this.canUseTool!==void 0||this.onElicitation!==void 0}constructor(A,Q,B,I,E,C=new Map,Y,J,G){this.transport=A;this.isSingleUserTurn=Q;this.canUseTool=B;this.hooks=I;this.abortController=E;this.jsonSchema=Y;this.initConfig=J;this.onElicitation=G;for(let[U,F]of C)this.connectSdkMcpServer(U,F);this.sdkMessages=this.readSdkMessages(),this.readMessages(),this.initialization=this.initialize(),this.initialization.catch(()=>{})}setError(A){this.inputStream.error(A)}async stopTask(A){await this.request({subtype:"stop_task",task_id:A})}close(){this.cleanup()}cleanup(A){if(this.cleanupPerformed)return;this.cleanupPerformed=!0;try{for(let B of this.cancelControllers.values())B.abort();this.cancelControllers.clear(),this.transport.close();let Q=Error("Query closed before response received");for(let{reject:B}of this.pendingControlResponses.values())B(Q);this.pendingControlResponses.clear();for(let{reject:B}of this.pendingMcpResponses.values())B(Q);this.pendingMcpResponses.clear(),this.hookCallbacks.clear();for(let B of this.sdkMcpTransports.values())B.close().catch(()=>{});if(this.sdkMcpTransports.clear(),A)this.inputStream.error(A);else this.inputStream.done()}catch(Q){}}next(...[A]){return this.sdkMessages.next(...[A])}return(A){return this.sdkMessages.return(A)}throw(A){return this.sdkMessages.throw(A)}[Symbol.asyncIterator](){return this.sdkMessages}[Symbol.asyncDispose](){return this.sdkMessages[Symbol.asyncDispose]()}async readMessages(){try{for await(let A of this.transport.readMessages()){if(A.type==="control_response"){let Q=this.pendingControlResponses.get(A.response.request_id);if(Q)Q.handler(A.response);continue}else if(A.type==="control_request"){this.handleControlRequest(A);continue}else if(A.type==="control_cancel_request"){this.handleControlCancelRequest(A);continue}else if(A.type==="keep_alive")continue;else if(A.type==="transcript_mirror"){this.transcriptMirrorBatcher?.enqueue(A.filePath,A.entries);continue}if(A.type==="system"&&A.subtype==="post_turn_summary")continue;if(A.type==="result"){if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();if(this.lastErrorResultText=A.is_error?A.subtype==="success"?A.result:A.errors.join("; "):void 0,this.firstResultReceived=!0,this.firstResultReceivedResolve)this.firstResultReceivedResolve();if(this.isSingleUserTurn)Z("[Query.readMessages] First result received for single-turn query, closing stdin"),this.transport.endInput()}else if(!(A.type==="system"&&A.subtype==="session_state_changed"))this.lastErrorResultText=void 0;this.inputStream.enqueue(A)}if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();if(this.firstResultReceivedResolve)this.firstResultReceivedResolve();this.inputStream.done(),this.cleanup()}catch(A){if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();if(this.firstResultReceivedResolve)this.firstResultReceivedResolve();if(this.lastErrorResultText!==void 0&&!(A instanceof cB)){let Q=Error(`Claude Code returned an error result: ${this.lastErrorResultText}`);Z(`[Query.readMessages] Replacing exit error with result text. Original: ${CA(A)}`),this.inputStream.error(Q),this.cleanup(Q);return}this.inputStream.error(A),this.cleanup(A)}}async handleControlRequest(A){let Q=new AbortController;this.cancelControllers.set(A.request_id,Q);try{let B=await this.processControlRequest(A,Q.signal);if(this.cleanupPerformed)return;let I={type:"control_response",response:{subtype:"success",request_id:A.request_id,response:B}};await Promise.resolve(this.transport.write(LA(I)+`
151
151
  `))}catch(B){if(this.cleanupPerformed)return;let I={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:CA(B)}};try{await Promise.resolve(this.transport.write(LA(I)+`
152
- `))}catch(E){Z(`[Query.handleControlRequest] Error-response write failed: ${CA(E)}`,{level:"error"})}}finally{this.cancelControllers.delete(A.request_id)}}handleControlCancelRequest(A){let Q=this.cancelControllers.get(A.request_id);if(Q)Q.abort(),this.cancelControllers.delete(A.request_id)}async processControlRequest(A,Q){if(A.request.subtype==="can_use_tool"){if(!this.canUseTool)throw Error("canUseTool callback is not provided.");return{...await this.canUseTool(A.request.tool_name,A.request.input,{signal:Q,suggestions:A.request.permission_suggestions,blockedPath:A.request.blocked_path,decisionReason:A.request.decision_reason,title:A.request.title,displayName:A.request.display_name,description:A.request.description,toolUseID:A.request.tool_use_id,agentID:A.request.agent_id}),toolUseID:A.request.tool_use_id}}else if(A.request.subtype==="hook_callback")return await this.handleHookCallbacks(A.request.callback_id,A.request.input,A.request.tool_use_id,Q);else if(A.request.subtype==="mcp_message"){let B=A.request,I=this.sdkMcpTransports.get(B.server_name);if(!I)throw Error(`SDK MCP server not found: ${B.server_name}`);if("method"in B.message&&"id"in B.message&&B.message.id!==null)return{mcp_response:await this.handleMcpControlRequest(B.server_name,B,I)};else{if(I.onmessage)I.onmessage(B.message);return{mcp_response:{jsonrpc:"2.0",result:{},id:0}}}}else if(A.request.subtype==="elicitation"){let B=A.request;if(this.onElicitation)return await this.onElicitation({serverName:B.mcp_server_name,message:B.message,mode:B.mode,url:B.url,elicitationId:B.elicitation_id,requestedSchema:B.requested_schema,title:B.title,displayName:B.display_name,description:B.description},{signal:Q});return{action:"decline"}}throw Error("Unsupported control request subtype: "+A.request.subtype)}async*readSdkMessages(){for await(let A of this.inputStream)yield A}async initialize(){let A;if(this.hooks){A={};for(let[E,C]of Object.entries(this.hooks))if(C.length>0)A[E]=C.map((Y)=>{let J=[];for(let G of Y.hooks){let U=`hook_${this.nextCallbackId++}`;this.hookCallbacks.set(U,G),J.push(U)}return{matcher:Y.matcher,hookCallbackIds:J,timeout:Y.timeout}})}let Q=this.sdkMcpTransports.size>0?Array.from(this.sdkMcpTransports.keys()):void 0,B={subtype:"initialize",hooks:A,sdkMcpServers:Q,jsonSchema:this.jsonSchema,systemPrompt:this.initConfig?.systemPrompt,appendSystemPrompt:this.initConfig?.appendSystemPrompt,excludeDynamicSections:this.initConfig?.excludeDynamicSections,agents:this.initConfig?.agents,promptSuggestions:this.initConfig?.promptSuggestions,agentProgressSummaries:this.initConfig?.agentProgressSummaries};return(await this.request(B)).response}async interrupt(){await this.request({subtype:"interrupt"})}async setPermissionMode(A){await this.request({subtype:"set_permission_mode",mode:A})}async setModel(A){await this.request({subtype:"set_model",model:A})}async setMaxThinkingTokens(A){await this.request({subtype:"set_max_thinking_tokens",max_thinking_tokens:A})}async applyFlagSettings(A){await this.request({subtype:"apply_flag_settings",settings:A})}async getSettings(){return(await this.request({subtype:"get_settings"})).response}async rewindFiles(A,Q){return(await this.request({subtype:"rewind_files",user_message_id:A,dry_run:Q?.dryRun})).response}async cancelAsyncMessage(A){return(await this.request({subtype:"cancel_async_message",message_uuid:A})).response.cancelled}async seedReadState(A,Q){await this.request({subtype:"seed_read_state",path:A,mtime:Q})}async enableRemoteControl(A){return(await this.request({subtype:"remote_control",enabled:A})).response}async setProactive(A){await this.request({subtype:"set_proactive",enabled:A})}async generateSessionTitle(A,Q){return(await this.request({subtype:"generate_session_title",description:A,persist:Q?.persist})).response.title}async askSideQuestion(A){return(await this.request({subtype:"side_question",question:A})).response.response}processPendingPermissionRequests(A){for(let Q of A)if(Q.request.subtype==="can_use_tool")this.handleControlRequest(Q).catch(()=>{})}request(A){let Q=Math.random().toString(36).substring(2,15),B={request_id:Q,type:"control_request",request:A};return new Promise((I,E)=>{this.pendingControlResponses.set(Q,{handler:(C)=>{if(this.pendingControlResponses.delete(Q),C.subtype==="success")I(C);else if(E(Error(C.error)),C.pending_permission_requests)this.processPendingPermissionRequests(C.pending_permission_requests)},reject:E}),Promise.resolve(this.transport.write(LA(B)+`
152
+ `))}catch(E){Z(`[Query.handleControlRequest] Error-response write failed: ${CA(E)}`,{level:"error"})}}finally{this.cancelControllers.delete(A.request_id)}}handleControlCancelRequest(A){let Q=this.cancelControllers.get(A.request_id);if(Q)Q.abort(),this.cancelControllers.delete(A.request_id)}async processControlRequest(A,Q){if(A.request.subtype==="can_use_tool"){if(!this.canUseTool)throw Error("canUseTool callback is not provided.");return{...await this.canUseTool(A.request.tool_name,A.request.input,{signal:Q,suggestions:A.request.permission_suggestions,blockedPath:A.request.blocked_path,decisionReason:A.request.decision_reason,title:A.request.title,displayName:A.request.display_name,description:A.request.description,toolUseID:A.request.tool_use_id,agentID:A.request.agent_id}),toolUseID:A.request.tool_use_id}}else if(A.request.subtype==="hook_callback")return await this.handleHookCallbacks(A.request.callback_id,A.request.input,A.request.tool_use_id,Q);else if(A.request.subtype==="mcp_message"){let B=A.request,I=this.sdkMcpTransports.get(B.server_name);if(!I)throw Error(`SDK MCP server not found: ${B.server_name}`);if("method"in B.message&&"id"in B.message&&B.message.id!==null)return{mcp_response:await this.handleMcpControlRequest(B.server_name,B,I)};else{if(I.onmessage)I.onmessage(B.message);return{mcp_response:{jsonrpc:"2.0",result:{},id:0}}}}else if(A.request.subtype==="elicitation"){let B=A.request;if(this.onElicitation)return await this.onElicitation({serverName:B.mcp_server_name,message:B.message,mode:B.mode,url:B.url,elicitationId:B.elicitation_id,requestedSchema:B.requested_schema,title:B.title,displayName:B.display_name,description:B.description},{signal:Q});return{action:"decline"}}throw Error("Unsupported control request subtype: "+A.request.subtype)}async*readSdkMessages(){for await(let A of this.inputStream)yield A}async initialize(){let A;if(this.hooks){A={};for(let[E,C]of Object.entries(this.hooks))if(C.length>0)A[E]=C.map((Y)=>{let J=[];for(let G of Y.hooks){let U=`hook_${this.nextCallbackId++}`;this.hookCallbacks.set(U,G),J.push(U)}return{matcher:Y.matcher,hookCallbackIds:J,timeout:Y.timeout}})}let Q=this.sdkMcpTransports.size>0?Array.from(this.sdkMcpTransports.keys()):void 0,B={subtype:"initialize",hooks:A,sdkMcpServers:Q,jsonSchema:this.jsonSchema,systemPrompt:this.initConfig?.systemPrompt,appendSystemPrompt:this.initConfig?.appendSystemPrompt,excludeDynamicSections:this.initConfig?.excludeDynamicSections,agents:this.initConfig?.agents,promptSuggestions:this.initConfig?.promptSuggestions,agentProgressSummaries:this.initConfig?.agentProgressSummaries};return(await this.request(B)).response}async interrupt(){await this.request({subtype:"interrupt"})}async setPermissionMode(A){await this.request({subtype:"set_permission_mode",mode:A})}async setModel(A){await this.request({subtype:"set_model",model:A})}async setMaxThinkingTokens(A){await this.request({subtype:"set_max_thinking_tokens",max_thinking_tokens:A})}async applyFlagSettings(A){await this.request({subtype:"apply_flag_settings",settings:A})}async getSettings(){return(await this.request({subtype:"get_settings"})).response}async rewindFiles(A,Q){return(await this.request({subtype:"rewind_files",user_message_id:A,dry_run:Q?.dryRun})).response}async cancelAsyncMessage(A){return(await this.request({subtype:"cancel_async_message",message_uuid:A})).response.cancelled}async seedReadState(A,Q){await this.request({subtype:"seed_read_state",path:A,mtime:Q})}async enableRemoteControl(A,Q){return(await this.request({subtype:"remote_control",enabled:A,...Q!==void 0&&{name:Q}})).response}async setProactive(A){await this.request({subtype:"set_proactive",enabled:A})}async generateSessionTitle(A,Q){return(await this.request({subtype:"generate_session_title",description:A,persist:Q?.persist})).response.title}async askSideQuestion(A){return(await this.request({subtype:"side_question",question:A})).response.response}processPendingPermissionRequests(A){for(let Q of A)if(Q.request.subtype==="can_use_tool")this.handleControlRequest(Q).catch(()=>{})}request(A){let Q=Math.random().toString(36).substring(2,15),B={request_id:Q,type:"control_request",request:A};return new Promise((I,E)=>{this.pendingControlResponses.set(Q,{handler:(C)=>{if(this.pendingControlResponses.delete(Q),C.subtype==="success")I(C);else if(E(Error(C.error)),C.pending_permission_requests)this.processPendingPermissionRequests(C.pending_permission_requests)},reject:E}),Promise.resolve(this.transport.write(LA(B)+`
153
153
  `)).catch((C)=>{this.pendingControlResponses.delete(Q),E(C)})})}initializationResult(){return this.initialization}async supportedCommands(){return(await this.initialization).commands}async supportedModels(){return(await this.initialization).models}async supportedAgents(){return(await this.initialization).agents}async reconnectMcpServer(A){await this.request({subtype:"mcp_reconnect",serverName:A})}async toggleMcpServer(A,Q){await this.request({subtype:"mcp_toggle",serverName:A,enabled:Q})}async enableChannel(A){await this.request({subtype:"channel_enable",serverName:A})}async mcpAuthenticate(A){return(await this.request({subtype:"mcp_authenticate",serverName:A})).response}async mcpClearAuth(A){return(await this.request({subtype:"mcp_clear_auth",serverName:A})).response}async mcpSubmitOAuthCallbackUrl(A,Q){return(await this.request({subtype:"mcp_oauth_callback_url",serverName:A,callbackUrl:Q})).response}async claudeAuthenticate(A){return(await this.request({subtype:"claude_authenticate",loginWithClaudeAi:A})).response}async claudeOAuthCallback(A,Q){return(await this.request({subtype:"claude_oauth_callback",authorizationCode:A,state:Q})).response}async claudeOAuthWaitForCompletion(){return(await this.request({subtype:"claude_oauth_wait_for_completion"})).response}async mcpServerStatus(){return(await this.request({subtype:"mcp_status"})).response.mcpServers}async getContextUsage(){return(await this.request({subtype:"get_context_usage"})).response}async reloadPlugins(){return(await this.request({subtype:"reload_plugins"})).response}async setMcpServers(A){let Q={},B={};for(let[J,G]of Object.entries(A))if(G.type==="sdk"&&"instance"in G)Q[J]=G.instance;else B[J]=G;let I=new Set(this.sdkMcpServerInstances.keys()),E=new Set(Object.keys(Q));for(let J of I)if(!E.has(J))await this.disconnectSdkMcpServer(J);for(let[J,G]of Object.entries(Q))if(!I.has(J))this.connectSdkMcpServer(J,G);let C={};for(let J of Object.keys(Q))C[J]={type:"sdk",name:J};return(await this.request({subtype:"mcp_set_servers",servers:{...B,...C}})).response}async accountInfo(){return(await this.initialization).account}async streamInput(A){Z("[Query.streamInput] Starting to process input stream");try{let Q=0;for await(let B of A){if(Q++,Z(`[Query.streamInput] Processing message ${Q}: ${B.type}`),this.abortController?.signal.aborted)break;await Promise.resolve(this.transport.write(LA(B)+`
154
154
  `))}if(Z(`[Query.streamInput] Finished processing ${Q} messages from input stream`),Q>0&&this.hasBidirectionalNeeds())Z("[Query.streamInput] Has bidirectional needs, waiting for first result"),await this.waitForFirstResult();Z("[Query] Calling transport.endInput() to close stdin to CLI process"),this.transport.endInput()}catch(Q){if(!(Q instanceof cB))throw Q}}waitForFirstResult(){if(this.firstResultReceived)return Z("[Query.waitForFirstResult] Result already received, returning immediately"),Promise.resolve();return new Promise((A)=>{if(this.abortController?.signal.aborted){A();return}this.abortController?.signal.addEventListener("abort",()=>A(),{once:!0}),this.firstResultReceivedResolve=A})}handleHookCallbacks(A,Q,B,I){let E=this.hookCallbacks.get(A);if(!E)throw Error(`No hook callback found for ID: ${A}`);return E(Q,B,{signal:I})}connectSdkMcpServer(A,Q){let B=new $M((I)=>this.sendMcpServerMessageToCli(A,I));this.sdkMcpTransports.set(A,B),this.sdkMcpServerInstances.set(A,Q),Q.connect(B).catch((I)=>{if(this.sdkMcpTransports.get(A)===B)this.sdkMcpTransports.delete(A);if(this.sdkMcpServerInstances.get(A)===Q)this.sdkMcpServerInstances.delete(A);Z(`[Query.connectSdkMcpServer] Failed to connect MCP server '${A}': ${I}`,{level:"error"})})}async disconnectSdkMcpServer(A){let Q=this.sdkMcpTransports.get(A);if(Q)await Q.close(),this.sdkMcpTransports.delete(A);this.sdkMcpServerInstances.delete(A)}sendMcpServerMessageToCli(A,Q){if("id"in Q&&Q.id!==null&&Q.id!==void 0){let I=`${A}:${Q.id}`,E=this.pendingMcpResponses.get(I);if(E){E.resolve(Q),this.pendingMcpResponses.delete(I);return}}let B={type:"control_request",request_id:Q4(),request:{subtype:"mcp_message",server_name:A,message:Q}};Promise.resolve(this.transport.write(LA(B)+`
155
155
  `)).catch((I)=>{Z(`[Query.sendMcpServerMessageToCli] Transport write failed: ${I}`,{level:"error"})})}handleMcpControlRequest(A,Q,B){let I="id"in Q.message?Q.message.id:null,E=`${A}:${I}`;return new Promise((C,Y)=>{let J=()=>{this.pendingMcpResponses.delete(E)},G=(F)=>{J(),C(F)},U=(F)=>{J(),Y(F)};if(this.pendingMcpResponses.set(E,{resolve:G,reject:U}),B.onmessage)B.onmessage(Q.message);else{J(),Y(Error("No message handler registered"));return}})}}FQ();wB();dC();FQ();DJ();dC();dC();nQ();DJ();dC();FQ();DJ();dC();FQ();dC();FQ();U$();var Wj="io.modelcontextprotocol/related-task",N$="2.0",ZB=o8((A)=>A!==null&&(typeof A==="object"||typeof A==="function")),Vj=IQ([S(),aA().int()]),Mj=S(),LyA=gB({ttl:IQ([aA(),rF()]).optional(),pollInterval:aA().optional()}),SBA=l({ttl:aA().optional()}),PBA=l({taskId:S()}),t8=gB({progressToken:Vj.optional(),[Wj]:PBA.optional()}),VI=l({_meta:t8.optional()}),D$=VI.extend({task:SBA.optional()});var zB=l({method:S(),params:VI.loose().optional()}),vI=l({_meta:t8.optional()}),_I=l({method:S(),params:vI.loose().optional()}),KB=gB({_meta:t8.optional()}),$$=IQ([S(),aA().int()]),vBA=l({jsonrpc:r(N$),id:$$,...zB.shape}).strict();var _BA=l({jsonrpc:r(N$),..._I.shape}).strict();var wj=l({jsonrpc:r(N$),id:$$,result:KB}).strict();var sF;(function(A){A[A.ConnectionClosed=-32000]="ConnectionClosed",A[A.RequestTimeout=-32001]="RequestTimeout",A[A.ParseError=-32700]="ParseError",A[A.InvalidRequest=-32600]="InvalidRequest",A[A.MethodNotFound=-32601]="MethodNotFound",A[A.InvalidParams=-32602]="InvalidParams",A[A.InternalError=-32603]="InternalError",A[A.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(sF||(sF={}));var Xj=l({jsonrpc:r(N$),id:$$.optional(),error:l({code:aA().int(),message:S(),data:KQ().optional()})}).strict();var xyA=IQ([vBA,_BA,wj,Xj]),gyA=IQ([wj,Xj]),s8=KB.strict(),TBA=vI.extend({requestId:$$.optional(),reason:S().optional()}),e8=_I.extend({method:r("notifications/cancelled"),params:TBA}),kBA=l({src:S(),mimeType:S().optional(),sizes:_A(S()).optional(),theme:vB(["light","dark"]).optional()}),eF=l({icons:_A(kBA).optional()}),RJ=l({name:S(),title:S().optional()}),Zj=RJ.extend({...RJ.shape,...eF.shape,version:S(),websiteUrl:S().optional(),description:S().optional()}),bBA=tF(l({applyDefaults:eQ().optional()}),VQ(S(),KQ())),yBA=G$((A)=>{if(A&&typeof A==="object"&&!Array.isArray(A)){if(Object.keys(A).length===0)return{form:{}}}return A},tF(l({form:bBA.optional(),url:ZB.optional()}),VQ(S(),KQ()).optional())),fBA=gB({list:ZB.optional(),cancel:ZB.optional(),requests:gB({sampling:gB({createMessage:ZB.optional()}).optional(),elicitation:gB({create:ZB.optional()}).optional()}).optional()}),hBA=gB({list:ZB.optional(),cancel:ZB.optional(),requests:gB({tools:gB({call:ZB.optional()}).optional()}).optional()}),mBA=l({experimental:VQ(S(),ZB).optional(),sampling:l({context:ZB.optional(),tools:ZB.optional()}).optional(),elicitation:yBA.optional(),roots:l({listChanged:eQ().optional()}).optional(),tasks:fBA.optional()}),cBA=VI.extend({protocolVersion:S(),capabilities:mBA,clientInfo:Zj}),zj=zB.extend({method:r("initialize"),params:cBA});var uBA=l({experimental:VQ(S(),ZB).optional(),logging:ZB.optional(),completions:ZB.optional(),prompts:l({listChanged:eQ().optional()}).optional(),resources:l({subscribe:eQ().optional(),listChanged:eQ().optional()}).optional(),tools:l({listChanged:eQ().optional()}).optional(),tasks:hBA.optional()}),pBA=KB.extend({protocolVersion:S(),capabilities:uBA,serverInfo:Zj,instructions:S().optional()}),Kj=_I.extend({method:r("notifications/initialized"),params:vI.optional()});var A6=zB.extend({method:r("ping"),params:VI.optional()}),iBA=l({progress:aA(),total:HQ(aA()),message:HQ(S())}),lBA=l({...vI.shape,...iBA.shape,progressToken:Vj}),Q6=_I.extend({method:r("notifications/progress"),params:lBA}),dBA=VI.extend({cursor:Mj.optional()}),AN=zB.extend({params:dBA.optional()}),QN=KB.extend({nextCursor:Mj.optional()}),nBA=vB(["working","input_required","completed","failed","cancelled"]),BN=l({taskId:S(),status:nBA,ttl:IQ([aA(),rF()]),createdAt:S(),lastUpdatedAt:S(),pollInterval:HQ(aA()),statusMessage:HQ(S())}),W$=KB.extend({task:BN}),oBA=vI.merge(BN),B6=_I.extend({method:r("notifications/tasks/status"),params:oBA}),I6=zB.extend({method:r("tasks/get"),params:VI.extend({taskId:S()})}),E6=KB.merge(BN),C6=zB.extend({method:r("tasks/result"),params:VI.extend({taskId:S()})}),RyA=KB.loose(),Y6=AN.extend({method:r("tasks/list")}),J6=QN.extend({tasks:_A(BN)}),G6=zB.extend({method:r("tasks/cancel"),params:VI.extend({taskId:S()})}),aBA=KB.merge(BN),Hj=l({uri:S(),mimeType:HQ(S()),_meta:VQ(S(),KQ()).optional()}),Lj=Hj.extend({text:S()}),U6=S().refine((A)=>{try{return atob(A),!0}catch{return!1}},{message:"Invalid Base64 string"}),xj=Hj.extend({blob:U6}),IN=vB(["user","assistant"]),jJ=l({audience:_A(IN).optional(),priority:aA().min(0).max(1).optional(),lastModified:LJ.datetime({offset:!0}).optional()}),gj=l({...RJ.shape,...eF.shape,uri:S(),description:HQ(S()),mimeType:HQ(S()),annotations:jJ.optional(),_meta:HQ(gB({}))}),rBA=l({...RJ.shape,...eF.shape,uriTemplate:S(),description:HQ(S()),mimeType:HQ(S()),annotations:jJ.optional(),_meta:HQ(gB({}))}),Rj=AN.extend({method:r("resources/list")}),tBA=QN.extend({resources:_A(gj)}),jj=AN.extend({method:r("resources/templates/list")}),sBA=QN.extend({resourceTemplates:_A(rBA)}),F6=VI.extend({uri:S()}),eBA=F6,qj=zB.extend({method:r("resources/read"),params:eBA}),AIA=KB.extend({contents:_A(IQ([Lj,xj]))}),QIA=_I.extend({method:r("notifications/resources/list_changed"),params:vI.optional()}),BIA=F6,IIA=zB.extend({method:r("resources/subscribe"),params:BIA}),EIA=F6,CIA=zB.extend({method:r("resources/unsubscribe"),params:EIA}),YIA=vI.extend({uri:S()}),JIA=_I.extend({method:r("notifications/resources/updated"),params:YIA}),GIA=l({name:S(),description:HQ(S()),required:HQ(eQ())}),UIA=l({...RJ.shape,...eF.shape,description:HQ(S()),arguments:HQ(_A(GIA)),_meta:HQ(gB({}))}),Oj=AN.extend({method:r("prompts/list")}),FIA=QN.extend({prompts:_A(UIA)}),NIA=VI.extend({name:S(),arguments:VQ(S(),S()).optional()}),Sj=zB.extend({method:r("prompts/get"),params:NIA}),N6=l({type:r("text"),text:S(),annotations:jJ.optional(),_meta:VQ(S(),KQ()).optional()}),D6=l({type:r("image"),data:U6,mimeType:S(),annotations:jJ.optional(),_meta:VQ(S(),KQ()).optional()}),$6=l({type:r("audio"),data:U6,mimeType:S(),annotations:jJ.optional(),_meta:VQ(S(),KQ()).optional()}),DIA=l({type:r("tool_use"),name:S(),id:S(),input:VQ(S(),KQ()),_meta:VQ(S(),KQ()).optional()}),$IA=l({type:r("resource"),resource:IQ([Lj,xj]),annotations:jJ.optional(),_meta:VQ(S(),KQ()).optional()}),WIA=gj.extend({type:r("resource_link")}),W6=IQ([N6,D6,$6,WIA,$IA]),VIA=l({role:IN,content:W6}),MIA=KB.extend({description:S().optional(),messages:_A(VIA)}),wIA=_I.extend({method:r("notifications/prompts/list_changed"),params:vI.optional()}),XIA=l({title:S().optional(),readOnlyHint:eQ().optional(),destructiveHint:eQ().optional(),idempotentHint:eQ().optional(),openWorldHint:eQ().optional()}),ZIA=l({taskSupport:vB(["required","optional","forbidden"]).optional()}),Pj=l({...RJ.shape,...eF.shape,description:S().optional(),inputSchema:l({type:r("object"),properties:VQ(S(),ZB).optional(),required:_A(S()).optional()}).catchall(KQ()),outputSchema:l({type:r("object"),properties:VQ(S(),ZB).optional(),required:_A(S()).optional()}).catchall(KQ()).optional(),annotations:XIA.optional(),execution:ZIA.optional(),_meta:VQ(S(),KQ()).optional()}),vj=AN.extend({method:r("tools/list")}),zIA=QN.extend({tools:_A(Pj)}),V6=KB.extend({content:_A(W6).default([]),structuredContent:VQ(S(),KQ()).optional(),isError:eQ().optional()}),jyA=V6.or(KB.extend({toolResult:KQ()})),KIA=D$.extend({name:S(),arguments:VQ(S(),KQ()).optional()}),M6=zB.extend({method:r("tools/call"),params:KIA}),HIA=_I.extend({method:r("notifications/tools/list_changed"),params:vI.optional()}),qyA=l({autoRefresh:eQ().default(!0),debounceMs:aA().int().nonnegative().default(300)}),w6=vB(["debug","info","notice","warning","error","critical","alert","emergency"]),LIA=VI.extend({level:w6}),_j=zB.extend({method:r("logging/setLevel"),params:LIA}),xIA=vI.extend({level:w6,logger:S().optional(),data:KQ()}),gIA=_I.extend({method:r("notifications/message"),params:xIA}),RIA=l({name:S().optional()}),jIA=l({hints:_A(RIA).optional(),costPriority:aA().min(0).max(1).optional(),speedPriority:aA().min(0).max(1).optional(),intelligencePriority:aA().min(0).max(1).optional()}),qIA=l({mode:vB(["auto","required","none"]).optional()}),OIA=l({type:r("tool_result"),toolUseId:S().describe("The unique identifier for the corresponding tool call."),content:_A(W6).default([]),structuredContent:l({}).loose().optional(),isError:eQ().optional(),_meta:VQ(S(),KQ()).optional()}),SIA=Y$("type",[N6,D6,$6]),F$=Y$("type",[N6,D6,$6,DIA,OIA]),PIA=l({role:IN,content:IQ([F$,_A(F$)]),_meta:VQ(S(),KQ()).optional()}),vIA=D$.extend({messages:_A(PIA),modelPreferences:jIA.optional(),systemPrompt:S().optional(),includeContext:vB(["none","thisServer","allServers"]).optional(),temperature:aA().optional(),maxTokens:aA().int(),stopSequences:_A(S()).optional(),metadata:ZB.optional(),tools:_A(Pj).optional(),toolChoice:qIA.optional()}),_IA=zB.extend({method:r("sampling/createMessage"),params:vIA}),X6=KB.extend({model:S(),stopReason:HQ(vB(["endTurn","stopSequence","maxTokens"]).or(S())),role:IN,content:SIA}),Tj=KB.extend({model:S(),stopReason:HQ(vB(["endTurn","stopSequence","maxTokens","toolUse"]).or(S())),role:IN,content:IQ([F$,_A(F$)])}),TIA=l({type:r("boolean"),title:S().optional(),description:S().optional(),default:eQ().optional()}),kIA=l({type:r("string"),title:S().optional(),description:S().optional(),minLength:aA().optional(),maxLength:aA().optional(),format:vB(["email","uri","date","date-time"]).optional(),default:S().optional()}),bIA=l({type:vB(["number","integer"]),title:S().optional(),description:S().optional(),minimum:aA().optional(),maximum:aA().optional(),default:aA().optional()}),yIA=l({type:r("string"),title:S().optional(),description:S().optional(),enum:_A(S()),default:S().optional()}),fIA=l({type:r("string"),title:S().optional(),description:S().optional(),oneOf:_A(l({const:S(),title:S()})),default:S().optional()}),hIA=l({type:r("string"),title:S().optional(),description:S().optional(),enum:_A(S()),enumNames:_A(S()).optional(),default:S().optional()}),mIA=IQ([yIA,fIA]),cIA=l({type:r("array"),title:S().optional(),description:S().optional(),minItems:aA().optional(),maxItems:aA().optional(),items:l({type:r("string"),enum:_A(S())}),default:_A(S()).optional()}),uIA=l({type:r("array"),title:S().optional(),description:S().optional(),minItems:aA().optional(),maxItems:aA().optional(),items:l({anyOf:_A(l({const:S(),title:S()}))}),default:_A(S()).optional()}),pIA=IQ([cIA,uIA]),iIA=IQ([hIA,mIA,pIA]),lIA=IQ([iIA,TIA,kIA,bIA]),dIA=D$.extend({mode:r("form").optional(),message:S(),requestedSchema:l({type:r("object"),properties:VQ(S(),lIA),required:_A(S()).optional()})}),nIA=D$.extend({mode:r("url"),message:S(),elicitationId:S(),url:S().url()}),oIA=IQ([dIA,nIA]),aIA=zB.extend({method:r("elicitation/create"),params:oIA}),rIA=vI.extend({elicitationId:S()}),tIA=_I.extend({method:r("notifications/elicitation/complete"),params:rIA}),Z6=KB.extend({action:vB(["accept","decline","cancel"]),content:G$((A)=>A===null?void 0:A,VQ(S(),IQ([S(),aA(),eQ(),_A(S())])).optional())}),sIA=l({type:r("ref/resource"),uri:S()});var eIA=l({type:r("ref/prompt"),name:S()}),AEA=VI.extend({ref:IQ([eIA,sIA]),argument:l({name:S(),value:S()}),context:l({arguments:VQ(S(),S()).optional()}).optional()}),kj=zB.extend({method:r("completion/complete"),params:AEA});var QEA=KB.extend({completion:gB({values:_A(S()).max(100),total:HQ(aA().int()),hasMore:HQ(eQ())})}),BEA=l({uri:S().startsWith("file://"),name:S().optional(),_meta:VQ(S(),KQ()).optional()}),IEA=zB.extend({method:r("roots/list"),params:VI.optional()}),bj=KB.extend({roots:_A(BEA)}),EEA=_I.extend({method:r("notifications/roots/list_changed"),params:vI.optional()}),OyA=IQ([A6,zj,kj,_j,Sj,Oj,Rj,jj,qj,IIA,CIA,M6,vj,I6,C6,Y6,G6]),SyA=IQ([e8,Q6,Kj,EEA,B6]),PyA=IQ([s8,X6,Tj,Z6,bj,E6,J6,W$]),vyA=IQ([A6,_IA,aIA,IEA,I6,C6,Y6,G6]),_yA=IQ([e8,Q6,gIA,JIA,QIA,HIA,wIA,B6,tIA]),TyA=IQ([s8,pBA,QEA,MIA,FIA,tBA,sBA,AIA,V6,zIA,E6,J6,W$]);var CEA=Symbol("Let zodToJsonSchema decide on which parser to use");var $fA=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");var KNA=qI(Hv(),1);var Lv;(function(A){A.Completable="McpCompletable"})(Lv||(Lv={}));U$();nQ();FQ();var xv=15000,HNA=t$(()=>WI.object({session_id:WI.string(),ws_url:WI.string(),work_dir:WI.string().optional(),session_key:WI.string().optional()}));class WC extends Error{constructor(A){super(A);this.name="DirectConnectError"}}class Rv{options;ws;sessionId;workDir;abortController;readyState=!1;closed=!1;exitError;messages=new FJ;readyPromise;readyResolve;readyReject;abortHandler;partialChunks=[];constructor(A){this.options=A;this.abortController=A.abortController??new AbortController,this.readyPromise=new Promise((Q,B)=>{this.readyResolve=Q,this.readyReject=B}),this.readyPromise.catch(()=>{}),this.initialize()}get ready(){return this.readyPromise}getSessionId(){return this.sessionId}getWorkDir(){return this.workDir}async initialize(){if(this.abortController.signal.aborted){this.failInit(new cB("Connection aborted"));return}this.abortHandler=()=>{this.close(),this.exitError=new cB("Connection aborted by user")},this.abortController.signal.addEventListener("abort",this.abortHandler);let A;try{let E=await LNA(this.options);this.sessionId=E.sessionId,this.workDir=E.workDir,A=E.wsUrl}catch(E){this.failInit(A4(E));return}if(this.closed){if(this.options.deleteSessionOnClose&&this.sessionId)gv(this.options.serverUrl,this.sessionId,this.options.authToken);return}let Q={};if(this.options.authToken)Q.authorization=`Bearer ${this.options.authToken}`;let B=new WebSocket(A,{headers:Q});this.ws=B;let I=setTimeout((E,C)=>{if(!E.readyState){C.close();let Y=new WC(`WebSocket connection timeout after ${xv}ms`);E.exitError=Y,E.readyReject?.(Y)}},xv,this,B);B.addEventListener("open",()=>{clearTimeout(I),this.readyState=!0,pB(`[DirectConnectTransport] Connected to ${this.options.serverUrl}, session=${this.sessionId}`),this.readyResolve?.()}),B.addEventListener("message",(E)=>{let C=typeof E.data==="string"?E.data:"";if(C.indexOf(`
@@ -176,7 +176,7 @@ ${I.message}`:V,z=[H,Q,A].filter(Boolean).join(`
176
176
  `)){let I=B.match(/^(ID|VERSION_ID)=(.*)$/);if(I&&I[1]&&I[2]){let E=I[2].replace(/^"|"$/g,"");if(I[1]==="ID")A.linuxDistroId=E;else A.linuxDistroVersion=E}}}catch{}return A});FQ();import{AsyncLocalStorage as e9A}from"async_hooks";var bAQ=new e9A;wB();function I2A(){return Sf(fC(),"sessions")}var Of=Promise.resolve();async function E2A(A){let Q=Sf(I2A(),`${process.pid}.json`),B=Of.then(async()=>{try{let I=iQ(await Q2A(Q,"utf8"));await B2A(Q,LA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${CA(I)}`)}});Of=B,await B}async function Pf(A){await E2A({bridgeSessionId:A})}TQ();nQ();AC();AC();TQ();wB();nQ();KE();import{mkdirSync as C2A,writeFileSync as Y2A}from"fs";var lW="/home/claude/.claude/remote",ZQQ=`${lW}/.oauth_token`,zQQ=`${lW}/.api_key`,dW=`${lW}/.session_ingress_token`;function vf(A,Q,B){if(!sA(process.env.CLAUDE_CODE_REMOTE))return;try{C2A(lW,{recursive:!0,mode:448}),Y2A(A,Q,{encoding:"utf8",mode:384}),Z(`Persisted ${B} to ${A} for subprocess access`)}catch(I){Z(`Failed to persist ${B} to disk (non-fatal): ${CA(I)}`,{level:"error"})}}function gK(A,Q){try{let I=tQ().readFileSync(A,{encoding:"utf8"}).trim();if(!I)return null;return Z(`Read ${Q} from well-known file ${A}`),I}catch(B){if(!CJ(B))Z(`Failed to read ${Q} from ${A}: ${CA(B)}`,{level:"debug"});return null}}TQ();nQ();KE();function J2A(){let A=sx();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??dW,E=gK(I,"session ingress token");return GJ(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"}),GJ(null),null;try{let I=tQ(),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"}),GJ(null),null;return Z(`Successfully read token from file descriptor ${B}`),GJ(C),vf(dW,C,"session ingress token"),C}catch(I){Z(`Failed to read token from file descriptor ${B}: ${CA(I)}`,{level:"error"});let E=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??dW,C=gK(E,"session ingress token");return GJ(C),C}}function BD(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return J2A()}function nW(){let A=BD();if(!A)return{};if(A.startsWith("sk-ant-sid")){let Q={Cookie:`sessionKey=${A}`},B=process.env.CLAUDE_CODE_ORGANIZATION_UUID;if(B)Q["X-Organization-Uuid"]=B;return Q}return{Authorization:`Bearer ${A}`}}function ID(A){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=A}FQ();class YG extends Error{retryAfterMs;constructor(A,Q){super(A);this.retryAfterMs=Q}}class $Y{pending=[];pendingAtClose=0;draining=!1;closed=!1;backpressureResolvers=[];sleepResolve=null;flushResolvers=[];droppedBatches=0;config;constructor(A){this.config=A}get droppedBatchCount(){return this.droppedBatches}get pendingCount(){return this.closed?this.pendingAtClose:this.pending.length}async enqueue(A){if(this.closed)return;let Q=Array.isArray(A)?A:[A];if(Q.length===0)return;while(this.pending.length+Q.length>this.config.maxQueueSize&&!this.closed)await new Promise((B)=>{this.backpressureResolvers.push(B)});if(this.closed)return;this.pending.push(...Q),this.drain()}flush(){if(this.pending.length===0&&!this.draining)return Promise.resolve();return this.drain(),new Promise((A)=>{this.flushResolvers.push(A)})}close(){if(this.closed)return;this.closed=!0,this.pendingAtClose=this.pending.length,this.pending=[],this.sleepResolve?.(),this.sleepResolve=null;for(let A of this.backpressureResolvers)A();this.backpressureResolvers=[];for(let A of this.flushResolvers)A();this.flushResolvers=[]}async drain(){if(this.draining||this.closed)return;this.draining=!0;let A=0;try{while(this.pending.length>0&&!this.closed){let Q=this.takeBatch();if(Q.length===0)continue;try{await this.config.send(Q),A=0}catch(B){if(A++,this.config.maxConsecutiveFailures!==void 0&&A>=this.config.maxConsecutiveFailures){this.droppedBatches++,this.config.onBatchDropped?.(Q.length,A),A=0,this.releaseBackpressure();continue}this.pending=Q.concat(this.pending);let I=B instanceof YG?B.retryAfterMs:void 0;await this.sleep(this.retryDelay(A,I));continue}this.releaseBackpressure()}}finally{if(this.draining=!1,this.pending.length===0){for(let Q of this.flushResolvers)Q();this.flushResolvers=[]}}}takeBatch(){let{maxBatchSize:A,maxBatchBytes:Q}=this.config;if(Q===void 0)return this.pending.splice(0,A);let B=0,I=0;while(I<this.pending.length&&I<A){let E;try{E=Buffer.byteLength(LA(this.pending[I]))}catch{this.pending.splice(I,1);continue}if(I>0&&B+E>Q)break;B+=E,I++}return this.pending.splice(0,I)}retryDelay(A,Q){let B=Math.random()*this.config.jitterMs;if(Q!==void 0)return Math.max(this.config.baseDelayMs,Math.min(Q,this.config.maxDelayMs))+B;return Math.min(this.config.baseDelayMs*2**(A-1),this.config.maxDelayMs)+B}releaseBackpressure(){let A=this.backpressureResolvers;this.backpressureResolvers=[];for(let Q of A)Q()}sleep(A){return new Promise((Q)=>{this.sleepResolve=Q,setTimeout((B,I)=>{B.sleepResolve=null,I()},A,this,Q)})}}class RK{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}}TQ();wB();dE();import{Agent as G2A}from"https";dE();TQ();wB();KE();var JG=gQ(()=>{let A=E2("--use-system-ca")||E2("--use-openssl-ca"),Q=process.env.NODE_EXTRA_CA_CERTS;if(Z(`CA certs: useSystemCA=${A}, extraCertsPath=${Q}`),!A&&!Q)return;let B=g("tls"),I=[];if(A){let E=B.getCACertificates,C=E?.("system");if(C&&C.length>0)I.push(...C),Z(`CA certs: Loaded ${I.length} system CA certificates (--use-system-ca)`);else if(!E&&!Q){Z("CA certs: --use-system-ca set but system CA API unavailable, deferring to runtime");return}else I.push(...B.rootCertificates),Z(`CA certs: Loaded ${I.length} bundled root certificates as base (--use-system-ca fallback)`)}else I.push(...B.rootCertificates),Z(`CA certs: Loaded ${I.length} bundled root certificates as base`);if(Q)try{let E=tQ().readFileSync(Q,{encoding:"utf8"});I.push(E),Z(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${Q})`)}catch(E){Z(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${Q}): ${E}`,{level:"error"})}return I.length>0?I:void 0});TQ();KE();var ED=gQ(()=>{let A={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{A.cert=tQ().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=tQ().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY,{encoding:"utf8"}),Z("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY")}catch(Q){Z(`mTLS: Failed to load client key: ${Q}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE)A.passphrase=process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE,Z("mTLS: Using client key passphrase");if(Object.keys(A).length===0)return;return A}),_f=gQ(()=>{let A=ED(),Q=JG();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return Z("mTLS: Creating HTTPS agent with custom certificates"),new G2A(B)});function jK(){let A=ED(),Q=JG();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}dE();var io=qI(af(),1);TQ();wB();function nxA(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 t7(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function oxA(A=process.env){return A.no_proxy||A.NO_PROXY}function s7(A,Q=oxA()){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 lo(A,Q={}){let B=ED(),I=JG(),E={...B&&{cert:B.cert,key:B.key,passphrase:B.passphrase},...I&&{ca:I}};if(sA(process.env.CLAUDE_CODE_PROXY_RESOLVES_HOSTS))E.lookup=(C,Y,J)=>{J(null,C,nxA(Y))};return new io.HttpsProxyAgent(A,{...E,...Q})}function no(A={}){let Q=t7(),B=_f(),I=fQ.create({proxy:!1});if(!Q){if(B)I.defaults.httpsAgent=B;return I}let E=lo(Q,A);return I.interceptors.request.use((C)=>{if(C.url&&s7(C.url))C.httpsAgent=B,C.httpAgent=B;else C.httpsAgent=E,C.httpAgent=E;return C}),I}var fIQ=gQ((A)=>{let Q=po(),B=ED(),I=JG(),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 oo(A){let Q=t7();if(!Q)return;if(s7(A))return;return lo(Q)}function ao(A){let Q=t7();if(!Q)return;if(s7(A))return;return Q}GF();wB();var axA=30000,AH=null,ro=0;var Y1=null,e7=null;function rxA(){to(),Y1=setInterval(()=>{if(d("debug","session_keepalive_heartbeat",{refcount:ro}),sA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))AH?.()},axA)}function to(){if(e7!==null)clearTimeout(e7),e7=null}function O9(A){if(AH=A,ro>0&&Y1===null)rxA()}function J1(){if(AH=null,Y1!==null)clearInterval(Y1),Y1=null;to()}FQ();var VRA=`{"type":"keep_alive"}
177
177
  `,MRA=1000,wRA=1000,Jr=30000,XRA=600000,ZRA=1e4,zRA=300000,Yr=Jr*2,KRA=new Set([1002,4001,4003]);class MH{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 RK(MRA)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){Z(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),d("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),Z(`WebSocketTransport: Opening ${this.url.href}`),d("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:ao(this.url.href),tls:jK()||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(() => (Cr(),Er)),B=new Q(this.url.href,{headers:A,agent:oo(this.url.href),...jK()});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(),d("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onBunError=()=>{Z("WebSocketTransport: Error",{level:"error"}),d("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"}),d("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(),d("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onNodeError=(A)=>{Z(`WebSocketTransport: Error: ${A.message}`,{level:"error"}),d("error","cli_websocket_connect_error")};onNodeClose=(A,Q)=>{let B=A===1000||A===1001;Z(`WebSocketTransport: Closed: ${A}`,B?void 0:{level:"error"}),d("error","cli_websocket_connect_closed"),this.handleConnectionError(A)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let A=Date.now()-this.connectStartTime;if(Z("WebSocketTransport: Connected"),d("info","cli_websocket_connect_connected",{duration_ms:A}),this.isBridge&&this.reconnectStartTime!==null)rA("tengu_ws_transport_reconnected",{attempts:this.reconnectAttempts,downtimeMs:Date.now()-this.reconnectStartTime});this.reconnectAttempts=0,this.reconnectStartTime=null,this.lastReconnectAttemptTime=null,this.lastActivityTime=Date.now(),this.state="connected",this.onConnectCallback?.(),this.startPingInterval(),this.startKeepaliveInterval(),O9(()=>{this.write({type:"keep_alive"})})}sendLine(A){if(!this.ws||this.state!=="connected")return Z("WebSocketTransport: Not connected"),d("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"}),d("error","cli_websocket_send_error"),this.handleConnectionError(),!1}}removeWsListeners(A){if(this.isBunWs){let Q=A;Q.removeEventListener("open",this.onBunOpen),Q.removeEventListener("message",this.onBunMessage),Q.removeEventListener("error",this.onBunError),Q.removeEventListener("close",this.onBunClose),Q.removeEventListener("pong",this.onPong)}else{let Q=A;Q.off("open",this.onNodeOpen),Q.off("message",this.onNodeMessage),Q.off("error",this.onNodeError),Q.off("close",this.onNodeClose),Q.off("pong",this.onPong)}}doDisconnect(){if(this.stopPingInterval(),this.stopKeepaliveInterval(),J1(),this.ws)this.removeWsListeners(this.ws),this.ws.close(),this.ws=null}handleConnectionError(A){if(Z(`WebSocketTransport: Disconnected from ${this.url.href}`+(A!=null?` (code ${A})`:"")),d("info","cli_websocket_disconnected"),this.isBridge)rA("tengu_ws_transport_closed",{closeCode:A,msSinceLastActivity:this.lastActivityTime>0?Date.now()-this.lastActivityTime:-1,wasConnected:this.state==="connected",reconnectAttempts:this.reconnectAttempts});if(this.doDisconnect(),this.state==="closing"||this.state==="closed")return;let Q=!1;if(A===4003&&this.refreshHeaders){let E=this.refreshHeaders();if(E.Authorization!==this.headers.Authorization)Object.assign(this.headers,E),Q=!0,Z("WebSocketTransport: 4003 received but headers refreshed, scheduling reconnect"),d("info","cli_websocket_4003_token_refreshed")}if(A!=null&&KRA.has(A)&&!Q){Z(`WebSocketTransport: Permanent close code ${A}, not reconnecting`,{level:"error"}),d("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>Yr)Z(`WebSocketTransport: Detected system sleep (${Math.round((B-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),d("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<XRA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(!Q&&this.refreshHeaders){let Y=this.refreshHeaders();Object.assign(this.headers,Y),Z("WebSocketTransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let E=Math.min(wRA*Math.pow(2,this.reconnectAttempts-1),Jr),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)`),d("error","cli_websocket_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.isBridge)rA("tengu_ws_transport_reconnecting",{attempt:this.reconnectAttempts,elapsedMs:I,delayMs:Math.round(C)});this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},C)}else if(Z(`WebSocketTransport: Reconnection time budget exhausted after ${Math.round(I/1000)}s for ${this.url.href}`,{level:"error"}),d("error","cli_websocket_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:I}),this.state="closed",this.onCloseCallback)this.onCloseCallback(A)}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.stopPingInterval(),this.stopKeepaliveInterval(),J1(),this.state="closing",this.doDisconnect()}replayBufferedMessages(A){let Q=this.messageBuffer.toArray();if(Q.length===0)return;let B=0;if(A){let E=Q.findIndex((C)=>("uuid"in C)&&C.uuid===A);if(E>=0){B=E+1;let C=Q.slice(B);if(this.messageBuffer.clear(),this.messageBuffer.addAll(C),C.length===0)this.lastSentId=null;Z(`WebSocketTransport: Evicted ${B} confirmed messages, ${C.length} remaining`),d("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"),d("info","cli_websocket_no_messages_to_replay");return}Z(`WebSocketTransport: Replaying ${I.length} buffered messages`),d("info","cli_websocket_messages_to_replay",{count:I.length});for(let E of I){let C=LA(E)+`
178
178
  `;if(!this.sendLine(C)){this.handleConnectionError();break}}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnConnect(A){this.onConnectCallback=A}setOnClose(A){this.onCloseCallback=A}getStateLabel(){return this.state}async write(A){if("uuid"in A&&typeof A.uuid==="string")this.messageBuffer.add(A),this.lastSentId=A.uuid;let Q=LA(A)+`
179
- `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Yr){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),d("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"}),d("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),d("error","cli_websocket_ping_failed")}}},ZRA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),sA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(VRA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),d("error","cli_websocket_keepalive_failed")}},zRA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var HRA=100,LRA=15000,xRA=3000;class wH extends MH{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=gRA(A),this.uploader=new $Y({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{d("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}`),d("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(),HRA);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,xRA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=BD();if(!Q){Z("HybridTransport: No session token available for POST"),d("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await fQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:LRA})}catch(E){throw Z(`HybridTransport: POST error: ${CA(E)}`),d("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`),d("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),d("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function gRA(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 Fr}from"crypto";TQ();nQ();FQ();function RRA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return iQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Gr(A){let Q=RRA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}TQ();nQ();function nI(A,Q,B){return new Promise((I,E)=>{if(Q?.aborted){if(B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I();return}let C=setTimeout((J,G,U)=>{J?.removeEventListener("abort",G),U()},A,Q,Y,I);function Y(){if(clearTimeout(C),B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I()}if(Q?.addEventListener("abort",Y,{once:!0}),B?.unref)C.unref()})}function NU(){return"claude-code/0.2.97"}class XH{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Ur(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 nI(this.retryDelay(B)),this.pending&&!this.closed)Q=Ur(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 Ur(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 jRA=20000,qRA=100;function Nr(){return!0}class u9 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var ORA=10;function SRA(){return{byMessage:new Map,scopeToMessage:new Map}}function p9(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function PRA(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(p9(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(p9(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(p9(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 vRA(A,Q){A.byMessage.delete(Q.message.id);let B=p9(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class ZH{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=no({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=SRA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??jRA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??nW,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 XH({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new $Y({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new YG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new $Y({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new YG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new $Y({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new YG("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 u9("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 u9("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState();if(!(await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null}},"PUT worker (init)")).ok)throw new u9("worker_register_failed");this.currentState="idle",this.startHeartbeat(),O9(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),d("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)d("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":NU()},validateStatus:Nr,timeout:E});if(Y.status>=200&&Y.status<300)return this.consecutiveAuthFailures=0,{ok:!0};if(Y.status===409)this.handleEpochMismatch();if(Y.status===401||Y.status===403){let J=BD(),G=J?Gr(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"}),d("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=ORA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),d("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),d("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${CA(Y)}`,{level:"warn"}),d("warn","cli_worker_request_error",{method:A,path:Q,error_code:eE(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),d("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(),qRA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")vRA(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:Fr()}}}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=PRA(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:Fr()},...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":NU()},validateStatus:Nr,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${CA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await nI(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 nI(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),d("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),J1(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}TQ();nQ();FQ();var _RA=1000,TRA=30000,kRA=600000,bRA=45000,yRA=new Set([401,403,404]),M1=10,fRA=500,hRA=8000,mRA={stream:!0};function cRA(){return!0}function uRA(A){let Q=[],B=0,I;while((I=A.indexOf(`
179
+ `;if(this.state!=="connected")return;let B=this.sessionId?` session=${this.sessionId}`:"",I=this.getControlMessageDetailLabel(A);Z(`WebSocketTransport: Sending message type=${A.type}${B}${I}`),this.sendLine(Q)}getControlMessageDetailLabel(A){if(A.type==="control_request"){let{request_id:Q,request:B}=A,I=B.subtype==="can_use_tool"?B.tool_name:"";return` subtype=${B.subtype} request_id=${Q}${I?` tool=${I}`:""}`}if(A.type==="control_response"){let{subtype:Q,request_id:B}=A.response;return` subtype=${Q} request_id=${B}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let A=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let Q=Date.now(),B=Q-A;if(A=Q,B>Yr){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),d("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"}),d("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),d("error","cli_websocket_ping_failed")}}},ZRA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),sA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(VRA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),d("error","cli_websocket_keepalive_failed")}},zRA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var HRA=100,LRA=15000,xRA=3000;class wH extends MH{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=gRA(A),this.uploader=new $Y({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{d("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}`),d("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(),HRA);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,xRA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=BD();if(!Q){Z("HybridTransport: No session token available for POST"),d("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await fQ.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:LRA})}catch(E){throw Z(`HybridTransport: POST error: ${CA(E)}`),d("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`),d("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),d("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function gRA(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 Fr}from"crypto";TQ();nQ();FQ();function RRA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return iQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function Gr(A){let Q=RRA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}TQ();nQ();function nI(A,Q,B){return new Promise((I,E)=>{if(Q?.aborted){if(B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I();return}let C=setTimeout((J,G,U)=>{J?.removeEventListener("abort",G),U()},A,Q,Y,I);function Y(){if(clearTimeout(C),B?.throwOnAbort||B?.abortError)E(B.abortError?.()??Error("aborted"));else I()}if(Q?.addEventListener("abort",Y,{once:!0}),B?.unref)C.unref()})}function NU(){return"claude-code/0.2.100"}class XH{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?Ur(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 nI(this.retryDelay(B)),this.pending&&!this.closed)Q=Ur(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 Ur(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 jRA=20000,qRA=100;function Nr(){return!0}class u9 extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var ORA=10;function SRA(){return{byMessage:new Map,scopeToMessage:new Map}}function p9(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function PRA(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(p9(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(p9(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(p9(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 vRA(A,Q){A.byMessage.delete(Q.message.id);let B=p9(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class ZH{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;currentState=null;sessionBaseUrl;sessionId;http=no({keepAlive:!0});streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=SRA();workerState;eventUploader;internalEventUploader;deliveryUploader;onEpochMismatch;getAuthHeaders;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??jRA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??nW,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 XH({send:(E)=>this.request("put","/worker",{worker_epoch:this.workerEpoch,...E},"PUT worker").then((C)=>C.ok),baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new $Y({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(E)=>{let C=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:E},"client events");if(!C.ok)throw new YG("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new $Y({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(E)=>{let C=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:E},"internal events");if(!C.ok)throw new YG("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new $Y({maxBatchSize:64,maxQueueSize:64,send:async(E)=>{let C=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:E.map((Y)=>({event_id:Y.eventId,status:Y.status}))},"delivery batch");if(!C.ok)throw new YG("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 u9("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 u9("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 u9("worker_register_failed");this.currentState="idle",this.startHeartbeat(),O9(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),d("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:E,durationMs:C}=await B;if(!this.closed)d("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":NU()},validateStatus:Nr,timeout:E});if(Y.status>=200&&Y.status<300)return this.consecutiveAuthFailures=0,{ok:!0};if(Y.status===409)this.handleEpochMismatch();if(Y.status===401||Y.status===403){let J=BD(),G=J?Gr(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"}),d("error","cli_worker_token_expired_no_refresh"),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=ORA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),d("error","cli_worker_auth_failures_exhausted"),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${Y.status}`,{level:"warn"}),d("warn","cli_worker_request_failed",{method:A,path:Q,status:Y.status}),Y.status===429){let J=Y.headers?.["retry-after"],G=typeof J==="string"?parseInt(J,10):NaN;if(!isNaN(G)&&G>=0)return{ok:!1,retryAfterMs:G*1000}}return{ok:!1}}catch(Y){return Z(`CCRClient: ${I} failed: ${CA(Y)}`,{level:"warn"}),d("warn","cli_worker_request_error",{method:A,path:Q,error_code:eE(Y)}),{ok:!1}}}reportState(A,Q){if(A===this.currentState&&!Q)return;this.currentState=A,this.workerState.enqueue({worker_status:A,requires_action_details:Q?{tool_name:Q.tool_name,action_description:Q.action_description,request_id:Q.request_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),d("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(),qRA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")vRA(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:Fr()}}}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=PRA(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:Fr()},...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":NU()},validateStatus:Nr,timeout:30000})}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${CA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await nI(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 nI(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),d("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),J1(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}TQ();nQ();FQ();var _RA=1000,TRA=30000,kRA=600000,bRA=45000,yRA=new Set([401,403,404]),M1=10,fRA=500,hRA=8000,mRA={stream:!0};function cRA(){return!0}function uRA(A){let Q=[],B=0,I;while((I=A.indexOf(`
180
180
 
181
181
  `,B))!==-1){let E=A.slice(B,I);if(B=I+2,!E.trim())continue;let C={},Y=!1;for(let J of E.split(`
182
182
  `)){if(J.startsWith(":")){Y=!0;continue}let G=J.indexOf(":");if(G===-1)continue;let U=J.slice(0,G),F=J[G+1]===" "?J.slice(G+2):J.slice(G+1);switch(U){case"event":C.event=F;break;case"id":C.id=F;break;case"data":C.data=C.data?C.data+`
@@ -186,4 +186,4 @@ ${I.message}`:V,z=[H,Q,A].filter(Boolean).join(`
186
186
  `);if(I.push(J),!G){E=J.endsWith(`
187
187
  `);continue}let{frames:U,remaining:F}=uRA(I.join(""));I=F?[F]:[],E=F.endsWith(`
188
188
  `);for(let N of U){if(this.resetLivenessTimer(),N.id){let D=parseInt(N.id,10);if(!isNaN(D)){if(this.seenSequenceNums.has(D))Z(`SSETransport: DUPLICATE frame seq=${D} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),d("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"}),d("warn","cli_sse_frame_missing_event_field")}}}catch(C){if(this.abortController?.signal.aborted)return;Z(`SSETransport: Stream read error: ${CA(C)}`,{level:"error"}),d("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"}),d("warn","cli_sse_unexpected_event_type",{event_type:A});return}let B;try{B=iQ(Q)}catch(E){Z(`SSETransport: Failed to parse client_event data: ${CA(E)}`,{level:"error"});return}let I=B.payload;if(I&&typeof I==="object"&&"type"in I){let E=this.sessionId?` session=${this.sessionId}`:"";Z(`SSETransport: Event seq=${B.sequence_num} event_id=${B.event_id} event_type=${B.event_type} payload_type=${String(I.type)}${E}`),d("info","cli_sse_message_received"),this.onData?.(LA(I)+`
189
- `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<kRA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let E=this.refreshHeaders();Object.assign(this.headers,E),Z("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let B=Math.min(_RA*Math.pow(2,this.reconnectAttempts-1),TRA),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)`),d("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"}),d("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"}),d("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,bRA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),d("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":NU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=M1;I++){try{let C=await fQ.post(this.postUrl,A,{headers:B,validateStatus:cRA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${LA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),d("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${M1}`),d("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${CA(C)}, attempt ${I}/${M1}`),d("warn","cli_sse_post_network_error",{attempt:I})}if(I===M1){Z(`SSETransport: POST failed after ${M1} attempts, continuing`),d("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(fRA*Math.pow(2,I-1),hRA);await nI(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}}function pRA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}TQ();nQ();function Dr(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 $r(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let M=C();if(!M)return{};return{Authorization:`Bearer ${M}`}};else ID(B);let J=A.epoch??await nb(Q,B);Z(`[bridge:repl] CCR v2: worker sessionId=${I} epoch=${J}${A.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let G=new URL(Q);G.pathname=G.pathname.replace(/\/$/,"")+"/worker/events/stream";let U=new zH(G,{},I,void 0,E,Y),F,N=new ZH(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(M){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${CA(M)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((M)=>{N.reportDelivery(M.event_id,"received"),N.reportDelivery(M.event_id,"processed")});let D,W=!1,$=!1;return{write(M){return N.writeEvent(M)},async writeBatch(M){for(let V of M){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(M){U.setOnData(M)},setOnClose(M){F=M,U.setOnClose((V)=>{N.close(),M(V??4092)})},setOnConnect(M){D=M},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(M){N.reportState(M)},reportMetadata(M){N.reportMetadata(M)},reportDelivery(M,V){N.reportDelivery(M,V)},flush(){return N.flush()},getInternalEventWriter(){return(M,V,w)=>N.writeInternalEvent(M,V,w)},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?.()},(M)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${CA(M)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}TQ();nQ();var iRA="2023-06-01",lRA="ccr-byoc-2025-07-29";async function Wr({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return Z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await fQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:KH(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${CA(W)}`),null}if(N.status!==200&&N.status!==201){let W=IG(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 Vr(A,Q){let{baseUrl:B,getAccessToken:I,orgUUID:E}=Q,C=I();if(!C){Z("[bridge] No access token for session archive");return}let Y=`${B}/v1/sessions/${A}/archive`;Z(`[bridge] Archiving session ${A}`);try{let J=await fQ.post(Y,{},{headers:KH(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=IG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${CA(J)}`)}}async function i9(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-pr`),!1;let J=`${E}/v1/code/github/${A}-pr`,G={session_id:tN(Q),repo:B,pr_number:I},U;try{U=await fQ.post(J,G,{headers:KH(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${CA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=IG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function KH(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":iRA,"anthropic-beta":lRA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}wB();function Mr(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 HH{_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}}nQ();TQ();var IjA=2000,Hr=60000,Lr=900000,EjA=0;async function xr(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:M,getTrustedDeviceToken:V,getPollIntervalConfig:w=()=>ON,initialHistoryCap:H=200,initialMessages:z,previouslyFlushedUUIDs:L,onInboundMessage:q,onPermissionResponse:O,onInterrupt:v,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:p,onInitError:xA,perpetual:c,initialSSESequenceNum:HA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:i}=A,XQ=++EjA,{writeBridgePointer:n,clearBridgePointer:u,readBridgePointer:qA}=await Promise.resolve().then(() => (zr(),Zr)),vA=c?await qA(Q):null,zA=vA?.source==="repl"?vA:null;Z(`[bridge:repl] initBridgeCore #${XQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let JQ=bb({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.97",onDebug:Z,onAuth401:M,getTrustedDeviceToken:V}),ZQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Kr(),workerType:U,environmentId:Kr(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},$A,JB;try{let b=await JQ.registerBridgeEnvironment(ZQ);$A=b.environment_id,JB=b.environment_secret}catch(b){if(kb("registration_failed",`[bridge:repl] Environment registration failed: ${CA(b)}`),xA?.(`[bridge:repl] Environment registration failed: ${CA(b)}`),zA&&b instanceof GE&&(b.status===410||b.status!==401&&SW(b.errorType)))await u(Q);return QA?.("failed",CA(b)),null}Z(`[bridge:repl] Environment registered: ${$A}`),d("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function PQ(b,UA){if($A!==b)return Z(`[bridge:repl] Env mismatch (requested ${b}, got ${$A}) — cannot reconnect in place`),!1;let BQ=i5(UA),OA=BQ===UA?[UA]:[UA,BQ];for(let cQ of OA)try{return await JQ.reconnectSession($A,cQ),Z(`[bridge:repl] Reconnected session ${cQ} in place on env ${$A}`),!0}catch(rI){Z(`[bridge:repl] reconnectSession(${cQ}) failed: ${CA(rI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let v0=zA?await PQ(zA.environmentId,zA.sessionId):!1;if(zA&&!v0)await u(Q);let VA,s=new Set;if(v0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&L)for(let b of z)L.add(b.uuid)}else{let b=await N({environmentId:$A,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!b)return Z("[bridge:repl] Session creation failed, deregistering environment"),xA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await JQ.deregisterEnvironment($A).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=b,Z(`[bridge:repl] Session created: ${VA}`)}p?.(VA),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),d("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:dL(),...fb()});let zQ=new Set;if(z)for(let b of z)zQ.add(b.uuid);let nA=new PW(2000);for(let b of zQ)nA.add(b);let iA=new PW(2000),VB=new AbortController,EA=null,oI=0,GB=v0?HA:0,QQ=null,mQ=null,_C=Mr(VB.signal),fB=_C.wake,mY=_C.signal,hB=new HH,TC=!BA,XE=3,MB=0,aI=null;async function w1(){if(aI)return aI;aI=jr();try{return await aI}finally{aI=null}}async function jr(){if(MB++,oI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${MB}/${XE})`),MB>XE)return Z(`[bridge:repl] Environment reconnect limit reached (${XE}), giving up`),!1;if(EA){let OA=EA.getLastSequenceNum();if(OA>GB)GB=OA;i?.(),EA.close(),EA=null}if(fB(),hB.drop(),QQ){let OA=QQ;if(await JQ.stopWork($A,OA,!1).catch(()=>{}),QQ!==OA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),MB=0,!0;QQ=null,mQ=null}if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let b=$A;ZQ.reuseEnvironmentId=b;try{let OA=await JQ.registerBridgeEnvironment(ZQ);$A=OA.environment_id,JB=OA.environment_secret}catch(OA){return ZQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${CA(OA)}`),!1}if(ZQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${b} got=${$A}`),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await JQ.deregisterEnvironment($A).catch(()=>{}),!1;if(EA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),MB=0,!0;if(await PQ(b,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),MB=0,!0;if($A!==b)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await JQ.deregisterEnvironment($A).catch(()=>{}),!1;let UA=W(),BQ=await N({environmentId:$A,title:UA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!BQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(BQ),!1;if(VA=BQ,Pf(tN(BQ)).catch(()=>{}),p?.(VA),GB=0,iA.clear(),TC=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),L?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let OA of s){let cQ=OA.lastIndexOf("#");i9("subscribe",VA,OA.slice(0,cQ),Number(OA.slice(cQ+1)),J,F)}}return MB=0,!0}function d9(){return F()}function RH(){let b=hB.end();if(b.length===0)return;if(!EA){Z(`[bridge:repl] Cannot drain ${b.length} pending message(s): no transport`);return}for(let OA of b)nA.add(OA.uuid);let BQ=$(b).map((OA)=>({...OA,session_id:VA}));Z(`[bridge:repl] Drained ${b.length} pending message(s) after flush`),EA.writeBatch(BQ)}let X1=null;function n9(){X1?.()}function jH(b){if(Z(`[bridge:repl] Transport permanently closed: code=${b}`),rA("tengu_bridge_repl_ws_closed",{code:b}),EA){let BQ=EA.getLastSequenceNum();if(BQ>GB)GB=BQ;i?.(),EA=null}fB();let UA=hB.drop();if(UA>0)Z(`[bridge:repl] Dropping ${UA} pending message(s) on transport close (code=${b})`,{level:"warn"});if(b===1000){QA?.("failed","session ended"),VB.abort(),n9();return}QA?.("reconnecting",`Remote Control connection lost (code ${b})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${b}), attempting env reconnect`),w1().then((BQ)=>{if(BQ)return;if(VB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:b}),QA?.("failed","reconnection failed"),n9()})}let qH,qr=null,Or={api:JQ,getCredentials:()=>({environmentId:$A,environmentSecret:JB}),signal:VB.signal,getPollIntervalConfig:w,onStateChange:QA,getWsState:()=>EA?.getStateLabel()??"null",isAtCapacity:()=>EA!==null,capacitySignal:mY,onFatalError:n9,getHeartbeatInfo:()=>{if(!QQ||!mQ)return null;return{environmentId:$A,workId:QQ,sessionToken:mQ}},onHeartbeatFatal:(b)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${b.status}) — tearing down work item for fast re-dispatch`),EA){let UA=EA.getLastSequenceNum();if(UA>GB)GB=UA;i?.(),EA.close(),EA=null}if(hB.drop(),QQ)JQ.stopWork($A,QQ,!1).catch((UA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${CA(UA)}`)});QQ=null,mQ=null,fB(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await w1())return null;return{environmentId:$A,environmentSecret:JB}},onWorkReceived:(b,UA,BQ,OA)=>{if(EA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${BQ})`);if(Z(`[bridge:repl] Work received: workId=${BQ} workSessionId=${b} currentSessionId=${VA} match=${u5(b,VA)}`),n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),!u5(b,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${b}`);return}QQ=BQ,mQ=UA;let cQ=OA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rI;if(!cQ){if(rI=d9(),!rI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}ID(rI)}if(rA("tengu_bridge_repl_work_received",{}),EA){i?.();let vQ=EA;EA=null;let uQ=vQ.getLastSequenceNum();if(uQ>GB)GB=uQ;vQ.close()}hB.deactivate();let Pr=(vQ)=>pb(vQ,{transport:EA,sessionId:VA,onInterrupt:v,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA}),t9=!1,SH=(vQ)=>{if(EA=vQ,vQ.setOnConnect(()=>{if(EA!==vQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!cQ){let uQ=d9();if(uQ)ID(uQ)}if(r9=!1,!t9&&z&&z.length>0){t9=!0;let uQ=H,mB=z.filter((Z1)=>m5(Z1)&&!L?.has(Z1.uuid)),iE=uQ>0&&mB.length>uQ?mB.slice(-uQ):mB;if(iE.length<mB.length)Z(`[bridge:repl] Capped initial flush: ${mB.length} -> ${iE.length} (cap=${uQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:mB.length,capped_count:iE.length});let kC=$(iE);if(kC.length>0){Z(`[bridge:repl] Flushing ${kC.length} initial message(s) via transport`);let Z1=kC.map((cY)=>({...cY,session_id:VA})),PH=vQ.droppedBatchCount;vQ.writeBatch(Z1).then(()=>{if(vQ.droppedBatchCount>PH){Z(`[bridge:repl] Initial flush dropped ${vQ.droppedBatchCount-PH} batch(es) — not marking ${kC.length} UUID(s) as flushed`);return}if(L){for(let cY of kC)if(cY.uuid)L.add(cY.uuid)}}).catch((cY)=>Z(`[bridge:repl] Initial flush failed: ${cY}`)).finally(()=>{if(EA!==vQ)return;RH(),QA?.("connected")})}else RH(),QA?.("connected")}else if(!hB.active)QA?.("connected")}),vQ.setOnData((uQ)=>{ub(uQ,nA,iA,q,O,Pr)}),qr=jH,vQ.setOnClose((uQ)=>{if(EA!==vQ)return;jH(uQ)}),!t9&&z&&z.length>0)hB.start();vQ.connect()};if(oI++,cQ){let vQ=db(J,b),uQ=oI;Z(`[bridge:repl] CCR v2: sessionUrl=${vQ} session=${b} gen=${uQ}`),$r({sessionUrl:vQ,ingressToken:UA,sessionId:b,initialSequenceNum:GB}).then((mB)=>{if(VB.signal.aborted){mB.close();return}if(uQ!==oI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${oI}`),mB.close();return}if(SH(mB),fA){let iE=mB.getInternalEventWriter?.(),kC=mB.getInternalEventReaders?.();if(iE&&kC)fA(iE,kC)}},(mB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${CA(mB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==oI)return;if(QQ)JQ.stopWork($A,QQ,!1).catch((iE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${CA(iE)}`)}),QQ=null,mQ=null;fB()})}else{let vQ=lb(G,b);Z(`[bridge:repl] Ingress URL: ${vQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${b}`);let uQ=rI??"";SH(Dr(new wH(new URL(vQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},b,()=>({Authorization:`Bearer ${d9()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),fB()}})))}}};CjA(Or);let o9=c?setInterval(()=>{if(aI)return;n(Q,{sessionId:VA,environmentId:$A,source:"repl"})},3600000):null;o9?.unref?.();let OH=w().session_keepalive_interval_v2_ms,a9=OH>0?setInterval(()=>{if(!EA)return;Z("[bridge:repl] keep_alive sent"),EA.write({type:"keep_alive"}).catch((b)=>{Z(`[bridge:repl] keep_alive write failed: ${CA(b)}`)})},OH):null;a9?.unref?.();let r9=!1;X1=async()=>{if(r9){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${$A} session=${VA}`);return}r9=!0,i?.();let b=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${$A} session=${VA} workId=${QQ??"none"} transportState=${EA?.getStateLabel()??"null"}`),o9!==null)clearInterval(o9);if(a9!==null)clearInterval(a9);if(qH)process.off("SIGUSR2",qH);if(VB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),EA){let OA=EA.getLastSequenceNum();if(OA>GB)GB=OA}if(c){EA=null,hB.drop(),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${$A} session=${VA} alive on server, duration=${Date.now()-b}ms`);return}let UA=EA;if(EA=null,hB.drop(),UA)UA.write(c5(VA));let BQ=QQ?JQ.stopWork($A,QQ,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((OA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${CA(OA)}`)}):Promise.resolve();await Promise.all([BQ,D(VA)]),UA?.close(),Z("[bridge:repl] Teardown: transport closed"),await JQ.deregisterEnvironment($A).catch((OA)=>{Z(`[bridge:repl] Teardown deregister failed: ${CA(OA)}`)}),await u(Q),Z(`[bridge:repl] Teardown complete: env=${$A} duration=${Date.now()-b}ms`)};let Sr=UJ(()=>X1?.());return Z(`[bridge:repl] Ready: env=${$A} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return $A},getSSESequenceNum(){let b=EA?.getLastSequenceNum()??0;return Math.max(GB,b)},sessionIngressUrl:G,writeMessages(b){let UA=b.filter((cQ)=>m5(cQ)&&!zQ.has(cQ.uuid)&&!nA.has(cQ.uuid));if(UA.length===0)return;if(!TC)for(let cQ of UA){let rI=cb(cQ);if(rI!==void 0&&BA?.(rI,VA)){TC=!0;break}}if(hB.enqueue(...UA)){Z(`[bridge:repl] Queued ${UA.length} message(s) during initial flush`);return}if(!EA){let cQ=UA.map((rI)=>rI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${UA.length} message(s) [${cQ}] for session=${VA}`,{level:"warn"});return}for(let cQ of UA)nA.add(cQ.uuid);Z(`[bridge:repl] Sending ${UA.length} message(s) via transport`);let OA=$(UA).map((cQ)=>({...cQ,session_id:VA}));EA.writeBatch(OA)},writeSdkMessages(b){let UA=b.filter((OA)=>!OA.uuid||!nA.has(OA.uuid));if(UA.length===0)return;if(!EA){Z(`[bridge:repl] Transport not configured, dropping ${UA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let OA of UA)if(OA.uuid)nA.add(OA.uuid);let BQ=UA.map((OA)=>({...OA,session_id:VA}));EA.writeBatch(BQ)},sendControlRequest(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let UA={...b,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_request request_id=${b.request_id}`)},sendControlResponse(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let UA={...b,session_id:VA};EA.write(UA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let UA={type:"control_cancel_request",request_id:b,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_cancel_request request_id=${b}`)},sendResult(){if(!EA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}EA.write(c5(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(b,UA){let BQ=await i9("subscribe",VA,b,UA,J,F);if(BQ)s.add(`${b}#${UA}`);return BQ},async unsubscribePR(b,UA){let BQ=await i9("unsubscribe",VA,b,UA,J,F);if(BQ)s.delete(`${b}#${UA}`);return BQ},async teardown(){Sr(),await X1?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function CjA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>ON,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,M=null,V=null,w=0,H=!1;while(!B.aborted){let{environmentId:z,environmentSecret:L}=Q(),q=F();try{let O=await A.pollForWork(z,L,B,q.reclaim_older_than_ms);if(w=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,M=null,V=null,I?.("ready");if(!O){let k=H;if(H=!1,J?.()&&G&&!k){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let QA=a>0?Date.now()+a:null,BA=!1,p=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let c=F();if(c.non_exclusive_heartbeat_interval_ms<=0)break;let HA=N();if(!HA)break;let fA=G();try{await A.heartbeatWork(HA.environmentId,HA.workId,HA.sessionToken)}catch(i){if(Z(`[bridge:repl:heartbeat] Failed: ${CA(i)}`),i instanceof GE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:i.status,error_type:i.status===401||i.status===403?"auth_failed":"fatal"}),D)D(i),Z(`[bridge:repl:heartbeat] Fatal (status=${i.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}p++,await nI(c.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let xA=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":QA!==null&&Date.now()>=QA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:xA,heartbeat_cycles:p}),!BA){if(xA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${p} cycles — falling through to pollForWork`);continue}}let DA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(DA>0){let QA=G(),BA=Date.now();await nI(DA,QA.signal),QA.cleanup();let p=Date.now()-BA-DA;if(p>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(p/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:p}),H=!0}}else await nI(q.poll_interval_ms_not_at_capacity,B);continue}let v;try{v=ib(O.secret)}catch(k){Z(`[bridge:repl] Failed to decode work secret: ${CA(k)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,O.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${O.id}`);try{await A.acknowledgeWork(z,O.id,v.session_ingress_token)}catch(k){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${CA(k)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let k=O.data.id;try{sB(k,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${k}`);continue}E(k,v.session_ingress_token,O.id,v.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof GE&&O.status===404&&C){let p=Q().environmentId;if(z!==p){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${p} — skipping onEnvironmentLost`),$=0,M=null;continue}if(w++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${w}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:w}),w>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 xA=await C();if(B.aborted)break;if(xA){$=0,M=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${xA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof GE){let p=SW(O.errorType),xA=yb(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${xA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),d(p?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!xA)I?.("failed",p?"session expired · /remote-control to reconnect":O.message);U?.();break}let v=Date.now();if(V!==null&&v-V>Hr*2)Z(`[bridge:repl] Detected system sleep (${Math.round((v-V)/1000)}s gap), resetting poll error budget`),d("info","bridge_repl_poll_sleep_detected",{gapMs:v-V}),$=0,M=null;if(V=v,$++,M===null)M=v;let k=v-M,a=Tb(O),DA=_b(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(k/1000)}s, ws=${QA}): ${DA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:k}),$===1)I?.("reconnecting",DA);if(k>=Lr){Z(`[bridge:repl] Poll failures exceeded ${Lr/1000}s (${$} errors), giving up`),d("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:k,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(IjA*2**($-1),Hr);if(F().non_exclusive_heartbeat_interval_ms>0){let p=N?.();if(p)try{await A.heartbeatWork(p.environmentId,p.workId,p.sessionToken)}catch{}}await nI(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function YjA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function JjA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function GjA(A,Q){if(JjA(A,Q))return"http://localhost:4000";if(YjA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function gr(A,Q){let{toCompatSessionId:B}=yr(ob),I=B(A);return`${GjA(I,Q)}/code/${I}`}TQ();async function Rr(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,M=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,w={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},H=[],z=null,L=[],q=null,O=[],v=null,k=!1,a=null,DA={detail:null},QA=UjA(),BA=()=>xr({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:M,onInitError:console.error,createSession:({environmentId:i,title:XQ,signal:n})=>Wr({environmentId:i,title:XQ,tags:["claude-code-assistant"],signal:n},w),archiveSession:(i)=>Vr(i,w),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...ON,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(i){let XQ=Q_(i);if(!XQ)return;H.push({content:XQ.content,uuid:XQ.uuid}),z?.(),z=null},onInterrupt(){L.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(i){L.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:i}}),q?.(),q=null},onSetMaxThinkingTokens(i){L.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:i}}),q?.(),q=null},onPermissionResponse(i){O.push(i),v?.(),v=null},onStateChange(i,XQ){if(a?.(i,XQ),i==="failed")DA.detail=XQ??"unknown failure",k=!0,z?.(),q?.(),v?.()}}),p=await BA();if(!p&&$&&DA.detail?.includes("409")){if(await $({machineName:QA,message:DA.detail})==="takeover")k=!1,DA.detail=null,p=await BA()}if(!p){let i=DA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${i}`),{ok:!1,error:{kind:DA.detail?.includes("409")?"conflict":DA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:i}}}async function*xA(){while(!k){while(H.length>0)if(yield H.shift(),k)return;await new Promise((i)=>{z=i})}}async function*c(){while(!k){while(L.length>0)if(yield L.shift(),k)return;await new Promise((i)=>{q=i})}}async function*HA(){while(!k){while(O.length>0)if(yield O.shift(),k)return;await new Promise((i)=>{v=i})}}return{ok:!0,handle:{get sessionUrl(){return gr(p.bridgeSessionId,V)},get environmentId(){return p.environmentId},get bridgeSessionId(){return p.bridgeSessionId},getSSESequenceNum(){return p.getSSESequenceNum()},hasPendingPrompts(){return H.length>0},write(i){p.writeSdkMessages([i])},sendResult(){p.sendResult()},sendControlRequest(i){p.sendControlRequest(i)},sendControlResponse(i){p.sendControlResponse(i)},sendControlCancelRequest(i){p.sendControlCancelRequest(i)},inboundPrompts:xA,controlRequests:c,permissionResponses:HA,onStateChange(i){a=i},async teardown(){k=!0,z?.(),q?.(),v?.(),await p.teardown()}}}}var NjA=1000,DjA=1e4,$jA=5000,WjA=60000,gH=3;function VjA(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 MjA(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"&&bH(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function wjA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let M=await Rr($);if(!M.ok)return D(`bridge connection failed: ${M.error.kind} — ${M.error.detail}`),{ok:!1,error:M.error};let V=M.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let w=W?.claudeSessionId,H=V.bridgeSessionId,z=[],L=null,q=!1,O=null,v=0,k=!0,a=0,DA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:w,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};DA=DA.then(()=>G.save(s).catch((zQ)=>{D(`stateAdapter.save threw: ${zQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let p=new AbortController,xA=new Map,c=null;function HA(){return c??=(async()=>{BA();for(let s of xA.keys())V.sendControlCancelRequest(s);xA.clear(),await V.teardown(),await DA})()}if(N.addEventListener("abort",()=>{p.abort(),HA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await HA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,zQ)=>{if(D(`bridge state=${s} detail=${zQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==H)H=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${zQ??"unknown"}`),p.abort(),HA().catch((nA)=>D(`teardown threw: ${nA}`))});let i=I?.horizonMs??600000,XQ=I?.leadMs??$jA,n=null,u=!1,qA=!1,vA="";async function zA(){if(!I)return;let s=await sv(I.dir).catch((nA)=>{return D(`computeCronHorizon threw: ${nA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,qA=s.hasOverdue;let zQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(zQ!==vA)vA=zQ,D(zQ)}let SQ;if(I)await zA(),SQ=setInterval(zA,DjA),SQ.unref?.();function JQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),L?.(),L=null}async function ZQ(s,zQ,nA){if(C){let mQ=await C(s,zQ,nA);if(mQ)return Y?.(s,mQ),mQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let mQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,mQ),mQ}let iA=FjA();D(`permission request tool=${s} req=${iA}`);let{signal:VB,suggestions:EA,blockedPath:oI,toolUseID:GB}=nA;V.sendControlRequest({type:"control_request",request_id:iA,request:{subtype:"can_use_tool",tool_name:s,display_name:yH(s),input:zQ,tool_use_id:GB,...EA?{permission_suggestions:EA}:{},...oI?{blocked_path:oI}:{},..."decisionReason"in nA&&nA.decisionReason?{decision_reason:nA.decisionReason}:{},..."agentID"in nA&&nA.agentID?{agent_id:nA.agentID}:{}}});let QQ;try{let mQ=await new Promise((fB,mY)=>{xA.set(iA,fB),QQ=setTimeout((hB,TC,XE,MB,aI)=>{if(hB.delete(TC))XE(`permission timeout req=${TC}`),MB.sendControlCancelRequest(TC),aI({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},WjA,xA,iA,D,V,fB),QQ.unref?.(),VB.addEventListener("abort",()=>{if(xA.delete(iA))V.sendControlCancelRequest(iA);mY(Error("aborted"))},{once:!0})});D(`permission response req=${iA} behavior=${mQ.behavior}`);let _C=mQ.behavior==="allow"?{behavior:"allow",updatedInput:mQ.updatedInput,updatedPermissions:mQ.updatedPermissions}:{behavior:"deny",message:mQ.message??"Denied via remote control"};return Y?.(s,_C),_C}finally{if(QQ)clearTimeout(QQ);xA.delete(iA)}}let $A=!1;async function JB(){if(O!==null||$A||p.signal.aborted)return;if($A=!0,q=!1,z.length>0)k=!1;async function*s(){while(!q){while(z.length>0)if(k=!1,yield z.shift(),q)return;await new Promise((iA)=>{L=iA})}}D(`spawning query resume=${w??"<fresh>"}`);let zQ={assistant:!0,cwd:Q.dir,resume:w,stderr:(iA)=>D(`[child] ${iA.trimEnd()}`),canUseTool:ZQ},nA;try{if(nA=await E(zQ),B)nA={...nA,env:{...nA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(iA){if(D(`buildQueryOptions threw: ${iA}`),$A=!1,a++,a>=gH)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!p.signal.aborted)JB();return}if(p.signal.aborted){$A=!1;return}try{O=jv({prompt:s(),options:nA})}finally{$A=!1}(async()=>{try{D("output pump started");for await(let iA of O){if(iA.type==="system"&&iA.subtype==="init"){if(iA.session_id!==w)w=iA.session_id,BA()}if(iA.type==="result")k=!0,a=0,u=!0,BA();if(!VjA(iA))continue;let VB=J?J(iA):iA;if(VB===null)continue;V.write(VB)}}catch(iA){D(`query threw: ${iA}`),a++}finally{D("output pump ended"),O=null;for(let iA of xA.keys())V.sendControlCancelRequest(iA);if(xA.clear(),z.length>0&&!p.signal.aborted)if(a>=gH)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else JB()}})()}let PQ=setInterval(()=>{let s=Date.now(),zQ=n!==null&&n-s<i;if(O===null){let nA=n!==null&&n-s<XQ;if((nA||qA&&!u)&&a<gH&&!p.signal.aborted)D(nA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),JB();return}if(q)return;if(!k||z.length>0)return;if(s-v<F)return;if(zQ)return;if(qA&&!u)return;D("idle conditions met → closing input gen"),BA(),q=!0,L?.(),L=null},NjA);if(PQ.unref?.(),U)D("initialPrompt → injecting"),v=Date.now(),JQ(U),JB();let v0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(p.signal.aborted)return;if(D("bridge prompt received"),v=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});JQ(s.content),JB()}})(),(async()=>{for await(let s of V.controlRequests()){if(p.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(p.signal.aborted)return;let zQ=MjA(s,xA,V.sendControlCancelRequest);if(zQ)D(`permission response for unknown req=${zQ} (stale)`)}})()]),clearInterval(PQ),SQ)clearInterval(SQ);O?.close(),await HA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return w},pushPrompt(s){v=Date.now(),JQ(s),JB()},async interrupt(){await O?.interrupt()},done:v0,teardown:HA}}}export{wjA as runAssistantWorker};
189
+ `)}else Z(`SSETransport: Ignoring client_event with no type in payload: event_id=${B.event_id}`);this.onEventCallback?.(B)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let A=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=A;let Q=A-this.reconnectStartTime;if(Q<kRA){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let E=this.refreshHeaders();Object.assign(this.headers,E),Z("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let B=Math.min(_RA*Math.pow(2,this.reconnectAttempts-1),TRA),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)`),d("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"}),d("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"}),d("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,bRA)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(A){let Q=this.getAuthHeaders();if(Object.keys(Q).length===0){Z("SSETransport: No session token available for POST"),d("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":NU()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=M1;I++){try{let C=await fQ.post(this.postUrl,A,{headers:B,validateStatus:cRA});if(C.status===200||C.status===201){Z(`SSETransport: POST success type=${A.type}`);return}if(Z(`SSETransport: POST ${C.status} body=${LA(C.data).slice(0,200)}`),C.status>=400&&C.status<500&&C.status!==429){Z(`SSETransport: POST returned ${C.status} (client error), not retrying`),d("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${M1}`),d("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${CA(C)}, attempt ${I}/${M1}`),d("warn","cli_sse_post_network_error",{attempt:I})}if(I===M1){Z(`SSETransport: POST failed after ${M1} attempts, continuing`),d("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(fRA*Math.pow(2,I-1),hRA);await nI(E)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(A){this.onData=A}setOnClose(A){this.onCloseCallback=A}setOnEvent(A){this.onEventCallback=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}}function pRA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}TQ();nQ();function Dr(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 $r(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let M=C();if(!M)return{};return{Authorization:`Bearer ${M}`}};else ID(B);let J=A.epoch??await nb(Q,B);Z(`[bridge:repl] CCR v2: worker sessionId=${I} epoch=${J}${A.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let G=new URL(Q);G.pathname=G.pathname.replace(/\/$/,"")+"/worker/events/stream";let U=new zH(G,{},I,void 0,E,Y),F,N=new ZH(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(M){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${CA(M)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((M)=>{N.reportDelivery(M.event_id,"received"),N.reportDelivery(M.event_id,"processed")});let D,W=!1,$=!1;return{write(M){return N.writeEvent(M)},async writeBatch(M){for(let V of M){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(M){U.setOnData(M)},setOnClose(M){F=M,U.setOnClose((V)=>{N.close(),M(V??4092)})},setOnConnect(M){D=M},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(M){N.reportState(M)},reportMetadata(M){N.reportMetadata(M)},reportDelivery(M,V){N.reportDelivery(M,V)},flush(){return N.flush()},getInternalEventWriter(){return(M,V,w)=>N.writeInternalEvent(M,V,w)},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?.()},(M)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${CA(M)}`,{level:"error"}),N.close(),U.close(),F?.(4091)})}}}TQ();nQ();var iRA="2023-06-01",lRA="ccr-byoc-2025-07-29";async function Wr({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return Z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await fQ.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:KH(U,J),signal:I,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] Session creation request failed: ${CA(W)}`),null}if(N.status!==200&&N.status!==201){let W=IG(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 Vr(A,Q){let{baseUrl:B,getAccessToken:I,orgUUID:E}=Q,C=I();if(!C){Z("[bridge] No access token for session archive");return}let Y=`${B}/v1/sessions/${A}/archive`;Z(`[bridge] Archiving session ${A}`);try{let J=await fQ.post(Y,{},{headers:KH(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=IG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${CA(J)}`)}}async function i9(A,Q,B,I,E,C){let Y=C();if(!Y)return Z(`[bridge] No access token for ${A}-pr`),!1;let J=`${E}/v1/code/github/${A}-pr`,G={session_id:tN(Q),repo:B,pr_number:I},U;try{U=await fQ.post(J,G,{headers:KH(Y),timeout:1e4,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] ${A}-pr request failed: ${CA(N)}`),!1}if(!(U.status>=200&&U.status<300||U.status===409)){let N=IG(U.data);return Z(`[bridge] ${A}-pr failed ${U.status}${N?`: ${N}`:""}`),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),!0}function KH(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":iRA,"anthropic-beta":lRA};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}wB();function Mr(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 HH{_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}}nQ();TQ();var IjA=2000,Hr=60000,Lr=900000,EjA=0;async function xr(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:M,getTrustedDeviceToken:V,getPollIntervalConfig:w=()=>ON,initialHistoryCap:H=200,initialMessages:z,previouslyFlushedUUIDs:L,onInboundMessage:q,onPermissionResponse:O,onInterrupt:v,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA,onStateChange:QA,onUserMessage:BA,onSessionEstablished:p,onInitError:xA,perpetual:c,initialSSESequenceNum:HA=0,onTransportPersistenceReady:fA,onTransportPersistenceTeardown:i}=A,XQ=++EjA,{writeBridgePointer:n,clearBridgePointer:u,readBridgePointer:qA}=await Promise.resolve().then(() => (zr(),Zr)),vA=c?await qA(Q):null,zA=vA?.source==="repl"?vA:null;Z(`[bridge:repl] initBridgeCore #${XQ} starting (initialMessages=${z?.length??0}${zA?` perpetual prior=env:${zA.environmentId}`:""})`);let JQ=bb({baseUrl:J,getAccessToken:F,runnerVersion:"0.2.100",onDebug:Z,onAuth401:M,getTrustedDeviceToken:V}),ZQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Kr(),workerType:U,environmentId:Kr(),reuseEnvironmentId:zA?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},$A,JB;try{let b=await JQ.registerBridgeEnvironment(ZQ);$A=b.environment_id,JB=b.environment_secret}catch(b){if(kb("registration_failed",`[bridge:repl] Environment registration failed: ${CA(b)}`),xA?.(`[bridge:repl] Environment registration failed: ${CA(b)}`),zA&&b instanceof GE&&(b.status===410||b.status!==401&&SW(b.errorType)))await u(Q);return QA?.("failed",CA(b)),null}Z(`[bridge:repl] Environment registered: ${$A}`),d("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function PQ(b,UA){if($A!==b)return Z(`[bridge:repl] Env mismatch (requested ${b}, got ${$A}) — cannot reconnect in place`),!1;let BQ=i5(UA),OA=BQ===UA?[UA]:[UA,BQ];for(let cQ of OA)try{return await JQ.reconnectSession($A,cQ),Z(`[bridge:repl] Reconnected session ${cQ} in place on env ${$A}`),!0}catch(rI){Z(`[bridge:repl] reconnectSession(${cQ}) failed: ${CA(rI)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let v0=zA?await PQ(zA.environmentId,zA.sessionId):!1;if(zA&&!v0)await u(Q);let VA,s=new Set;if(v0&&zA){if(VA=zA.sessionId,Z(`[bridge:repl] Perpetual session reused: ${VA}`),z&&L)for(let b of z)L.add(b.uuid)}else{let b=await N({environmentId:$A,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!b)return Z("[bridge:repl] Session creation failed, deregistering environment"),xA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await JQ.deregisterEnvironment($A).catch(()=>{}),QA?.("failed","Session creation failed"),null;VA=b,Z(`[bridge:repl] Session created: ${VA}`)}p?.(VA),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),d("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(z&&z.length>0),inProtectedNamespace:dL(),...fb()});let zQ=new Set;if(z)for(let b of z)zQ.add(b.uuid);let nA=new PW(2000);for(let b of zQ)nA.add(b);let iA=new PW(2000),VB=new AbortController,EA=null,oI=0,GB=v0?HA:0,QQ=null,mQ=null,_C=Mr(VB.signal),fB=_C.wake,mY=_C.signal,hB=new HH,TC=!BA,XE=3,MB=0,aI=null;async function w1(){if(aI)return aI;aI=jr();try{return await aI}finally{aI=null}}async function jr(){if(MB++,oI++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${MB}/${XE})`),MB>XE)return Z(`[bridge:repl] Environment reconnect limit reached (${XE}), giving up`),!1;if(EA){let OA=EA.getLastSequenceNum();if(OA>GB)GB=OA;i?.(),EA.close(),EA=null}if(fB(),hB.drop(),QQ){let OA=QQ;if(await JQ.stopWork($A,OA,!1).catch(()=>{}),QQ!==OA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),MB=0,!0;QQ=null,mQ=null}if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let b=$A;ZQ.reuseEnvironmentId=b;try{let OA=await JQ.registerBridgeEnvironment(ZQ);$A=OA.environment_id,JB=OA.environment_secret}catch(OA){return ZQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed: ${CA(OA)}`),!1}if(ZQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${b} got=${$A}`),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await JQ.deregisterEnvironment($A).catch(()=>{}),!1;if(EA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),MB=0,!0;if(await PQ(b,VA))return rA("tengu_bridge_repl_reconnected_in_place",{}),MB=0,!0;if($A!==b)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await D(VA),VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await JQ.deregisterEnvironment($A).catch(()=>{}),!1;let UA=W(),BQ=await N({environmentId:$A,title:UA,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!BQ)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(VB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await D(BQ),!1;if(VA=BQ,Pf(tN(BQ)).catch(()=>{}),p?.(VA),GB=0,iA.clear(),TC=!BA,Z(`[bridge:repl] Re-created session: ${VA}`),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),L?.clear(),s.size>0){Z(`[bridge:repl] Replaying ${s.size} PR subscription(s) against new session`);for(let OA of s){let cQ=OA.lastIndexOf("#");i9("subscribe",VA,OA.slice(0,cQ),Number(OA.slice(cQ+1)),J,F)}}return MB=0,!0}function d9(){return F()}function RH(){let b=hB.end();if(b.length===0)return;if(!EA){Z(`[bridge:repl] Cannot drain ${b.length} pending message(s): no transport`);return}for(let OA of b)nA.add(OA.uuid);let BQ=$(b).map((OA)=>({...OA,session_id:VA}));Z(`[bridge:repl] Drained ${b.length} pending message(s) after flush`),EA.writeBatch(BQ)}let X1=null;function n9(){X1?.()}function jH(b){if(Z(`[bridge:repl] Transport permanently closed: code=${b}`),rA("tengu_bridge_repl_ws_closed",{code:b}),EA){let BQ=EA.getLastSequenceNum();if(BQ>GB)GB=BQ;i?.(),EA=null}fB();let UA=hB.drop();if(UA>0)Z(`[bridge:repl] Dropping ${UA} pending message(s) on transport close (code=${b})`,{level:"warn"});if(b===1000){QA?.("failed","session ended"),VB.abort(),n9();return}QA?.("reconnecting",`Remote Control connection lost (code ${b})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${b}), attempting env reconnect`),w1().then((BQ)=>{if(BQ)return;if(VB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:b}),QA?.("failed","reconnection failed"),n9()})}let qH,qr=null,Or={api:JQ,getCredentials:()=>({environmentId:$A,environmentSecret:JB}),signal:VB.signal,getPollIntervalConfig:w,onStateChange:QA,getWsState:()=>EA?.getStateLabel()??"null",isAtCapacity:()=>EA!==null,capacitySignal:mY,onFatalError:n9,getHeartbeatInfo:()=>{if(!QQ||!mQ)return null;return{environmentId:$A,workId:QQ,sessionToken:mQ}},onHeartbeatFatal:(b)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${b.status}) — tearing down work item for fast re-dispatch`),EA){let UA=EA.getLastSequenceNum();if(UA>GB)GB=UA;i?.(),EA.close(),EA=null}if(hB.drop(),QQ)JQ.stopWork($A,QQ,!1).catch((UA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${CA(UA)}`)});QQ=null,mQ=null,fB(),QA?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await w1())return null;return{environmentId:$A,environmentSecret:JB}},onWorkReceived:(b,UA,BQ,OA)=>{if(EA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${BQ})`);if(Z(`[bridge:repl] Work received: workId=${BQ} workSessionId=${b} currentSessionId=${VA} match=${u5(b,VA)}`),n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),!u5(b,VA)){Z(`[bridge:repl] Rejecting foreign session: expected=${VA} got=${b}`);return}QQ=BQ,mQ=UA;let cQ=OA||sA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rI;if(!cQ){if(rI=d9(),!rI){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}ID(rI)}if(rA("tengu_bridge_repl_work_received",{}),EA){i?.();let vQ=EA;EA=null;let uQ=vQ.getLastSequenceNum();if(uQ>GB)GB=uQ;vQ.close()}hB.deactivate();let Pr=(vQ)=>pb(vQ,{transport:EA,sessionId:VA,onInterrupt:v,onSetModel:k,onSetMaxThinkingTokens:a,onSetPermissionMode:DA}),t9=!1,SH=(vQ)=>{if(EA=vQ,vQ.setOnConnect(()=>{if(EA!==vQ)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!cQ){let uQ=d9();if(uQ)ID(uQ)}if(r9=!1,!t9&&z&&z.length>0){t9=!0;let uQ=H,mB=z.filter((Z1)=>m5(Z1)&&!L?.has(Z1.uuid)),iE=uQ>0&&mB.length>uQ?mB.slice(-uQ):mB;if(iE.length<mB.length)Z(`[bridge:repl] Capped initial flush: ${mB.length} -> ${iE.length} (cap=${uQ})`),rA("tengu_bridge_repl_history_capped",{eligible_count:mB.length,capped_count:iE.length});let kC=$(iE);if(kC.length>0){Z(`[bridge:repl] Flushing ${kC.length} initial message(s) via transport`);let Z1=kC.map((cY)=>({...cY,session_id:VA})),PH=vQ.droppedBatchCount;vQ.writeBatch(Z1).then(()=>{if(vQ.droppedBatchCount>PH){Z(`[bridge:repl] Initial flush dropped ${vQ.droppedBatchCount-PH} batch(es) — not marking ${kC.length} UUID(s) as flushed`);return}if(L){for(let cY of kC)if(cY.uuid)L.add(cY.uuid)}}).catch((cY)=>Z(`[bridge:repl] Initial flush failed: ${cY}`)).finally(()=>{if(EA!==vQ)return;RH(),QA?.("connected")})}else RH(),QA?.("connected")}else if(!hB.active)QA?.("connected")}),vQ.setOnData((uQ)=>{ub(uQ,nA,iA,q,O,Pr)}),qr=jH,vQ.setOnClose((uQ)=>{if(EA!==vQ)return;jH(uQ)}),!t9&&z&&z.length>0)hB.start();vQ.connect()};if(oI++,cQ){let vQ=db(J,b),uQ=oI;Z(`[bridge:repl] CCR v2: sessionUrl=${vQ} session=${b} gen=${uQ}`),$r({sessionUrl:vQ,ingressToken:UA,sessionId:b,initialSequenceNum:GB}).then((mB)=>{if(VB.signal.aborted){mB.close();return}if(uQ!==oI){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${uQ} current=${oI}`),mB.close();return}if(SH(mB),fA){let iE=mB.getInternalEventWriter?.(),kC=mB.getInternalEventReaders?.();if(iE&&kC)fA(iE,kC)}},(mB)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${CA(mB)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),uQ!==oI)return;if(QQ)JQ.stopWork($A,QQ,!1).catch((iE)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${CA(iE)}`)}),QQ=null,mQ=null;fB()})}else{let vQ=lb(G,b);Z(`[bridge:repl] Ingress URL: ${vQ}`),Z(`[bridge:repl] Creating HybridTransport: session=${b}`);let uQ=rI??"";SH(Dr(new wH(new URL(vQ),{Authorization:`Bearer ${uQ}`,"anthropic-version":"2023-06-01"},b,()=>({Authorization:`Bearer ${d9()??uQ}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{QA?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),fB()}})))}}};CjA(Or);let o9=c?setInterval(()=>{if(aI)return;n(Q,{sessionId:VA,environmentId:$A,source:"repl"})},3600000):null;o9?.unref?.();let OH=w().session_keepalive_interval_v2_ms,a9=OH>0?setInterval(()=>{if(!EA)return;Z("[bridge:repl] keep_alive sent"),EA.write({type:"keep_alive"}).catch((b)=>{Z(`[bridge:repl] keep_alive write failed: ${CA(b)}`)})},OH):null;a9?.unref?.();let r9=!1;X1=async()=>{if(r9){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${$A} session=${VA}`);return}r9=!0,i?.();let b=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${$A} session=${VA} workId=${QQ??"none"} transportState=${EA?.getStateLabel()??"null"}`),o9!==null)clearInterval(o9);if(a9!==null)clearInterval(a9);if(qH)process.off("SIGUSR2",qH);if(VB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),EA){let OA=EA.getLastSequenceNum();if(OA>GB)GB=OA}if(c){EA=null,hB.drop(),await n(Q,{sessionId:VA,environmentId:$A,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${$A} session=${VA} alive on server, duration=${Date.now()-b}ms`);return}let UA=EA;if(EA=null,hB.drop(),UA)UA.write(c5(VA));let BQ=QQ?JQ.stopWork($A,QQ,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((OA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${CA(OA)}`)}):Promise.resolve();await Promise.all([BQ,D(VA)]),UA?.close(),Z("[bridge:repl] Teardown: transport closed"),await JQ.deregisterEnvironment($A).catch((OA)=>{Z(`[bridge:repl] Teardown deregister failed: ${CA(OA)}`)}),await u(Q),Z(`[bridge:repl] Teardown complete: env=${$A} duration=${Date.now()-b}ms`)};let Sr=UJ(()=>X1?.());return Z(`[bridge:repl] Ready: env=${$A} session=${VA}`),QA?.("ready"),{get bridgeSessionId(){return VA},get environmentId(){return $A},getSSESequenceNum(){let b=EA?.getLastSequenceNum()??0;return Math.max(GB,b)},sessionIngressUrl:G,writeMessages(b){let UA=b.filter((cQ)=>m5(cQ)&&!zQ.has(cQ.uuid)&&!nA.has(cQ.uuid));if(UA.length===0)return;if(!TC)for(let cQ of UA){let rI=cb(cQ);if(rI!==void 0&&BA?.(rI,VA)){TC=!0;break}}if(hB.enqueue(...UA)){Z(`[bridge:repl] Queued ${UA.length} message(s) during initial flush`);return}if(!EA){let cQ=UA.map((rI)=>rI.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${UA.length} message(s) [${cQ}] for session=${VA}`,{level:"warn"});return}for(let cQ of UA)nA.add(cQ.uuid);Z(`[bridge:repl] Sending ${UA.length} message(s) via transport`);let OA=$(UA).map((cQ)=>({...cQ,session_id:VA}));EA.writeBatch(OA)},writeSdkMessages(b){let UA=b.filter((OA)=>!OA.uuid||!nA.has(OA.uuid));if(UA.length===0)return;if(!EA){Z(`[bridge:repl] Transport not configured, dropping ${UA.length} SDK message(s) for session=${VA}`,{level:"warn"});return}for(let OA of UA)if(OA.uuid)nA.add(OA.uuid);let BQ=UA.map((OA)=>({...OA,session_id:VA}));EA.writeBatch(BQ)},sendControlRequest(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let UA={...b,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_request request_id=${b.request_id}`)},sendControlResponse(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let UA={...b,session_id:VA};EA.write(UA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(b){if(!EA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let UA={type:"control_cancel_request",request_id:b,session_id:VA};EA.write(UA),Z(`[bridge:repl] Sent control_cancel_request request_id=${b}`)},sendResult(){if(!EA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${VA}`);return}EA.write(c5(VA)),Z(`[bridge:repl] Sent result for session=${VA}`)},async subscribePR(b,UA){let BQ=await i9("subscribe",VA,b,UA,J,F);if(BQ)s.add(`${b}#${UA}`);return BQ},async unsubscribePR(b,UA){let BQ=await i9("unsubscribe",VA,b,UA,J,F);if(BQ)s.delete(`${b}#${UA}`);return BQ},async teardown(){Sr(),await X1?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})}}}async function CjA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>ON,getHeartbeatInfo:N,onHeartbeatFatal:D}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let $=0,M=null,V=null,w=0,H=!1;while(!B.aborted){let{environmentId:z,environmentSecret:L}=Q(),q=F();try{let O=await A.pollForWork(z,L,B,q.reclaim_older_than_ms);if(w=0,$>0)Z(`[bridge:repl] Poll recovered after ${$} consecutive error(s)`),$=0,M=null,V=null,I?.("ready");if(!O){let k=H;if(H=!1,J?.()&&G&&!k){let a=q.poll_interval_ms_at_capacity;if(q.non_exclusive_heartbeat_interval_ms>0&&N){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:q.non_exclusive_heartbeat_interval_ms});let QA=a>0?Date.now()+a:null,BA=!1,p=0;while(!B.aborted&&J()&&(QA===null||Date.now()<QA)){let c=F();if(c.non_exclusive_heartbeat_interval_ms<=0)break;let HA=N();if(!HA)break;let fA=G();try{await A.heartbeatWork(HA.environmentId,HA.workId,HA.sessionToken)}catch(i){if(Z(`[bridge:repl:heartbeat] Failed: ${CA(i)}`),i instanceof GE){if(fA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:i.status,error_type:i.status===401||i.status===403?"auth_failed":"fatal"}),D)D(i),Z(`[bridge:repl:heartbeat] Fatal (status=${i.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}p++,await nI(c.non_exclusive_heartbeat_interval_ms,fA.signal),fA.cleanup()}let xA=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":QA!==null&&Date.now()>=QA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:xA,heartbeat_cycles:p}),!BA){if(xA==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${p} cycles — falling through to pollForWork`);continue}}let DA=a>0?a:q.non_exclusive_heartbeat_interval_ms;if(DA>0){let QA=G(),BA=Date.now();await nI(DA,QA.signal),QA.cleanup();let p=Date.now()-BA-DA;if(p>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(p/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:p}),H=!0}}else await nI(q.poll_interval_ms_not_at_capacity,B);continue}let v;try{v=ib(O.secret)}catch(k){Z(`[bridge:repl] Failed to decode work secret: ${CA(k)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,O.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${O.id}`);try{await A.acknowledgeWork(z,O.id,v.session_ingress_token)}catch(k){Z(`[bridge:repl] Acknowledge failed workId=${O.id}: ${CA(k)}`)}if(O.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(O.data.type==="session"){let k=O.data.id;try{sB(k,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${k}`);continue}E(k,v.session_ingress_token,O.id,v.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(O){if(B.aborted)break;if(O instanceof GE&&O.status===404&&C){let p=Q().environmentId;if(z!==p){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${p} — skipping onEnvironmentLost`),$=0,M=null;continue}if(w++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${w}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:w}),w>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 xA=await C();if(B.aborted)break;if(xA){$=0,M=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${xA.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(O instanceof GE){let p=SW(O.errorType),xA=yb(O);if(Z(`[bridge:repl] Fatal poll error: ${O.message} (status=${O.status}, type=${O.errorType??"unknown"})${xA?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),d(p?"info":"error","bridge_repl_fatal_error",{status:O.status,error_type:O.errorType}),!xA)I?.("failed",p?"session expired · /remote-control to reconnect":O.message);U?.();break}let v=Date.now();if(V!==null&&v-V>Hr*2)Z(`[bridge:repl] Detected system sleep (${Math.round((v-V)/1000)}s gap), resetting poll error budget`),d("info","bridge_repl_poll_sleep_detected",{gapMs:v-V}),$=0,M=null;if(V=v,$++,M===null)M=v;let k=v-M,a=Tb(O),DA=_b(O),QA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${$}, elapsed ${Math.round(k/1000)}s, ws=${QA}): ${DA}`),rA("tengu_bridge_repl_poll_error",{status:a,consecutiveErrors:$,elapsedMs:k}),$===1)I?.("reconnecting",DA);if(k>=Lr){Z(`[bridge:repl] Poll failures exceeded ${Lr/1000}s (${$} errors), giving up`),d("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:$,elapsedMs:k,lastStatus:a}),I?.("failed","connection to server lost");break}let BA=Math.min(IjA*2**($-1),Hr);if(F().non_exclusive_heartbeat_interval_ms>0){let p=N?.();if(p)try{await A.heartbeatWork(p.environmentId,p.workId,p.sessionToken)}catch{}}await nI(BA,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function YjA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function JjA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function GjA(A,Q){if(JjA(A,Q))return"http://localhost:4000";if(YjA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function gr(A,Q){let{toCompatSessionId:B}=yr(ob),I=B(A);return`${GjA(I,Q)}/code/${I}`}TQ();async function Rr(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,M=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,w={baseUrl:U,getAccessToken:J,orgUUID:F,model:N},H=[],z=null,L=[],q=null,O=[],v=null,k=!1,a=null,DA={detail:null},QA=UjA(),BA=()=>xr({dir:Q,registrationDir:B,machineName:QA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:M,onInitError:console.error,createSession:({environmentId:i,title:XQ,signal:n})=>Wr({environmentId:i,title:XQ,tags:["claude-code-assistant"],signal:n},w),archiveSession:(i)=>Vr(i,w),perpetual:D,initialSSESequenceNum:W,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...ON,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(i){let XQ=Q_(i);if(!XQ)return;H.push({content:XQ.content,uuid:XQ.uuid}),z?.(),z=null},onInterrupt(){L.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),q?.(),q=null},onSetModel(i){L.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:i}}),q?.(),q=null},onSetMaxThinkingTokens(i){L.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:i}}),q?.(),q=null},onPermissionResponse(i){O.push(i),v?.(),v=null},onStateChange(i,XQ){if(a?.(i,XQ),i==="failed")DA.detail=XQ??"unknown failure",k=!0,z?.(),q?.(),v?.()}}),p=await BA();if(!p&&$&&DA.detail?.includes("409")){if(await $({machineName:QA,message:DA.detail})==="takeover")k=!1,DA.detail=null,p=await BA()}if(!p){let i=DA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${i}`),{ok:!1,error:{kind:DA.detail?.includes("409")?"conflict":DA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:i}}}async function*xA(){while(!k){while(H.length>0)if(yield H.shift(),k)return;await new Promise((i)=>{z=i})}}async function*c(){while(!k){while(L.length>0)if(yield L.shift(),k)return;await new Promise((i)=>{q=i})}}async function*HA(){while(!k){while(O.length>0)if(yield O.shift(),k)return;await new Promise((i)=>{v=i})}}return{ok:!0,handle:{get sessionUrl(){return gr(p.bridgeSessionId,V)},get environmentId(){return p.environmentId},get bridgeSessionId(){return p.bridgeSessionId},getSSESequenceNum(){return p.getSSESequenceNum()},hasPendingPrompts(){return H.length>0},write(i){p.writeSdkMessages([i])},sendResult(){p.sendResult()},sendControlRequest(i){p.sendControlRequest(i)},sendControlResponse(i){p.sendControlResponse(i)},sendControlCancelRequest(i){p.sendControlCancelRequest(i)},inboundPrompts:xA,controlRequests:c,permissionResponses:HA,onStateChange(i){a=i},async teardown(){k=!0,z?.(),q?.(),v?.(),await p.teardown()}}}}var NjA=1000,DjA=1e4,$jA=5000,WjA=60000,gH=3;function VjA(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 MjA(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"&&bH(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}async function wjA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:D=()=>{}}=A;D("─── worker start ───");let W=await G?.load(),$={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??W?.lastSSESequenceNum};if(!$.getAccessToken())return{ok:!1,error:{kind:"auth",detail:"getAccessToken returned empty"}};let M=await Rr($);if(!M.ok)return D(`bridge connection failed: ${M.error.kind} — ${M.error.detail}`),{ok:!1,error:M.error};let V=M.handle;D(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let w=W?.claudeSessionId,H=V.bridgeSessionId,z=[],L=null,q=!1,O=null,v=0,k=!0,a=0,DA=Promise.resolve();function QA(){if(!G)return;let s={claudeSessionId:w,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};DA=DA.then(()=>G.save(s).catch((zQ)=>{D(`stateAdapter.save threw: ${zQ}`)}))}function BA(){if(z.length>0||V.hasPendingPrompts()){D("persist skipped: prompt queued");return}QA()}QA();let p=new AbortController,xA=new Map,c=null;function HA(){return c??=(async()=>{BA();for(let s of xA.keys())V.sendControlCancelRequest(s);xA.clear(),await V.teardown(),await DA})()}if(N.addEventListener("abort",()=>{p.abort(),HA().catch((s)=>D(`teardown threw: ${s}`))}),N.aborted)return await HA(),{ok:!1,error:{kind:"unknown",detail:"aborted before start"}};let fA="connected";V.onStateChange((s,zQ)=>{if(D(`bridge state=${s} detail=${zQ??""}`),fA=s,s==="ready"&&V.bridgeSessionId!==H)H=V.bridgeSessionId,QA();else if(s==="connected")BA();if(s==="failed")D(`bridge failed: ${zQ??"unknown"}`),p.abort(),HA().catch((nA)=>D(`teardown threw: ${nA}`))});let i=I?.horizonMs??600000,XQ=I?.leadMs??$jA,n=null,u=!1,qA=!1,vA="";async function zA(){if(!I)return;let s=await sv(I.dir).catch((nA)=>{return D(`computeCronHorizon threw: ${nA}`),{nextFire:null,hasOverdue:!1}});n=s.nextFire,qA=s.hasOverdue;let zQ=s.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(s.nextFire).toISOString()} hasOverdue=${s.hasOverdue}`;if(zQ!==vA)vA=zQ,D(zQ)}let SQ;if(I)await zA(),SQ=setInterval(zA,DjA),SQ.unref?.();function JQ(s){z.push({type:"user",message:{role:"user",content:s},parent_tool_use_id:null,session_id:""}),L?.(),L=null}async function ZQ(s,zQ,nA){if(C){let mQ=await C(s,zQ,nA);if(mQ)return Y?.(s,mQ),mQ}if(fA!=="connected"){D(`permission denied — bridge state=${fA}, request would drop`);let mQ={behavior:"deny",message:`Cannot request permission: remote control is ${fA}. Try again in a moment.`};return Y?.(s,mQ),mQ}let iA=FjA();D(`permission request tool=${s} req=${iA}`);let{signal:VB,suggestions:EA,blockedPath:oI,toolUseID:GB}=nA;V.sendControlRequest({type:"control_request",request_id:iA,request:{subtype:"can_use_tool",tool_name:s,display_name:yH(s),input:zQ,tool_use_id:GB,...EA?{permission_suggestions:EA}:{},...oI?{blocked_path:oI}:{},..."decisionReason"in nA&&nA.decisionReason?{decision_reason:nA.decisionReason}:{},..."agentID"in nA&&nA.agentID?{agent_id:nA.agentID}:{}}});let QQ;try{let mQ=await new Promise((fB,mY)=>{xA.set(iA,fB),QQ=setTimeout((hB,TC,XE,MB,aI)=>{if(hB.delete(TC))XE(`permission timeout req=${TC}`),MB.sendControlCancelRequest(TC),aI({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},WjA,xA,iA,D,V,fB),QQ.unref?.(),VB.addEventListener("abort",()=>{if(xA.delete(iA))V.sendControlCancelRequest(iA);mY(Error("aborted"))},{once:!0})});D(`permission response req=${iA} behavior=${mQ.behavior}`);let _C=mQ.behavior==="allow"?{behavior:"allow",updatedInput:mQ.updatedInput,updatedPermissions:mQ.updatedPermissions}:{behavior:"deny",message:mQ.message??"Denied via remote control"};return Y?.(s,_C),_C}finally{if(QQ)clearTimeout(QQ);xA.delete(iA)}}let $A=!1;async function JB(){if(O!==null||$A||p.signal.aborted)return;if($A=!0,q=!1,z.length>0)k=!1;async function*s(){while(!q){while(z.length>0)if(k=!1,yield z.shift(),q)return;await new Promise((iA)=>{L=iA})}}D(`spawning query resume=${w??"<fresh>"}`);let zQ={assistant:!0,cwd:Q.dir,resume:w,stderr:(iA)=>D(`[child] ${iA.trimEnd()}`),canUseTool:ZQ},nA;try{if(nA=await E(zQ),B)nA={...nA,env:{...nA.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(iA){if(D(`buildQueryOptions threw: ${iA}`),$A=!1,a++,a>=gH)D(`${a} consecutive buildQueryOptions failures — dropping ${z.length} queued input(s)`),z.length=0;else if(z.length>0&&!p.signal.aborted)JB();return}if(p.signal.aborted){$A=!1;return}try{O=jv({prompt:s(),options:nA})}finally{$A=!1}(async()=>{try{D("output pump started");for await(let iA of O){if(iA.type==="system"&&iA.subtype==="init"){if(iA.session_id!==w)w=iA.session_id,BA()}if(iA.type==="result")k=!0,a=0,u=!0,BA();if(!VjA(iA))continue;let VB=J?J(iA):iA;if(VB===null)continue;V.write(VB)}}catch(iA){D(`query threw: ${iA}`),a++}finally{D("output pump ended"),O=null;for(let iA of xA.keys())V.sendControlCancelRequest(iA);if(xA.clear(),z.length>0&&!p.signal.aborted)if(a>=gH)D(`${a} consecutive crashes — dropping ${z.length} queued input(s)`),z.length=0;else JB()}})()}let PQ=setInterval(()=>{let s=Date.now(),zQ=n!==null&&n-s<i;if(O===null){let nA=n!==null&&n-s<XQ;if((nA||qA&&!u)&&a<gH&&!p.signal.aborted)D(nA?`cron due in ${n-s}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),JB();return}if(q)return;if(!k||z.length>0)return;if(s-v<F)return;if(zQ)return;if(qA&&!u)return;D("idle conditions met → closing input gen"),BA(),q=!0,L?.(),L=null},NjA);if(PQ.unref?.(),U)D("initialPrompt → injecting"),v=Date.now(),JQ(U),JB();let v0=(async()=>{if(await Promise.all([(async()=>{for await(let s of V.inboundPrompts()){if(p.signal.aborted)return;if(D("bridge prompt received"),v=Date.now(),s.uuid)V.write({type:"user",uuid:s.uuid,session_id:"",message:{role:"user",content:s.content},parent_tool_use_id:null});JQ(s.content),JB()}})(),(async()=>{for await(let s of V.controlRequests()){if(p.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(p.signal.aborted)return;let zQ=MjA(s,xA,V.sendControlCancelRequest);if(zQ)D(`permission response for unknown req=${zQ} (stale)`)}})()]),clearInterval(PQ),SQ)clearInterval(SQ);O?.close(),await HA(),D("─── worker stop ───")})();return{ok:!0,handle:{get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return w},pushPrompt(s){v=Date.now(),JQ(s),JB()},async interrupt(){await O?.interrupt()},done:v0,teardown:HA}}}export{wjA as runAssistantWorker};