@anthropic-ai/claude-agent-sdk 0.3.154 → 0.3.156

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.3.154
3
+ // Version: 0.3.156
4
4
  import{createRequire as z0A}from"node:module";var X0A=Object.create;var{getPrototypeOf:N0A,defineProperty:B1,getOwnPropertyNames:UO,getOwnPropertyDescriptor:D0A}=Object,FO=Object.prototype.hasOwnProperty;function $O(A){return this[A]}var V0A,w0A,TY=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?V0A??=new WeakMap:w0A??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?X0A(N0A(A)):{};let Y=Q||!A||!A.__esModule?B1(B,"default",{value:A,enumerable:!0}):B;for(let J of UO(A))if(!FO.call(Y,J))B1(Y,J,{get:$O.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},M0A=(A)=>{var Q=(GO??=new WeakMap).get(A),B;if(Q)return Q;if(Q=B1({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of UO(A))if(!FO.call(Q,I))B1(Q,I,{get:$O.bind(A,I),enumerable:!(B=D0A(A,I))||B.enumerable})}return GO.set(A,Q),Q},GO,K=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var K0A=(A)=>A;function Z0A(A,Q){this[A]=K0A.bind(null,Q)}var _E=(A,Q)=>{for(var B in Q)B1(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:Z0A.bind(Q,B)})};var H=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var x=z0A(import.meta.url),H0A=Symbol.dispose||Symbol.for("Symbol.dispose"),L0A=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),fQ=(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[L0A];if(I===void 0)I=Q[H0A];if(typeof I!=="function")throw TypeError("Object not disposable");A.push([B,I,Q])}else if(B)A.push([B]);return Q},hQ=(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 hD=()=>{};function dA(A){if(!A)return!1;if(typeof A==="boolean")return A;let Q=String(A).toLowerCase().trim();return["1","true","yes","on"].includes(Q)}function C1(A){if(!A||A.startsWith("-")||A.startsWith("/"))return!1;if(A.includes(".."))return!1;if(A.split("/").some((Q)=>Q==="."||Q===""))return!1;return/^[a-zA-Z0-9/._+@-]+$/.test(A)}function S0(){let A=new Set;return{subscribe(Q){return A.add(Q),()=>{A.delete(Q)}},emit(...Q){let B;for(let I of A)try{I(...Q)}catch(E){(B??=[]).push(E)}if(B)throw B.length===1?B[0]:AggregateError(B,"Signal listener(s) threw")},clear(){A.clear()}}}var DO=()=>{};var Y1=H(()=>{DO()});var v0A,VO;var wO=H(()=>{v0A=typeof global=="object"&&global&&global.Object===Object&&global,VO=v0A});var S0A,_0A,UG;var kW=H(()=>{wO();S0A=typeof self=="object"&&self&&self.Object===Object&&self,_0A=VO||S0A||Function("return this")(),UG=_0A});var P0A,FG;var mD=H(()=>{kW();P0A=UG.Symbol,FG=P0A});function b0A(A){var Q=T0A.call(A,J1),B=A[J1];try{A[J1]=void 0;var I=!0}catch(C){}var E=k0A.call(A);if(I)if(Q)A[J1]=B;else delete A[J1];return E}var MO,T0A,k0A,J1,KO;var ZO=H(()=>{mD();MO=Object.prototype,T0A=MO.hasOwnProperty,k0A=MO.toString,J1=FG?FG.toStringTag:void 0;KO=b0A});function h0A(A){return f0A.call(A)}var y0A,f0A,zO;var HO=H(()=>{y0A=Object.prototype,f0A=y0A.toString;zO=h0A});function c0A(A){if(A==null)return A===void 0?u0A:m0A;return LO&&LO in Object(A)?KO(A):zO(A)}var m0A="[object Null]",u0A="[object Undefined]",LO,qO;var jO=H(()=>{mD();ZO();HO();LO=FG?FG.toStringTag:void 0;qO=c0A});function p0A(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var bW;var uD=H(()=>{bW=p0A});function o0A(A){if(!bW(A))return!1;var Q=qO(A);return Q==i0A||Q==d0A||Q==l0A||Q==n0A}var l0A="[object AsyncFunction]",i0A="[object Function]",d0A="[object GeneratorFunction]",n0A="[object Proxy]",RO;var OO=H(()=>{jO();uD();RO=o0A});var a0A,yW;var xO=H(()=>{kW();a0A=UG["__core-js_shared__"],yW=a0A});function r0A(A){return!!gO&&gO in A}var gO,vO;var SO=H(()=>{xO();gO=function(){var A=/[^.]+$/.exec(yW&&yW.keys&&yW.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();vO=r0A});function e0A(A){if(A!=null){try{return t0A.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var s0A,t0A,_O;var PO=H(()=>{s0A=Function.prototype,t0A=s0A.toString;_O=e0A});function JYA(A){if(!bW(A)||vO(A))return!1;var Q=RO(A)?YYA:QYA;return Q.test(_O(A))}var AYA,QYA,BYA,IYA,EYA,CYA,YYA,TO;var kO=H(()=>{OO();SO();uD();PO();AYA=/[\\^$.*+?()[\]{}|]/g,QYA=/^\[object .+?Constructor\]$/,BYA=Function.prototype,IYA=Object.prototype,EYA=BYA.toString,CYA=IYA.hasOwnProperty,YYA=RegExp("^"+EYA.call(CYA).replace(AYA,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");TO=JYA});function GYA(A,Q){return A==null?void 0:A[Q]}var bO;var yO=H(()=>{bO=GYA});function UYA(A,Q){var B=bO(A,Q);return TO(B)?B:void 0}var fW;var cD=H(()=>{kO();yO();fW=UYA});var FYA,uC;var G1=H(()=>{cD();FYA=fW(Object,"create"),uC=FYA});function $YA(){this.__data__=uC?uC(null):{},this.size=0}var fO;var hO=H(()=>{G1();fO=$YA});function WYA(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var mO;var uO=H(()=>{mO=WYA});function VYA(A){var Q=this.__data__;if(uC){var B=Q[A];return B===XYA?void 0:B}return DYA.call(Q,A)?Q[A]:void 0}var XYA="__lodash_hash_undefined__",NYA,DYA,cO;var pO=H(()=>{G1();NYA=Object.prototype,DYA=NYA.hasOwnProperty;cO=VYA});function KYA(A){var Q=this.__data__;return uC?Q[A]!==void 0:MYA.call(Q,A)}var wYA,MYA,lO;var iO=H(()=>{G1();wYA=Object.prototype,MYA=wYA.hasOwnProperty;lO=KYA});function zYA(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=uC&&Q===void 0?ZYA:Q,this}var ZYA="__lodash_hash_undefined__",dO;var nO=H(()=>{G1();dO=zYA});function $G(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 pD;var oO=H(()=>{hO();uO();pO();iO();nO();$G.prototype.clear=fO;$G.prototype.delete=mO;$G.prototype.get=cO;$G.prototype.has=lO;$G.prototype.set=dO;pD=$G});function HYA(){this.__data__=[],this.size=0}var aO;var rO=H(()=>{aO=HYA});function LYA(A,Q){return A===Q||A!==A&&Q!==Q}var sO;var tO=H(()=>{sO=LYA});function qYA(A,Q){var B=A.length;while(B--)if(sO(A[B][0],Q))return B;return-1}var _0;var U1=H(()=>{tO();_0=qYA});function OYA(A){var Q=this.__data__,B=_0(Q,A);if(B<0)return!1;var I=Q.length-1;if(B==I)Q.pop();else RYA.call(Q,B,1);return--this.size,!0}var jYA,RYA,eO;var Ax=H(()=>{U1();jYA=Array.prototype,RYA=jYA.splice;eO=OYA});function xYA(A){var Q=this.__data__,B=_0(Q,A);return B<0?void 0:Q[B][1]}var Qx;var Bx=H(()=>{U1();Qx=xYA});function gYA(A){return _0(this.__data__,A)>-1}var Ix;var Ex=H(()=>{U1();Ix=gYA});function vYA(A,Q){var B=this.__data__,I=_0(B,A);if(I<0)++this.size,B.push([A,Q]);else B[I][1]=Q;return this}var Cx;var Yx=H(()=>{U1();Cx=vYA});function WG(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 Jx;var Gx=H(()=>{rO();Ax();Bx();Ex();Yx();WG.prototype.clear=aO;WG.prototype.delete=eO;WG.prototype.get=Qx;WG.prototype.has=Ix;WG.prototype.set=Cx;Jx=WG});var SYA,Ux;var Fx=H(()=>{cD();kW();SYA=fW(UG,"Map"),Ux=SYA});function _YA(){this.size=0,this.__data__={hash:new pD,map:new(Ux||Jx),string:new pD}}var $x;var Wx=H(()=>{oO();Gx();Fx();$x=_YA});function PYA(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var Xx;var Nx=H(()=>{Xx=PYA});function TYA(A,Q){var B=A.__data__;return Xx(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var P0;var F1=H(()=>{Nx();P0=TYA});function kYA(A){var Q=P0(this,A).delete(A);return this.size-=Q?1:0,Q}var Dx;var Vx=H(()=>{F1();Dx=kYA});function bYA(A){return P0(this,A).get(A)}var wx;var Mx=H(()=>{F1();wx=bYA});function yYA(A){return P0(this,A).has(A)}var Kx;var Zx=H(()=>{F1();Kx=yYA});function fYA(A,Q){var B=P0(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var zx;var Hx=H(()=>{F1();zx=fYA});function XG(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 lD;var Lx=H(()=>{Wx();Vx();Mx();Zx();Hx();XG.prototype.clear=$x;XG.prototype.delete=Dx;XG.prototype.get=wx;XG.prototype.has=Kx;XG.prototype.set=zx;lD=XG});function iD(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(hYA);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(iD.Cache||lD),B}var hYA="Expected a function",FQ;var PE=H(()=>{Lx();iD.Cache=lD;FQ=iD});import{homedir as mYA}from"os";import{join as uYA}from"path";function dD(A){let Q=process.env.NODE_OPTIONS;if(!Q)return!1;return Q.split(/\s+/).includes(A)}function qx(){return!1}function jx(){return{namespace:void 0,cluster:void 0}}var FE,riA;var QB=H(()=>{Y1();PE();Y1();FE=FQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??uYA(mYA(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR);riA=FQ(()=>dA(process.env.CLAUDE_CODE_SUPERVISED))});function o(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 O(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 cC=()=>{};var nD=function(){let{crypto:A}=globalThis;if(A?.randomUUID)return nD=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 pC(A){return typeof A==="object"&&A!==null&&(("name"in A)&&A.name==="AbortError"||("message"in A)&&String(A.message).includes("FetchRequestCanceledException"))}var $1=(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 t,gB,uB,bY,W1,X1,N1,D1,V1,w1,M1,K1,Z1;var cB=H(()=>{t=class t extends Error{};gB=class gB extends t{constructor(A,Q,B,I,E){super(`${gB.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 bY({message:B,cause:$1(Q)});let E=Q,C=E?.error?.type;if(A===400)return new X1(A,E,B,I,C);if(A===401)return new N1(A,E,B,I,C);if(A===403)return new D1(A,E,B,I,C);if(A===404)return new V1(A,E,B,I,C);if(A===409)return new w1(A,E,B,I,C);if(A===422)return new M1(A,E,B,I,C);if(A===429)return new K1(A,E,B,I,C);if(A>=500)return new Z1(A,E,B,I,C);return new gB(A,E,B,I,C)}};uB=class uB extends gB{constructor({message:A}={}){super(void 0,void 0,A||"Request was aborted.",void 0)}};bY=class bY extends gB{constructor({message:A,cause:Q}){super(void 0,void 0,A||"Connection error.",void 0);if(Q)this.cause=Q}};W1=class W1 extends bY{constructor({message:A}={}){super({message:A??"Request timed out."})}};X1=class X1 extends gB{};N1=class N1 extends gB{};D1=class D1 extends gB{};V1=class V1 extends gB{};w1=class w1 extends gB{};M1=class M1 extends gB{};K1=class K1 extends gB{};Z1=class Z1 extends gB{}});function hW(A){if(typeof A!=="object")return{};return A??{}}function rD(A){if(!A)return!0;for(let Q in A)return!1;return!0}function Ox(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var pYA,Rx=(A)=>{return pYA.test(A)},oD=(A)=>(oD=Array.isArray,oD(A)),aD,xx=(A,Q)=>{if(typeof Q!=="number"||!Number.isInteger(Q))throw new t(`${A} must be an integer`);if(Q<0)throw new t(`${A} must be a positive integer`);return Q},mW=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var T0=H(()=>{cB();pYA=/^[a-z][a-z0-9+.-]*:/i,aD=oD});var gx=(A)=>new Promise((Q)=>setTimeout(Q,A));var $E="0.94.0";function lYA(){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 dYA(){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 Px=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},iYA=()=>{let A=lYA();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":$E,"X-Stainless-OS":Sx(Deno.build.os),"X-Stainless-Arch":vx(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":$E,"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":$E,"X-Stainless-OS":Sx(globalThis.process.platform??"unknown"),"X-Stainless-Arch":vx(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=dYA();if(Q)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":$E,"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":$E,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},vx=(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"},Sx=(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"},_x,z1=()=>{return _x??(_x=iYA())};var uW=()=>{};function Tx(){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 sD(...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 cW(A){let Q=Symbol.asyncIterator in A?A[Symbol.asyncIterator]():A[Symbol.iterator]();return sD({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 H1(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 kx(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 bx=({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 t(`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 tD=H(()=>{cB()});function lW(A){if(!A)return;let Q;try{Q=new URL(A)}catch(I){throw new qQ(`Invalid token endpoint base URL "${A}": ${I}`)}if(Q.protocol==="https:")return;let B=Q.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Q.protocol==="http:"&&(B==="localhost"||B==="127.0.0.1"||B==="::1"))return;throw new qQ(`Refusing to send credential over non-https token endpoint "${A}"`)}async function iW(A,Q){let B=await rYA(A),I;try{I=JSON.parse(B)}catch{throw new qQ(`Token endpoint returned non-JSON response (status ${A.status})`,A.status,DI(B),Q)}if(!I.access_token)throw new qQ(`Token endpoint response missing access_token: ${JSON.stringify(DI(I))}`,A.status,DI(I),Q);if(I.token_type&&I.token_type.toLowerCase()!=="bearer")throw new qQ(`Token endpoint response: unsupported token_type "${I.token_type}" (want Bearer)`,A.status,DI(I),Q);return I}function DI(A){if(A==null)return A;if(typeof A==="string"){let Q;try{Q=JSON.parse(A)}catch{if(A.length<=eD)return A;return A.slice(0,eD)+`... <${A.length-eD} more chars>`}return JSON.stringify(DI(Q))}if(typeof A==="object"&&!Array.isArray(A)){let Q={};for(let[B,I]of Object.entries(A))if(aYA.has(B))Q[B]=I;return Q}return null}async function dW(A,Q=(B)=>console.warn(`anthropic-sdk: ${B}`)){if(typeof process>"u"||process.platform==="win32")return;let B=await import("node:fs"),I=A,E;try{I=await B.promises.realpath(A),E=await B.promises.stat(I)}catch{return}let C=E.mode&511;if(C&18)throw new qQ(`Credentials file at ${I} is group/world-writable (mode 0o${C.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${I}\`.`);if(C&36)throw new qQ(`Credentials file at ${I} is group/world-readable (mode 0o${C.toString(8)}); run \`chmod 600 ${I}\` before retrying.`);if(typeof process.getuid==="function"&&E.uid!==process.getuid())Q(`credentials file at ${I} is owned by uid ${E.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function nW(A,Q){let B=await import("node:fs"),E=(await import("node:path")).dirname(A);await B.promises.mkdir(E,{recursive:!0,mode:448});let C=`${A}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let Y=await B.promises.open(C,"w",384);try{await Y.writeFile(JSON.stringify(Q,null,2)),await Y.sync()}finally{await Y.close()}await B.promises.rename(C,A)}catch(Y){throw await B.promises.unlink(C).catch(()=>{}),Y}try{let Y=await B.promises.open(E,"r");try{await Y.sync()}finally{await Y.close()}}catch{}}async function rYA(A){if(!A.body)return"";let Q=A.body.getReader(),B=[],I=0;for(;;){let{done:C,value:Y}=await Q.read();if(C)break;if(I+Y.length>fx){let J=fx-I;if(J>0)B.push(Y.subarray(0,J));await Q.cancel();break}B.push(Y),I+=Y.length}let E;if(B.length===1)E=B[0];else{E=new Uint8Array(B.reduce((Y,J)=>Y+J.length,0));let C=0;for(let Y of B)E.set(Y,C),C+=Y.length}return new TextDecoder("utf-8").decode(E)}var hx="urn:ietf:params:oauth:grant-type:jwt-bearer",mx="refresh_token",pW="/v1/oauth/token",yY="oauth-2025-04-20",ux="oidc-federation-2026-04-01",cx=120,NG=30,px=5,fx=1048576,eD=2000,aYA,qQ;var DG=H(()=>{cB();aYA=new Set(["error","error_description","error_uri"]);qQ=class qQ extends t{constructor(A,Q=null,B=null,I=null){super(A);this.statusCode=Q,this.body=B,this.requestId=I}}});function TE(){return Math.floor(Date.now()/1000)}class AV{constructor(A,Q){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=A,this.onAdvisoryRefreshError=Q}async getToken(){let A=this.nextForce;this.nextForce=!1;let Q=this.cached;if(A||Q==null)return(await this.refresh(A)).token;if(Q.expiresAt==null)return Q.token;let B=Q.expiresAt-TE();if(B>cx)return Q.token;if(B>NG)return this.backgroundRefresh(),Q.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh(A=!1){if(this.pendingRefresh&&!A)return this.pendingRefresh;return this.doRefresh(A)}backgroundRefresh(){if(this.pendingRefresh)return;if(TE()-this.lastAdvisoryError<px)return;this.doRefresh().catch((A)=>{this.lastAdvisoryError=TE(),this.onAdvisoryRefreshError?.(A)})}doRefresh(A=!1){return this.pendingRefresh=this.provider(A?{forceRefresh:!0}:void 0).then((Q)=>{return this.cached=Q,this.pendingRefresh=null,Q},(Q)=>{throw this.pendingRefresh=null,Q}),this.pendingRefresh}}var lx=H(()=>{DG()});var KQ=(A)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[A]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(A)?.trim()||void 0;return};function nx(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 VG(A){let Q;return(ix??(Q=new globalThis.TextEncoder,ix=Q.encode.bind(Q)))(A)}function QV(A){let Q;return(dx??(Q=new globalThis.TextDecoder,dx=Q.decode.bind(Q)))(A)}var ix,dx;var ox=H(()=>{cB()});function L1(){}function oW(A,Q,B){if(!Q||aW[A]>aW[B])return L1;else return Q[A].bind(Q)}function DB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return sYA;let I=ax.get(Q);if(I&&I[0]===B)return I[1];let E={error:oW("error",Q,B),warn:oW("warn",Q,B),info:oW("info",Q,B),debug:oW("debug",Q,B)};return ax.set(Q,[B,E]),E}var aW,BV=(A,Q,B)=>{if(!A)return;if(Ox(aW,A))return A;DB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(aW))}`);return},sYA,ax,lC=(A)=>{if(A.options)A.options={...A.options},delete A.options.headers;if(A.headers)A.headers=Object.fromEntries((A.headers instanceof Headers?[...A.headers]:Object.entries(A.headers)).map(([Q,B])=>[Q,Q.toLowerCase()==="x-api-key"||Q.toLowerCase()==="authorization"||Q.toLowerCase()==="cookie"||Q.toLowerCase()==="set-cookie"?"***":B]));if("retryOfRequestLogID"in A){if(A.retryOfRequestLogID)A.retryOf=A.retryOfRequestLogID;delete A.retryOfRequestLogID}return A};var q1=H(()=>{T0();aW={off:0,error:200,warn:300,info:400,debug:500};sYA={error:L1,warn:L1,info:L1,debug:L1},ax=new WeakMap});var rx=H(()=>{T0();ox();q1();tD()});function sx(A){if(!A)throw Error("profile name is empty");if(A==="."||A==="..")throw Error(`profile name "${A}" is not allowed`);if(A.includes("/")||A.includes("\\"))throw Error(`profile name "${A}" must not contain path separators`);if(!tYA.test(A))throw Error(`profile name "${A}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var rW="1.0",tYA,tx=async(A)=>{var Q,B;let I=await IV();if(I===null)return null;let E=A??await Ag();if(E===null)return null;sx(E);let C=await import("node:fs"),J=(await import("node:path")).join(I,"configs",`${E}.json`),G;try{G=await C.promises.readFile(J,"utf-8")}catch(X){if(X?.code!=="ENOENT")throw Error(`failed to read config file ${J}: ${X}`);G=null}if(G===null){let X=KQ("ANTHROPIC_ORGANIZATION_ID"),W=KQ("ANTHROPIC_IDENTITY_TOKEN_FILE"),N=KQ("ANTHROPIC_FEDERATION_RULE_ID");if(N&&X)return{fromFile:!1,config:{organization_id:X,workspace_id:KQ("ANTHROPIC_WORKSPACE_ID"),base_url:KQ("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:N,service_account_id:KQ("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:W?{source:"file",path:W}:void 0,scope:KQ("ANTHROPIC_SCOPE")}}};return null}let U;try{U=JSON.parse(G)}catch(X){throw Error(`failed to parse config file ${J}: ${X}`)}if(!U.authentication)throw Error(`config file ${J} is missing "authentication"`);let F=U.authentication.type;if(F!=="oidc_federation"&&F!=="user_oauth")throw Error(`authentication.type "${F}" is not a known authentication type`);if(U.organization_id??(U.organization_id=KQ("ANTHROPIC_ORGANIZATION_ID")),U.workspace_id??(U.workspace_id=KQ("ANTHROPIC_WORKSPACE_ID")),U.base_url??(U.base_url=KQ("ANTHROPIC_BASE_URL")),(Q=U.authentication).scope??(Q.scope=KQ("ANTHROPIC_SCOPE")),U.authentication.type==="oidc_federation"){if(!U.authentication.identity_token){let X=KQ("ANTHROPIC_IDENTITY_TOKEN_FILE");if(X)U.authentication.identity_token={source:"file",path:X}}if(!U.authentication.federation_rule_id)U.authentication.federation_rule_id=KQ("ANTHROPIC_FEDERATION_RULE_ID")??"";(B=U.authentication).service_account_id??(B.service_account_id=KQ("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:U,fromFile:!0}},ex=async(A,Q)=>{if(A?.authentication.credentials_path)return A.authentication.credentials_path;let B=await IV();if(!B)return null;let I=Q??await Ag();if(!I)return null;return sx(I),(await import("node:path")).join(B,"credentials",`${I}.json`)},IV=async()=>{if(!eYA())return null;let A=await import("node:path"),Q=KQ("ANTHROPIC_CONFIG_DIR");if(Q)return Q;if(z1()["X-Stainless-OS"]==="Windows"){let C=KQ("APPDATA");if(C)return A.join(C,"Anthropic");let Y=KQ("USERPROFILE");if(Y)return A.join(Y,"AppData","Roaming","Anthropic");return null}let I=KQ("XDG_CONFIG_HOME");if(I)return A.join(I,"anthropic");let E=KQ("HOME");if(E)return A.join(E,".config","anthropic");return null},eYA=()=>{let A=z1()["X-Stainless-Runtime"];return A==="node"||A==="deno"},Ag=async()=>{let A=await IV();if(!A)return null;let Q=KQ("ANTHROPIC_PROFILE");if(Q)return Q;let B=await import("node:fs"),E=(await import("node:path")).join(A,"active_config");try{return(await B.promises.readFile(E,"utf-8")).trim()||"default"}catch(C){if(C?.code!=="ENOENT")throw Error(`failed to read ${E}: ${C}`);return"default"}};var EV=H(()=>{uW();rx();tYA=/^[A-Za-z0-9_.-]+$/});function CV(A){if(!A)throw new t("Identity token file path is empty");return async()=>{let Q=await import("node:fs"),B;try{B=await Q.promises.readFile(A,"utf-8")}catch(E){throw new t(`Failed to read identity token file at ${A}: ${E}`)}let I=B.trim();if(!I)throw new t(`Identity token file at ${A} is empty`);return I}}function Qg(A){if(!A)throw new t("Identity token value is empty");return()=>A}var Bg=H(()=>{cB()});function Ig(A){return async()=>{lW(A.baseURL);let Q=await A.identityTokenProvider();if(Q.length>16384)throw new qQ(`Identity token is ${Math.ceil(Q.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let B={grant_type:hx,assertion:Q,federation_rule_id:A.federationRuleId,organization_id:A.organizationId};if(A.serviceAccountId)B.service_account_id=A.serviceAccountId;if(A.workspaceId)B.workspace_id=A.workspaceId;let I=`${A.baseURL}${pW}`,E;try{E=await A.fetch(I,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${yY},${ux}`,"User-Agent":A.userAgent||`anthropic-sdk-typescript/${$E} oidcFederationProvider`},body:JSON.stringify(B)})}catch(G){throw new qQ(`Failed to reach token endpoint ${I}: ${G}`)}let C=E.headers.get("Request-Id");if(!E.ok){let G=await E.text().catch(()=>""),U=DI(G),F="";if(E.status===401)F=` Ensure your federation rule matches your identity token. ${A.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`;throw new qQ(`Token exchange failed with status ${E.status}${C?` (request-id ${C})`:""}: ${U}${F}`,E.status,U,C)}let Y=await iW(E,C),J=Number(Y.expires_in);if(!Number.isFinite(J))throw new qQ(`Token endpoint response missing required fields: ${JSON.stringify(DI(Y))}`,E.status,DI(Y),C);return{token:Y.access_token,expiresAt:TE()+J}}}var Eg=H(()=>{DG()});function Cg(A){return async(Q)=>{let B=await import("node:fs");await dW(A.credentialsPath,A.onSafetyWarning);let I;try{I=await B.promises.readFile(A.credentialsPath,"utf-8")}catch(V){throw new qQ(`Credentials file not found at ${A.credentialsPath}: ${V}`)}let E;try{E=JSON.parse(I)}catch(V){throw new qQ(`Credentials file at ${A.credentialsPath} is not valid JSON: ${V}`)}let C=E.access_token;if(!C)throw new qQ(`Credentials file at ${A.credentialsPath} must include 'access_token'`);let Y=E.expires_at;if(!Q?.forceRefresh&&(Y==null||TE()<Y-NG))return{token:C,expiresAt:Y??null};let J=E.refresh_token;if(!A.clientId||!J)throw new qQ(`Access token at ${A.credentialsPath} has expired and no refresh is available (client_id ${A.clientId?"set":"empty"}, refresh_token ${J?"set":"empty"})`);lW(A.baseURL);let G={grant_type:mx,refresh_token:J,client_id:A.clientId},U=`${A.baseURL}${pW}`,F;try{F=await A.fetch(U,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":yY,"User-Agent":A.userAgent||`anthropic-sdk-typescript/${$E} userOAuthProvider`},body:JSON.stringify(G)})}catch(V){throw new qQ(`User OAuth refresh failed to reach token endpoint: ${V}`)}let X=F.headers.get("Request-Id");if(!F.ok){let V=await F.text().catch(()=>"");throw new qQ(`User OAuth refresh failed (HTTP ${F.status}): ${DI(V)}`,F.status,DI(V),X)}let W=await iW(F,X),N=Number(W.expires_in);if(!Number.isFinite(N))throw new qQ(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(DI(W))}`,F.status,DI(W),X);let D=TE()+N,w=W.refresh_token||J;return await nW(A.credentialsPath,{...E,version:rW,type:"oauth_token",access_token:W.access_token,expires_at:D,refresh_token:w}),{token:W.access_token,expiresAt:D}}}var Yg=H(()=>{EV();DG()});function YV(A,Q){let B=A.authentication.credentials_path??null,I=(A.base_url||Q.baseURL).replace(/\/+$/,""),E=AJA(A,B,I,Q),C={};if(A.workspace_id&&A.authentication.type==="user_oauth")C["anthropic-workspace-id"]=A.workspace_id;return{provider:E,extraHeaders:C,baseURL:A.base_url||void 0}}async function Jg(A,Q){let B=await tx(Q);if(!B)return null;let{config:I,fromFile:E}=B,C=I.authentication.credentials_path||!E?I:{...I,authentication:{...I.authentication,credentials_path:await ex(I,Q)??void 0}};return YV(C,A)}function AJA(A,Q,B,I){switch(A.authentication.type){case"oidc_federation":{let E=A.authentication,C=QJA(E);if(!C)throw new qQ("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!E.federation_rule_id)throw new qQ("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!A.organization_id)throw new qQ("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let Y=Ig({identityTokenProvider:C,federationRuleId:E.federation_rule_id,organizationId:A.organization_id,serviceAccountId:E.service_account_id,workspaceId:A.workspace_id,baseURL:B,fetch:I.fetch,userAgent:I.userAgent});if(Q)return BJA(Y,Q,I.onCacheWriteError,I.onSafetyWarning);return Y}case"user_oauth":{if(!Q)throw new qQ("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return Cg({credentialsPath:Q,clientId:A.authentication.client_id,baseURL:B,fetch:I.fetch,userAgent:I.userAgent,onSafetyWarning:I.onSafetyWarning})}default:{let E=A.authentication.type;throw new qQ(`authentication.type "${E}" is not a known authentication type`)}}}function QJA(A){if(A.identity_token){let I=A.identity_token.source;if(I!=="file")throw new qQ(`identity_token.source "${I}" is not supported by this SDK version (only "file")`);if(!A.identity_token.path)throw new qQ('identity_token.source "file" requires a non-empty path');return CV(A.identity_token.path)}let Q=KQ("ANTHROPIC_IDENTITY_TOKEN_FILE");if(Q)return CV(Q);let B=KQ("ANTHROPIC_IDENTITY_TOKEN");if(B)return Qg(B);return null}function BJA(A,Q,B,I){return async(E)=>{let C=await import("node:fs");await dW(Q,I);let Y;try{let G=await C.promises.readFile(Q,"utf-8");Y=JSON.parse(G);let U=Y?.access_token;if(U&&!E?.forceRefresh){let F=Y?.expires_at;if(F==null||TE()<F-NG)return{token:U,expiresAt:F??null}}}catch(G){if(G?.code!=="ENOENT"&&!(G instanceof SyntaxError))B?.(G)}let J=await A(E);try{await nW(Q,{...Y??{},version:rW,type:"oauth_token",access_token:J.token,expires_at:J.expiresAt})}catch(G){B?.(G)}return J}}var Gg=H(()=>{EV();DG();Bg();Eg();Yg()});class k0{constructor(){yI.set(this,void 0),fI.set(this,void 0),o(this,yI,new Uint8Array,"f"),o(this,fI,null,"f")}decode(A){if(A==null)return[];let Q=A instanceof ArrayBuffer?new Uint8Array(A):typeof A==="string"?VG(A):A;o(this,yI,nx([O(this,yI,"f"),Q]),"f");let B=[],I;while((I=IJA(O(this,yI,"f"),O(this,fI,"f")))!=null){if(I.carriage&&O(this,fI,"f")==null){o(this,fI,I.index,"f");continue}if(O(this,fI,"f")!=null&&(I.index!==O(this,fI,"f")+1||I.carriage)){B.push(QV(O(this,yI,"f").subarray(0,O(this,fI,"f")-1))),o(this,yI,O(this,yI,"f").subarray(O(this,fI,"f")),"f"),o(this,fI,null,"f");continue}let E=O(this,fI,"f")!==null?I.preceding-1:I.preceding,C=QV(O(this,yI,"f").subarray(0,E));B.push(C),o(this,yI,O(this,yI,"f").subarray(I.index),"f"),o(this,fI,null,"f")}return B}flush(){if(!O(this,yI,"f").length)return[];return this.decode(`
5
5
  `)}}function IJA(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 Ug(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,fI;var JV=H(()=>{cC();yI=new WeakMap,fI=new WeakMap;k0.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);k0.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*EJA(A,Q){if(!A.body){if(Q.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new t("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 t("Attempted to iterate over a response with no body")}let B=new Fg,I=new k0,E=H1(A.body);for await(let C of CJA(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*CJA(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"?VG(B):B,E=new Uint8Array(Q.length+I.length);E.set(Q),E.set(I,Q.length),Q=E;let C;while((C=Ug(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class Fg{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(`
@@ -177,7 +177,7 @@ ${E}`;break;case"retry":if(wEA(E))Q[I]=E;break;case"id":if(MEA(E))Q[I]=E;break;c
177
177
  `+E}}catch(C){}}throw B}}_request(A,Q){if(typeof A==="string")Q=Q||{},Q.url=A;else Q=A||{};Q=AC(this.defaults,Q);let{transitional:B,paramsSerializer:I,headers:E}=Q;if(B!==void 0)K9.assertOptions(B,{silentJSONParsing:ZE.transitional(ZE.boolean),forcedJSONParsing:ZE.transitional(ZE.boolean),clarifyTimeoutError:ZE.transitional(ZE.boolean),legacyInterceptorReqResOrdering:ZE.transitional(ZE.boolean)},!1);if(I!=null)if(q.isFunction(I))Q.paramsSerializer={serialize:I};else K9.assertOptions(I,{encode:ZE.function,serialize:ZE.function},!0);if(Q.allowAbsoluteUrls!==void 0);else if(this.defaults.allowAbsoluteUrls!==void 0)Q.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls;else Q.allowAbsoluteUrls=!0;K9.assertOptions(Q,{baseUrl:ZE.spelling("baseURL"),withXsrfToken:ZE.spelling("withXSRFToken")},!0),Q.method=(Q.method||this.defaults.method||"get").toLowerCase();let C=E&&q.merge(E.common,E[Q.method]);E&&q.forEach(["delete","get","head","post","put","patch","common"],(N)=>{delete E[N]}),Q.headers=CB.concat(C,E);let Y=[],J=!0;this.interceptors.request.forEach(function(D){if(typeof D.runWhen==="function"&&D.runWhen(Q)===!1)return;J=J&&D.synchronous;let w=Q.transitional||UY;if(w&&w.legacyInterceptorReqResOrdering)Y.unshift(D.fulfilled,D.rejected);else Y.push(D.fulfilled,D.rejected)});let G=[];this.interceptors.response.forEach(function(D){G.push(D.fulfilled,D.rejected)});let U,F=0,X;if(!J){let N=[S6.bind(this),void 0];N.unshift(...Y),N.push(...G),X=N.length,U=Promise.resolve(Q);while(F<X)U=U.then(N[F++],N[F++]);return U}X=Y.length;let W=Q;while(F<X){let N=Y[F++],D=Y[F++];try{W=N(W)}catch(w){D.call(this,w);break}}try{U=S6.call(this,W)}catch(N){return Promise.reject(N)}F=0,X=G.length;while(F<X)U=U.then(G[F++],G[F++]);return U}getUri(A){A=AC(this.defaults,A);let Q=gJ(A.baseURL,A.url,A.allowAbsoluteUrls);return xJ(Q,A.params,A.paramsSerializer)}}q.forEach(["delete","get","head","options"],function(Q){Z9.prototype[Q]=function(B,I){return this.request(AC(I||{},{method:Q,url:B,data:(I||{}).data}))}});q.forEach(["post","put","patch"],function(Q){function B(I){return function(C,Y,J){return this.request(AC(J||{},{method:Q,headers:I?{"Content-Type":"multipart/form-data"}:{},url:C,data:Y}))}}Z9.prototype[Q]=B(),Z9.prototype[Q+"Form"]=B(!0)});var z9=Z9;class Qq{constructor(A){if(typeof A!=="function")throw TypeError("executor must be a function.");let Q;this.promise=new Promise(function(E){Q=E});let B=this;this.promise.then((I)=>{if(!B._listeners)return;let E=B._listeners.length;while(E-- >0)B._listeners[E](I);B._listeners=null}),this.promise.then=(I)=>{let E,C=new Promise((Y)=>{B.subscribe(Y),E=Y}).then(I);return C.cancel=function(){B.unsubscribe(E)},C},A(function(E,C,Y){if(B.reason)return;B.reason=new aI(E,C,Y),Q(B.reason)})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(A){if(this.reason){A(this.reason);return}if(this._listeners)this._listeners.push(A);else this._listeners=[A]}unsubscribe(A){if(!this._listeners)return;let Q=this._listeners.indexOf(A);if(Q!==-1)this._listeners.splice(Q,1)}toAbortSignal(){let A=new AbortController,Q=(B)=>{A.abort(B)};return this.subscribe(Q),A.signal.unsubscribe=()=>this.unsubscribe(Q),A.signal}static source(){let A;return{token:new Qq(function(I){A=I}),cancel:A}}}var wo=Qq;function Bq(A){return function(B){return A.apply(null,B)}}function Iq(A){return q.isObject(A)&&A.isAxiosError===!0}var Eq={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Eq).forEach(([A,Q])=>{Eq[Q]=A});var Mo=Eq;function Ko(A){let Q=new z9(A),B=Q9(z9.prototype.request,Q);return q.extend(B,z9.prototype,Q,{allOwnKeys:!0}),q.extend(B,Q,null,{allOwnKeys:!0}),B.create=function(E){return Ko(AC(A,E))},B}var qB=Ko(nU);qB.Axios=z9;qB.CanceledError=aI;qB.CancelToken=wo;qB.isCancel=W9;qB.VERSION=TJ;qB.toFormData=GY;qB.AxiosError=c;qB.Cancel=qB.CanceledError;qB.all=function(Q){return Promise.all(Q)};qB.spread=Bq;qB.isAxiosError=Iq;qB.mergeConfig=AC;qB.AxiosHeaders=CB;qB.formToJSON=(A)=>w6(q.isHTMLForm(A)?new FormData(A):A);qB.getAdapter=v6.getAdapter;qB.HttpStatusCode=Mo;qB.default=qB;var WB=qB;eA();oE();RQ();uI();import{mkdirSync as IRA,writeFileSync as ERA}from"fs";uI();eA();QB();RQ();sB();var P6="/home/claude/.claude/remote",RwQ=`${P6}/.oauth_token`,OwQ=`${P6}/.api_key`,T6=`${P6}/.session_ingress_token`;function Zo(A,Q,B){if(!dA(process.env.CLAUDE_CODE_REMOTE))return;try{IRA(P6,{recursive:!0,mode:448}),ERA(A,Q,{encoding:"utf8",mode:384}),Z(`Persisted ${B} to ${A} for subprocess access`)}catch(I){Z(`Failed to persist ${B} to disk (non-fatal): ${JA(I)}`,{level:"error"})}}function Cq(A,Q){try{let I=PQ().readFileSync(A,{encoding:"utf8"}).trim();if(!I)return null;return Z(`Read ${Q} from well-known file ${A}`),I}catch(B){if(!bE(B))Z(`Failed to read ${Q} from ${A}: ${JA(B)}`,{level:"debug"});return null}}eA();RQ();sB();function CRA(){let A=Ev();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??T6,E=Cq(I,"session ingress token");return _G(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"}),_G(null),null;try{let I=PQ(),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"}),_G(null),null;return Z(`Successfully read token from file descriptor ${B}`),_G(C),Zo(T6,C,"session ingress token"),C}catch(I){Z(`Failed to read token from file descriptor ${B}: ${JA(I)}`,{level:"error"});let E=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??T6,C=Cq(E,"session ingress token");return _G(C),C}}function H9(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return CRA()}function k6(){let A=H9();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 L9(A){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=A}IQ();class eU extends Error{retryAfterMs;constructor(A,Q){super(A);this.retryAfterMs=Q}}class bJ{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 eU?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)})}}u0();class Yq{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}}eA();oE();QB();PE();import{Agent as JRA}from"https";PE();eA();QB();sB();var zo=["bundled","system"];function YRA(){let A=process.env.CLAUDE_CODE_CERT_STORE;if(A){let Q=[];for(let B of A.split(",")){let I=B.trim().toLowerCase();if(I==="bundled"||I==="system"){if(!Q.includes(I))Q.push(I)}else if(I)Z(`CA certs: unrecognized CLAUDE_CODE_CERT_STORE source '${I}', ignoring`,{level:"warn"})}return Q.length>0?Q:zo}if(dD("--use-system-ca")||dD("--use-openssl-ca"))return["system"];return zo}var A4=FQ(()=>{let A=YRA(),Q=process.env.NODE_EXTRA_CA_CERTS,B=A.includes("bundled"),I=A.includes("system");Z(`CA certs: stores=${A.join(",")}, extraCertsPath=${Q}`);let E=x("tls"),C=E.getCACertificates;if(!B&&I&&!C){Z("CA certs: stores=system but system CA API unavailable, deferring to runtime");return}let Y=[];if(B)Y.push(...E.rootCertificates),Z(`CA certs: Loaded ${E.rootCertificates.length} bundled root certificates`);if(I)try{let J=C?.("system");if(J&&J.length>0)Y.push(...J),Z(`CA certs: Loaded ${J.length} system CA certificates`);else if(Z(`CA certs: system store ${C?"returned empty":"unavailable"}`),!B)Y.push(...E.rootCertificates)}catch(J){if(Z(`CA certs: Failed to load system CA certificates: ${J}`,{level:"error"}),!B)Y.push(...E.rootCertificates)}if(Q)try{let J=PQ().readFileSync(Q,{encoding:"utf8"});Y.push(J),Z(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${Q})`)}catch(J){Z(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${Q}): ${J}`,{level:"error"})}return Y.length>0?KF(Y):void 0});eA();sB();var q9=FQ(()=>{let A={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{A.cert=PQ().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=PQ().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}),GRA=FQ(()=>{let A=q9(),Q=A4();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return Z("mTLS: Creating HTTPS agent with custom certificates"),new JRA(B)});function Ho(){let A=q9(),Q=A4();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}function Q4(){let A=q9(),Q=A4();if(!A&&!Q)return{};return{tls:{...A,...Q&&{ca:Q}}}}PE();uI();var rmA=TY(yo(),1);import{isIP as TEA}from"net";function Gq(A,Q){let B=Q.lastIndexOf("/");if(B<0)return!1;let I=Q.slice(0,B),E=Q.slice(B+1);if(!/^\d+$/.test(E))return!1;let C=parseInt(E,10),Y=fo(I);if(!Y)return!1;if(Y.zone)return!1;let J=fo(A);if(!J)return!1;let G=SRA(J.bytes),U=Y.bytes;if(G.length!==U.length)return!1;let F=U.length*8;if(C<0||C>F)return!1;return vRA(G,U,C)}function vRA(A,Q,B){let I=B>>3;for(let Y=0;Y<I;Y++)if(A[Y]!==Q[Y])return!1;let E=B&7;if(E===0)return!0;let C=255<<8-E&255;return((A[I]??0)&C)===((Q[I]??0)&C)}function SRA(A){if(A.length!==16)return A;for(let Q=0;Q<10;Q++)if(A[Q]!==0)return A;if(A[10]!==255||A[11]!==255)return A;return A.slice(12)}function fo(A){if(A==="")return null;let Q="",B=A,I=A.indexOf("%");if(I>=0)Q=A.slice(I+1),B=A.slice(0,I);if(B.includes(":")){let C=_RA(B);return C?{bytes:C,zone:Q}:null}if(Q)return null;let E=ho(B);return E?{bytes:E,zone:""}:null}function ho(A){let Q=A.split(".");if(Q.length!==4)return null;let B=new Uint8Array(4);for(let I=0;I<4;I++){let E=Q[I];if(E===void 0||E===""||!/^\d{1,3}$/.test(E))return null;if(E.length>1&&E.startsWith("0"))return null;let C=parseInt(E,10);if(C>255)return null;B[I]=C}return B}function _RA(A){let Q=null,B=A,I=A.lastIndexOf(":");if(I>=0&&A.slice(I+1).includes(".")){if(Q=ho(A.slice(I+1)),!Q)return null;B=A.slice(0,I+1)}let E=B.split("::");if(E.length>2)return null;let C=[],Y=(G,U)=>{if(G==="")return[];let F=G.split(":"),X=[];for(let W=0;W<F.length;W++){let N=F[W];if(N===""&&U&&W===F.length-1)continue;if(N===void 0||N===""||!/^[0-9a-fA-F]{1,4}$/.test(N))return null;X.push(parseInt(N,16))}return X};if(E.length===1){let G=E[0]??"",U=Y(G,Q!==null);if(!U)return null;C.push(...U);let F=Q?6:8;if(C.length!==F)return null}else{let G=E[0]??"",U=E[1]??"",F=Y(G,!1),X=Y(U,Q!==null);if(!F||!X)return null;let W=Q?2:0,N=8-F.length-X.length-W;if(N<1)return null;C.push(...F);for(let D=0;D<N;D++)C.push(0);if(C.push(...X),C.length+W!==8)return null}let J=new Uint8Array(16);for(let G=0;G<C.length;G++){let U=C[G];if(U===void 0)return null;J[G*2]=U>>8&255,J[G*2+1]=U&255}if(Q)J[12]=Q[0]??0,J[13]=Q[1]??0,J[14]=Q[2]??0,J[15]=Q[3]??0;return J}eA();QB();dH();var smA=!1;function bEA(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function yEA(A=process.env){return A.no_proxy||A.NO_PROXY}function SR(A,Q=yEA()){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 kEA(A,Q){if(SR(A,Q))return!0;if(!Q)return!1;let B;try{B=new URL(A).hostname.replace(/^\[|\]$/g,"")}catch{return!1}if(TEA(B)===0)return!1;return Q.split(/[,\s]+/).filter(Boolean).some((I)=>{if(I.includes("/"))return Gq(B,I);let E=TEA(I);if(E===0)return!1;return Gq(B,`${I}/${E===4?32:128}`)})}var sMQ=FQ((A)=>{let Q=PEA(),B=q9(),I=A4(),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 fEA(A){let Q=bEA();if(!Q)return;if(SR(A))return;return Q}var tmA=null;function emA(){return tmA?.value??null}function _R(A){let Q={...smA&&{keepalive:!1},...A.forAnthropicAPI&&!dA(process.env.API_FORCE_IDLE_TIMEOUT)&&{timeout:!1}};if(A.forAnthropicAPI){let I=process.env.ANTHROPIC_UNIX_SOCKET;if(I)return{...Q,unix:I}}let B=bEA();if(B){if(A.url&&SR(A.url))return{...Q,...Q4()};let I=emA();return{...Q,proxy:I?{url:B,headers:{"Proxy-Authorization":I}}:B,...Q4()}}if(A.fallbackProxy){if(A.url&&(kEA(A.url,A.fallbackProxy.noProxy)||kEA(A.url,yEA())))return{...Q,...Q4()};let I=Q4();return{...Q,proxy:A.fallbackProxy.url,...A.fallbackProxy.ca?{tls:{...I.tls,ca:A.fallbackProxy.ca}}:I}}return{...Q,...Q4()}}PG();oE();QB();var AuA=30000;function QuA(){return{activityCallback:null,refcount:0,activeReasons:new Map,oldestActivityStartedAt:null,heartbeatTimer:null,idleTimer:null,cleanupHandle:null}}var BuA="cli",hEA=()=>BuA;var PR=new Map;function IuA(){let A=hEA(),Q=PR.get(A);if(!Q)Q=QuA(),PR.set(A,Q);return Q}function EuA(){return PR.get(hEA())??null}function CuA(A){mEA(A),A.heartbeatTimer=setInterval((Q)=>{if(a("debug","session_keepalive_heartbeat",{refcount:Q.refcount}),dA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))Q.activityCallback?.()},AuA,A)}function mEA(A){if(A.idleTimer!==null)clearTimeout(A.idleTimer),A.idleTimer=null}function wD(A){let Q=IuA();if(Q.activityCallback=A,Q.refcount>0&&Q.heartbeatTimer===null)CuA(Q)}function RW(){let A=EuA();if(!A)return;if(A.activityCallback=null,A.heartbeatTimer!==null)clearInterval(A.heartbeatTimer),A.heartbeatTimer=null;mEA(A)}IQ();var YuA=`{"type":"keep_alive"}
178
178
  `,JuA=1000,GuA=1000,cEA=30000,UuA=600000,FuA=1e4,$uA=300000,uEA=cEA*2,WuA=new Set([1002,4001,4003]);class TR{ws=null;lastSentId=null;url;state="idle";onData;onCloseCallback;onConnectCallback;onDiagnostic;headers;sessionId;autoReconnect;isBridge;reconnectAttempts=0;reconnectStartTime=null;reconnectTimer=null;lastReconnectAttemptTime=null;connectErrorsSeen=new Set;lastActivityTime=0;pingInterval=null;pongReceived=!0;keepAliveInterval=null;messageBuffer;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 Yq(JuA)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){Z(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),a("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),Z(`WebSocketTransport: Opening ${this.url.href}`),a("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}`);let Q=new globalThis.WebSocket(this.url.href,{headers:A,proxy:fEA(this.url.href),tls:Ho()||void 0});this.ws=Q,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)}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(),a("info","cli_websocket_message_received",{length:Q.length}),this.onData)this.onData(Q)};onBunError=()=>{Z("WebSocketTransport: Error",{level:"error"}),a("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"}),a("error","cli_websocket_connect_closed"),this.handleConnectionError(A.code)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let A=Date.now()-this.connectStartTime;if(Z("WebSocketTransport: Connected"),a("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});if(this.reconnectAttempts>0){let Q=this.reconnectStartTime?Math.round((Date.now()-this.reconnectStartTime)/1000):0;this.onDiagnostic?.(`WS reconnected after ${this.reconnectAttempts} attempt(s), ${Q}s downtime`+(this.connectErrorsSeen.size>0?`, errors=[${[...this.connectErrorsSeen].join(",")}]`:""))}else this.onDiagnostic?.(`WS connected in ${A}ms`);this.connectErrorsSeen.clear(),this.reconnectAttempts=0,this.reconnectStartTime=null,this.lastReconnectAttemptTime=null,this.lastActivityTime=Date.now(),this.state="connected",this.onConnectCallback?.(),this.startPingInterval(),this.startKeepaliveInterval(),wD(()=>{this.write({type:"keep_alive"})})}sendLine(A){if(!this.ws||this.state!=="connected")return Z("WebSocketTransport: Not connected"),a("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"}),a("error","cli_websocket_send_error"),this.handleConnectionError(),!1}}removeWsListeners(A){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)}doDisconnect(){if(this.stopPingInterval(),this.stopKeepaliveInterval(),RW(),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})`:"")),a("info","cli_websocket_disconnected"),A!=null)this.connectErrorsSeen.add(`ws_${A}`);if(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"),a("info","cli_websocket_4003_token_refreshed")}if(A!=null&&WuA.has(A)&&!Q){Z(`WebSocketTransport: Permanent close code ${A}, not reconnecting`,{level:"error"}),a("error","cli_websocket_permanent_close",{closeCode:A}),this.onDiagnostic?.(`WS permanent close (code ${A}), not reconnecting`),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>uEA)Z(`WebSocketTransport: Detected system sleep (${Math.round((B-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),a("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<UuA){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(GuA*Math.pow(2,this.reconnectAttempts-1),cEA),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)`),a("error","cli_websocket_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.onDiagnostic?.(`WS reconnect (${A!=null?`code ${A}`:"no code"}) attempt=${this.reconnectAttempts} ${Math.round(I/1000)}s elapsed, retry in ${Math.round(C)}ms`+(this.connectErrorsSeen.size>1?`, errors=[${[...this.connectErrorsSeen].join(",")}]`:"")),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"}),a("error","cli_websocket_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:I}),this.onDiagnostic?.(`WS reconnection budget exhausted: ${this.reconnectAttempts} attempts over ${Math.round(I/1000)}s, errors=[${[...this.connectErrorsSeen].join(",")||"none"}], last code=${A??"none"}`),this.state="closed",this.onCloseCallback)this.onCloseCallback(A)}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.stopPingInterval(),this.stopKeepaliveInterval(),RW(),this.state="closing",this.doDisconnect()}[Symbol.dispose](){this.close()}replayBufferedMessages(A){let Q=this.messageBuffer.toArray();if(Q.length===0)return;let B=0;if(A){let E=Q.findIndex((C)=>("uuid"in C)&&C.uuid===A);if(E>=0){B=E+1;let C=Q.slice(B);if(this.messageBuffer.clear(),this.messageBuffer.addAll(C),C.length===0)this.lastSentId=null;Z(`WebSocketTransport: Evicted ${B} confirmed messages, ${C.length} remaining`),a("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"),a("info","cli_websocket_no_messages_to_replay");return}Z(`WebSocketTransport: Replaying ${I.length} buffered messages`),a("info","cli_websocket_messages_to_replay",{count:I.length});for(let E of I){let C=LA(E)+`
179
179
  `;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}setOnDiagnostic(A){this.onDiagnostic=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)+`
180
- `;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>uEA){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),a("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"}),a("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),a("error","cli_websocket_ping_failed")}}},FuA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),dA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(YuA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),a("error","cli_websocket_keepalive_failed")}},$uA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var XuA=100,NuA=15000,DuA=3000;class kR extends TR{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=VuA(A),this.uploader=new bJ({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{a("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}`),a("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(),XuA);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,DuA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=H9();if(!Q){Z("HybridTransport: No session token available for POST"),a("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await WB.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:NuA})}catch(E){throw Z(`HybridTransport: POST error: ${JA(E)}`),a("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`),a("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),a("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function VuA(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}`}u0();QB();function pEA(){let{namespace:A,cluster:Q}=jx();return{...A&&{cooNamespace:A},...Q&&{cooCluster:Q}}}PG();import{chmod as h7Q,mkdir as m7Q,readdir as u7Q,readFile as ZuA,unlink as c7Q,writeFile as zuA}from"fs/promises";import{join as iEA}from"path";uI();u0();PG();eA();QB();RQ();A6();IQ();import{AsyncLocalStorage as wuA}from"async_hooks";var q7Q=new wuA;QB();var CKQ=k(()=>NC.object({pid:NC.number(),sessionId:NC.string(),cwd:NC.string().optional(),startedAt:NC.number(),version:NC.string().optional(),kind:NC.enum(["interactive","bg","daemon","daemon-worker"])}));function HuA(){return iEA(FE(),"sessions")}var lEA=Promise.resolve();async function LuA(A){let Q=iEA(HuA(),`${process.pid}.json`),B=lEA.then(async()=>{try{let I=mQ(await ZuA(Q,"utf8"));await zuA(Q,LA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${JA(I)}`)}});lEA=B,await B}async function dEA(A){await LuA({bridgeSessionId:A})}eA();oE();QB();RQ();function NB(A,Q){return Object.freeze({name:A,header:Q})}var quA=NB("claude_code","claude-code-20250219"),juA=NB("oauth_auth",kP),RuA=NB("interleaved_thinking","interleaved-thinking-2025-05-14"),OuA=NB("long_context","context-1m-2025-08-07"),xuA=NB("context_management","context-management-2025-06-27"),guA=NB("structured_outputs","structured-outputs-2025-12-15"),vuA=NB("web_search","web-search-2025-03-05"),SuA=NB("tool_search","advanced-tool-use-2025-11-20"),_uA=NB("tool_search","tool-search-tool-2025-10-19"),PuA=NB("effort","effort-2025-11-24"),TuA=NB("task_budgets","task-budgets-2026-03-13"),kuA=NB("prompt_caching_scope","prompt-caching-scope-2026-01-05"),buA=NB("extended_cache_ttl","extended-cache-ttl-2025-04-11"),yuA=NB("speed","fast-mode-2026-02-01"),fuA=NB("redact_thinking","redact-thinking-2026-02-12"),huA=null,muA=null,uuA=null,cuA=NB("advisor_tool","advisor-tool-2026-03-01"),puA=NB("cache_diagnosis","cache-diagnosis-2026-04-07"),luA=NB("context_hint","context-hint-2026-04-09"),iuA=NB("mcp_servers","mcp-servers-2025-12-04"),duA=NB("files_api","files-api-2025-04-14"),yR=NB("environments","environments-2025-11-01"),nuA=NB("ccr_byoc","ccr-byoc-2025-07-29"),ouA=null,auA=Object.freeze([quA,juA,RuA,OuA,xuA,guA,vuA,SuA,_uA,PuA,TuA,kuA,buA,yuA,fuA,huA,muA,uuA,cuA,puA,luA,iuA,duA,yR,nuA,ouA].filter((A)=>A!==null)),GKQ=new Map(auA.map((A)=>[A.header,A]));oC();cR();function kC(){return"claude-code/0.3.154"}function SY(){switch(process.env.CLAUDE_CODE_ENTRYPOINT){case"claude-vscode":return"claude_code_vscode";case"remote":case"remote_baku":case"remote_cowork":case"remote_desktop":case"remote_mobile":return"claude_code_remote";case"sdk-cli":case"sdk-ts":case"sdk-py":return"claude_code_sdk";case"mcp":return"claude_code_mcp";case"claude-code-github-action":return"claude_code_github_action";case"local-agent":return"claude_code_local_agent";case"claude_in_slack":return"claude_in_slack";case"cli":default:return"claude_code_cli"}}import{randomUUID as McA}from"crypto";function KCA(A,Q,B,I){if(!I)return{url:`${A}/v1/sessions/${Q}/events`,body:{events:B}};let E=xW(Q);return{url:`${A}/v1/code/sessions/${encodeURIComponent(E)}/events`,body:{events:B.map((C)=>({payload:typeof C.uuid==="string"&&C.uuid?C:{...C,uuid:McA()}}))}}}u0();eA();RQ();IQ();var ZCA=2000,KcA=["session_ingress_token","environment_secret","access_token","secret","token"],ZcA=new RegExp(`"(${KcA.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),zcA=16;function HcA(A){return A.replace(ZcA,(Q,B,I)=>{if(I.length<zcA)return`"${B}":"[REDACTED]"`;let E=`${I.slice(0,8)}...${I.slice(-4)}`;return`"${B}":"${E}"`})}function e4(A){let Q=typeof A==="string"?A:LA(A),B=HcA(Q);if(B.length<=ZCA)return B;return B.slice(0,ZCA)+`... (${B.length} chars)`}function zCA(A){let Q=JA(A);if(A&&typeof A==="object"&&"response"in A){let B=A.response;if(B?.data&&typeof B.data==="object"){let I=B.data,E=typeof I.message==="string"?I.message:typeof I.error==="object"&&I.error&&("message"in I.error)&&typeof I.error.message==="string"?I.error.message:void 0;if(E)return`${Q}: ${E}`}}return Q}function HCA(A){if(A&&typeof A==="object"&&"response"in A&&A.response&&typeof A.response.status==="number")return A.response.status;return}function iR(A,Q=Date.now()){if(!A)return;let B=Number(A);if(Number.isFinite(B)&&B>=0)return B*1000;let I=Date.parse(A);if(Number.isFinite(I)){let E=I-Q;return E>0?E:void 0}return}function LCA(A){if(!A||typeof A!=="object")return;if("retryAfterMs"in A&&typeof A.retryAfterMs==="number")return A.retryAfterMs;if("response"in A){let B=A.response?.headers?.["retry-after"];if(typeof B==="string")return iR(B)}return}function YG(A){if(!A||typeof A!=="object")return;if("message"in A&&typeof A.message==="string")return A.message;if("error"in A&&A.error!==null&&typeof A.error==="object"&&"message"in A.error&&typeof A.error.message==="string")return A.error.message;return}function qCA(A,Q,B){if(Q)Z(Q);rA("tengu_bridge_repl_skipped",{reason:A,...B!==void 0&&{v2:B}})}var LD="Remote Control is only available with claude.ai subscriptions. Please use `/login` to sign in with your claude.ai account.";var LcA=/^[a-zA-Z0-9_-]+$/;function TI(A,Q){if(!A||!LcA.test(A))throw Error(`Invalid ${Q}: contains unsafe characters`);return A}class YE extends Error{status;errorType;constructor(A,Q,B){super(A);this.name="BridgeFatalError",this.status=Q,this.errorType=B}}function RCA(A){function Q(J){A.onDebug?.(J)}let B=0,I=100;async function E(J){let G={Authorization:`Bearer ${J}`,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-beta":yR.header,"x-environment-runner-version":A.runnerVersion,"User-Agent":kC()},U=await A.getTrustedDeviceToken?.();if(U)G["X-Trusted-Device-Token"]=U;return G}function C(){let J=A.getAccessToken();if(!J)throw Error(LD);return J}async function Y(J,G){let U=C(),F=await J(U);if(F.status!==401)return F;if(!A.onAuth401)return Q(`[bridge:api] ${G}: 401 received, no refresh handler`),F;if(Q(`[bridge:api] ${G}: 401 received, attempting token refresh`),await A.onAuth401(U)){Q(`[bridge:api] ${G}: Token refreshed, retrying request`);let W=C(),N=await J(W);if(N.status!==401)return N;Q(`[bridge:api] ${G}: Retry after refresh also got 401`)}else Q(`[bridge:api] ${G}: Token refresh failed`);return F}return{async registerBridgeEnvironment(J){return pI("bridge_environment_register",async()=>{Q(`[bridge:api] POST /v1/environments/bridge bridgeId=${J.bridgeId}`);let G=await Y(async(U)=>WB.post(`${A.baseUrl}/v1/environments/bridge`,{machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:J.gitRepoUrl,max_sessions:J.maxSessions,metadata:{worker_type:J.workerType},...J.reuseEnvironmentId&&{environment_id:J.reuseEnvironmentId}},{headers:await E(U),timeout:15000,validateStatus:(F)=>F<500}),"Registration");return x0(G.status,G.data,"Registration"),Q(`[bridge:api] POST /v1/environments/bridge -> ${G.status} environment_id=${G.data.environment_id}`),Q(`[bridge:api] >>> ${e4({machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:wCA(J.gitRepoUrl),max_sessions:J.maxSessions,metadata:{worker_type:J.workerType}})}`),Q(`[bridge:api] <<< ${e4(G.data)}`),G.data},jCA)},async pollForWork(J,G,U,F){TI(J,"environmentId");let X=B;B=0;let W=await WB.get(`${A.baseUrl}/v1/environments/${J}/work/poll`,{headers:await E(G),params:F!==void 0?{reclaim_older_than_ms:F}:void 0,timeout:1e4,signal:U,validateStatus:(N)=>N<500});if(x0(W.status,W.data,"Poll",W.headers),!W.data){if(B=X+1,B===1||B%I===0)Q(`[bridge:api] GET .../work/poll -> ${W.status} (no work, ${B} consecutive empty polls)`);return null}return Q(`[bridge:api] GET .../work/poll -> ${W.status} workId=${W.data.id} type=${W.data.data?.type}${W.data.data?.id?` sessionId=${W.data.data.id}`:""}`),Q(`[bridge:api] <<< ${e4(W.data)}`),W.data},async acknowledgeWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/ack`);let F=await WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/ack`,{},{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});x0(F.status,F.data,"Acknowledge"),Q(`[bridge:api] POST .../work/${G}/ack -> ${F.status}`)},async stopWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/stop force=${U}`);let F=await Y(async(X)=>WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/stop`,{force:U},{headers:await E(X),timeout:1e4,validateStatus:(W)=>W<500}),"StopWork");x0(F.status,F.data,"StopWork"),Q(`[bridge:api] POST .../work/${G}/stop -> ${F.status}`)},async deregisterEnvironment(J){TI(J,"environmentId"),Q(`[bridge:api] DELETE /v1/environments/bridge/${J}`);let G=await Y(async(U)=>WB.delete(`${A.baseUrl}/v1/environments/bridge/${J}`,{headers:await E(U),timeout:1e4,validateStatus:(F)=>F<500}),"Deregister");x0(G.status,G.data,"Deregister"),Q(`[bridge:api] DELETE /v1/environments/bridge/${J} -> ${G.status}`)},async archiveSession(J){TI(J,"sessionId"),Q(`[bridge:api] POST /v1/sessions/${J}/archive`);let G=await Y(async(U)=>WB.post(`${A.baseUrl}/v1/sessions/${J}/archive`,{},{headers:await E(U),timeout:1e4,validateStatus:(F)=>F<500}),"ArchiveSession");if(G.status===409){Q(`[bridge:api] POST /v1/sessions/${J}/archive -> 409 (already archived)`);return}x0(G.status,G.data,"ArchiveSession"),Q(`[bridge:api] POST /v1/sessions/${J}/archive -> ${G.status}`)},async reconnectSession(J,G){return pI("bridge_session_reconnect",async()=>{TI(J,"environmentId"),TI(G,"sessionId"),Q(`[bridge:api] POST /v1/environments/${J}/bridge/reconnect session_id=${G}`);let U=await Y(async(F)=>WB.post(`${A.baseUrl}/v1/environments/${J}/bridge/reconnect`,{session_id:G},{headers:await E(F),timeout:1e4,validateStatus:(X)=>X<500}),"ReconnectSession");x0(U.status,U.data,"ReconnectSession"),Q(`[bridge:api] POST .../bridge/reconnect -> ${U.status}`)},jCA)},async heartbeatWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/heartbeat`);let F=await WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/heartbeat`,{},{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});return x0(F.status,F.data,"Heartbeat"),Q(`[bridge:api] POST .../work/${G}/heartbeat -> ${F.status} lease_extended=${F.data.lease_extended} state=${F.data.state}`),F.data},async sendPermissionResponseEvent(J,G,U){TI(J,"sessionId");let{url:F,body:X}=KCA(A.baseUrl,J,[G],A.useCcrV2Routing?.()??!1);Q(`[bridge:api] POST ${F} type=${G.type}`);let W=await WB.post(F,X,{headers:await E(U),timeout:1e4,validateStatus:(N)=>N<500});x0(W.status,W.data,"SendPermissionResponseEvent"),Q(`[bridge:api] POST ${F} -> ${W.status}`),Q(`[bridge:api] >>> ${e4(X)}`),Q(`[bridge:api] <<< ${e4(W.data)}`)}}}function x0(A,Q,B,I){if(A===200||A===204)return;let E=YG(Q),C=qcA(Q);switch(A){case 401:throw new YE(`${B}: Authentication failed (401)${E?`: ${E}`:""}. ${LD}`,401,C);case 403:throw new YE(qD(C)?"Remote Control session expired.":`${B}: Access denied (403)${E?`: ${E}`:""}. Check your organization permissions.`,403,C);case 404:throw new YE(E??`${B}: Not found (404). Remote Control may not be available for this organization.`,404,C);case 410:throw new YE(E??"Remote Control session expired.",410,C??"environment_expired");case 429:{let Y=iR(typeof I?.["retry-after"]==="string"?I["retry-after"]:void 0);throw Object.assign(Error(`${B}: Rate limited (429). Polling too frequently.`),Y!==void 0?{status:A,retryAfterMs:Y}:{status:A})}default:throw Object.assign(Error(`${B}: Failed with status ${A}${E?`: ${E}`:""}`),{status:A})}}function qD(A){if(!A)return!1;return A.includes("expired")||A.includes("lifetime")}function OCA(A){if(A.status!==403)return!1;return A.message.includes("external_poll_sessions")||A.message.includes("environments:manage")}function jCA(A){if(A instanceof YE)return A.status===401?"auth_failed":"http_error";if(A instanceof Error){if(A.message===LD)return"no_token";if("status"in A&&typeof A.status==="number")return"http_error"}return"request_failed"}function qcA(A){if(A&&typeof A==="object"){if("error"in A&&A.error&&typeof A.error==="object"&&"type"in A.error&&typeof A.error.type==="string")return A.error.type}return}eA();import{randomUUID as jcA}from"crypto";oC();u0();var xCA={input_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0,output_tokens:0,server_tool_use:{web_search_requests:0,web_fetch_requests:0},service_tier:"standard",cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},inference_geo:"",iterations:[],speed:"standard"};function gCA(A){if(A===null||typeof A!=="object")return A;let Q=A;if("requestId"in Q&&!("request_id"in Q))Q.request_id=Q.requestId,delete Q.requestId;if("response"in Q&&Q.response!==null&&typeof Q.response==="object"){let B=Q.response;if("requestId"in B&&!("request_id"in B))B.request_id=B.requestId,delete B.requestId}return A}eA();az();RQ();IQ();function RcA(A){return A!==null&&typeof A==="object"&&"type"in A&&typeof A.type==="string"}function OcA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_response"&&"response"in A}function xcA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_request"&&"request_id"in A&&"request"in A}function dR(A){if((A.type==="user"||A.type==="assistant")&&A.isVirtual)return!1;return A.type==="user"||A.type==="assistant"||A.type==="system"&&A.subtype==="local_command"}function vCA(A){if(A.type!=="user"||A.isMeta||A.toolUseResult||A.isCompactSummary)return;if(A.origin&&A.origin.kind!=="human")return;let Q=A.message.content,B;if(typeof Q==="string")B=Q;else for(let E of Q)if(E.type==="text"){B=E.text;break}if(!B)return;return oz(B)||void 0}function SCA(A,Q,B,I,E,C){try{let Y=gCA(mQ(A));if(OcA(Y)){Z("[bridge:repl] Ingress message type=control_response"),E?.(Y);return}if(xcA(Y)){Z(`[bridge:repl] Inbound control_request subtype=${Y.request.subtype}`),C?.(Y);return}if(!RcA(Y))return;let J="uuid"in Y&&typeof Y.uuid==="string"?Y.uuid:void 0;if(J&&Q.has(J)){Z(`[bridge:repl] Ignoring echo: type=${Y.type} uuid=${J}`);return}if(J&&B.has(J)){Z(`[bridge:repl] Ignoring re-delivered inbound: type=${Y.type} uuid=${J}`);return}if(Z(`[bridge:repl] Ingress message type=${Y.type}${J?` uuid=${J}`:""}`),Y.type==="user"){if(J)B.add(J);rA("tengu_bridge_message_received",{is_repl:!0}),cI("bridge_message_receive"),I?.(Y)}else Z(`[bridge:repl] Ignoring non-user inbound message: type=${Y.type}`)}catch(Y){Z(`[bridge:repl] Failed to parse ingress message: ${JA(Y)}`),tB("bridge_message_receive","bridge_message_receive_parse_failed")}}var gcA="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function _CA(A,Q){let{transport:B,sessionId:I,outboundOnly:E,onInterrupt:C,onSetModel:Y,onSetMaxThinkingTokens:J,onSetPermissionMode:G,onRenameSession:U,onSetColor:F,onFileSuggestions:X,onReadFile:W,onGetContextUsage:N,onMcpAuthenticate:D,onMcpOauthCallbackUrl:w,onMcpReconnect:V,onMcpStatus:M}=Q;if(!B){Z("[bridge:repl] Cannot respond to control_request: transport not configured");return}let j;if(E&&A.request.subtype!=="initialize"){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:gcA}};let z={...j,session_id:I};B.write(z),Z(`[bridge:repl] Rejected ${A.request.subtype} (outbound-only) request_id=${A.request_id}`);return}switch(A.request.subtype){case"initialize":j={type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{commands:[],output_style:"normal",available_output_styles:["normal"],models:[],account:{},pid:process.pid}}};break;case"set_model":Y?.(A.request.model),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;case"set_max_thinking_tokens":J?.(A.request.max_thinking_tokens),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;case"set_permission_mode":{let z=G?.(A.request.mode)??{ok:!1,error:"set_permission_mode is not supported in this context (onSetPermissionMode callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"rename_session":{let z=U?.(A.request.title)??{ok:!1,error:"rename_session is not supported in this context (onRenameSession callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"set_color":{let z=F?.(A.request.color)??{ok:!1,error:"set_color is not supported in this context (onSetColor callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"file_suggestions":{if(!X){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"file_suggestions is not supported in this context (onFileSuggestions callback not registered)"}};break}X(A.request.query).then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{suggestions:z}}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for file_suggestions request_id=${A.request_id} result=${z.response.subtype}`)});return}case"read_file":{if(!W){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"read_file is not supported in this context (onReadFile callback not registered)"}};break}W(A.request.path,A.request.max_bytes,A.request.encoding).then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:z}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for read_file request_id=${A.request_id} result=${z.response.subtype}`)});return}case"get_context_usage":{if(!N){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"get_context_usage is not supported in this context (onGetContextUsage callback not registered)"}};break}N().then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{...z}}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for get_context_usage request_id=${A.request_id} result=${z.response.subtype}`)});return}case"mcp_status":j={type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{mcpServers:M?.()??[]}}};break;case"mcp_authenticate":case"mcp_oauth_callback_url":case"mcp_reconnect":{let z=A.request,{subtype:g,serverName:T}=z,S=z.subtype==="mcp_authenticate"?D&&((d)=>D(d,z.redirectUri)):z.subtype==="mcp_oauth_callback_url"?w&&((d)=>w(d,z.callbackUrl)):V;if(!S){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:`${g} is not supported in this context (callback not registered)`}};break}S(T).then((d)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:d??{}}})).catch((d)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(d)}})).then((d)=>{let r={...d,session_id:I};B.write(r),Z(`[bridge:repl] Sent control_response for ${g} request_id=${A.request_id} result=${d.response.subtype}`)});return}case"interrupt":C?.(),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;default:j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:`REPL bridge does not handle control_request subtype: ${A.request.subtype}`}}}let L={...j,session_id:I};B.write(L),Z(`[bridge:repl] Sent control_response for ${A.request.subtype} request_id=${A.request_id} result=${j.response.subtype}`)}function nR(A){return{type:"result",subtype:"success",duration_ms:0,duration_api_ms:0,is_error:!1,num_turns:0,result:"",stop_reason:null,total_cost_usd:0,usage:{...xCA},modelUsage:{},permission_denials:[],session_id:A,uuid:jcA()}}class jD{capacity;ring;set=new Set;writeIdx=0;constructor(A){this.capacity=A,this.ring=Array(A)}add(A){if(this.set.has(A))return;let Q=this.ring[this.writeIdx];if(Q!==void 0)this.set.delete(Q);this.ring[this.writeIdx]=A,this.set.add(A),this.writeIdx=(this.writeIdx+1)%this.capacity}has(A){return this.set.has(A)}clear(){this.set.clear(),this.ring.fill(void 0),this.writeIdx=0}}function PCA(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 oR{_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}}import{randomUUID as bCA}from"crypto";u0();eA();oE();RQ();IQ();function vcA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return mQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function TCA(A){let Q=vcA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}eA();oE();RQ();IQ();class aR{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?kCA(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async flush(){while(!this.closed)if(this.inflight)await this.inflight;else if(this.pending)await this.drain();else return}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 kB(this.retryDelay(B)),this.pending&&!this.closed)Q=kCA(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 kCA(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 ScA=20000,_cA=100;function yCA(A){let Q=SB(A);if(Q)return Q;if(A&&typeof A==="object"&&"name"in A&&typeof A.name==="string")return A.name;return}class RD extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var PcA=10,TcA=3;function kcA(){return{byMessage:new Map,scopeToMessage:new Map}}function OD(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function bcA(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(OD(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(OD(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(OD(E)),Y=C?Q.byMessage.get(C):void 0;if(!Y){B.push(E);break}let J=Y[E.event.index]??=[];if(J.push(E.event.delta.text),I.has(J))break;let G={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:""}}};I.set(J,G),B.push(G);break}default:B.push(E)}for(let[E,C]of I)C.event.delta.text=E.join("");return B}function ycA(A,Q){A.byMessage.delete(Q.message.id);let B=OD(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class rR{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=kcA();workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ScA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??k6,this.onDiagnostic=B?.onDiagnostic,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 aR({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 bJ({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 eU("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new bJ({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 eU("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new bJ({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 eU("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 RD("no_auth_headers");if(A===void 0){let G=process.env.CLAUDE_CODE_WORKER_EPOCH;A=G?parseInt(G,10):NaN}if(isNaN(A))throw new RD("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState(),I={ok:!1},E=new Set,C=3;for(let G=1;G<=C;G++){if(I=await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)"),I.ok||this.closed)break;if(I.reason)E.add(I.reason);if(this.onDiagnostic?.(`PUT /worker failed (${I.reason??"unknown"}) attempt=${G}/${C}, ${Math.round((Date.now()-Q)/1000)}s elapsed`),G<C){let U=Math.min(500*2**(G-1),30000)+Math.random()*500;await kB(U)}}if(!I.ok){if(!this.closed)a("error","cli_worker_init_put_retries_exhausted"),this.onDiagnostic?.(`PUT /worker retries exhausted: ${C} attempts over ${Math.round((Date.now()-Q)/1000)}s, errors=[${[...E].join(",")||"unknown"}]`);throw new RD("worker_register_failed")}this.currentState="idle",this.startHeartbeat(),wD(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),a("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:Y,durationMs:J}=await B;if(!this.closed)a("info","cli_worker_state_restored",{duration_ms:J,had_state:Y.external!==null||Y.internal!==null});return Y}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:{external:null,internal:null},durationMs:0};let B=await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state");return{metadata:{external:B?.worker?.external_metadata??null,internal:B?.worker?.internal_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,reason:"no_auth_headers"};let Y=`${this.sessionBaseUrl}${Q}`;try{let J=await fetch(Y,{method:A.toUpperCase(),headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()},body:LA(B),signal:AbortSignal.timeout(E),..._R({url:Y})});if(J.body?.cancel(),J.ok)return this.consecutiveAuthFailures=0,this.consecutiveNotFound=0,{ok:!0};if(J.status===409)this.handleEpochMismatch();if(J.status===404){if(this.consecutiveNotFound++,this.consecutiveNotFound>=TcA)Z(`CCRClient: ${this.consecutiveNotFound} consecutive 404s — session gone, exiting`,{level:"error"}),a("error","cli_worker_session_not_found"),this.onDiagnostic?.(`${this.consecutiveNotFound} consecutive 404s on ${Q} — session gone, exiting`),this.onEpochMismatch()}if(J.status===401||J.status===403){let G=H9(),U=G?TCA(G):null;if(U!==null&&U*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(U*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),a("error","cli_worker_token_expired_no_refresh"),this.onDiagnostic?.(`session_token expired (exp=${new Date(U*1000).toISOString()}) — no refresh delivered, exiting`),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=PcA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),a("error","cli_worker_auth_failures_exhausted"),this.onDiagnostic?.(`${this.consecutiveAuthFailures} consecutive auth failures (HTTP ${J.status}) with valid-looking token — exiting`),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${J.status}`,{level:"warn"}),a("warn","cli_worker_request_failed",{method:A,path:Q,status:J.status}),J.status===429){let G=J.headers.get("retry-after"),U=G?parseInt(G,10):NaN;if(!isNaN(U)&&U>=0)return{ok:!1,retryAfterMs:U*1000,reason:`http_${J.status}`}}return{ok:!1,reason:`http_${J.status}`}}catch(J){return Z(`CCRClient: ${I} failed: ${JA(J)}`,{level:"warn"}),a("warn","cli_worker_request_error",{method:A,path:Q,error_code:yCA(J)}),{ok:!1,reason:`fetch_failed:${yCA(J)}`}}}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,display_tool_name:Q.display_tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id,tool_use_id:Q.tool_use_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:fcA(A)})}reportInternalMetadata(A){this.workerState.enqueue({internal_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),a("error","cli_worker_epoch_mismatch"),this.onDiagnostic?.(`worker epoch mismatch (409), epoch=${this.workerEpoch} — superseded by a newer worker, exiting`),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(),_cA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")ycA(this.streamTextAccumulator,A);await this.eventUploader.enqueue(this.toClientEvent(A))}toClientEvent(A){let Q=A,B=Q.historical===!0;return{payload:{...Q,uuid:typeof Q.uuid==="string"?Q.uuid:bCA()},...B&&{historical:!0}}}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=bcA(A,this.streamTextAccumulator);await this.eventUploader.enqueue(Q.map((B)=>({payload:B,ephemeral:!0})))}async writeInternalEvent(A,Q,{isCompaction:B=!1,agentId:I,preservedEventIds:E}={}){let C={payload:{type:A,...Q,uuid:typeof Q.uuid==="string"?Q.uuid:bCA()},...B&&{is_compaction:!0},...I&&{session_agent_id:I},...E?.length&&{preserved_event_ids:E}};await this.internalEventUploader.enqueue(C)}flushInternalEvents(){return this.internalEventUploader.flush()}flushDeliveryAcks(){return this.deliveryUploader.flush()}async flush(){return await this.flushStreamEventBuffer(),this.eventUploader.flush()}async flushWorkerState(){return this.workerState.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{if(E=await fetch(A,{headers:{...Q,"anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()},signal:AbortSignal.timeout(30000),..._R({url:A})}),E.ok)return await E.json()}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${JA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await kB(Y)}continue}if(E.body?.cancel(),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 kB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),a("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){if(Q==="processing"){if(this.closed)return;if(this.pendingProcessingAcks.push(A)===1)queueMicrotask(()=>{let B=this.pendingProcessingAcks;if(this.pendingProcessingAcks=[],this.closed||B.length===0)return;this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:B.map((I)=>({event_id:I,status:"processing"}))},"processing ack")});return}this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),RW(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.pendingProcessingAcks=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}function fcA(A){let Q=A.post_turn_summary;if(!hcA(Q)||Q.status_category!=="blocked")return A;return{...A,post_turn_summary:{...Q,status_category:"need_input"}}}function hcA(A){return A!==null&&typeof A==="object"&&"status_category"in A&&typeof A.status_category==="string"}eA();oE();RQ();IQ();QB();var mcA={},ucA={};var ccA=!1;function fCA(A,Q,B){if(ccA)return;if(mcA[A]=Math.round(Q),B!==void 0)ucA[A]=Math.round(B)}var pcA=1000,lcA=30000,hCA=45000,icA=new Set([401,403,404]),gW=10,dcA=500,ncA=8000,ocA={stream:!0};function acA(){return!0}function rcA(A){let Q=[],B=0,I;while((I=A.indexOf(`
180
+ `;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>uEA){Z(`WebSocketTransport: ${Math.round(B/1000)}s tick gap detected — process was suspended, forcing reconnect`),a("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"}),a("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(I){Z(`WebSocketTransport: Ping failed: ${I}`,{level:"error"}),a("error","cli_websocket_ping_failed")}}},FuA)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),dA(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(YuA),this.lastActivityTime=Date.now(),Z("WebSocketTransport: Sent periodic keep_alive data frame")}catch(A){Z(`WebSocketTransport: Periodic keep_alive failed: ${A}`,{level:"error"}),a("error","cli_websocket_keepalive_failed")}},$uA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var XuA=100,NuA=15000,DuA=3000;class kR extends TR{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=VuA(A),this.uploader=new bJ({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:C,onBatchDropped:(J,G)=>{a("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}`),a("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(),XuA);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,DuA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=H9();if(!Q){Z("HybridTransport: No session token available for POST"),a("warn","cli_hybrid_post_no_token");return}let B={Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},I;try{I=await WB.post(this.postUrl,{events:A},{headers:B,validateStatus:()=>!0,timeout:NuA})}catch(E){throw Z(`HybridTransport: POST error: ${JA(E)}`),a("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`),a("warn","cli_hybrid_post_client_error",{status:I.status});return}throw Z(`HybridTransport: POST returned ${I.status} (retryable)`),a("warn","cli_hybrid_post_retryable_error",{status:I.status}),Error(`POST failed with ${I.status}`)}}function VuA(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}`}u0();QB();function pEA(){let{namespace:A,cluster:Q}=jx();return{...A&&{cooNamespace:A},...Q&&{cooCluster:Q}}}PG();import{chmod as h7Q,mkdir as m7Q,readdir as u7Q,readFile as ZuA,unlink as c7Q,writeFile as zuA}from"fs/promises";import{join as iEA}from"path";uI();u0();PG();eA();QB();RQ();A6();IQ();import{AsyncLocalStorage as wuA}from"async_hooks";var q7Q=new wuA;QB();var CKQ=k(()=>NC.object({pid:NC.number(),sessionId:NC.string(),cwd:NC.string().optional(),startedAt:NC.number(),version:NC.string().optional(),kind:NC.enum(["interactive","bg","daemon","daemon-worker"])}));function HuA(){return iEA(FE(),"sessions")}var lEA=Promise.resolve();async function LuA(A){let Q=iEA(HuA(),`${process.pid}.json`),B=lEA.then(async()=>{try{let I=mQ(await ZuA(Q,"utf8"));await zuA(Q,LA({...I,...A}))}catch(I){Z(`[concurrentSessions] updatePidFile failed: ${JA(I)}`)}});lEA=B,await B}async function dEA(A){await LuA({bridgeSessionId:A})}eA();oE();QB();RQ();function NB(A,Q){return Object.freeze({name:A,header:Q})}var quA=NB("claude_code","claude-code-20250219"),juA=NB("oauth_auth",kP),RuA=NB("interleaved_thinking","interleaved-thinking-2025-05-14"),OuA=NB("long_context","context-1m-2025-08-07"),xuA=NB("context_management","context-management-2025-06-27"),guA=NB("structured_outputs","structured-outputs-2025-12-15"),vuA=NB("web_search","web-search-2025-03-05"),SuA=NB("tool_search","advanced-tool-use-2025-11-20"),_uA=NB("tool_search","tool-search-tool-2025-10-19"),PuA=NB("effort","effort-2025-11-24"),TuA=NB("task_budgets","task-budgets-2026-03-13"),kuA=NB("prompt_caching_scope","prompt-caching-scope-2026-01-05"),buA=NB("extended_cache_ttl","extended-cache-ttl-2025-04-11"),yuA=NB("speed","fast-mode-2026-02-01"),fuA=NB("redact_thinking","redact-thinking-2026-02-12"),huA=null,muA=null,uuA=null,cuA=NB("advisor_tool","advisor-tool-2026-03-01"),puA=NB("cache_diagnosis","cache-diagnosis-2026-04-07"),luA=NB("context_hint","context-hint-2026-04-09"),iuA=NB("mcp_servers","mcp-servers-2025-12-04"),duA=NB("files_api","files-api-2025-04-14"),yR=NB("environments","environments-2025-11-01"),nuA=NB("ccr_byoc","ccr-byoc-2025-07-29"),ouA=null,auA=Object.freeze([quA,juA,RuA,OuA,xuA,guA,vuA,SuA,_uA,PuA,TuA,kuA,buA,yuA,fuA,huA,muA,uuA,cuA,puA,luA,iuA,duA,yR,nuA,ouA].filter((A)=>A!==null)),GKQ=new Map(auA.map((A)=>[A.header,A]));oC();cR();function kC(){return"claude-code/0.3.156"}function SY(){switch(process.env.CLAUDE_CODE_ENTRYPOINT){case"claude-vscode":return"claude_code_vscode";case"remote":case"remote_baku":case"remote_cowork":case"remote_desktop":case"remote_mobile":return"claude_code_remote";case"sdk-cli":case"sdk-ts":case"sdk-py":return"claude_code_sdk";case"mcp":return"claude_code_mcp";case"claude-code-github-action":return"claude_code_github_action";case"local-agent":return"claude_code_local_agent";case"claude_in_slack":return"claude_in_slack";case"cli":default:return"claude_code_cli"}}import{randomUUID as McA}from"crypto";function KCA(A,Q,B,I){if(!I)return{url:`${A}/v1/sessions/${Q}/events`,body:{events:B}};let E=xW(Q);return{url:`${A}/v1/code/sessions/${encodeURIComponent(E)}/events`,body:{events:B.map((C)=>({payload:typeof C.uuid==="string"&&C.uuid?C:{...C,uuid:McA()}}))}}}u0();eA();RQ();IQ();var ZCA=2000,KcA=["session_ingress_token","environment_secret","access_token","secret","token"],ZcA=new RegExp(`"(${KcA.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),zcA=16;function HcA(A){return A.replace(ZcA,(Q,B,I)=>{if(I.length<zcA)return`"${B}":"[REDACTED]"`;let E=`${I.slice(0,8)}...${I.slice(-4)}`;return`"${B}":"${E}"`})}function e4(A){let Q=typeof A==="string"?A:LA(A),B=HcA(Q);if(B.length<=ZCA)return B;return B.slice(0,ZCA)+`... (${B.length} chars)`}function zCA(A){let Q=JA(A);if(A&&typeof A==="object"&&"response"in A){let B=A.response;if(B?.data&&typeof B.data==="object"){let I=B.data,E=typeof I.message==="string"?I.message:typeof I.error==="object"&&I.error&&("message"in I.error)&&typeof I.error.message==="string"?I.error.message:void 0;if(E)return`${Q}: ${E}`}}return Q}function HCA(A){if(A&&typeof A==="object"&&"response"in A&&A.response&&typeof A.response.status==="number")return A.response.status;return}function iR(A,Q=Date.now()){if(!A)return;let B=Number(A);if(Number.isFinite(B)&&B>=0)return B*1000;let I=Date.parse(A);if(Number.isFinite(I)){let E=I-Q;return E>0?E:void 0}return}function LCA(A){if(!A||typeof A!=="object")return;if("retryAfterMs"in A&&typeof A.retryAfterMs==="number")return A.retryAfterMs;if("response"in A){let B=A.response?.headers?.["retry-after"];if(typeof B==="string")return iR(B)}return}function YG(A){if(!A||typeof A!=="object")return;if("message"in A&&typeof A.message==="string")return A.message;if("error"in A&&A.error!==null&&typeof A.error==="object"&&"message"in A.error&&typeof A.error.message==="string")return A.error.message;return}function qCA(A,Q,B){if(Q)Z(Q);rA("tengu_bridge_repl_skipped",{reason:A,...B!==void 0&&{v2:B}})}var LD="Remote Control is only available with claude.ai subscriptions. Please use `/login` to sign in with your claude.ai account.";var LcA=/^[a-zA-Z0-9_-]+$/;function TI(A,Q){if(!A||!LcA.test(A))throw Error(`Invalid ${Q}: contains unsafe characters`);return A}class YE extends Error{status;errorType;constructor(A,Q,B){super(A);this.name="BridgeFatalError",this.status=Q,this.errorType=B}}function RCA(A){function Q(J){A.onDebug?.(J)}let B=0,I=100;async function E(J){let G={Authorization:`Bearer ${J}`,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-beta":yR.header,"x-environment-runner-version":A.runnerVersion,"User-Agent":kC()},U=await A.getTrustedDeviceToken?.();if(U)G["X-Trusted-Device-Token"]=U;return G}function C(){let J=A.getAccessToken();if(!J)throw Error(LD);return J}async function Y(J,G){let U=C(),F=await J(U);if(F.status!==401)return F;if(!A.onAuth401)return Q(`[bridge:api] ${G}: 401 received, no refresh handler`),F;if(Q(`[bridge:api] ${G}: 401 received, attempting token refresh`),await A.onAuth401(U)){Q(`[bridge:api] ${G}: Token refreshed, retrying request`);let W=C(),N=await J(W);if(N.status!==401)return N;Q(`[bridge:api] ${G}: Retry after refresh also got 401`)}else Q(`[bridge:api] ${G}: Token refresh failed`);return F}return{async registerBridgeEnvironment(J){return pI("bridge_environment_register",async()=>{Q(`[bridge:api] POST /v1/environments/bridge bridgeId=${J.bridgeId}`);let G=await Y(async(U)=>WB.post(`${A.baseUrl}/v1/environments/bridge`,{machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:J.gitRepoUrl,max_sessions:J.maxSessions,metadata:{worker_type:J.workerType},...J.reuseEnvironmentId&&{environment_id:J.reuseEnvironmentId}},{headers:await E(U),timeout:15000,validateStatus:(F)=>F<500}),"Registration");return x0(G.status,G.data,"Registration"),Q(`[bridge:api] POST /v1/environments/bridge -> ${G.status} environment_id=${G.data.environment_id}`),Q(`[bridge:api] >>> ${e4({machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:wCA(J.gitRepoUrl),max_sessions:J.maxSessions,metadata:{worker_type:J.workerType}})}`),Q(`[bridge:api] <<< ${e4(G.data)}`),G.data},jCA)},async pollForWork(J,G,U,F){TI(J,"environmentId");let X=B;B=0;let W=await WB.get(`${A.baseUrl}/v1/environments/${J}/work/poll`,{headers:await E(G),params:F!==void 0?{reclaim_older_than_ms:F}:void 0,timeout:1e4,signal:U,validateStatus:(N)=>N<500});if(x0(W.status,W.data,"Poll",W.headers),!W.data){if(B=X+1,B===1||B%I===0)Q(`[bridge:api] GET .../work/poll -> ${W.status} (no work, ${B} consecutive empty polls)`);return null}return Q(`[bridge:api] GET .../work/poll -> ${W.status} workId=${W.data.id} type=${W.data.data?.type}${W.data.data?.id?` sessionId=${W.data.data.id}`:""}`),Q(`[bridge:api] <<< ${e4(W.data)}`),W.data},async acknowledgeWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/ack`);let F=await WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/ack`,{},{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});x0(F.status,F.data,"Acknowledge"),Q(`[bridge:api] POST .../work/${G}/ack -> ${F.status}`)},async stopWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/stop force=${U}`);let F=await Y(async(X)=>WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/stop`,{force:U},{headers:await E(X),timeout:1e4,validateStatus:(W)=>W<500}),"StopWork");x0(F.status,F.data,"StopWork"),Q(`[bridge:api] POST .../work/${G}/stop -> ${F.status}`)},async deregisterEnvironment(J){TI(J,"environmentId"),Q(`[bridge:api] DELETE /v1/environments/bridge/${J}`);let G=await Y(async(U)=>WB.delete(`${A.baseUrl}/v1/environments/bridge/${J}`,{headers:await E(U),timeout:1e4,validateStatus:(F)=>F<500}),"Deregister");x0(G.status,G.data,"Deregister"),Q(`[bridge:api] DELETE /v1/environments/bridge/${J} -> ${G.status}`)},async archiveSession(J){TI(J,"sessionId"),Q(`[bridge:api] POST /v1/sessions/${J}/archive`);let G=await Y(async(U)=>WB.post(`${A.baseUrl}/v1/sessions/${J}/archive`,{},{headers:await E(U),timeout:1e4,validateStatus:(F)=>F<500}),"ArchiveSession");if(G.status===409){Q(`[bridge:api] POST /v1/sessions/${J}/archive -> 409 (already archived)`);return}x0(G.status,G.data,"ArchiveSession"),Q(`[bridge:api] POST /v1/sessions/${J}/archive -> ${G.status}`)},async reconnectSession(J,G){return pI("bridge_session_reconnect",async()=>{TI(J,"environmentId"),TI(G,"sessionId"),Q(`[bridge:api] POST /v1/environments/${J}/bridge/reconnect session_id=${G}`);let U=await Y(async(F)=>WB.post(`${A.baseUrl}/v1/environments/${J}/bridge/reconnect`,{session_id:G},{headers:await E(F),timeout:1e4,validateStatus:(X)=>X<500}),"ReconnectSession");x0(U.status,U.data,"ReconnectSession"),Q(`[bridge:api] POST .../bridge/reconnect -> ${U.status}`)},jCA)},async heartbeatWork(J,G,U){TI(J,"environmentId"),TI(G,"workId"),Q(`[bridge:api] POST .../work/${G}/heartbeat`);let F=await WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/heartbeat`,{},{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});return x0(F.status,F.data,"Heartbeat"),Q(`[bridge:api] POST .../work/${G}/heartbeat -> ${F.status} lease_extended=${F.data.lease_extended} state=${F.data.state}`),F.data},async sendPermissionResponseEvent(J,G,U){TI(J,"sessionId");let{url:F,body:X}=KCA(A.baseUrl,J,[G],A.useCcrV2Routing?.()??!1);Q(`[bridge:api] POST ${F} type=${G.type}`);let W=await WB.post(F,X,{headers:await E(U),timeout:1e4,validateStatus:(N)=>N<500});x0(W.status,W.data,"SendPermissionResponseEvent"),Q(`[bridge:api] POST ${F} -> ${W.status}`),Q(`[bridge:api] >>> ${e4(X)}`),Q(`[bridge:api] <<< ${e4(W.data)}`)}}}function x0(A,Q,B,I){if(A===200||A===204)return;let E=YG(Q),C=qcA(Q);switch(A){case 401:throw new YE(`${B}: Authentication failed (401)${E?`: ${E}`:""}. ${LD}`,401,C);case 403:throw new YE(qD(C)?"Remote Control session expired.":`${B}: Access denied (403)${E?`: ${E}`:""}. Check your organization permissions.`,403,C);case 404:throw new YE(E??`${B}: Not found (404). Remote Control may not be available for this organization.`,404,C);case 410:throw new YE(E??"Remote Control session expired.",410,C??"environment_expired");case 429:{let Y=iR(typeof I?.["retry-after"]==="string"?I["retry-after"]:void 0);throw Object.assign(Error(`${B}: Rate limited (429). Polling too frequently.`),Y!==void 0?{status:A,retryAfterMs:Y}:{status:A})}default:throw Object.assign(Error(`${B}: Failed with status ${A}${E?`: ${E}`:""}`),{status:A})}}function qD(A){if(!A)return!1;return A.includes("expired")||A.includes("lifetime")}function OCA(A){if(A.status!==403)return!1;return A.message.includes("external_poll_sessions")||A.message.includes("environments:manage")}function jCA(A){if(A instanceof YE)return A.status===401?"auth_failed":"http_error";if(A instanceof Error){if(A.message===LD)return"no_token";if("status"in A&&typeof A.status==="number")return"http_error"}return"request_failed"}function qcA(A){if(A&&typeof A==="object"){if("error"in A&&A.error&&typeof A.error==="object"&&"type"in A.error&&typeof A.error.type==="string")return A.error.type}return}eA();import{randomUUID as jcA}from"crypto";oC();u0();var xCA={input_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0,output_tokens:0,server_tool_use:{web_search_requests:0,web_fetch_requests:0},service_tier:"standard",cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},inference_geo:"",iterations:[],speed:"standard"};function gCA(A){if(A===null||typeof A!=="object")return A;let Q=A;if("requestId"in Q&&!("request_id"in Q))Q.request_id=Q.requestId,delete Q.requestId;if("response"in Q&&Q.response!==null&&typeof Q.response==="object"){let B=Q.response;if("requestId"in B&&!("request_id"in B))B.request_id=B.requestId,delete B.requestId}return A}eA();az();RQ();IQ();function RcA(A){return A!==null&&typeof A==="object"&&"type"in A&&typeof A.type==="string"}function OcA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_response"&&"response"in A}function xcA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_request"&&"request_id"in A&&"request"in A}function dR(A){if((A.type==="user"||A.type==="assistant")&&A.isVirtual)return!1;return A.type==="user"||A.type==="assistant"||A.type==="system"&&A.subtype==="local_command"}function vCA(A){if(A.type!=="user"||A.isMeta||A.toolUseResult||A.isCompactSummary)return;if(A.origin&&A.origin.kind!=="human")return;let Q=A.message.content,B;if(typeof Q==="string")B=Q;else for(let E of Q)if(E.type==="text"){B=E.text;break}if(!B)return;return oz(B)||void 0}function SCA(A,Q,B,I,E,C){try{let Y=gCA(mQ(A));if(OcA(Y)){Z("[bridge:repl] Ingress message type=control_response"),E?.(Y);return}if(xcA(Y)){Z(`[bridge:repl] Inbound control_request subtype=${Y.request.subtype}`),C?.(Y);return}if(!RcA(Y))return;let J="uuid"in Y&&typeof Y.uuid==="string"?Y.uuid:void 0;if(J&&Q.has(J)){Z(`[bridge:repl] Ignoring echo: type=${Y.type} uuid=${J}`);return}if(J&&B.has(J)){Z(`[bridge:repl] Ignoring re-delivered inbound: type=${Y.type} uuid=${J}`);return}if(Z(`[bridge:repl] Ingress message type=${Y.type}${J?` uuid=${J}`:""}`),Y.type==="user"){if(J)B.add(J);rA("tengu_bridge_message_received",{is_repl:!0}),cI("bridge_message_receive"),I?.(Y)}else Z(`[bridge:repl] Ignoring non-user inbound message: type=${Y.type}`)}catch(Y){Z(`[bridge:repl] Failed to parse ingress message: ${JA(Y)}`),tB("bridge_message_receive","bridge_message_receive_parse_failed")}}var gcA="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function _CA(A,Q){let{transport:B,sessionId:I,outboundOnly:E,onInterrupt:C,onSetModel:Y,onSetMaxThinkingTokens:J,onSetPermissionMode:G,onRenameSession:U,onSetColor:F,onFileSuggestions:X,onReadFile:W,onGetContextUsage:N,onMcpAuthenticate:D,onMcpOauthCallbackUrl:w,onMcpReconnect:V,onMcpStatus:M}=Q;if(!B){Z("[bridge:repl] Cannot respond to control_request: transport not configured");return}let j;if(E&&A.request.subtype!=="initialize"){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:gcA}};let z={...j,session_id:I};B.write(z),Z(`[bridge:repl] Rejected ${A.request.subtype} (outbound-only) request_id=${A.request_id}`);return}switch(A.request.subtype){case"initialize":j={type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{commands:[],output_style:"normal",available_output_styles:["normal"],models:[],account:{},pid:process.pid}}};break;case"set_model":Y?.(A.request.model),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;case"set_max_thinking_tokens":J?.(A.request.max_thinking_tokens),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;case"set_permission_mode":{let z=G?.(A.request.mode)??{ok:!1,error:"set_permission_mode is not supported in this context (onSetPermissionMode callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"rename_session":{let z=U?.(A.request.title)??{ok:!1,error:"rename_session is not supported in this context (onRenameSession callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"set_color":{let z=F?.(A.request.color)??{ok:!1,error:"set_color is not supported in this context (onSetColor callback not registered)"};if(z.ok)j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};else j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:z.error}};break}case"file_suggestions":{if(!X){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"file_suggestions is not supported in this context (onFileSuggestions callback not registered)"}};break}X(A.request.query).then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{suggestions:z}}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for file_suggestions request_id=${A.request_id} result=${z.response.subtype}`)});return}case"read_file":{if(!W){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"read_file is not supported in this context (onReadFile callback not registered)"}};break}W(A.request.path,A.request.max_bytes,A.request.encoding).then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:z}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for read_file request_id=${A.request_id} result=${z.response.subtype}`)});return}case"get_context_usage":{if(!N){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:"get_context_usage is not supported in this context (onGetContextUsage callback not registered)"}};break}N().then((z)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{...z}}})).catch((z)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(z)}})).then((z)=>{let g={...z,session_id:I};B.write(g),Z(`[bridge:repl] Sent control_response for get_context_usage request_id=${A.request_id} result=${z.response.subtype}`)});return}case"mcp_status":j={type:"control_response",response:{subtype:"success",request_id:A.request_id,response:{mcpServers:M?.()??[]}}};break;case"mcp_authenticate":case"mcp_oauth_callback_url":case"mcp_reconnect":{let z=A.request,{subtype:g,serverName:T}=z,S=z.subtype==="mcp_authenticate"?D&&((d)=>D(d,z.redirectUri)):z.subtype==="mcp_oauth_callback_url"?w&&((d)=>w(d,z.callbackUrl)):V;if(!S){j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:`${g} is not supported in this context (callback not registered)`}};break}S(T).then((d)=>({type:"control_response",response:{subtype:"success",request_id:A.request_id,response:d??{}}})).catch((d)=>({type:"control_response",response:{subtype:"error",request_id:A.request_id,error:JA(d)}})).then((d)=>{let r={...d,session_id:I};B.write(r),Z(`[bridge:repl] Sent control_response for ${g} request_id=${A.request_id} result=${d.response.subtype}`)});return}case"interrupt":C?.(),j={type:"control_response",response:{subtype:"success",request_id:A.request_id}};break;default:j={type:"control_response",response:{subtype:"error",request_id:A.request_id,error:`REPL bridge does not handle control_request subtype: ${A.request.subtype}`}}}let L={...j,session_id:I};B.write(L),Z(`[bridge:repl] Sent control_response for ${A.request.subtype} request_id=${A.request_id} result=${j.response.subtype}`)}function nR(A){return{type:"result",subtype:"success",duration_ms:0,duration_api_ms:0,is_error:!1,num_turns:0,result:"",stop_reason:null,total_cost_usd:0,usage:{...xCA},modelUsage:{},permission_denials:[],session_id:A,uuid:jcA()}}class jD{capacity;ring;set=new Set;writeIdx=0;constructor(A){this.capacity=A,this.ring=Array(A)}add(A){if(this.set.has(A))return;let Q=this.ring[this.writeIdx];if(Q!==void 0)this.set.delete(Q);this.ring[this.writeIdx]=A,this.set.add(A),this.writeIdx=(this.writeIdx+1)%this.capacity}has(A){return this.set.has(A)}clear(){this.set.clear(),this.ring.fill(void 0),this.writeIdx=0}}function PCA(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 oR{_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}}import{randomUUID as bCA}from"crypto";u0();eA();oE();RQ();IQ();function vcA(A){let B=(A.startsWith("sk-ant-si-")?A.slice(10):A).split(".");if(B.length!==3||!B[1])return null;try{return mQ(Buffer.from(B[1],"base64url").toString("utf8"))}catch{return null}}function TCA(A){let Q=vcA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}eA();oE();RQ();IQ();class aR{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?kCA(this.pending,A):A,this.drain()}close(){this.closed=!0,this.pending=null}async flush(){while(!this.closed)if(this.inflight)await this.inflight;else if(this.pending)await this.drain();else return}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 kB(this.retryDelay(B)),this.pending&&!this.closed)Q=kCA(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 kCA(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 ScA=20000,_cA=100;function yCA(A){let Q=SB(A);if(Q)return Q;if(A&&typeof A==="object"&&"name"in A&&typeof A.name==="string")return A.name;return}class RD extends Error{reason;constructor(A){super(`CCRClient init failed: ${A}`);this.reason=A}}var PcA=10,TcA=3;function kcA(){return{byMessage:new Map,scopeToMessage:new Map}}function OD(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function bcA(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(OD(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(OD(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(OD(E)),Y=C?Q.byMessage.get(C):void 0;if(!Y){B.push(E);break}let J=Y[E.event.index]??=[];if(J.push(E.event.delta.text),I.has(J))break;let G={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:""}}};I.set(J,G),B.push(G);break}default:B.push(E)}for(let[E,C]of I)C.event.delta.text=E.join("");return B}function ycA(A,Q){A.byMessage.delete(Q.message.id);let B=OD(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class rR{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=kcA();workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ScA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??k6,this.onDiagnostic=B?.onDiagnostic,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 aR({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 bJ({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 eU("client event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new bJ({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 eU("internal event POST failed",C.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new bJ({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 eU("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 RD("no_auth_headers");if(A===void 0){let G=process.env.CLAUDE_CODE_WORKER_EPOCH;A=G?parseInt(G,10):NaN}if(isNaN(A))throw new RD("missing_epoch");this.workerEpoch=A;let B=this.getWorkerState(),I={ok:!1},E=new Set,C=3;for(let G=1;G<=C;G++){if(I=await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)"),I.ok||this.closed)break;if(I.reason)E.add(I.reason);if(this.onDiagnostic?.(`PUT /worker failed (${I.reason??"unknown"}) attempt=${G}/${C}, ${Math.round((Date.now()-Q)/1000)}s elapsed`),G<C){let U=Math.min(500*2**(G-1),30000)+Math.random()*500;await kB(U)}}if(!I.ok){if(!this.closed)a("error","cli_worker_init_put_retries_exhausted"),this.onDiagnostic?.(`PUT /worker retries exhausted: ${C} attempts over ${Math.round((Date.now()-Q)/1000)}s, errors=[${[...E].join(",")||"unknown"}]`);throw new RD("worker_register_failed")}this.currentState="idle",this.startHeartbeat(),wD(()=>{this.writeEvent({type:"keep_alive"})}),Z(`CCRClient: initialized, epoch=${this.workerEpoch}`),a("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-Q});let{metadata:Y,durationMs:J}=await B;if(!this.closed)a("info","cli_worker_state_restored",{duration_ms:J,had_state:Y.external!==null||Y.internal!==null});return Y}async getWorkerState(){let A=Date.now(),Q=this.getAuthHeaders();if(Object.keys(Q).length===0)return{metadata:{external:null,internal:null},durationMs:0};let B=await this.getWithRetry(`${this.sessionBaseUrl}/worker`,Q,"worker_state");return{metadata:{external:B?.worker?.external_metadata??null,internal:B?.worker?.internal_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,reason:"no_auth_headers"};let Y=`${this.sessionBaseUrl}${Q}`;try{let J=await fetch(Y,{method:A.toUpperCase(),headers:{...C,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()},body:LA(B),signal:AbortSignal.timeout(E),..._R({url:Y})});if(J.body?.cancel(),J.ok)return this.consecutiveAuthFailures=0,this.consecutiveNotFound=0,{ok:!0};if(J.status===409)this.handleEpochMismatch();if(J.status===404){if(this.consecutiveNotFound++,this.consecutiveNotFound>=TcA)Z(`CCRClient: ${this.consecutiveNotFound} consecutive 404s — session gone, exiting`,{level:"error"}),a("error","cli_worker_session_not_found"),this.onDiagnostic?.(`${this.consecutiveNotFound} consecutive 404s on ${Q} — session gone, exiting`),this.onEpochMismatch()}if(J.status===401||J.status===403){let G=H9(),U=G?TCA(G):null;if(U!==null&&U*1000<Date.now())Z(`CCRClient: session_token expired (exp=${new Date(U*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),a("error","cli_worker_token_expired_no_refresh"),this.onDiagnostic?.(`session_token expired (exp=${new Date(U*1000).toISOString()}) — no refresh delivered, exiting`),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=PcA)Z(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),a("error","cli_worker_auth_failures_exhausted"),this.onDiagnostic?.(`${this.consecutiveAuthFailures} consecutive auth failures (HTTP ${J.status}) with valid-looking token — exiting`),this.onEpochMismatch()}if(Z(`CCRClient: ${I} returned ${J.status}`,{level:"warn"}),a("warn","cli_worker_request_failed",{method:A,path:Q,status:J.status}),J.status===429){let G=J.headers.get("retry-after"),U=G?parseInt(G,10):NaN;if(!isNaN(U)&&U>=0)return{ok:!1,retryAfterMs:U*1000,reason:`http_${J.status}`}}return{ok:!1,reason:`http_${J.status}`}}catch(J){return Z(`CCRClient: ${I} failed: ${JA(J)}`,{level:"warn"}),a("warn","cli_worker_request_error",{method:A,path:Q,error_code:yCA(J)}),{ok:!1,reason:`fetch_failed:${yCA(J)}`}}}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,display_tool_name:Q.display_tool_name,action_description:Q.action_description,raw_command:Q.raw_command,request_id:Q.request_id,tool_use_id:Q.tool_use_id}:null})}reportMetadata(A){this.workerState.enqueue({external_metadata:fcA(A)})}reportInternalMetadata(A){this.workerState.enqueue({internal_metadata:A})}handleEpochMismatch(){Z("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),a("error","cli_worker_epoch_mismatch"),this.onDiagnostic?.(`worker epoch mismatch (409), epoch=${this.workerEpoch} — superseded by a newer worker, exiting`),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(),_cA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")ycA(this.streamTextAccumulator,A);await this.eventUploader.enqueue(this.toClientEvent(A))}toClientEvent(A){let Q=A,B=Q.historical===!0;return{payload:{...Q,uuid:typeof Q.uuid==="string"?Q.uuid:bCA()},...B&&{historical:!0}}}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=bcA(A,this.streamTextAccumulator);await this.eventUploader.enqueue(Q.map((B)=>({payload:B,ephemeral:!0})))}async writeInternalEvent(A,Q,{isCompaction:B=!1,agentId:I,preservedEventIds:E}={}){let C={payload:{type:A,...Q,uuid:typeof Q.uuid==="string"?Q.uuid:bCA()},...B&&{is_compaction:!0},...I&&{session_agent_id:I},...E?.length&&{preserved_event_ids:E}};await this.internalEventUploader.enqueue(C)}flushInternalEvents(){return this.internalEventUploader.flush()}flushDeliveryAcks(){return this.deliveryUploader.flush()}async flush(){return await this.flushStreamEventBuffer(),this.eventUploader.flush()}async flushWorkerState(){return this.workerState.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{if(E=await fetch(A,{headers:{...Q,"anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()},signal:AbortSignal.timeout(30000),..._R({url:A})}),E.ok)return await E.json()}catch(C){if(Z(`CCRClient: GET ${A} failed (attempt ${I}/10): ${JA(C)}`,{level:"warn"}),I<10){let Y=Math.min(500*2**(I-1),30000)+Math.random()*500;await kB(Y)}continue}if(E.body?.cancel(),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 kB(C)}}return Z("CCRClient: GET retries exhausted",{level:"error"}),a("error","cli_worker_get_retries_exhausted",{context:B}),null}reportDelivery(A,Q){if(Q==="processing"){if(this.closed)return;if(this.pendingProcessingAcks.push(A)===1)queueMicrotask(()=>{let B=this.pendingProcessingAcks;if(this.pendingProcessingAcks=[],this.closed||B.length===0)return;this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:B.map((I)=>({event_id:I,status:"processing"}))},"processing ack")});return}this.deliveryUploader.enqueue({eventId:A,status:Q})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),RW(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.pendingProcessingAcks=[],this.streamTextAccumulator.byMessage.clear(),this.streamTextAccumulator.scopeToMessage.clear(),this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}function fcA(A){let Q=A.post_turn_summary;if(!hcA(Q)||Q.status_category!=="blocked")return A;return{...A,post_turn_summary:{...Q,status_category:"need_input"}}}function hcA(A){return A!==null&&typeof A==="object"&&"status_category"in A&&typeof A.status_category==="string"}eA();oE();RQ();IQ();QB();var mcA={},ucA={};var ccA=!1;function fCA(A,Q,B){if(ccA)return;if(mcA[A]=Math.round(Q),B!==void 0)ucA[A]=Math.round(B)}var pcA=1000,lcA=30000,hCA=45000,icA=new Set([401,403,404]),gW=10,dcA=500,ncA=8000,ocA={stream:!0};function acA(){return!0}function rcA(A){let Q=[],B=0,I;while((I=A.indexOf(`
181
181
 
182
182
  `,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(`
183
183
  `)){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+`
@@ -187,4 +187,4 @@ ${E}`;break;case"retry":if(wEA(E))Q[I]=E;break;case"id":if(MEA(E))Q[I]=E;break;c
187
187
  `);if(I.push(J),!G){E=J.endsWith(`
188
188
  `);continue}let{frames:U,remaining:F}=rcA(I.join(""));I=F?[F]:[],E=F.endsWith(`
189
189
  `);for(let X of U){if(this.resetLivenessTimer(),X.id){let W=parseInt(X.id,10);if(!isNaN(W)){if(this.seenSequenceNums.has(W))Z(`SSETransport: DUPLICATE frame seq=${W} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),a("warn","cli_sse_duplicate_sequence");else if(this.seenSequenceNums.add(W),this.seenSequenceNums.size>1000){let N=this.lastSequenceNum-200;for(let D of this.seenSequenceNums)if(D<N)this.seenSequenceNums.delete(D)}if(W>this.lastSequenceNum)this.lastSequenceNum=W}}if(X.event&&X.data)this.handleSSEFrame(X.event,X.data);else if(X.data)Z("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),a("warn","cli_sse_frame_missing_event_field")}}}catch(C){if(this.abortController?.signal.aborted)return;Z(`SSETransport: Stream read error: ${JA(C)}`,{level:"error"}),a("error","cli_sse_stream_read_error")}finally{Q.releaseLock()}if(this.state!=="closing"&&this.state!=="closed"){if(Z("SSETransport: Stream ended, reconnecting"),this.state==="connected")this.connectErrorsSeen.add("stream_ended"),this.onDiagnostic?.("SSE stream ended by server, reconnecting");this.handleConnectionError()}}handleSSEFrame(A,Q){if(A!=="client_event"){Z(`SSETransport: Unexpected SSE event type '${A}' on worker stream`,{level:"warn"}),a("warn","cli_sse_unexpected_event_type",{event_type:A});return}let B;try{B=mQ(Q)}catch(E){Z(`SSETransport: Failed to parse client_event data: ${JA(E)}`,{level:"error"});return}let I=B.payload;if(I&&typeof I==="object"&&"type"in I){let E=this.sessionId?` session=${this.sessionId}`:"",C=B.device_attestation_status?` attestation=${B.device_attestation_status}`:"";if(Z(`SSETransport: Event seq=${B.sequence_num} event_id=${B.event_id} event_type=${B.event_type} payload_type=${String(I.type)}${C}${E}`),a("info","cli_sse_message_received"),this.eventFilter?.(B))a("warn","cli_sse_event_filtered");else this.onData?.(LA(I)+`
190
- `)}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(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(pcA*Math.pow(2,this.reconnectAttempts-1),lcA),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)`),a("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),a("error","cli_sse_liveness_timeout"),this.connectErrorsSeen.add("liveness_timeout"),this.onDiagnostic?.(`SSE liveness timeout — no frame in ${hCA/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,hCA)}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"),a("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=gW;I++){try{let C=await WB.post(this.postUrl,A,{headers:B,validateStatus:acA});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`),a("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${gW}`),a("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${gW}`),a("warn","cli_sse_post_network_error",{attempt:I})}if(I===gW){Z(`SSETransport: POST failed after ${gW} attempts, continuing`),a("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(dcA*Math.pow(2,I-1),ncA);await kB(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}setOnDiagnostic(A){this.onDiagnostic=A}setEventFilter(A){this.eventFilter=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}[Symbol.dispose](){this.close()}}function scA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}eA();RQ();nI();oC();eA();RQ();var mCA="DEVICE_ATTESTATION_STATUS_",uCA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function tcA(A){if(A===void 0||A===null)return"UNSPECIFIED";if(typeof A==="number")return uCA[A]??"UNSPECIFIED";if(typeof A!=="string")return"UNSPECIFIED";let Q=A.startsWith(mCA)?A.slice(mCA.length):A;if(uCA.includes(Q))return Q;return"UNSPECIFIED"}function ecA(A){return A==="VERIFIED"||A==="VERIFIED_BY_GATE"}var ApA={enforce:!1,acceptStatuses:new Set},QpA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"],SzQ=k(()=>$.object({accept_statuses:$.array($.enum(QpA)).default([])}));var BpA;var IpA;function cCA(A){let Q=typeof A.payload?.type==="string"?A.payload.type:A.event_type,B=Q==="user"||Q==="control_response",I=tcA(A.device_attestation_status);if(ecA(I)){if(B)cI("bridge_event_attestation");return!1}let E=BpA?.()??ApA;if(!E.enforce){if(I==="UNSPECIFIED")return!1;if(B)Z(`[bridge:attestation] accepting unverified ${Q} event_id=${A.event_id} status=${I}`,{level:"info"}),c0("bridge_event_attestation",`${I.toLowerCase()}_${Q}`);return!1}let C=E.acceptStatuses.has(I);if(B){let Y=`${I.toLowerCase()}_${Q}`;if(Z(`[bridge:attestation] ${C?"accepting (config exception)":"DROPPING"} unverified ${Q} event_id=${A.event_id} status=${I}`,{level:C?"info":"warn"}),C)c0("bridge_event_attestation",Y);else{tB("bridge_event_attestation",Y);try{IpA?.({status:I,payloadType:Q})}catch(J){Z(`[bridge:attestation] drop notifier threw: ${JA(J)}`,{level:"error"})}}}return!C}IQ();function pCA(A){let Q=Buffer.from(A,"base64url").toString("utf-8"),B=mQ(Q);if(!B||typeof B!=="object"||!("version"in B)||B.version!==1)throw Error(`Unsupported work secret version: ${B&&typeof B==="object"&&"version"in B?B.version:"unknown"}`);let I=B;if(typeof I.session_ingress_token!=="string"||I.session_ingress_token.length===0)throw Error("Invalid work secret: missing or empty session_ingress_token");if(typeof I.api_base_url!=="string")throw Error("Invalid work secret: missing api_base_url");return B}function lCA(A,Q){let B=A.includes("localhost")||A.includes("127.0.0.1"),I=B?"ws":"wss",E=B?"v2":"v1",C=A.replace(/^https?:\/\//,"").replace(/\/+$/,"");return`${I}://${C}/${E}/session_ingress/ws/${Q}`}function tR(A,Q){if(A===Q)return!0;let B=A.slice(A.lastIndexOf("_")+1),I=Q.slice(Q.lastIndexOf("_")+1);return B.length>=4&&B===I}function iCA(A,Q){return`${A.replace(/\/+$/,"")}/v1/code/sessions/${Q}`}async function dCA(A,Q){let B=await WB.post(`${A}/worker/register`,{},{headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json","anthropic-version":"2023-06-01"},timeout:1e4}),I=B.data?.worker_epoch,E=typeof I==="string"?Number(I):I;if(typeof E!=="number"||!Number.isFinite(E)||!Number.isSafeInteger(E))throw Error(`registerWorker: invalid worker_epoch in response: ${LA(B.data)}`);return E}function nCA(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 oCA(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let w=C();if(!w)return{};return{Authorization:`Bearer ${w}`}};else L9(B);let J=A.epoch??await dCA(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 sR(G,{},I,void 0,E,Y),F,X=new rR(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{X.close(),U.close(),F?.(4090)}catch(w){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{X.reportDelivery(w.event_id,"received"),X.reportDelivery(w.event_id,"processed")}),U.setEventFilter(cCA);let W,N=!1,D=!1;return{write(w){return X.writeEvent(w)},async writeBatch(w){for(let V of w){if(D)break;await X.writeEvent(V)}},close(){D=!0,X.close(),U.close()},isConnectedStatus(){return N},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return N?"connected":"init";return"connecting"},setOnData(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{X.close(),w(V??4092)})},setOnConnect(w){W=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w,V){X.reportState(w,V)},reportMetadata(w){X.reportMetadata(w)},reportDelivery(w,V){X.reportDelivery(w,V)},flush(){return X.flush()},getInternalEventWriter(){return(w,V,M)=>X.writeInternalEvent(w,V,M)},getInternalEventReaders(){return{readMain:()=>X.readInternalEvents(),readSubagents:()=>X.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();X.initialize(J).then(()=>{N=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),W?.()},(w)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${JA(w)}`,{level:"error"}),X.close(),U.close(),F?.(4091)})}}}oC();eA();RQ();var EpA="2023-06-01",CpA="ccr-byoc-2025-07-29";async function aCA({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`,X;try{X=await WB.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:vD(U,J),signal:I,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] Session creation request failed: ${JA(N)}`),null}if(X.status!==200&&X.status!==201){let N=YG(X.data);return Z(`[bridge] Session creation failed with status ${X.status}${N?`: ${N}`:""}`),null}let W=X.data;if(!W||typeof W!=="object"||!("id"in W)||typeof W.id!=="string")return Z("[bridge] No session ID in response"),null;return W.id}async function rCA(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 WB.post(Y,{},{headers:vD(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=YG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${JA(J)}`)}}async function xD(A,Q,B,I,E,C){let Y=A==="subscribe"?"bridge_pr_subscribe":"bridge_pr_unsubscribe",J=C();if(!J)return Z(`[bridge] No access token for ${A}-pr`),tB(Y,"no_token"),!1;let G=`${E}/v1/code/github/${A}-pr`,U={session_id:t4(Q),repo:B,pr_number:I},F;try{F=await WB.post(G,U,{headers:vD(J),timeout:1e4,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] ${A}-pr request failed: ${JA(W)}`),tB(Y,"request_failed"),!1}if(!(F.status>=200&&F.status<300||F.status===409)){let W=YG(F.data);return Z(`[bridge] ${A}-pr failed ${F.status}${W?`: ${W}`:""}`),tB(Y,"http_error"),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),cI(Y),!0}async function gD(A,Q,B,I,E,C){let Y=A==="subscribe"?"bridge_slack_subscribe":"bridge_slack_unsubscribe",J=C();if(!J)return Z(`[bridge] No access token for ${A}-thread`),tB(Y,"no_token"),!1;let G=`${E}/v1/code/slack/${A}-thread`,U={session_id:t4(Q),channel:B,thread_ts:I},F;try{F=await WB.post(G,U,{headers:vD(J),timeout:1e4,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] ${A}-thread request failed: ${JA(W)}`),tB(Y,"request_failed"),!1}if(!(F.status>=200&&F.status<300||F.status===409)){let W=YG(F.data);return Z(`[bridge] ${A}-thread failed ${F.status}${W?`: ${W}`:""}`),tB(Y,"http_error"),!1}return Z(`[bridge] ${A}-thread ${B}/${I} ok`),cI(Y),!0}function vD(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":EpA,"anthropic-beta":CpA,"anthropic-client-platform":SY(),"User-Agent":kC()};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}var C0A=2000,B0A=60000,I0A=900000,wpA=300000,E0A=3;function Y0A(A){return A*(0.8+Math.random()*0.4)}var MpA=0;async function J0A(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:X,archiveSession:W,getCurrentTitle:N=()=>Y,toSDKMessages:D=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:w,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>A9,initialHistoryCap:j=200,initialMessages:L,previouslyFlushedUUIDs:z,onInboundMessage:g,onPermissionResponse:T,onInterrupt:S,onSetModel:d,onSetMaxThinkingTokens:r,onSetPermissionMode:wA,onRenameSession:iA,onSetColor:DA,onFileSuggestions:BA,onReadFile:PA,onMcpAuthenticate:HQ,onMcpOauthCallbackUrl:b,onMcpReconnect:wQ,onMcpStatus:YA,onStateChange:$A,onUserMessage:yQ,onSessionEstablished:LQ,onInitError:AA,perpetual:f,initialSSESequenceNum:WA=0,onTransportPersistenceReady:mA,onTransportPersistenceTeardown:bA}=A,KB=++MpA,{writeBridgePointer:iQ,clearBridgePointer:GQ,readBridgePointer:kI}=await Promise.resolve().then(() => (A0A(),eCA)),JE=f?await kI(Q):null,QQ=JE?.source==="repl"?JE:null;Z(`[bridge:repl] initBridgeCore #${KB} starting (initialMessages=${L?.length??0}${QQ?` perpetual prior=env:${QQ.environmentId}`:""})`);let BQ=RCA({baseUrl:J,getAccessToken:F,runnerVersion:"0.3.154",onDebug:Z,onAuth401:w,getTrustedDeviceToken:V}),MQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Q0A(),workerType:U,environmentId:Q0A(),reuseEnvironmentId:QQ?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},QA,gE;try{let m=await BQ.registerBridgeEnvironment(MQ);QA=m.environment_id,gE=m.environment_secret}catch(m){if(qCA("registration_failed",`[bridge:repl] Environment registration failed: ${JA(m)}`),AA?.(`[bridge:repl] Environment registration failed: ${JA(m)}`),QQ&&m instanceof YE&&(m.status===410||m.status!==401&&qD(m.errorType)))await GQ(Q);return $A?.("failed",JA(m)),null}Z(`[bridge:repl] Environment registered: ${QA}`),a("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function _Y(m,GA){if(QA!==m)return Z(`[bridge:repl] Env mismatch (requested ${m}, got ${QA}) — cannot reconnect in place`),!1;let UQ=xW(GA),pA=UQ===GA?[GA]:[GA,UQ];for(let TA of pA)try{return await BQ.reconnectSession(QA,TA),Z(`[bridge:repl] Reconnected session ${TA} in place on env ${QA}`),!0}catch(rQ){Z(`[bridge:repl] reconnectSession(${TA}) failed: ${JA(rQ)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let bC=QQ?await _Y(QQ.environmentId,QQ.sessionId):!1;if(QQ&&!bC)await GQ(Q);let MA,bI=new Set,JB=new Map,UC=new Set;if(bC&&QQ){if(MA=QQ.sessionId,Z(`[bridge:repl] Perpetual session reused: ${MA}`),L&&z)for(let m of L)z.add(m.uuid)}else{let m=await X({environmentId:QA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!m)return Z("[bridge:repl] Session creation failed, deregistering environment"),AA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await BQ.deregisterEnvironment(QA).catch(()=>{}),$A?.("failed","Session creation failed"),null;MA=m,Z(`[bridge:repl] Session created: ${MA}`)}LQ?.(MA),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),a("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(L&&L.length>0),inProtectedNamespace:qx(),...pEA()});let g0=new Set;if(L)for(let m of L)g0.add(m.uuid);let GE=new jD(2000);for(let m of g0)GE.add(m);let JG=new jD(2000),OB=new AbortController,XA=null,vE=0,NQ=bC?WA:0,ZB=null,yC=null,A1=PCA(OB.signal),SE=A1.wake,vW=A1.signal,UE=new oR,PY=!yQ,mB=3,xB=0,XI=null;async function fC(){if(XI)return XI;XI=Q1();try{return await XI}finally{XI=null}}async function Q1(){if(xB++,vE++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${xB}/${mB})`),xB>mB)return Z(`[bridge:repl] Environment reconnect limit reached (${mB}), giving up`),!1;if(XA){let TA=XA.getLastSequenceNum();if(TA>NQ)NQ=TA;bA?.(),XA.close(),XA=null}if(SE(),UE.drop(),ZB){let TA=ZB;if(await BQ.stopWork(QA,TA,!1).catch(()=>{}),ZB!==TA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),xB=0,!0;ZB=null,yC=null}if(OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let m=QA;MQ.reuseEnvironmentId=m;let GA;for(let TA=1;;TA++)try{GA=await BQ.registerBridgeEnvironment(MQ);break}catch(rQ){if(rQ instanceof YE||TA>=E0A||OB.signal.aborted)return MQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed (attempt ${TA}): ${JA(rQ)}`),!1;let _W=Y0A(C0A*2**(TA-1));if(Z(`[bridge:repl] Environment re-registration transient failure (attempt ${TA}/${E0A}), retrying in ${Math.round(_W)}ms: ${JA(rQ)}`),await kB(_W,OB.signal),OB.signal.aborted)return MQ.reuseEnvironmentId=void 0,!1}if(QA=GA.environment_id,gE=GA.environment_secret,MQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${m} got=${QA}`),OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;if(XA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),xB=0,!0;if(await _Y(m,MA))return rA("tengu_bridge_repl_reconnected_in_place",{}),xB=0,!0;if(QA!==m)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await W(MA),OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;let UQ=N(),pA=await X({environmentId:QA,title:UQ,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!pA)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await W(pA),!1;if(MA=pA,dEA(t4(pA)).catch(()=>{}),LQ?.(MA),NQ=0,JG.clear(),PY=!yQ,Z(`[bridge:repl] Re-created session: ${MA}`),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),z?.clear(),bI.size>0){Z(`[bridge:repl] Replaying ${bI.size} PR subscription(s) against new session`);for(let TA of bI){let rQ=TA.lastIndexOf("#");xD("subscribe",MA,TA.slice(0,rQ),Number(TA.slice(rQ+1)),J,F)}}if(UC.size>0){Z(`[bridge:repl] Replaying ${UC.size} Slack thread subscription(s) against new session`);for(let TA of UC){let rQ=TA.indexOf("/");gD("subscribe",MA,TA.slice(0,rQ),TA.slice(rQ+1),J,F)}}return xB=0,!0}function hC(){return F()}function BO(){let m=UE.end();if(m.length===0)return;if(!XA){Z(`[bridge:repl] Cannot drain ${m.length} pending message(s): no transport`);return}for(let pA of m)GE.add(pA.uuid);let UQ=D(m).map((pA)=>({...pA,session_id:MA}));Z(`[bridge:repl] Drained ${m.length} pending message(s) after flush`),XA.writeBatch(UQ)}let PD=null;function TD(){PD?.()}function IO(m){if(Z(`[bridge:repl] Transport permanently closed: code=${m}`),rA("tengu_bridge_repl_ws_closed",{code:m}),XA){let UQ=XA.getLastSequenceNum();if(UQ>NQ)NQ=UQ;bA?.(),XA=null}SE();let GA=UE.drop();if(GA>0)Z(`[bridge:repl] Dropping ${GA} pending message(s) on transport close (code=${m})`,{level:"warn"});if(m===1000){$A?.("failed","session ended"),OB.abort(),TD();return}$A?.("reconnecting",`Remote Control connection lost (code ${m})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${m}), attempting env reconnect`),fC().then((UQ)=>{if(UQ)return;if(OB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:m}),$A?.("failed","reconnection failed"),TD()})}let EO,F0A=null,$0A={api:BQ,getCredentials:()=>({environmentId:QA,environmentSecret:gE}),signal:OB.signal,getPollIntervalConfig:M,onStateChange:$A,getWsState:()=>XA?.getStateLabel()??"null",isAtCapacity:()=>XA!==null,capacitySignal:vW,onFatalError:TD,getHeartbeatInfo:()=>{if(!ZB||!yC)return null;return{environmentId:QA,workId:ZB,sessionToken:yC}},onHeartbeatFatal:(m)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${m.status}) — tearing down work item for fast re-dispatch`),XA){let GA=XA.getLastSequenceNum();if(GA>NQ)NQ=GA;bA?.(),XA.close(),XA=null}if(UE.drop(),ZB)BQ.stopWork(QA,ZB,!1).catch((GA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${JA(GA)}`)});ZB=null,yC=null,SE(),$A?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await fC())return null;return{environmentId:QA,environmentSecret:gE}},onWorkReceived:(m,GA,UQ,pA)=>{if(XA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${UQ})`);if(Z(`[bridge:repl] Work received: workId=${UQ} workSessionId=${m} currentSessionId=${MA} match=${tR(m,MA)}`),iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),!tR(m,MA)){Z(`[bridge:repl] Rejecting foreign session: expected=${MA} got=${m}`);return}ZB=UQ,yC=GA;let TA=pA||dA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rQ;if(!TA){if(rQ=hC(),!rQ){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}L9(rQ)}if(rA("tengu_bridge_repl_work_received",{}),XA){bA?.();let AB=XA;XA=null;let GB=AB.getLastSequenceNum();if(GB>NQ)NQ=GB;AB.close()}UE.deactivate();let _W=(AB)=>_CA(AB,{transport:XA,sessionId:MA,onInterrupt:S,onSetModel:d,onSetMaxThinkingTokens:r,onSetPermissionMode:wA,onRenameSession:iA,onSetColor:DA,onFileSuggestions:BA,onReadFile:PA,onMcpAuthenticate:HQ,onMcpOauthCallbackUrl:b,onMcpReconnect:wQ,onMcpStatus:YA}),fD=!1,YO=(AB)=>{if(XA=AB,AB.setOnConnect(()=>{if(XA!==AB)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!TA){let GB=hC();if(GB)L9(GB)}if(yD=!1,!fD&&L&&L.length>0){fD=!0;let GB=j,NI=L.filter((PW)=>dR(PW)&&!z?.has(PW.uuid)),mC=GB>0&&NI.length>GB?NI.slice(-GB):NI;if(mC.length<NI.length)Z(`[bridge:repl] Capped initial flush: ${NI.length} -> ${mC.length} (cap=${GB})`),rA("tengu_bridge_repl_history_capped",{eligible_count:NI.length,capped_count:mC.length});let v0=D(mC);if(v0.length>0){Z(`[bridge:repl] Flushing ${v0.length} initial message(s) via transport`);let PW=v0.map((GG)=>({...GG,session_id:MA,historical:!0})),JO=AB.droppedBatchCount;AB.writeBatch(PW).then(()=>{if(AB.droppedBatchCount>JO){Z(`[bridge:repl] Initial flush dropped ${AB.droppedBatchCount-JO} batch(es) — not marking ${v0.length} UUID(s) as flushed`);return}if(z){for(let GG of v0)if(GG.uuid)z.add(GG.uuid)}}).catch((GG)=>Z(`[bridge:repl] Initial flush failed: ${GG}`)).finally(()=>{if(XA!==AB)return;BO(),$A?.("connected")})}else BO(),$A?.("connected")}else if(!UE.active)$A?.("connected")}),AB.setOnData((GB)=>{SCA(GB,GE,JG,g,T,_W)}),F0A=IO,AB.setOnClose((GB)=>{if(XA!==AB)return;IO(GB)}),!fD&&L&&L.length>0)UE.start();AB.connect()};if(vE++,TA){let AB=iCA(J,m),GB=vE;Z(`[bridge:repl] CCR v2: sessionUrl=${AB} session=${m} gen=${GB}`),oCA({sessionUrl:AB,ingressToken:GA,sessionId:m,initialSequenceNum:NQ}).then((NI)=>{if(OB.signal.aborted){NI.close();return}if(GB!==vE){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${GB} current=${vE}`),NI.close();return}if(YO(NI),mA){let mC=NI.getInternalEventWriter?.(),v0=NI.getInternalEventReaders?.();if(mC&&v0)mA(mC,v0)}},(NI)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(NI)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),GB!==vE)return;if(ZB)BQ.stopWork(QA,ZB,!1).catch((mC)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${JA(mC)}`)}),ZB=null,yC=null;SE()})}else{let AB=lCA(G,m);Z(`[bridge:repl] Ingress URL: ${AB}`),Z(`[bridge:repl] Creating HybridTransport: session=${m}`);let GB=rQ??"";YO(nCA(new kR(new URL(AB),{Authorization:`Bearer ${GB}`,"anthropic-version":"2023-06-01"},m,()=>({Authorization:`Bearer ${hC()??GB}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{$A?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),SE()}})))}}};KpA($0A);let kD=f?setInterval(()=>{if(XI)return;iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"})},3600000):null;kD?.unref?.();let CO=M().session_keepalive_interval_v2_ms,bD=CO>0?setInterval(()=>{if(!XA)return;Z("[bridge:repl] keep_alive sent"),XA.write({type:"keep_alive"}).catch((m)=>{Z(`[bridge:repl] keep_alive write failed: ${JA(m)}`)})},CO):null;bD?.unref?.();let yD=!1;PD=async()=>{if(yD){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${QA} session=${MA}`);return}yD=!0,bA?.();let m=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${QA} session=${MA} workId=${ZB??"none"} transportState=${XA?.getStateLabel()??"null"}`),kD!==null)clearInterval(kD);if(bD!==null)clearInterval(bD);if(EO)process.off("SIGUSR2",EO);if(OB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),XA){let pA=XA.getLastSequenceNum();if(pA>NQ)NQ=pA}if(f){XA=null,UE.drop(),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${QA} session=${MA} alive on server, duration=${Date.now()-m}ms`);return}let GA=XA;if(XA=null,UE.drop(),GA)GA.write(nR(MA));let UQ=ZB?BQ.stopWork(QA,ZB,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((pA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${JA(pA)}`)}):Promise.resolve();await Promise.all([UQ,W(MA)]),GA?.close(),Z("[bridge:repl] Teardown: transport closed"),await BQ.deregisterEnvironment(QA).catch((pA)=>{Z(`[bridge:repl] Teardown deregister failed: ${JA(pA)}`)}),await GQ(Q),Z(`[bridge:repl] Teardown complete: env=${QA} duration=${Date.now()-m}ms`)},Z(`[bridge:repl] Ready: env=${QA} session=${MA}`),$A?.("ready");let SW={get bridgeSessionId(){return MA},outboundOnly:!1,get environmentId(){return QA},getLastSequenceNum(){return SW.getSSESequenceNum()},flush(){return XA?.flush()??Promise.resolve()},getSSESequenceNum(){let m=XA?.getLastSequenceNum()??0;return Math.max(NQ,m)},sessionIngressUrl:G,writeMessages(m){let GA=m.filter((TA)=>dR(TA)&&!g0.has(TA.uuid)&&!GE.has(TA.uuid));if(GA.length===0)return;if(!PY)for(let TA of GA){let rQ=vCA(TA);if(rQ!==void 0&&yQ?.(rQ,MA)){PY=!0;break}}if(UE.enqueue(...GA)){Z(`[bridge:repl] Queued ${GA.length} message(s) during initial flush`);return}if(!XA){let TA=GA.map((rQ)=>rQ.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${GA.length} message(s) [${TA}] for session=${MA}`,{level:"warn"});return}for(let TA of GA)GE.add(TA.uuid);Z(`[bridge:repl] Sending ${GA.length} message(s) via transport`);let pA=D(GA).map((TA)=>({...TA,session_id:MA}));XA.writeBatch(pA)},writeSdkMessages(m){let GA=m.filter((pA)=>!pA.uuid||!GE.has(pA.uuid));if(GA.length===0)return;if(!XA){Z(`[bridge:repl] Transport not configured, dropping ${GA.length} SDK message(s) for session=${MA}`,{level:"warn"});return}for(let pA of GA)if(pA.uuid)GE.add(pA.uuid);let UQ=GA.map((pA)=>({...pA,session_id:MA}));XA.writeBatch(UQ)},sendControlRequest(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let GA={...m,session_id:MA};XA.write(GA),Z(`[bridge:repl] Sent control_request request_id=${m.request_id}`)},sendControlResponse(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let GA={...m,session_id:MA};XA.write(GA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let GA={type:"control_cancel_request",request_id:m,session_id:MA};XA.write(GA),Z(`[bridge:repl] Sent control_cancel_request request_id=${m}`)},reportMetadata(m){XA?.reportMetadata(m)},sendResult(){if(!XA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${MA}`);return}XA.write(nR(MA)),Z(`[bridge:repl] Sent result for session=${MA}`)},async subscribePR(m,GA,UQ){let pA=`${m}#${GA}`,TA=JB.get(pA);if(UQ)JB.set(pA,{agentId:UQ,repo:m,prNumber:GA});let rQ=await xD("subscribe",MA,m,GA,J,F);if(rQ)bI.add(pA);else if(UQ)if(TA)JB.set(pA,TA);else JB.delete(pA);return rQ},async unsubscribePR(m,GA){let UQ=await xD("unsubscribe",MA,m,GA,J,F);if(UQ){let pA=`${m}#${GA}`;bI.delete(pA),JB.delete(pA)}return UQ},async subscribeSlackThread(m,GA){let UQ=await gD("subscribe",MA,m,GA,J,F);if(UQ)UC.add(`${m}/${GA}`);return UQ},async unsubscribeSlackThread(m,GA){let UQ=await gD("unsubscribe",MA,m,GA,J,F);if(UQ)UC.delete(`${m}/${GA}`);return UQ},getPRWebhookTargets(){return[...JB.values()]},async teardown(){W0A(),await PD?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return SW.teardown()}},W0A=m0(SW);return SW}async function KpA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>A9,getHeartbeatInfo:X,onHeartbeatFatal:W}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let D=0,w=null,V=null,M=0,j=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:g}=Q(),T=F();try{let S=await A.pollForWork(z,g,B,T.reclaim_older_than_ms);if(j=0,D>0)Z(`[bridge:repl] Poll recovered after ${D} consecutive error(s)`),D=0,w=null,V=null,M=0,I?.("ready");if(!S){let r=L;if(L=!1,J?.()&&G&&!r){let wA=T.poll_interval_ms_at_capacity;if(T.non_exclusive_heartbeat_interval_ms>0&&X){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:T.non_exclusive_heartbeat_interval_ms});let DA=wA>0?Date.now()+wA:null,BA=!1,PA=0;while(!B.aborted&&J()&&(DA===null||Date.now()<DA)){let b=F();if(b.non_exclusive_heartbeat_interval_ms<=0)break;let wQ=X();if(!wQ)break;let YA=G();try{await A.heartbeatWork(wQ.environmentId,wQ.workId,wQ.sessionToken)}catch($A){if(Z(`[bridge:repl:heartbeat] Failed: ${JA($A)}`),$A instanceof YE){if(YA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:$A.status,error_type:$A.status===401||$A.status===403?"auth_failed":"fatal"}),W)W($A),Z(`[bridge:repl:heartbeat] Fatal (status=${$A.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}PA++,await kB(b.non_exclusive_heartbeat_interval_ms,YA.signal),YA.cleanup()}let HQ=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":DA!==null&&Date.now()>=DA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:HQ,heartbeat_cycles:PA}),!BA){if(HQ==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${PA} cycles — falling through to pollForWork`);continue}}let iA=wA>0?wA:T.non_exclusive_heartbeat_interval_ms;if(iA>0){let DA=G(),BA=Date.now();await kB(iA,DA.signal),DA.cleanup();let PA=Date.now()-BA-iA;if(PA>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(PA/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:PA}),L=!0}}else await kB(T.poll_interval_ms_not_at_capacity,B);continue}let d;try{d=pCA(S.secret)}catch(r){Z(`[bridge:repl] Failed to decode work secret: ${JA(r)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,S.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${S.id}`);try{await A.acknowledgeWork(z,S.id,d.session_ingress_token)}catch(r){Z(`[bridge:repl] Acknowledge failed workId=${S.id}: ${JA(r)}`)}if(S.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(S.data.type==="session"){let r=S.data.id;try{TI(r,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${r}`);continue}E(r,d.session_ingress_token,S.id,d.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(S){if(B.aborted)break;if(S instanceof YE&&S.status===404&&C){let b=Q().environmentId;if(z!==b){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${b} — skipping onEnvironmentLost`),D=0,w=null;continue}if(j++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${j}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:j}),j>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 wQ=await C();if(B.aborted)break;if(wQ){D=0,w=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${wQ.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(S instanceof YE){let b=qD(S.errorType),wQ=OCA(S);if(Z(`[bridge:repl] Fatal poll error: ${S.message} (status=${S.status}, type=${S.errorType??"unknown"})${wQ?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:S.status,error_type:S.errorType}),a(b?"info":"error","bridge_repl_fatal_error",{status:S.status,error_type:S.errorType}),!wQ)I?.("failed",b?"Remote Control session expired.":S.message);U?.();break}let d=Date.now();if(V!==null&&d-V>Math.max(B0A,M)*2)Z(`[bridge:repl] Detected system sleep (${Math.round((d-V)/1000)}s gap), resetting poll error budget`),a("info","bridge_repl_poll_sleep_detected",{gapMs:d-V}),D=0,w=null;if(V=d,D++,w===null)w=d;let r=d-w,wA=HCA(S),iA=zCA(S),DA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${D}, elapsed ${Math.round(r/1000)}s, ws=${DA}): ${iA}`),rA("tengu_bridge_repl_poll_error",{status:wA,consecutiveErrors:D,elapsedMs:r}),D===1)I?.("reconnecting",iA);if(r>=I0A){Z(`[bridge:repl] Poll failures exceeded ${I0A/1000}s (${D} errors), giving up`),a("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:D,elapsedMs:r,lastStatus:wA}),I?.("failed","connection to server lost");break}let BA=LCA(S),PA=Math.min(C0A*2**(D-1),B0A),HQ=Y0A(BA!==void 0?Math.max(PA,Math.min(BA,wpA)):PA);if(M=HQ,F().non_exclusive_heartbeat_interval_ms>0){let b=X?.();if(b)try{await A.heartbeatWork(b.environmentId,b.workId,b.sessionToken)}catch{}}await kB(HQ,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function ZpA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function zpA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function HpA(A,Q){if(zpA(A,Q))return"http://localhost:4000";if(ZpA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function G0A(A,Q,B){let{toCompatSessionId:I}=M0A(MCA),E=I(A),Y=`${HpA(E,Q)}/code/${E}`;return B?`${Y}?${new URLSearchParams(B)}`:Y}eA();async function U0A(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:X,perpetual:W=!1,initialSSESequenceNum:N,onConflict:D}=A,w=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:X},j=[],L=null,z=[],g=null,T=[],S=null,d=!1,r=null,wA={detail:null},iA=LpA(),DA=()=>J0A({dir:Q,registrationDir:B,machineName:iA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:w,onInitError:console.error,createSession:({environmentId:YA,title:$A,signal:yQ})=>aCA({environmentId:YA,title:$A,tags:["claude-code-assistant"],signal:yQ},M),archiveSession:(YA)=>rCA(YA,M),perpetual:W,initialSSESequenceNum:N,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...A9,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(YA){let $A=hl(YA);if(!$A)return;j.push({content:$A.content,uuid:$A.uuid}),L?.(),L=null},onInterrupt(){z.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),g?.(),g=null},onSetModel(YA){z.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:YA}}),g?.(),g=null},onSetMaxThinkingTokens(YA){z.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:YA}}),g?.(),g=null},onPermissionResponse(YA){T.push(YA),S?.(),S=null},onStateChange(YA,$A){if(r?.(YA,$A),YA==="failed")wA.detail=$A??"unknown failure",d=!0,L?.(),g?.(),S?.()}}),BA=await DA();if(!BA&&D&&wA.detail?.includes("409")){if(await D({machineName:iA,message:wA.detail})==="takeover")d=!1,wA.detail=null,BA=await DA()}if(!BA){let YA=wA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${YA}`),{ok:!1,error:{kind:wA.detail?.includes("409")?"conflict":wA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:YA}}}async function*PA(){while(!d){while(j.length>0)if(yield j.shift(),d)return;await new Promise((YA)=>{L=YA})}}async function*HQ(){while(!d){while(z.length>0)if(yield z.shift(),d)return;await new Promise((YA)=>{g=YA})}}async function*b(){while(!d){while(T.length>0)if(yield T.shift(),d)return;await new Promise((YA)=>{S=YA})}}return{ok:!0,handle:{get sessionUrl(){return G0A(BA.bridgeSessionId,V)},get environmentId(){return BA.environmentId},get bridgeSessionId(){return BA.bridgeSessionId},getSSESequenceNum(){return BA.getSSESequenceNum()},hasPendingPrompts(){return j.length>0},write(YA){BA.writeSdkMessages([YA])},sendResult(){BA.sendResult()},sendControlRequest(YA){BA.sendControlRequest(YA)},sendControlResponse(YA){BA.sendControlResponse(YA)},sendControlCancelRequest(YA){BA.sendControlCancelRequest(YA)},inboundPrompts:PA,controlRequests:HQ,permissionResponses:b,onStateChange(YA){r=YA},async teardown(){d=!0,L?.(),g?.(),S?.(),await BA.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var jpA=1000,RpA=1e4,OpA=5000,xpA=60000,QO=3;function gpA(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 vpA(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"&&WO(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}function _D(A){if(!A){cI("assistant_worker_start");return}if(A.kind==="auth"||A.kind==="conflict")c0("assistant_worker_start",A.kind);else tB("assistant_worker_start",A.kind)}async function SpA(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:X,log:W=()=>{}}=A;W("─── worker start ───");let N=await G?.load(),D={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??N?.lastSSESequenceNum};if(!D.getAccessToken()){let IA={kind:"auth",detail:"getAccessToken returned empty"};return _D(IA),{ok:!1,error:IA}}let w=await U0A(D);if(!w.ok)return W(`bridge connection failed: ${w.error.kind} — ${w.error.detail}`),_D(w.error),{ok:!1,error:w.error};let V=w.handle;W(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=N?.claudeSessionId,j=V.bridgeSessionId,L=[],z=null,g=!1,T=null,S=0,d=!0,r=0,wA=Promise.resolve();function iA(){if(!G)return;let IA={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};wA=wA.then(()=>G.save(IA).catch((BQ)=>{W(`stateAdapter.save threw: ${BQ}`)}))}function DA(){if(L.length>0||V.hasPendingPrompts()){W("persist skipped: prompt queued");return}iA()}iA();let BA=new AbortController,PA=new Map,HQ=null;function b(){return HQ??=(async()=>{DA();for(let IA of PA.keys())V.sendControlCancelRequest(IA);PA.clear(),await V.teardown(),await wA})()}if(X.addEventListener("abort",()=>{BA.abort(),b().catch((IA)=>W(`teardown threw: ${IA}`))}),X.aborted){await b();let IA={kind:"unknown",detail:"aborted before start"};return _D(IA),{ok:!1,error:IA}}let wQ="connected";V.onStateChange((IA,BQ)=>{if(W(`bridge state=${IA} detail=${BQ??""}`),wQ=IA,IA==="ready"&&V.bridgeSessionId!==j)j=V.bridgeSessionId,iA();else if(IA==="connected")DA();if(IA==="failed")W(`bridge failed: ${BQ??"unknown"}`),BA.abort(),b().catch((MQ)=>W(`teardown threw: ${MQ}`))});let YA=I?.horizonMs??600000,$A=I?.leadMs??OpA,yQ=null,LQ=!1,AA=!1,f="";async function WA(){if(!I)return;let IA=await kl(I.dir).catch((MQ)=>{return W(`computeCronHorizon threw: ${MQ}`),{nextFire:null,hasOverdue:!1}});yQ=IA.nextFire,AA=IA.hasOverdue;let BQ=IA.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(IA.nextFire).toISOString()} hasOverdue=${IA.hasOverdue}`;if(BQ!==f)f=BQ,W(BQ)}let mA;if(I)await WA(),mA=setInterval(WA,RpA),mA.unref?.();function bA(IA){L.push({type:"user",message:{role:"user",content:IA},parent_tool_use_id:null,session_id:""}),z?.(),z=null}async function KB(IA,BQ,MQ){if(C){let JB=await C(IA,BQ,MQ);if(JB)return Y?.(IA,JB),JB}if(wQ!=="connected"){W(`permission denied — bridge state=${wQ}, request would drop`);let JB={behavior:"deny",message:`Cannot request permission: remote control is ${wQ}. Try again in a moment.`};return Y?.(IA,JB),JB}let QA=qpA();W(`permission request tool=${IA} req=${QA}`);let{signal:gE,suggestions:_Y,blockedPath:bC,toolUseID:MA}=MQ;V.sendControlRequest({type:"control_request",request_id:QA,request:{subtype:"can_use_tool",tool_name:IA,display_name:XO(IA),input:BQ,tool_use_id:MA,..._Y&&{permission_suggestions:_Y},...bC&&{blocked_path:bC},..."decisionReason"in MQ&&MQ.decisionReason&&{decision_reason:MQ.decisionReason},..."agentID"in MQ&&MQ.agentID&&{agent_id:MQ.agentID}}});let bI;try{let JB=await new Promise((g0,GE)=>{PA.set(QA,g0),bI=setTimeout((JG,OB,XA,vE,NQ)=>{if(JG.delete(OB))XA(`permission timeout req=${OB}`),vE.sendControlCancelRequest(OB),NQ({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},xpA,PA,QA,W,V,g0),bI.unref?.(),gE.addEventListener("abort",()=>{if(PA.delete(QA))V.sendControlCancelRequest(QA);GE(Error("aborted"))},{once:!0})});W(`permission response req=${QA} behavior=${JB.behavior}`);let UC=JB.behavior==="allow"?{behavior:"allow",updatedInput:JB.updatedInput,updatedPermissions:JB.updatedPermissions}:{behavior:"deny",message:JB.message??"Denied via remote control"};return Y?.(IA,UC),UC}finally{if(bI)clearTimeout(bI);PA.delete(QA)}}let iQ=!1;async function GQ(){if(T!==null||iQ||BA.signal.aborted)return;if(iQ=!0,g=!1,L.length>0)d=!1;async function*IA(){while(!g){while(L.length>0)if(d=!1,yield L.shift(),g)return;await new Promise((QA)=>{z=QA})}}W(`spawning query resume=${M??"<fresh>"}`);let BQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(QA)=>W(`[child] ${QA.trimEnd()}`),canUseTool:KB},MQ;try{if(MQ=await E(BQ),B)MQ={...MQ,env:{...MQ.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(QA){if(W(`buildQueryOptions threw: ${QA}`),iQ=!1,r++,r>=QO)W(`${r} consecutive buildQueryOptions failures — dropping ${L.length} queued input(s)`),L.length=0;else if(L.length>0&&!BA.signal.aborted)GQ();return}if(BA.signal.aborted){iQ=!1;return}try{T=jc({prompt:IA(),options:MQ})}finally{iQ=!1}(async()=>{try{W("output pump started");for await(let QA of T){if(QA.type==="system"&&QA.subtype==="init"){if(QA.session_id!==M)M=QA.session_id,DA()}if(QA.type==="result")d=!0,r=0,LQ=!0,DA();if(!gpA(QA))continue;let gE=J?J(QA):QA;if(gE===null)continue;V.write(gE)}}catch(QA){W(`query threw: ${QA}`),r++}finally{W("output pump ended"),T=null;for(let QA of PA.keys())V.sendControlCancelRequest(QA);if(PA.clear(),L.length>0&&!BA.signal.aborted)if(r>=QO)W(`${r} consecutive crashes — dropping ${L.length} queued input(s)`),L.length=0;else GQ()}})()}let kI=setInterval(()=>{let IA=Date.now(),BQ=yQ!==null&&yQ-IA<YA;if(T===null){let MQ=yQ!==null&&yQ-IA<$A;if((MQ||AA&&!LQ)&&r<QO&&!BA.signal.aborted)W(MQ?`cron due in ${yQ-IA}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),GQ();return}if(g)return;if(!d||L.length>0)return;if(IA-S<F)return;if(BQ)return;if(AA&&!LQ)return;W("idle conditions met → closing input gen"),DA(),g=!0,z?.(),z=null},jpA);if(kI.unref?.(),U)W("initialPrompt → injecting"),S=Date.now(),bA(U),GQ();let JE=(async()=>{if(await Promise.all([(async()=>{for await(let IA of V.inboundPrompts()){if(BA.signal.aborted)return;if(W("bridge prompt received"),S=Date.now(),IA.uuid)V.write({type:"user",uuid:IA.uuid,session_id:"",message:{role:"user",content:IA.content},parent_tool_use_id:null});bA(IA.content),GQ()}})(),(async()=>{for await(let IA of V.controlRequests()){if(BA.signal.aborted)return;switch(IA.request.subtype){case"interrupt":W("bridge interrupt"),T?.interrupt();break;case"set_model":W(`bridge setModel=${IA.request.model??"<default>"}`),T?.setModel(IA.request.model);break;case"set_max_thinking_tokens":W(`bridge setMaxThinkingTokens=${IA.request.max_thinking_tokens}`),T?.setMaxThinkingTokens(IA.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let IA of V.permissionResponses()){if(BA.signal.aborted)return;let BQ=vpA(IA,PA,V.sendControlCancelRequest);if(BQ)W(`permission response for unknown req=${BQ} (stale)`)}})()]),clearInterval(kI),mA)clearInterval(mA);T?.close(),await b(),W("─── worker stop ───")})(),QQ={get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(IA){S=Date.now(),bA(IA),GQ()},async interrupt(){await T?.interrupt()},done:JE,teardown:b,[Symbol.asyncDispose]:b};return _D(null),{ok:!0,handle:QQ}}export{SpA as runAssistantWorker};
190
+ `)}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(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(pcA*Math.pow(2,this.reconnectAttempts-1),lcA),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)`),a("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},I)}onLivenessTimeout=()=>{this.livenessTimer=null,Z("SSETransport: Liveness timeout, reconnecting",{level:"error"}),a("error","cli_sse_liveness_timeout"),this.connectErrorsSeen.add("liveness_timeout"),this.onDiagnostic?.(`SSE liveness timeout — no frame in ${hCA/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,hCA)}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"),a("warn","cli_sse_post_no_token");return}let B={...Q,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":SY(),"User-Agent":kC()};Z(`SSETransport: POST body keys=${Object.keys(A).join(",")}`);for(let I=1;I<=gW;I++){try{let C=await WB.post(this.postUrl,A,{headers:B,validateStatus:acA});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`),a("warn","cli_sse_post_client_error",{status:C.status});return}Z(`SSETransport: POST returned ${C.status}, attempt ${I}/${gW}`),a("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){Z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${gW}`),a("warn","cli_sse_post_network_error",{attempt:I})}if(I===gW){Z(`SSETransport: POST failed after ${gW} attempts, continuing`),a("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(dcA*Math.pow(2,I-1),ncA);await kB(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}setOnDiagnostic(A){this.onDiagnostic=A}setEventFilter(A){this.eventFilter=A}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}[Symbol.dispose](){this.close()}}function scA(A){let Q=A.pathname;if(Q.endsWith("/stream"))Q=Q.slice(0,-7);return`${A.protocol}//${A.host}${Q}`}eA();RQ();nI();oC();eA();RQ();var mCA="DEVICE_ATTESTATION_STATUS_",uCA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function tcA(A){if(A===void 0||A===null)return"UNSPECIFIED";if(typeof A==="number")return uCA[A]??"UNSPECIFIED";if(typeof A!=="string")return"UNSPECIFIED";let Q=A.startsWith(mCA)?A.slice(mCA.length):A;if(uCA.includes(Q))return Q;return"UNSPECIFIED"}function ecA(A){return A==="VERIFIED"||A==="VERIFIED_BY_GATE"}var ApA={enforce:!1,acceptStatuses:new Set},QpA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"],SzQ=k(()=>$.object({accept_statuses:$.array($.enum(QpA)).default([])}));var BpA;var IpA;function cCA(A){let Q=typeof A.payload?.type==="string"?A.payload.type:A.event_type,B=Q==="user"||Q==="control_response",I=tcA(A.device_attestation_status);if(ecA(I)){if(B)cI("bridge_event_attestation");return!1}let E=BpA?.()??ApA;if(!E.enforce){if(I==="UNSPECIFIED")return!1;if(B)Z(`[bridge:attestation] accepting unverified ${Q} event_id=${A.event_id} status=${I}`,{level:"info"}),c0("bridge_event_attestation",`${I.toLowerCase()}_${Q}`);return!1}let C=E.acceptStatuses.has(I);if(B){let Y=`${I.toLowerCase()}_${Q}`;if(Z(`[bridge:attestation] ${C?"accepting (config exception)":"DROPPING"} unverified ${Q} event_id=${A.event_id} status=${I}`,{level:C?"info":"warn"}),C)c0("bridge_event_attestation",Y);else{tB("bridge_event_attestation",Y);try{IpA?.({status:I,payloadType:Q})}catch(J){Z(`[bridge:attestation] drop notifier threw: ${JA(J)}`,{level:"error"})}}}return!C}IQ();function pCA(A){let Q=Buffer.from(A,"base64url").toString("utf-8"),B=mQ(Q);if(!B||typeof B!=="object"||!("version"in B)||B.version!==1)throw Error(`Unsupported work secret version: ${B&&typeof B==="object"&&"version"in B?B.version:"unknown"}`);let I=B;if(typeof I.session_ingress_token!=="string"||I.session_ingress_token.length===0)throw Error("Invalid work secret: missing or empty session_ingress_token");if(typeof I.api_base_url!=="string")throw Error("Invalid work secret: missing api_base_url");return B}function lCA(A,Q){let B=A.includes("localhost")||A.includes("127.0.0.1"),I=B?"ws":"wss",E=B?"v2":"v1",C=A.replace(/^https?:\/\//,"").replace(/\/+$/,"");return`${I}://${C}/${E}/session_ingress/ws/${Q}`}function tR(A,Q){if(A===Q)return!0;let B=A.slice(A.lastIndexOf("_")+1),I=Q.slice(Q.lastIndexOf("_")+1);return B.length>=4&&B===I}function iCA(A,Q){return`${A.replace(/\/+$/,"")}/v1/code/sessions/${Q}`}async function dCA(A,Q){let B=await WB.post(`${A}/worker/register`,{},{headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json","anthropic-version":"2023-06-01"},timeout:1e4}),I=B.data?.worker_epoch,E=typeof I==="string"?Number(I):I;if(typeof E!=="number"||!Number.isFinite(E)||!Number.isSafeInteger(E))throw Error(`registerWorker: invalid worker_epoch in response: ${LA(B.data)}`);return E}function nCA(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 oCA(A){let{sessionUrl:Q,ingressToken:B,sessionId:I,initialSequenceNum:E,getAuthToken:C}=A,Y;if(C)Y=()=>{let w=C();if(!w)return{};return{Authorization:`Bearer ${w}`}};else L9(B);let J=A.epoch??await dCA(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 sR(G,{},I,void 0,E,Y),F,X=new rR(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{X.close(),U.close(),F?.(4090)}catch(w){Z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{X.reportDelivery(w.event_id,"received"),X.reportDelivery(w.event_id,"processed")}),U.setEventFilter(cCA);let W,N=!1,D=!1;return{write(w){return X.writeEvent(w)},async writeBatch(w){for(let V of w){if(D)break;await X.writeEvent(V)}},close(){D=!0,X.close(),U.close()},isConnectedStatus(){return N},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return N?"connected":"init";return"connecting"},setOnData(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{X.close(),w(V??4092)})},setOnConnect(w){W=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w,V){X.reportState(w,V)},reportMetadata(w){X.reportMetadata(w)},reportDelivery(w,V){X.reportDelivery(w,V)},flush(){return X.flush()},getInternalEventWriter(){return(w,V,M)=>X.writeInternalEvent(w,V,M)},getInternalEventReaders(){return{readMain:()=>X.readInternalEvents(),readSubagents:()=>X.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();X.initialize(J).then(()=>{N=!0,Z(`[bridge:repl] v2 transport ready for writes (epoch=${J}, sse=${U.isConnectedStatus()?"open":"opening"})`),W?.()},(w)=>{Z(`[bridge:repl] CCR v2 initialize failed: ${JA(w)}`,{level:"error"}),X.close(),U.close(),F?.(4091)})}}}oC();eA();RQ();var EpA="2023-06-01",CpA="ccr-byoc-2025-07-29";async function aCA({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`,X;try{X=await WB.post(F,{title:Q,events:[],session_context:{sources:[],outcomes:[],model:G},environment_id:A,source:"remote-control",...B!==void 0&&{tags:B}},{headers:vD(U,J),signal:I,validateStatus:(N)=>N<500})}catch(N){return Z(`[bridge] Session creation request failed: ${JA(N)}`),null}if(X.status!==200&&X.status!==201){let N=YG(X.data);return Z(`[bridge] Session creation failed with status ${X.status}${N?`: ${N}`:""}`),null}let W=X.data;if(!W||typeof W!=="object"||!("id"in W)||typeof W.id!=="string")return Z("[bridge] No session ID in response"),null;return W.id}async function rCA(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 WB.post(Y,{},{headers:vD(C,E),timeout:1e4,validateStatus:(G)=>G<500});if(J.status===200||J.status===409)Z(`[bridge] Session ${A} archived successfully`);else{let G=YG(J.data);Z(`[bridge] Session archive failed with status ${J.status}${G?`: ${G}`:""}`)}}catch(J){Z(`[bridge] Session archive request failed: ${JA(J)}`)}}async function xD(A,Q,B,I,E,C){let Y=A==="subscribe"?"bridge_pr_subscribe":"bridge_pr_unsubscribe",J=C();if(!J)return Z(`[bridge] No access token for ${A}-pr`),tB(Y,"no_token"),!1;let G=`${E}/v1/code/github/${A}-pr`,U={session_id:t4(Q),repo:B,pr_number:I},F;try{F=await WB.post(G,U,{headers:vD(J),timeout:1e4,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] ${A}-pr request failed: ${JA(W)}`),tB(Y,"request_failed"),!1}if(!(F.status>=200&&F.status<300||F.status===409)){let W=YG(F.data);return Z(`[bridge] ${A}-pr failed ${F.status}${W?`: ${W}`:""}`),tB(Y,"http_error"),!1}return Z(`[bridge] ${A}-pr ${B}#${I} ok`),cI(Y),!0}async function gD(A,Q,B,I,E,C){let Y=A==="subscribe"?"bridge_slack_subscribe":"bridge_slack_unsubscribe",J=C();if(!J)return Z(`[bridge] No access token for ${A}-thread`),tB(Y,"no_token"),!1;let G=`${E}/v1/code/slack/${A}-thread`,U={session_id:t4(Q),channel:B,thread_ts:I},F;try{F=await WB.post(G,U,{headers:vD(J),timeout:1e4,validateStatus:(W)=>W<500})}catch(W){return Z(`[bridge] ${A}-thread request failed: ${JA(W)}`),tB(Y,"request_failed"),!1}if(!(F.status>=200&&F.status<300||F.status===409)){let W=YG(F.data);return Z(`[bridge] ${A}-thread failed ${F.status}${W?`: ${W}`:""}`),tB(Y,"http_error"),!1}return Z(`[bridge] ${A}-thread ${B}/${I} ok`),cI(Y),!0}function vD(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":EpA,"anthropic-beta":CpA,"anthropic-client-platform":SY(),"User-Agent":kC()};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}var C0A=2000,B0A=60000,I0A=900000,wpA=300000,E0A=3;function Y0A(A){return A*(0.8+Math.random()*0.4)}var MpA=0;async function J0A(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:X,archiveSession:W,getCurrentTitle:N=()=>Y,toSDKMessages:D=()=>{throw Error("BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.")},onAuth401:w,getTrustedDeviceToken:V,getPollIntervalConfig:M=()=>A9,initialHistoryCap:j=200,initialMessages:L,previouslyFlushedUUIDs:z,onInboundMessage:g,onPermissionResponse:T,onInterrupt:S,onSetModel:d,onSetMaxThinkingTokens:r,onSetPermissionMode:wA,onRenameSession:iA,onSetColor:DA,onFileSuggestions:BA,onReadFile:PA,onMcpAuthenticate:HQ,onMcpOauthCallbackUrl:b,onMcpReconnect:wQ,onMcpStatus:YA,onStateChange:$A,onUserMessage:yQ,onSessionEstablished:LQ,onInitError:AA,perpetual:f,initialSSESequenceNum:WA=0,onTransportPersistenceReady:mA,onTransportPersistenceTeardown:bA}=A,KB=++MpA,{writeBridgePointer:iQ,clearBridgePointer:GQ,readBridgePointer:kI}=await Promise.resolve().then(() => (A0A(),eCA)),JE=f?await kI(Q):null,QQ=JE?.source==="repl"?JE:null;Z(`[bridge:repl] initBridgeCore #${KB} starting (initialMessages=${L?.length??0}${QQ?` perpetual prior=env:${QQ.environmentId}`:""})`);let BQ=RCA({baseUrl:J,getAccessToken:F,runnerVersion:"0.3.156",onDebug:Z,onAuth401:w,getTrustedDeviceToken:V}),MQ={dir:B??Q,machineName:I,branch:E,gitRepoUrl:C,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:Q0A(),workerType:U,environmentId:Q0A(),reuseEnvironmentId:QQ?.environmentId,apiBaseUrl:J,sessionIngressUrl:G},QA,gE;try{let m=await BQ.registerBridgeEnvironment(MQ);QA=m.environment_id,gE=m.environment_secret}catch(m){if(qCA("registration_failed",`[bridge:repl] Environment registration failed: ${JA(m)}`),AA?.(`[bridge:repl] Environment registration failed: ${JA(m)}`),QQ&&m instanceof YE&&(m.status===410||m.status!==401&&qD(m.errorType)))await GQ(Q);return $A?.("failed",JA(m)),null}Z(`[bridge:repl] Environment registered: ${QA}`),a("info","bridge_repl_env_registered"),rA("tengu_bridge_repl_env_registered",{});async function _Y(m,GA){if(QA!==m)return Z(`[bridge:repl] Env mismatch (requested ${m}, got ${QA}) — cannot reconnect in place`),!1;let UQ=xW(GA),pA=UQ===GA?[GA]:[GA,UQ];for(let TA of pA)try{return await BQ.reconnectSession(QA,TA),Z(`[bridge:repl] Reconnected session ${TA} in place on env ${QA}`),!0}catch(rQ){Z(`[bridge:repl] reconnectSession(${TA}) failed: ${JA(rQ)}`)}return Z("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let bC=QQ?await _Y(QQ.environmentId,QQ.sessionId):!1;if(QQ&&!bC)await GQ(Q);let MA,bI=new Set,JB=new Map,UC=new Set;if(bC&&QQ){if(MA=QQ.sessionId,Z(`[bridge:repl] Perpetual session reused: ${MA}`),L&&z)for(let m of L)z.add(m.uuid)}else{let m=await X({environmentId:QA,title:Y,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!m)return Z("[bridge:repl] Session creation failed, deregistering environment"),AA?.("[bridge:repl] Session creation failed, deregistering environment"),rA("tengu_bridge_repl_session_failed",{}),await BQ.deregisterEnvironment(QA).catch(()=>{}),$A?.("failed","Session creation failed"),null;MA=m,Z(`[bridge:repl] Session created: ${MA}`)}LQ?.(MA),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),a("info","bridge_repl_session_created"),rA("tengu_bridge_repl_started",{has_initial_messages:!!(L&&L.length>0),inProtectedNamespace:qx(),...pEA()});let g0=new Set;if(L)for(let m of L)g0.add(m.uuid);let GE=new jD(2000);for(let m of g0)GE.add(m);let JG=new jD(2000),OB=new AbortController,XA=null,vE=0,NQ=bC?WA:0,ZB=null,yC=null,A1=PCA(OB.signal),SE=A1.wake,vW=A1.signal,UE=new oR,PY=!yQ,mB=3,xB=0,XI=null;async function fC(){if(XI)return XI;XI=Q1();try{return await XI}finally{XI=null}}async function Q1(){if(xB++,vE++,Z(`[bridge:repl] Reconnecting after env lost (attempt ${xB}/${mB})`),xB>mB)return Z(`[bridge:repl] Environment reconnect limit reached (${mB}), giving up`),!1;if(XA){let TA=XA.getLastSequenceNum();if(TA>NQ)NQ=TA;bA?.(),XA.close(),XA=null}if(SE(),UE.drop(),ZB){let TA=ZB;if(await BQ.stopWork(QA,TA,!1).catch(()=>{}),ZB!==TA)return Z("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),xB=0,!0;ZB=null,yC=null}if(OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted by teardown"),!1;let m=QA;MQ.reuseEnvironmentId=m;let GA;for(let TA=1;;TA++)try{GA=await BQ.registerBridgeEnvironment(MQ);break}catch(rQ){if(rQ instanceof YE||TA>=E0A||OB.signal.aborted)return MQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Environment re-registration failed (attempt ${TA}): ${JA(rQ)}`),!1;let _W=Y0A(C0A*2**(TA-1));if(Z(`[bridge:repl] Environment re-registration transient failure (attempt ${TA}/${E0A}), retrying in ${Math.round(_W)}ms: ${JA(rQ)}`),await kB(_W,OB.signal),OB.signal.aborted)return MQ.reuseEnvironmentId=void 0,!1}if(QA=GA.environment_id,gE=GA.environment_secret,MQ.reuseEnvironmentId=void 0,Z(`[bridge:repl] Re-registered: requested=${m} got=${QA}`),OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;if(XA!==null)return Z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),xB=0,!0;if(await _Y(m,MA))return rA("tengu_bridge_repl_reconnected_in_place",{}),xB=0,!0;if(QA!==m)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await W(MA),OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;let UQ=N(),pA=await X({environmentId:QA,title:UQ,gitRepoUrl:C,branch:E,signal:AbortSignal.timeout(15000)});if(!pA)return Z("[bridge:repl] Session creation failed during reconnection"),!1;if(OB.signal.aborted)return Z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await W(pA),!1;if(MA=pA,dEA(t4(pA)).catch(()=>{}),LQ?.(MA),NQ=0,JG.clear(),PY=!yQ,Z(`[bridge:repl] Re-created session: ${MA}`),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),z?.clear(),bI.size>0){Z(`[bridge:repl] Replaying ${bI.size} PR subscription(s) against new session`);for(let TA of bI){let rQ=TA.lastIndexOf("#");xD("subscribe",MA,TA.slice(0,rQ),Number(TA.slice(rQ+1)),J,F)}}if(UC.size>0){Z(`[bridge:repl] Replaying ${UC.size} Slack thread subscription(s) against new session`);for(let TA of UC){let rQ=TA.indexOf("/");gD("subscribe",MA,TA.slice(0,rQ),TA.slice(rQ+1),J,F)}}return xB=0,!0}function hC(){return F()}function BO(){let m=UE.end();if(m.length===0)return;if(!XA){Z(`[bridge:repl] Cannot drain ${m.length} pending message(s): no transport`);return}for(let pA of m)GE.add(pA.uuid);let UQ=D(m).map((pA)=>({...pA,session_id:MA}));Z(`[bridge:repl] Drained ${m.length} pending message(s) after flush`),XA.writeBatch(UQ)}let PD=null;function TD(){PD?.()}function IO(m){if(Z(`[bridge:repl] Transport permanently closed: code=${m}`),rA("tengu_bridge_repl_ws_closed",{code:m}),XA){let UQ=XA.getLastSequenceNum();if(UQ>NQ)NQ=UQ;bA?.(),XA=null}SE();let GA=UE.drop();if(GA>0)Z(`[bridge:repl] Dropping ${GA} pending message(s) on transport close (code=${m})`,{level:"warn"});if(m===1000){$A?.("failed","session ended"),OB.abort(),TD();return}$A?.("reconnecting",`Remote Control connection lost (code ${m})`),Z(`[bridge:repl] Transport reconnect budget exhausted (code=${m}), attempting env reconnect`),fC().then((UQ)=>{if(UQ)return;if(OB.signal.aborted)return;Z("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),rA("tengu_bridge_repl_reconnect_failed",{close_code:m}),$A?.("failed","reconnection failed"),TD()})}let EO,F0A=null,$0A={api:BQ,getCredentials:()=>({environmentId:QA,environmentSecret:gE}),signal:OB.signal,getPollIntervalConfig:M,onStateChange:$A,getWsState:()=>XA?.getStateLabel()??"null",isAtCapacity:()=>XA!==null,capacitySignal:vW,onFatalError:TD,getHeartbeatInfo:()=>{if(!ZB||!yC)return null;return{environmentId:QA,workId:ZB,sessionToken:yC}},onHeartbeatFatal:(m)=>{if(Z(`[bridge:repl] heartbeatWork fatal (status=${m.status}) — tearing down work item for fast re-dispatch`),XA){let GA=XA.getLastSequenceNum();if(GA>NQ)NQ=GA;bA?.(),XA.close(),XA=null}if(UE.drop(),ZB)BQ.stopWork(QA,ZB,!1).catch((GA)=>{Z(`[bridge:repl] stopWork after heartbeat fatal: ${JA(GA)}`)});ZB=null,yC=null,SE(),$A?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await fC())return null;return{environmentId:QA,environmentSecret:gE}},onWorkReceived:(m,GA,UQ,pA)=>{if(XA?.isConnectedStatus())Z(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${UQ})`);if(Z(`[bridge:repl] Work received: workId=${UQ} workSessionId=${m} currentSessionId=${MA} match=${tR(m,MA)}`),iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),!tR(m,MA)){Z(`[bridge:repl] Rejecting foreign session: expected=${MA} got=${m}`);return}ZB=UQ,yC=GA;let TA=pA||dA(process.env.CLAUDE_BRIDGE_USE_CCR_V2),rQ;if(!TA){if(rQ=hC(),!rQ){Z("[bridge:repl] No OAuth token available for session ingress, skipping work");return}L9(rQ)}if(rA("tengu_bridge_repl_work_received",{}),XA){bA?.();let AB=XA;XA=null;let GB=AB.getLastSequenceNum();if(GB>NQ)NQ=GB;AB.close()}UE.deactivate();let _W=(AB)=>_CA(AB,{transport:XA,sessionId:MA,onInterrupt:S,onSetModel:d,onSetMaxThinkingTokens:r,onSetPermissionMode:wA,onRenameSession:iA,onSetColor:DA,onFileSuggestions:BA,onReadFile:PA,onMcpAuthenticate:HQ,onMcpOauthCallbackUrl:b,onMcpReconnect:wQ,onMcpStatus:YA}),fD=!1,YO=(AB)=>{if(XA=AB,AB.setOnConnect(()=>{if(XA!==AB)return;if(Z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!TA){let GB=hC();if(GB)L9(GB)}if(yD=!1,!fD&&L&&L.length>0){fD=!0;let GB=j,NI=L.filter((PW)=>dR(PW)&&!z?.has(PW.uuid)),mC=GB>0&&NI.length>GB?NI.slice(-GB):NI;if(mC.length<NI.length)Z(`[bridge:repl] Capped initial flush: ${NI.length} -> ${mC.length} (cap=${GB})`),rA("tengu_bridge_repl_history_capped",{eligible_count:NI.length,capped_count:mC.length});let v0=D(mC);if(v0.length>0){Z(`[bridge:repl] Flushing ${v0.length} initial message(s) via transport`);let PW=v0.map((GG)=>({...GG,session_id:MA,historical:!0})),JO=AB.droppedBatchCount;AB.writeBatch(PW).then(()=>{if(AB.droppedBatchCount>JO){Z(`[bridge:repl] Initial flush dropped ${AB.droppedBatchCount-JO} batch(es) — not marking ${v0.length} UUID(s) as flushed`);return}if(z){for(let GG of v0)if(GG.uuid)z.add(GG.uuid)}}).catch((GG)=>Z(`[bridge:repl] Initial flush failed: ${GG}`)).finally(()=>{if(XA!==AB)return;BO(),$A?.("connected")})}else BO(),$A?.("connected")}else if(!UE.active)$A?.("connected")}),AB.setOnData((GB)=>{SCA(GB,GE,JG,g,T,_W)}),F0A=IO,AB.setOnClose((GB)=>{if(XA!==AB)return;IO(GB)}),!fD&&L&&L.length>0)UE.start();AB.connect()};if(vE++,TA){let AB=iCA(J,m),GB=vE;Z(`[bridge:repl] CCR v2: sessionUrl=${AB} session=${m} gen=${GB}`),oCA({sessionUrl:AB,ingressToken:GA,sessionId:m,initialSequenceNum:NQ}).then((NI)=>{if(OB.signal.aborted){NI.close();return}if(GB!==vE){Z(`[bridge:repl] CCR v2: discarding stale handshake gen=${GB} current=${vE}`),NI.close();return}if(YO(NI),mA){let mC=NI.getInternalEventWriter?.(),v0=NI.getInternalEventReaders?.();if(mC&&v0)mA(mC,v0)}},(NI)=>{if(Z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(NI)}`,{level:"error"}),rA("tengu_bridge_repl_ccr_v2_init_failed",{}),GB!==vE)return;if(ZB)BQ.stopWork(QA,ZB,!1).catch((mC)=>{Z(`[bridge:repl] stopWork after v2 init failure: ${JA(mC)}`)}),ZB=null,yC=null;SE()})}else{let AB=lCA(G,m);Z(`[bridge:repl] Ingress URL: ${AB}`),Z(`[bridge:repl] Creating HybridTransport: session=${m}`);let GB=rQ??"";YO(nCA(new kR(new URL(AB),{Authorization:`Bearer ${GB}`,"anthropic-version":"2023-06-01"},m,()=>({Authorization:`Bearer ${hC()??GB}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{$A?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),SE()}})))}}};KpA($0A);let kD=f?setInterval(()=>{if(XI)return;iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"})},3600000):null;kD?.unref?.();let CO=M().session_keepalive_interval_v2_ms,bD=CO>0?setInterval(()=>{if(!XA)return;Z("[bridge:repl] keep_alive sent"),XA.write({type:"keep_alive"}).catch((m)=>{Z(`[bridge:repl] keep_alive write failed: ${JA(m)}`)})},CO):null;bD?.unref?.();let yD=!1;PD=async()=>{if(yD){Z(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${QA} session=${MA}`);return}yD=!0,bA?.();let m=Date.now();if(Z(`[bridge:repl] Teardown starting: env=${QA} session=${MA} workId=${ZB??"none"} transportState=${XA?.getStateLabel()??"null"}`),kD!==null)clearInterval(kD);if(bD!==null)clearInterval(bD);if(EO)process.off("SIGUSR2",EO);if(OB.abort(),Z("[bridge:repl] Teardown: poll loop aborted"),XA){let pA=XA.getLastSequenceNum();if(pA>NQ)NQ=pA}if(f){XA=null,UE.drop(),await iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),Z(`[bridge:repl] Teardown (perpetual): leaving env=${QA} session=${MA} alive on server, duration=${Date.now()-m}ms`);return}let GA=XA;if(XA=null,UE.drop(),GA)GA.write(nR(MA));let UQ=ZB?BQ.stopWork(QA,ZB,!0).then(()=>{Z("[bridge:repl] Teardown: stopWork completed")}).catch((pA)=>{Z(`[bridge:repl] Teardown stopWork failed: ${JA(pA)}`)}):Promise.resolve();await Promise.all([UQ,W(MA)]),GA?.close(),Z("[bridge:repl] Teardown: transport closed"),await BQ.deregisterEnvironment(QA).catch((pA)=>{Z(`[bridge:repl] Teardown deregister failed: ${JA(pA)}`)}),await GQ(Q),Z(`[bridge:repl] Teardown complete: env=${QA} duration=${Date.now()-m}ms`)},Z(`[bridge:repl] Ready: env=${QA} session=${MA}`),$A?.("ready");let SW={get bridgeSessionId(){return MA},outboundOnly:!1,get environmentId(){return QA},getLastSequenceNum(){return SW.getSSESequenceNum()},flush(){return XA?.flush()??Promise.resolve()},getSSESequenceNum(){let m=XA?.getLastSequenceNum()??0;return Math.max(NQ,m)},sessionIngressUrl:G,writeMessages(m){let GA=m.filter((TA)=>dR(TA)&&!g0.has(TA.uuid)&&!GE.has(TA.uuid));if(GA.length===0)return;if(!PY)for(let TA of GA){let rQ=vCA(TA);if(rQ!==void 0&&yQ?.(rQ,MA)){PY=!0;break}}if(UE.enqueue(...GA)){Z(`[bridge:repl] Queued ${GA.length} message(s) during initial flush`);return}if(!XA){let TA=GA.map((rQ)=>rQ.type).join(",");Z(`[bridge:repl] Transport not configured, dropping ${GA.length} message(s) [${TA}] for session=${MA}`,{level:"warn"});return}for(let TA of GA)GE.add(TA.uuid);Z(`[bridge:repl] Sending ${GA.length} message(s) via transport`);let pA=D(GA).map((TA)=>({...TA,session_id:MA}));XA.writeBatch(pA)},writeSdkMessages(m){let GA=m.filter((pA)=>!pA.uuid||!GE.has(pA.uuid));if(GA.length===0)return;if(!XA){Z(`[bridge:repl] Transport not configured, dropping ${GA.length} SDK message(s) for session=${MA}`,{level:"warn"});return}for(let pA of GA)if(pA.uuid)GE.add(pA.uuid);let UQ=GA.map((pA)=>({...pA,session_id:MA}));XA.writeBatch(UQ)},sendControlRequest(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_request");return}let GA={...m,session_id:MA};XA.write(GA),Z(`[bridge:repl] Sent control_request request_id=${m.request_id}`)},sendControlResponse(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_response");return}let GA={...m,session_id:MA};XA.write(GA),Z("[bridge:repl] Sent control_response")},sendControlCancelRequest(m){if(!XA){Z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let GA={type:"control_cancel_request",request_id:m,session_id:MA};XA.write(GA),Z(`[bridge:repl] Sent control_cancel_request request_id=${m}`)},reportMetadata(m){XA?.reportMetadata(m)},sendResult(){if(!XA){Z(`[bridge:repl] sendResult: skipping, transport not configured session=${MA}`);return}XA.write(nR(MA)),Z(`[bridge:repl] Sent result for session=${MA}`)},async subscribePR(m,GA,UQ){let pA=`${m}#${GA}`,TA=JB.get(pA);if(UQ)JB.set(pA,{agentId:UQ,repo:m,prNumber:GA});let rQ=await xD("subscribe",MA,m,GA,J,F);if(rQ)bI.add(pA);else if(UQ)if(TA)JB.set(pA,TA);else JB.delete(pA);return rQ},async unsubscribePR(m,GA){let UQ=await xD("unsubscribe",MA,m,GA,J,F);if(UQ){let pA=`${m}#${GA}`;bI.delete(pA),JB.delete(pA)}return UQ},async subscribeSlackThread(m,GA){let UQ=await gD("subscribe",MA,m,GA,J,F);if(UQ)UC.add(`${m}/${GA}`);return UQ},async unsubscribeSlackThread(m,GA){let UQ=await gD("unsubscribe",MA,m,GA,J,F);if(UQ)UC.delete(`${m}/${GA}`);return UQ},getPRWebhookTargets(){return[...JB.values()]},async teardown(){W0A(),await PD?.(),Z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return SW.teardown()}},W0A=m0(SW);return SW}async function KpA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>A9,getHeartbeatInfo:X,onHeartbeatFatal:W}){Z(`[bridge:repl] Starting work poll loop for env=${Q().environmentId}`);let D=0,w=null,V=null,M=0,j=0,L=!1;while(!B.aborted){let{environmentId:z,environmentSecret:g}=Q(),T=F();try{let S=await A.pollForWork(z,g,B,T.reclaim_older_than_ms);if(j=0,D>0)Z(`[bridge:repl] Poll recovered after ${D} consecutive error(s)`),D=0,w=null,V=null,M=0,I?.("ready");if(!S){let r=L;if(L=!1,J?.()&&G&&!r){let wA=T.poll_interval_ms_at_capacity;if(T.non_exclusive_heartbeat_interval_ms>0&&X){rA("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:T.non_exclusive_heartbeat_interval_ms});let DA=wA>0?Date.now()+wA:null,BA=!1,PA=0;while(!B.aborted&&J()&&(DA===null||Date.now()<DA)){let b=F();if(b.non_exclusive_heartbeat_interval_ms<=0)break;let wQ=X();if(!wQ)break;let YA=G();try{await A.heartbeatWork(wQ.environmentId,wQ.workId,wQ.sessionToken)}catch($A){if(Z(`[bridge:repl:heartbeat] Failed: ${JA($A)}`),$A instanceof YE){if(YA.cleanup(),rA("tengu_bridge_heartbeat_error",{status:$A.status,error_type:$A.status===401||$A.status===403?"auth_failed":"fatal"}),W)W($A),Z(`[bridge:repl:heartbeat] Fatal (status=${$A.status}), work state cleared — fast-polling for re-dispatch`);else BA=!0;break}}PA++,await kB(b.non_exclusive_heartbeat_interval_ms,YA.signal),YA.cleanup()}let HQ=BA?"error":B.aborted?"shutdown":!J()?"capacity_changed":DA!==null&&Date.now()>=DA?"poll_due":"config_disabled";if(rA("tengu_bridge_heartbeat_mode_exited",{reason:HQ,heartbeat_cycles:PA}),!BA){if(HQ==="poll_due")Z(`[bridge:repl] Heartbeat poll_due after ${PA} cycles — falling through to pollForWork`);continue}}let iA=wA>0?wA:T.non_exclusive_heartbeat_interval_ms;if(iA>0){let DA=G(),BA=Date.now();await kB(iA,DA.signal),DA.cleanup();let PA=Date.now()-BA-iA;if(PA>60000)Z(`[bridge:repl] At-capacity sleep overran by ${Math.round(PA/1000)}s — process suspension detected, forcing one fast-poll cycle`),rA("tengu_bridge_repl_suspension_detected",{overrun_ms:PA}),L=!0}}else await kB(T.poll_interval_ms_not_at_capacity,B);continue}let d;try{d=pCA(S.secret)}catch(r){Z(`[bridge:repl] Failed to decode work secret: ${JA(r)}`),rA("tengu_bridge_repl_work_secret_failed",{}),await A.stopWork(z,S.id,!1).catch(()=>{});continue}Z(`[bridge:repl] Acknowledging workId=${S.id}`);try{await A.acknowledgeWork(z,S.id,d.session_ingress_token)}catch(r){Z(`[bridge:repl] Acknowledge failed workId=${S.id}: ${JA(r)}`)}if(S.data.type==="healthcheck"){Z("[bridge:repl] Healthcheck received");continue}if(S.data.type==="session"){let r=S.data.id;try{TI(r,"session_id")}catch{Z(`[bridge:repl] Invalid session_id in work: ${r}`);continue}E(r,d.session_ingress_token,S.id,d.use_code_sessions===!0),Z("[bridge:repl] Work accepted, continuing poll loop")}}catch(S){if(B.aborted)break;if(S instanceof YE&&S.status===404&&C){let b=Q().environmentId;if(z!==b){Z(`[bridge:repl] Stale poll error for old env=${z}, current env=${b} — skipping onEnvironmentLost`),D=0,w=null;continue}if(j++,Z(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${j}/3)`),rA("tengu_bridge_repl_env_lost",{attempt:j}),j>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 wQ=await C();if(B.aborted)break;if(wQ){D=0,w=null,I?.("ready"),Z(`[bridge:repl] Re-registered environment: ${wQ.environmentId}`);continue}I?.("failed","Environment deleted and re-registration failed"),U?.();break}if(S instanceof YE){let b=qD(S.errorType),wQ=OCA(S);if(Z(`[bridge:repl] Fatal poll error: ${S.message} (status=${S.status}, type=${S.errorType??"unknown"})${wQ?" (suppressed)":""}`),rA("tengu_bridge_repl_fatal_error",{status:S.status,error_type:S.errorType}),a(b?"info":"error","bridge_repl_fatal_error",{status:S.status,error_type:S.errorType}),!wQ)I?.("failed",b?"Remote Control session expired.":S.message);U?.();break}let d=Date.now();if(V!==null&&d-V>Math.max(B0A,M)*2)Z(`[bridge:repl] Detected system sleep (${Math.round((d-V)/1000)}s gap), resetting poll error budget`),a("info","bridge_repl_poll_sleep_detected",{gapMs:d-V}),D=0,w=null;if(V=d,D++,w===null)w=d;let r=d-w,wA=HCA(S),iA=zCA(S),DA=Y?.()??"unknown";if(Z(`[bridge:repl] Poll error (attempt ${D}, elapsed ${Math.round(r/1000)}s, ws=${DA}): ${iA}`),rA("tengu_bridge_repl_poll_error",{status:wA,consecutiveErrors:D,elapsedMs:r}),D===1)I?.("reconnecting",iA);if(r>=I0A){Z(`[bridge:repl] Poll failures exceeded ${I0A/1000}s (${D} errors), giving up`),a("info","bridge_repl_poll_give_up"),rA("tengu_bridge_repl_poll_give_up",{consecutiveErrors:D,elapsedMs:r,lastStatus:wA}),I?.("failed","connection to server lost");break}let BA=LCA(S),PA=Math.min(C0A*2**(D-1),B0A),HQ=Y0A(BA!==void 0?Math.max(PA,Math.min(BA,wpA)):PA);if(M=HQ,F().non_exclusive_heartbeat_interval_ms>0){let b=X?.();if(b)try{await A.heartbeatWork(b.environmentId,b.workId,b.sessionToken)}catch{}}await kB(HQ,B)}}Z(`[bridge:repl] Work poll loop ended (aborted=${B.aborted}) env=${Q().environmentId}`)}function ZpA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function zpA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function HpA(A,Q){if(zpA(A,Q))return"http://localhost:4000";if(ZpA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function G0A(A,Q,B){let{toCompatSessionId:I}=M0A(MCA),E=I(A),Y=`${HpA(E,Q)}/code/${E}`;return B?`${Y}?${new URLSearchParams(B)}`:Y}eA();async function U0A(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:X,perpetual:W=!1,initialSSESequenceNum:N,onConflict:D}=A,w=A.onAuth401;if(!J())return Z("[bridge:daemon] connectRemoteControl: no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"),{ok:!1,error:{kind:"auth",detail:"no OAuth token (set CLAUDE_CODE_OAUTH_TOKEN or log in)"}};let V=U,M={baseUrl:U,getAccessToken:J,orgUUID:F,model:X},j=[],L=null,z=[],g=null,T=[],S=null,d=!1,r=null,wA={detail:null},iA=LpA(),DA=()=>J0A({dir:Q,registrationDir:B,machineName:iA,branch:C,gitRepoUrl:Y,title:I,baseUrl:U,sessionIngressUrl:V,workerType:E,getAccessToken:J,getTrustedDeviceToken:G,onAuth401:w,onInitError:console.error,createSession:({environmentId:YA,title:$A,signal:yQ})=>aCA({environmentId:YA,title:$A,tags:["claude-code-assistant"],signal:yQ},M),archiveSession:(YA)=>rCA(YA,M),perpetual:W,initialSSESequenceNum:N,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...A9,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(YA){let $A=hl(YA);if(!$A)return;j.push({content:$A.content,uuid:$A.uuid}),L?.(),L=null},onInterrupt(){z.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),g?.(),g=null},onSetModel(YA){z.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:YA}}),g?.(),g=null},onSetMaxThinkingTokens(YA){z.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:YA}}),g?.(),g=null},onPermissionResponse(YA){T.push(YA),S?.(),S=null},onStateChange(YA,$A){if(r?.(YA,$A),YA==="failed")wA.detail=$A??"unknown failure",d=!0,L?.(),g?.(),S?.()}}),BA=await DA();if(!BA&&D&&wA.detail?.includes("409")){if(await D({machineName:iA,message:wA.detail})==="takeover")d=!1,wA.detail=null,BA=await DA()}if(!BA){let YA=wA.detail??"initBridgeCore returned null (env registration or session creation failed)";return Z(`[bridge:daemon] connectRemoteControl failed: ${YA}`),{ok:!1,error:{kind:wA.detail?.includes("409")?"conflict":wA.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:YA}}}async function*PA(){while(!d){while(j.length>0)if(yield j.shift(),d)return;await new Promise((YA)=>{L=YA})}}async function*HQ(){while(!d){while(z.length>0)if(yield z.shift(),d)return;await new Promise((YA)=>{g=YA})}}async function*b(){while(!d){while(T.length>0)if(yield T.shift(),d)return;await new Promise((YA)=>{S=YA})}}return{ok:!0,handle:{get sessionUrl(){return G0A(BA.bridgeSessionId,V)},get environmentId(){return BA.environmentId},get bridgeSessionId(){return BA.bridgeSessionId},getSSESequenceNum(){return BA.getSSESequenceNum()},hasPendingPrompts(){return j.length>0},write(YA){BA.writeSdkMessages([YA])},sendResult(){BA.sendResult()},sendControlRequest(YA){BA.sendControlRequest(YA)},sendControlResponse(YA){BA.sendControlResponse(YA)},sendControlCancelRequest(YA){BA.sendControlCancelRequest(YA)},inboundPrompts:PA,controlRequests:HQ,permissionResponses:b,onStateChange(YA){r=YA},async teardown(){d=!0,L?.(),g?.(),S?.(),await BA.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var jpA=1000,RpA=1e4,OpA=5000,xpA=60000,QO=3;function gpA(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 vpA(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"&&WO(C.response))E(C.response);else E({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}function _D(A){if(!A){cI("assistant_worker_start");return}if(A.kind==="auth"||A.kind==="conflict")c0("assistant_worker_start",A.kind);else tB("assistant_worker_start",A.kind)}async function SpA(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:X,log:W=()=>{}}=A;W("─── worker start ───");let N=await G?.load(),D={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??N?.lastSSESequenceNum};if(!D.getAccessToken()){let IA={kind:"auth",detail:"getAccessToken returned empty"};return _D(IA),{ok:!1,error:IA}}let w=await U0A(D);if(!w.ok)return W(`bridge connection failed: ${w.error.kind} — ${w.error.detail}`),_D(w.error),{ok:!1,error:w.error};let V=w.handle;W(`bridge connected url=${V.sessionUrl} env=${V.environmentId}`);let M=N?.claudeSessionId,j=V.bridgeSessionId,L=[],z=null,g=!1,T=null,S=0,d=!0,r=0,wA=Promise.resolve();function iA(){if(!G)return;let IA={claudeSessionId:M,lastSSESequenceNum:V.getSSESequenceNum(),bridgeSessionId:V.bridgeSessionId};wA=wA.then(()=>G.save(IA).catch((BQ)=>{W(`stateAdapter.save threw: ${BQ}`)}))}function DA(){if(L.length>0||V.hasPendingPrompts()){W("persist skipped: prompt queued");return}iA()}iA();let BA=new AbortController,PA=new Map,HQ=null;function b(){return HQ??=(async()=>{DA();for(let IA of PA.keys())V.sendControlCancelRequest(IA);PA.clear(),await V.teardown(),await wA})()}if(X.addEventListener("abort",()=>{BA.abort(),b().catch((IA)=>W(`teardown threw: ${IA}`))}),X.aborted){await b();let IA={kind:"unknown",detail:"aborted before start"};return _D(IA),{ok:!1,error:IA}}let wQ="connected";V.onStateChange((IA,BQ)=>{if(W(`bridge state=${IA} detail=${BQ??""}`),wQ=IA,IA==="ready"&&V.bridgeSessionId!==j)j=V.bridgeSessionId,iA();else if(IA==="connected")DA();if(IA==="failed")W(`bridge failed: ${BQ??"unknown"}`),BA.abort(),b().catch((MQ)=>W(`teardown threw: ${MQ}`))});let YA=I?.horizonMs??600000,$A=I?.leadMs??OpA,yQ=null,LQ=!1,AA=!1,f="";async function WA(){if(!I)return;let IA=await kl(I.dir).catch((MQ)=>{return W(`computeCronHorizon threw: ${MQ}`),{nextFire:null,hasOverdue:!1}});yQ=IA.nextFire,AA=IA.hasOverdue;let BQ=IA.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(IA.nextFire).toISOString()} hasOverdue=${IA.hasOverdue}`;if(BQ!==f)f=BQ,W(BQ)}let mA;if(I)await WA(),mA=setInterval(WA,RpA),mA.unref?.();function bA(IA){L.push({type:"user",message:{role:"user",content:IA},parent_tool_use_id:null,session_id:""}),z?.(),z=null}async function KB(IA,BQ,MQ){if(C){let JB=await C(IA,BQ,MQ);if(JB)return Y?.(IA,JB),JB}if(wQ!=="connected"){W(`permission denied — bridge state=${wQ}, request would drop`);let JB={behavior:"deny",message:`Cannot request permission: remote control is ${wQ}. Try again in a moment.`};return Y?.(IA,JB),JB}let QA=qpA();W(`permission request tool=${IA} req=${QA}`);let{signal:gE,suggestions:_Y,blockedPath:bC,toolUseID:MA}=MQ;V.sendControlRequest({type:"control_request",request_id:QA,request:{subtype:"can_use_tool",tool_name:IA,display_name:XO(IA),input:BQ,tool_use_id:MA,..._Y&&{permission_suggestions:_Y},...bC&&{blocked_path:bC},..."decisionReason"in MQ&&MQ.decisionReason&&{decision_reason:MQ.decisionReason},..."agentID"in MQ&&MQ.agentID&&{agent_id:MQ.agentID}}});let bI;try{let JB=await new Promise((g0,GE)=>{PA.set(QA,g0),bI=setTimeout((JG,OB,XA,vE,NQ)=>{if(JG.delete(OB))XA(`permission timeout req=${OB}`),vE.sendControlCancelRequest(OB),NQ({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},xpA,PA,QA,W,V,g0),bI.unref?.(),gE.addEventListener("abort",()=>{if(PA.delete(QA))V.sendControlCancelRequest(QA);GE(Error("aborted"))},{once:!0})});W(`permission response req=${QA} behavior=${JB.behavior}`);let UC=JB.behavior==="allow"?{behavior:"allow",updatedInput:JB.updatedInput,updatedPermissions:JB.updatedPermissions}:{behavior:"deny",message:JB.message??"Denied via remote control"};return Y?.(IA,UC),UC}finally{if(bI)clearTimeout(bI);PA.delete(QA)}}let iQ=!1;async function GQ(){if(T!==null||iQ||BA.signal.aborted)return;if(iQ=!0,g=!1,L.length>0)d=!1;async function*IA(){while(!g){while(L.length>0)if(d=!1,yield L.shift(),g)return;await new Promise((QA)=>{z=QA})}}W(`spawning query resume=${M??"<fresh>"}`);let BQ={assistant:!0,cwd:Q.dir,resume:M,stderr:(QA)=>W(`[child] ${QA.trimEnd()}`),canUseTool:KB},MQ;try{if(MQ=await E(BQ),B)MQ={...MQ,env:{...MQ.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(QA){if(W(`buildQueryOptions threw: ${QA}`),iQ=!1,r++,r>=QO)W(`${r} consecutive buildQueryOptions failures — dropping ${L.length} queued input(s)`),L.length=0;else if(L.length>0&&!BA.signal.aborted)GQ();return}if(BA.signal.aborted){iQ=!1;return}try{T=jc({prompt:IA(),options:MQ})}finally{iQ=!1}(async()=>{try{W("output pump started");for await(let QA of T){if(QA.type==="system"&&QA.subtype==="init"){if(QA.session_id!==M)M=QA.session_id,DA()}if(QA.type==="result")d=!0,r=0,LQ=!0,DA();if(!gpA(QA))continue;let gE=J?J(QA):QA;if(gE===null)continue;V.write(gE)}}catch(QA){W(`query threw: ${QA}`),r++}finally{W("output pump ended"),T=null;for(let QA of PA.keys())V.sendControlCancelRequest(QA);if(PA.clear(),L.length>0&&!BA.signal.aborted)if(r>=QO)W(`${r} consecutive crashes — dropping ${L.length} queued input(s)`),L.length=0;else GQ()}})()}let kI=setInterval(()=>{let IA=Date.now(),BQ=yQ!==null&&yQ-IA<YA;if(T===null){let MQ=yQ!==null&&yQ-IA<$A;if((MQ||AA&&!LQ)&&r<QO&&!BA.signal.aborted)W(MQ?`cron due in ${yQ-IA}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),GQ();return}if(g)return;if(!d||L.length>0)return;if(IA-S<F)return;if(BQ)return;if(AA&&!LQ)return;W("idle conditions met → closing input gen"),DA(),g=!0,z?.(),z=null},jpA);if(kI.unref?.(),U)W("initialPrompt → injecting"),S=Date.now(),bA(U),GQ();let JE=(async()=>{if(await Promise.all([(async()=>{for await(let IA of V.inboundPrompts()){if(BA.signal.aborted)return;if(W("bridge prompt received"),S=Date.now(),IA.uuid)V.write({type:"user",uuid:IA.uuid,session_id:"",message:{role:"user",content:IA.content},parent_tool_use_id:null});bA(IA.content),GQ()}})(),(async()=>{for await(let IA of V.controlRequests()){if(BA.signal.aborted)return;switch(IA.request.subtype){case"interrupt":W("bridge interrupt"),T?.interrupt();break;case"set_model":W(`bridge setModel=${IA.request.model??"<default>"}`),T?.setModel(IA.request.model);break;case"set_max_thinking_tokens":W(`bridge setMaxThinkingTokens=${IA.request.max_thinking_tokens}`),T?.setMaxThinkingTokens(IA.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let IA of V.permissionResponses()){if(BA.signal.aborted)return;let BQ=vpA(IA,PA,V.sendControlCancelRequest);if(BQ)W(`permission response for unknown req=${BQ} (stale)`)}})()]),clearInterval(kI),mA)clearInterval(mA);T?.close(),await b(),W("─── worker stop ───")})(),QQ={get sessionUrl(){return V.sessionUrl},get bridgeSessionId(){return V.bridgeSessionId},get claudeSessionId(){return M},pushPrompt(IA){S=Date.now(),bA(IA),GQ()},async interrupt(){await T?.interrupt()},done:JE,teardown:b,[Symbol.asyncDispose]:b};return _D(null),{ok:!0,handle:QQ}}export{SpA as runAssistantWorker};