@anthropic-ai/claude-agent-sdk 0.3.149 → 0.3.150

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.149
3
+ // Version: 0.3.150
4
4
  import{createRequire as W0A}from"node:module";var E0A=Object.create;var{getPrototypeOf:C0A,defineProperty:Q1,getOwnPropertyNames:Jx,getOwnPropertyDescriptor:Y0A}=Object,Gx=Object.prototype.hasOwnProperty;function Ux(A){return this[A]}var J0A,G0A,TY=(A,Q,B)=>{var I=A!=null&&typeof A==="object";if(I){var E=Q?J0A??=new WeakMap:G0A??=new WeakMap,C=E.get(A);if(C)return C}B=A!=null?E0A(C0A(A)):{};let Y=Q||!A||!A.__esModule?Q1(B,"default",{value:A,enumerable:!0}):B;for(let J of Jx(A))if(!Gx.call(Y,J))Q1(Y,J,{get:Ux.bind(A,J),enumerable:!0});if(I)E.set(A,Y);return Y},U0A=(A)=>{var Q=(Yx??=new WeakMap).get(A),B;if(Q)return Q;if(Q=Q1({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var I of Jx(A))if(!Gx.call(Q,I))Q1(Q,I,{get:Ux.bind(A,I),enumerable:!(B=Y0A(A,I))||B.enumerable})}return Yx.set(A,Q),Q},Yx,K=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var F0A=(A)=>A;function $0A(A,Q){this[A]=F0A.bind(null,Q)}var _E=(A,Q)=>{for(var B in Q)Q1(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:$0A.bind(Q,B)})};var H=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var O=W0A(import.meta.url),N0A=Symbol.dispose||Symbol.for("Symbol.dispose"),X0A=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[X0A];if(I===void 0)I=Q[N0A];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 E1(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 Nx=()=>{};var C1=H(()=>{Nx()});var Z0A,Xx;var Dx=H(()=>{Z0A=typeof global=="object"&&global&&global.Object===Object&&global,Xx=Z0A});var H0A,L0A,UG;var TW=H(()=>{Dx();H0A=typeof self=="object"&&self&&self.Object===Object&&self,L0A=Xx||H0A||Function("return this")(),UG=L0A});var q0A,FG;var mD=H(()=>{TW();q0A=UG.Symbol,FG=q0A});function x0A(A){var Q=j0A.call(A,Y1),B=A[Y1];try{A[Y1]=void 0;var I=!0}catch(C){}var E=R0A.call(A);if(I)if(Q)A[Y1]=B;else delete A[Y1];return E}var Vx,j0A,R0A,Y1,wx;var Mx=H(()=>{mD();Vx=Object.prototype,j0A=Vx.hasOwnProperty,R0A=Vx.toString,Y1=FG?FG.toStringTag:void 0;wx=x0A});function v0A(A){return g0A.call(A)}var O0A,g0A,Kx;var zx=H(()=>{O0A=Object.prototype,g0A=O0A.toString;Kx=v0A});function P0A(A){if(A==null)return A===void 0?_0A:S0A;return Zx&&Zx in Object(A)?wx(A):Kx(A)}var S0A="[object Null]",_0A="[object Undefined]",Zx,Hx;var Lx=H(()=>{mD();Mx();zx();Zx=FG?FG.toStringTag:void 0;Hx=P0A});function T0A(A){var Q=typeof A;return A!=null&&(Q=="object"||Q=="function")}var kW;var cD=H(()=>{kW=T0A});function h0A(A){if(!kW(A))return!1;var Q=Hx(A);return Q==b0A||Q==y0A||Q==k0A||Q==f0A}var k0A="[object AsyncFunction]",b0A="[object Function]",y0A="[object GeneratorFunction]",f0A="[object Proxy]",qx;var jx=H(()=>{Lx();cD();qx=h0A});var m0A,bW;var Rx=H(()=>{TW();m0A=UG["__core-js_shared__"],bW=m0A});function c0A(A){return!!xx&&xx in A}var xx,Ox;var gx=H(()=>{Rx();xx=function(){var A=/[^.]+$/.exec(bW&&bW.keys&&bW.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();Ox=c0A});function l0A(A){if(A!=null){try{return p0A.call(A)}catch(Q){}try{return A+""}catch(Q){}}return""}var u0A,p0A,vx;var Sx=H(()=>{u0A=Function.prototype,p0A=u0A.toString;vx=l0A});function t0A(A){if(!kW(A)||Ox(A))return!1;var Q=qx(A)?s0A:d0A;return Q.test(vx(A))}var i0A,d0A,n0A,o0A,a0A,r0A,s0A,_x;var Px=H(()=>{jx();gx();cD();Sx();i0A=/[\\^$.*+?()[\]{}|]/g,d0A=/^\[object .+?Constructor\]$/,n0A=Function.prototype,o0A=Object.prototype,a0A=n0A.toString,r0A=o0A.hasOwnProperty,s0A=RegExp("^"+a0A.call(r0A).replace(i0A,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");_x=t0A});function e0A(A,Q){return A==null?void 0:A[Q]}var Tx;var kx=H(()=>{Tx=e0A});function AYA(A,Q){var B=Tx(A,Q);return _x(B)?B:void 0}var yW;var uD=H(()=>{Px();kx();yW=AYA});var QYA,cC;var J1=H(()=>{uD();QYA=yW(Object,"create"),cC=QYA});function BYA(){this.__data__=cC?cC(null):{},this.size=0}var bx;var yx=H(()=>{J1();bx=BYA});function IYA(A){var Q=this.has(A)&&delete this.__data__[A];return this.size-=Q?1:0,Q}var fx;var hx=H(()=>{fx=IYA});function JYA(A){var Q=this.__data__;if(cC){var B=Q[A];return B===EYA?void 0:B}return YYA.call(Q,A)?Q[A]:void 0}var EYA="__lodash_hash_undefined__",CYA,YYA,mx;var cx=H(()=>{J1();CYA=Object.prototype,YYA=CYA.hasOwnProperty;mx=JYA});function FYA(A){var Q=this.__data__;return cC?Q[A]!==void 0:UYA.call(Q,A)}var GYA,UYA,ux;var px=H(()=>{J1();GYA=Object.prototype,UYA=GYA.hasOwnProperty;ux=FYA});function WYA(A,Q){var B=this.__data__;return this.size+=this.has(A)?0:1,B[A]=cC&&Q===void 0?$YA:Q,this}var $YA="__lodash_hash_undefined__",lx;var ix=H(()=>{J1();lx=WYA});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 dx=H(()=>{yx();hx();cx();px();ix();$G.prototype.clear=bx;$G.prototype.delete=fx;$G.prototype.get=mx;$G.prototype.has=ux;$G.prototype.set=lx;pD=$G});function NYA(){this.__data__=[],this.size=0}var nx;var ox=H(()=>{nx=NYA});function XYA(A,Q){return A===Q||A!==A&&Q!==Q}var ax;var rx=H(()=>{ax=XYA});function DYA(A,Q){var B=A.length;while(B--)if(ax(A[B][0],Q))return B;return-1}var _0;var G1=H(()=>{rx();_0=DYA});function MYA(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 wYA.call(Q,B,1);return--this.size,!0}var VYA,wYA,sx;var tx=H(()=>{G1();VYA=Array.prototype,wYA=VYA.splice;sx=MYA});function KYA(A){var Q=this.__data__,B=_0(Q,A);return B<0?void 0:Q[B][1]}var ex;var AO=H(()=>{G1();ex=KYA});function zYA(A){return _0(this.__data__,A)>-1}var QO;var BO=H(()=>{G1();QO=zYA});function ZYA(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 IO;var EO=H(()=>{G1();IO=ZYA});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 CO;var YO=H(()=>{ox();tx();AO();BO();EO();WG.prototype.clear=nx;WG.prototype.delete=sx;WG.prototype.get=ex;WG.prototype.has=QO;WG.prototype.set=IO;CO=WG});var HYA,JO;var GO=H(()=>{uD();TW();HYA=yW(UG,"Map"),JO=HYA});function LYA(){this.size=0,this.__data__={hash:new pD,map:new(JO||CO),string:new pD}}var UO;var FO=H(()=>{dx();YO();GO();UO=LYA});function qYA(A){var Q=typeof A;return Q=="string"||Q=="number"||Q=="symbol"||Q=="boolean"?A!=="__proto__":A===null}var $O;var WO=H(()=>{$O=qYA});function jYA(A,Q){var B=A.__data__;return $O(Q)?B[typeof Q=="string"?"string":"hash"]:B.map}var P0;var U1=H(()=>{WO();P0=jYA});function RYA(A){var Q=P0(this,A).delete(A);return this.size-=Q?1:0,Q}var NO;var XO=H(()=>{U1();NO=RYA});function xYA(A){return P0(this,A).get(A)}var DO;var VO=H(()=>{U1();DO=xYA});function OYA(A){return P0(this,A).has(A)}var wO;var MO=H(()=>{U1();wO=OYA});function gYA(A,Q){var B=P0(this,A),I=B.size;return B.set(A,Q),this.size+=B.size==I?0:1,this}var KO;var zO=H(()=>{U1();KO=gYA});function NG(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 ZO=H(()=>{FO();XO();VO();MO();zO();NG.prototype.clear=UO;NG.prototype.delete=NO;NG.prototype.get=DO;NG.prototype.has=wO;NG.prototype.set=KO;lD=NG});function iD(A,Q){if(typeof A!="function"||Q!=null&&typeof Q!="function")throw TypeError(vYA);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 vYA="Expected a function",FQ;var PE=H(()=>{ZO();iD.Cache=lD;FQ=iD});import{homedir as SYA}from"os";import{join as _YA}from"path";function dD(A){let Q=process.env.NODE_OPTIONS;if(!Q)return!1;return Q.split(/\s+/).includes(A)}function HO(){return!1}function LO(){return{namespace:void 0,cluster:void 0}}var FE,hiA;var QB=H(()=>{C1();PE();C1();FE=FQ(()=>{return(process.env.CLAUDE_CONFIG_DIR??_YA(SYA(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR);hiA=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 x(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 uC=()=>{};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 F1=(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,cB,bY,$1,W1,N1,X1,D1,V1,w1,M1,K1;var uB=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:F1(Q)});let E=Q,C=E?.error?.type;if(A===400)return new W1(A,E,B,I,C);if(A===401)return new N1(A,E,B,I,C);if(A===403)return new X1(A,E,B,I,C);if(A===404)return new D1(A,E,B,I,C);if(A===409)return new V1(A,E,B,I,C);if(A===422)return new w1(A,E,B,I,C);if(A===429)return new M1(A,E,B,I,C);if(A>=500)return new K1(A,E,B,I,C);return new gB(A,E,B,I,C)}};cB=class cB 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}};$1=class $1 extends bY{constructor({message:A}={}){super({message:A??"Request timed out."})}};W1=class W1 extends gB{};N1=class N1 extends gB{};X1=class X1 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{}});function fW(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 jO(A,Q){return Object.prototype.hasOwnProperty.call(A,Q)}var TYA,qO=(A)=>{return TYA.test(A)},oD=(A)=>(oD=Array.isArray,oD(A)),aD,RO=(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},hW=(A)=>{try{return JSON.parse(A)}catch(Q){return}};var T0=H(()=>{uB();TYA=/^[a-z][a-z0-9+.-]*:/i,aD=oD});var xO=(A)=>new Promise((Q)=>setTimeout(Q,A));var $E="0.94.0";function kYA(){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 yYA(){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 SO=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},bYA=()=>{let A=kYA();if(A==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":$E,"X-Stainless-OS":gO(Deno.build.os),"X-Stainless-Arch":OO(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":gO(globalThis.process.platform??"unknown"),"X-Stainless-Arch":OO(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Q=yYA();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"}},OO=(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"},gO=(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"},vO,z1=()=>{return vO??(vO=bYA())};var mW=()=>{};function _O(){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 Z1(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 PO(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 TO=({headers:A,body:Q})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Q)}};function kO(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(()=>{uB()});function pW(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 lW(A,Q){let B=await cYA(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(mYA.has(B))Q[B]=I;return Q}return null}async function iW(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 dW(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 cYA(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>bO){let J=bO-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 yO="urn:ietf:params:oauth:grant-type:jwt-bearer",fO="refresh_token",uW="/v1/oauth/token",yY="oauth-2025-04-20",hO="oidc-federation-2026-04-01",mO=120,XG=30,cO=5,bO=1048576,eD=2000,mYA,qQ;var DG=H(()=>{uB();mYA=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>mO)return Q.token;if(B>XG)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<cO)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 uO=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 iO(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(pO??(Q=new globalThis.TextEncoder,pO=Q.encode.bind(Q)))(A)}function QV(A){let Q;return(lO??(Q=new globalThis.TextDecoder,lO=Q.decode.bind(Q)))(A)}var pO,lO;var dO=H(()=>{uB()});function H1(){}function nW(A,Q,B){if(!Q||oW[A]>oW[B])return H1;else return Q[A].bind(Q)}function DB(A){let Q=A.logger,B=A.logLevel??"off";if(!Q)return uYA;let I=nO.get(Q);if(I&&I[0]===B)return I[1];let E={error:nW("error",Q,B),warn:nW("warn",Q,B),info:nW("info",Q,B),debug:nW("debug",Q,B)};return nO.set(Q,[B,E]),E}var oW,BV=(A,Q,B)=>{if(!A)return;if(jO(oW,A))return A;DB(B).warn(`${Q} was set to ${JSON.stringify(A)}, expected one of ${JSON.stringify(Object.keys(oW))}`);return},uYA,nO,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 L1=H(()=>{T0();oW={off:0,error:200,warn:300,info:400,debug:500};uYA={error:H1,warn:H1,info:H1,debug:H1},nO=new WeakMap});var oO=H(()=>{T0();dO();L1();tD()});function aO(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(!pYA.test(A))throw Error(`profile name "${A}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var aW="1.0",pYA,rO=async(A)=>{var Q,B;let I=await IV();if(I===null)return null;let E=A??await tO();if(E===null)return null;aO(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(N){if(N?.code!=="ENOENT")throw Error(`failed to read config file ${J}: ${N}`);G=null}if(G===null){let N=KQ("ANTHROPIC_ORGANIZATION_ID"),W=KQ("ANTHROPIC_IDENTITY_TOKEN_FILE"),X=KQ("ANTHROPIC_FEDERATION_RULE_ID");if(X&&N)return{fromFile:!1,config:{organization_id:N,workspace_id:KQ("ANTHROPIC_WORKSPACE_ID"),base_url:KQ("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:X,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(N){throw Error(`failed to parse config file ${J}: ${N}`)}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 N=KQ("ANTHROPIC_IDENTITY_TOKEN_FILE");if(N)U.authentication.identity_token={source:"file",path:N}}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}},sO=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 tO();if(!I)return null;return aO(I),(await import("node:path")).join(B,"credentials",`${I}.json`)},IV=async()=>{if(!lYA())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},lYA=()=>{let A=z1()["X-Stainless-Runtime"];return A==="node"||A==="deno"},tO=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(()=>{mW();oO();pYA=/^[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 eO(A){if(!A)throw new t("Identity token value is empty");return()=>A}var Ag=H(()=>{uB()});function Qg(A){return async()=>{pW(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:yO,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}${uW}`,E;try{E=await A.fetch(I,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${yY},${hO}`,"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 lW(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 Bg=H(()=>{DG()});function Ig(A){return async(Q)=>{let B=await import("node:fs");await iW(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-XG))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"})`);pW(A.baseURL);let G={grant_type:fO,refresh_token:J,client_id:A.clientId},U=`${A.baseURL}${uW}`,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 N=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),N)}let W=await lW(F,N),X=Number(W.expires_in);if(!Number.isFinite(X))throw new qQ(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(DI(W))}`,F.status,DI(W),N);let D=TE()+X,w=W.refresh_token||J;return await dW(A.credentialsPath,{...E,version:aW,type:"oauth_token",access_token:W.access_token,expires_at:D,refresh_token:w}),{token:W.access_token,expiresAt:D}}}var Eg=H(()=>{EV();DG()});function YV(A,Q){let B=A.authentication.credentials_path??null,I=(A.base_url||Q.baseURL).replace(/\/+$/,""),E=iYA(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 Cg(A,Q){let B=await rO(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 sO(I,Q)??void 0}};return YV(C,A)}function iYA(A,Q,B,I){switch(A.authentication.type){case"oidc_federation":{let E=A.authentication,C=dYA(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=Qg({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 nYA(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 Ig({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 dYA(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 eO(B);return null}function nYA(A,Q,B,I){return async(E)=>{let C=await import("node:fs");await iW(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-XG)return{token:U,expiresAt:F??null}}}catch(G){if(G?.code!=="ENOENT"&&!(G instanceof SyntaxError))B?.(G)}let J=await A(E);try{await dW(Q,{...Y??{},version:aW,type:"oauth_token",access_token:J.token,expires_at:J.expiresAt})}catch(G){B?.(G)}return J}}var Yg=H(()=>{EV();DG();Ag();Bg();Eg()});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,iO([x(this,yI,"f"),Q]),"f");let B=[],I;while((I=oYA(x(this,yI,"f"),x(this,fI,"f")))!=null){if(I.carriage&&x(this,fI,"f")==null){o(this,fI,I.index,"f");continue}if(x(this,fI,"f")!=null&&(I.index!==x(this,fI,"f")+1||I.carriage)){B.push(QV(x(this,yI,"f").subarray(0,x(this,fI,"f")-1))),o(this,yI,x(this,yI,"f").subarray(x(this,fI,"f")),"f"),o(this,fI,null,"f");continue}let E=x(this,fI,"f")!==null?I.preceding-1:I.preceding,C=QV(x(this,yI,"f").subarray(0,E));B.push(C),o(this,yI,x(this,yI,"f").subarray(I.index),"f"),o(this,fI,null,"f")}return B}flush(){if(!x(this,yI,"f").length)return[];return this.decode(`
5
5
  `)}}function oYA(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 Jg(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(()=>{uC();yI=new WeakMap,fI=new WeakMap;k0.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);k0.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*aYA(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 Gg,I=new k0,E=Z1(A.body);for await(let C of rYA(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*rYA(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=Jg(Q))!==-1)yield Q.slice(0,C),Q=Q.slice(C)}if(Q.length>0)yield Q}class Gg{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(FEA(E))Q[I]=E;break;case"id":if($EA(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)M9.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 M9.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;M9.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"],(X)=>{delete E[X]}),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,N;if(!J){let X=[v6.bind(this),void 0];X.unshift(...Y),X.push(...G),N=X.length,U=Promise.resolve(Q);while(F<N)U=U.then(X[F++],X[F++]);return U}N=Y.length;let W=Q;while(F<N){let X=Y[F++],D=Y[F++];try{W=X(W)}catch(w){D.call(this,w);break}}try{U=v6.call(this,W)}catch(X){return Promise.reject(X)}F=0,N=G.length;while(F<N)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 OJ(Q,A.params,A.paramsSerializer)}}q.forEach(["delete","get","head","options"],function(Q){K9.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}))}}K9.prototype[Q]=B(),K9.prototype[Q+"Form"]=B(!0)});var z9=K9;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 No=Eq;function Xo(A){let Q=new z9(A),B=A9(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 Xo(AC(A,E))},B}var qB=Xo(nU);qB.Axios=z9;qB.CanceledError=aI;qB.CancelToken=Wo;qB.isCancel=$9;qB.VERSION=TJ;qB.toFormData=GY;qB.AxiosError=u;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)=>V6(q.isHTMLForm(A)?new FormData(A):A);qB.getAdapter=g6.getAdapter;qB.HttpStatusCode=No;qB.default=qB;var WB=qB;eA();oE();RQ();cI();import{mkdirSync as ajA,writeFileSync as rjA}from"fs";cI();eA();QB();RQ();sB();var _6="/home/claude/.claude/remote",DwQ=`${_6}/.oauth_token`,VwQ=`${_6}/.api_key`,P6=`${_6}/.session_ingress_token`;function Do(A,Q,B){if(!dA(process.env.CLAUDE_CODE_REMOTE))return;try{ajA(_6,{recursive:!0,mode:448}),rjA(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 sjA(){let A=Bv();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??P6,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),Do(P6,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??P6,C=Cq(E,"session ingress token");return _G(C),C}}function Z9(){let A=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(A)return A;return sjA()}function T6(){let A=Z9();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 H9(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)})}}c0();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 ejA}from"https";PE();eA();QB();sB();var Vo=["bundled","system"];function tjA(){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:Vo}if(dD("--use-system-ca")||dD("--use-openssl-ca"))return["system"];return Vo}var A4=FQ(()=>{let A=tjA(),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=O("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?MF(Y):void 0});eA();sB();var L9=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}),ARA=FQ(()=>{let A=L9(),Q=A4();if(!A&&!Q)return;let B={...A,...Q&&{ca:Q},keepAlive:!0};return z("mTLS: Creating HTTPS agent with custom certificates"),new ejA(B)});function wo(){let A=L9(),Q=A4();if(!A&&!Q)return;return{...A,...Q&&{ca:Q}}}function k6(){let A=L9(),Q=A4();if(!A&&!Q)return{};return{tls:{...A,...Q&&{ca:Q}}}}PE();cI();var hmA=TY(_o(),1);eA();QB();dH();var mmA=!1;function xEA(A=process.env){return A.https_proxy||A.HTTPS_PROXY||A.http_proxy||A.HTTP_PROXY}function cmA(A=process.env){return A.no_proxy||A.NO_PROXY}function OEA(A,Q=cmA()){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}}var y3Q=FQ((A)=>{let Q=REA(),B=L9(),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 gEA(A){let Q=xEA();if(!Q)return;if(OEA(A))return;return Q}var umA=null;function pmA(){return umA?.value??null}function vR(A){let Q={...mmA&&{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=xEA();if(B){if(A.url&&OEA(A.url))return{...Q,...k6()};let I=pmA();return{...Q,proxy:I?{url:B,headers:{"Proxy-Authorization":I}}:B,...k6()}}return{...Q,...k6()}}PG();oE();QB();var lmA=30000;function imA(){return{activityCallback:null,refcount:0,activeReasons:new Map,oldestActivityStartedAt:null,heartbeatTimer:null,idleTimer:null,cleanupHandle:null}}var dmA="cli",vEA=()=>dmA;var SR=new Map;function nmA(){let A=vEA(),Q=SR.get(A);if(!Q)Q=imA(),SR.set(A,Q);return Q}function omA(){return SR.get(vEA())??null}function amA(A){SEA(A),A.heartbeatTimer=setInterval((Q)=>{if(a("debug","session_keepalive_heartbeat",{refcount:Q.refcount}),dA(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))Q.activityCallback?.()},lmA,A)}function SEA(A){if(A.idleTimer!==null)clearTimeout(A.idleTimer),A.idleTimer=null}function wD(A){let Q=nmA();if(Q.activityCallback=A,Q.refcount>0&&Q.heartbeatTimer===null)amA(Q)}function jW(){let A=omA();if(!A)return;if(A.activityCallback=null,A.heartbeatTimer!==null)clearInterval(A.heartbeatTimer),A.heartbeatTimer=null;SEA(A)}IQ();var rmA=`{"type":"keep_alive"}
178
178
  `,smA=1000,tmA=1000,PEA=30000,emA=600000,AcA=1e4,QcA=300000,_EA=PEA*2,BcA=new Set([1002,4001,4003]);class _R{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(smA)}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:gEA(this.url.href),tls:wo()||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(),jW(),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&&BcA.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>_EA)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<emA){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(tmA*Math.pow(2,this.reconnectAttempts-1),PEA),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(),jW(),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>_EA){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")}}},AcA)}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(rmA),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")}},QcA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var IcA=100,EcA=15000,CcA=3000;class PR extends _R{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=YcA(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(),IcA);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,CcA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=Z9();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:EcA})}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 YcA(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}`}c0();QB();function TEA(){let{namespace:A,cluster:Q}=LO();return{...A&&{cooNamespace:A},...Q&&{cooCluster:Q}}}PG();import{chmod as j7Q,mkdir as R7Q,readdir as x7Q,readFile as FcA,unlink as O7Q,writeFile as $cA}from"fs/promises";import{join as bEA}from"path";cI();c0();PG();eA();QB();RQ();eX();IQ();import{AsyncLocalStorage as JcA}from"async_hooks";var F7Q=new JcA;QB();var i7Q=k(()=>XC.object({pid:XC.number(),sessionId:XC.string(),cwd:XC.string().optional(),startedAt:XC.number(),version:XC.string().optional(),kind:XC.enum(["interactive","bg","daemon","daemon-worker"])}));function WcA(){return bEA(FE(),"sessions")}var kEA=Promise.resolve();async function NcA(A){let Q=bEA(WcA(),`${process.pid}.json`),B=kEA.then(async()=>{try{let I=mQ(await FcA(Q,"utf8"));await $cA(Q,LA({...I,...A}))}catch(I){z(`[concurrentSessions] updatePidFile failed: ${JA(I)}`)}});kEA=B,await B}async function yEA(A){await NcA({bridgeSessionId:A})}eA();oE();QB();RQ();function XB(A,Q){return Object.freeze({name:A,header:Q})}var XcA=XB("claude_code","claude-code-20250219"),DcA=XB("oauth_auth",PP),VcA=XB("interleaved_thinking","interleaved-thinking-2025-05-14"),wcA=XB("long_context","context-1m-2025-08-07"),McA=XB("context_management","context-management-2025-06-27"),KcA=XB("structured_outputs","structured-outputs-2025-12-15"),zcA=XB("web_search","web-search-2025-03-05"),ZcA=XB("tool_search","advanced-tool-use-2025-11-20"),HcA=XB("tool_search","tool-search-tool-2025-10-19"),LcA=XB("effort","effort-2025-11-24"),qcA=XB("task_budgets","task-budgets-2026-03-13"),jcA=XB("prompt_caching_scope","prompt-caching-scope-2026-01-05"),RcA=XB("extended_cache_ttl","extended-cache-ttl-2025-04-11"),xcA=XB("speed","fast-mode-2026-02-01"),OcA=XB("redact_thinking","redact-thinking-2026-02-12"),gcA=null,vcA=null,ScA=null,_cA=XB("advisor_tool","advisor-tool-2026-03-01"),PcA=XB("cache_diagnosis","cache-diagnosis-2026-04-07"),TcA=XB("context_hint","context-hint-2026-04-09"),kcA=XB("mcp_servers","mcp-servers-2025-12-04"),bcA=XB("files_api","files-api-2025-04-14"),kR=XB("environments","environments-2025-11-01"),ycA=XB("ccr_byoc","ccr-byoc-2025-07-29"),fcA=null,hcA=Object.freeze([XcA,DcA,VcA,wcA,McA,KcA,zcA,ZcA,HcA,LcA,qcA,jcA,RcA,xcA,OcA,gcA,vcA,ScA,_cA,PcA,TcA,kcA,bcA,kR,ycA,fcA].filter((A)=>A!==null)),o7Q=new Map(hcA.map((A)=>[A.header,A]));oC();mR();function kC(){return"claude-code/0.3.149"}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 GuA}from"crypto";function FCA(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:GuA()}}))}}}c0();eA();RQ();IQ();var $CA=2000,UuA=["session_ingress_token","environment_secret","access_token","secret","token"],FuA=new RegExp(`"(${UuA.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),$uA=16;function WuA(A){return A.replace(FuA,(Q,B,I)=>{if(I.length<$uA)return`"${B}":"[REDACTED]"`;let E=`${I.slice(0,8)}...${I.slice(-4)}`;return`"${B}":"${E}"`})}function t4(A){let Q=typeof A==="string"?A:LA(A),B=WuA(Q);if(B.length<=$CA)return B;return B.slice(0,$CA)+`... (${B.length} chars)`}function WCA(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 NCA(A){if(A&&typeof A==="object"&&"response"in A&&A.response&&typeof A.response.status==="number")return A.response.status;return}function pR(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 XCA(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 pR(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 DCA(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 NuA=/^[a-zA-Z0-9_-]+$/;function TI(A,Q){if(!A||!NuA.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 wCA(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":kR.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(),X=await J(W);if(X.status!==401)return X;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 O0(G.status,G.data,"Registration"),Q(`[bridge:api] POST /v1/environments/bridge -> ${G.status} environment_id=${G.data.environment_id}`),Q(`[bridge:api] >>> ${t4({machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:GCA(J.gitRepoUrl),max_sessions:J.maxSessions,metadata:{worker_type:J.workerType}})}`),Q(`[bridge:api] <<< ${t4(G.data)}`),G.data},VCA)},async pollForWork(J,G,U,F){TI(J,"environmentId");let N=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:(X)=>X<500});if(O0(W.status,W.data,"Poll",W.headers),!W.data){if(B=N+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] <<< ${t4(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:(N)=>N<500});O0(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(N)=>WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/stop`,{force:U},{headers:await E(N),timeout:1e4,validateStatus:(W)=>W<500}),"StopWork");O0(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");O0(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}O0(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:(N)=>N<500}),"ReconnectSession");O0(U.status,U.data,"ReconnectSession"),Q(`[bridge:api] POST .../bridge/reconnect -> ${U.status}`)},VCA)},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:(N)=>N<500});return O0(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:N}=FCA(A.baseUrl,J,[G],A.useCcrV2Routing?.()??!1);Q(`[bridge:api] POST ${F} type=${G.type}`);let W=await WB.post(F,N,{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});O0(W.status,W.data,"SendPermissionResponseEvent"),Q(`[bridge:api] POST ${F} -> ${W.status}`),Q(`[bridge:api] >>> ${t4(N)}`),Q(`[bridge:api] <<< ${t4(W.data)}`)}}}function O0(A,Q,B,I){if(A===200||A===204)return;let E=YG(Q),C=XuA(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=pR(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 MCA(A){if(A.status!==403)return!1;return A.message.includes("external_poll_sessions")||A.message.includes("environments:manage")}function VCA(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 XuA(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 DuA}from"crypto";oC();c0();var KCA={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 zCA(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 VuA(A){return A!==null&&typeof A==="object"&&"type"in A&&typeof A.type==="string"}function wuA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_response"&&"response"in A}function MuA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_request"&&"request_id"in A&&"request"in A}function lR(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 ZCA(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 HCA(A,Q,B,I,E,C){try{let Y=zCA(mQ(A));if(wuA(Y)){z("[bridge:repl] Ingress message type=control_response"),E?.(Y);return}if(MuA(Y)){z(`[bridge:repl] Inbound control_request subtype=${Y.request.subtype}`),C?.(Y);return}if(!VuA(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}),uI("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 KuA="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function LCA(A,Q){let{transport:B,sessionId:I,outboundOnly:E,onInterrupt:C,onSetModel:Y,onSetMaxThinkingTokens:J,onSetPermissionMode:G,onRenameSession:U,onSetColor:F,onFileSuggestions:N,onReadFile:W,onGetContextUsage:X,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:KuA}};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(!N){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}N(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(!X){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}X().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 iR(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:{...KCA},modelUsage:{},permission_denials:[],session_id:A,uuid:DuA()}}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 qCA(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 dR{_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 xCA}from"crypto";c0();eA();oE();RQ();IQ();function zuA(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 jCA(A){let Q=zuA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}eA();oE();RQ();IQ();class nR{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?RCA(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=RCA(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 RCA(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 ZuA=20000,HuA=100;function OCA(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 LuA=10,quA=3;function juA(){return{byMessage:new Map,scopeToMessage:new Map}}function xD(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function RuA(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(xD(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(xD(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(xD(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 xuA(A,Q){A.byMessage.delete(Q.message.id);let B=xD(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class oR{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=juA();workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ZuA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??T6,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 nR({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),...vR({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>=quA)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=Z9(),U=G?jCA(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>=LuA)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:OCA(J)}),{ok:!1,reason:`fetch_failed:${OCA(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:OuA(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(),HuA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")xuA(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:xCA()},...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=RuA(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:xCA()},...B&&{is_compaction:!0},...I&&{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),...vR({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(),jW(),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 OuA(A){let Q=A.post_turn_summary;if(!guA(Q)||Q.status_category!=="blocked")return A;return{...A,post_turn_summary:{...Q,status_category:"need_input"}}}function guA(A){return A!==null&&typeof A==="object"&&"status_category"in A&&typeof A.status_category==="string"}eA();oE();RQ();IQ();QB();var vuA={};var SuA=!1;function gCA(A,Q){if(SuA)return;vuA[A]=Math.round(Q)}var _uA=1000,PuA=30000,vCA=45000,TuA=new Set([401,403,404]),OW=10,kuA=500,buA=8000,yuA={stream:!0};function fuA(){return!0}function huA(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>_EA){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")}}},AcA)}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(rmA),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")}},QcA)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var IcA=100,EcA=15000,CcA=3000;class PR extends _R{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=YcA(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(),IcA);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,CcA)})]).finally(()=>{clearTimeout(Q),A.close()}),super.close()}async postOnce(A){let Q=Z9();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:EcA})}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 YcA(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}`}c0();QB();function TEA(){let{namespace:A,cluster:Q}=LO();return{...A&&{cooNamespace:A},...Q&&{cooCluster:Q}}}PG();import{chmod as j7Q,mkdir as R7Q,readdir as x7Q,readFile as FcA,unlink as O7Q,writeFile as $cA}from"fs/promises";import{join as bEA}from"path";cI();c0();PG();eA();QB();RQ();eX();IQ();import{AsyncLocalStorage as JcA}from"async_hooks";var F7Q=new JcA;QB();var i7Q=k(()=>XC.object({pid:XC.number(),sessionId:XC.string(),cwd:XC.string().optional(),startedAt:XC.number(),version:XC.string().optional(),kind:XC.enum(["interactive","bg","daemon","daemon-worker"])}));function WcA(){return bEA(FE(),"sessions")}var kEA=Promise.resolve();async function NcA(A){let Q=bEA(WcA(),`${process.pid}.json`),B=kEA.then(async()=>{try{let I=mQ(await FcA(Q,"utf8"));await $cA(Q,LA({...I,...A}))}catch(I){z(`[concurrentSessions] updatePidFile failed: ${JA(I)}`)}});kEA=B,await B}async function yEA(A){await NcA({bridgeSessionId:A})}eA();oE();QB();RQ();function XB(A,Q){return Object.freeze({name:A,header:Q})}var XcA=XB("claude_code","claude-code-20250219"),DcA=XB("oauth_auth",PP),VcA=XB("interleaved_thinking","interleaved-thinking-2025-05-14"),wcA=XB("long_context","context-1m-2025-08-07"),McA=XB("context_management","context-management-2025-06-27"),KcA=XB("structured_outputs","structured-outputs-2025-12-15"),zcA=XB("web_search","web-search-2025-03-05"),ZcA=XB("tool_search","advanced-tool-use-2025-11-20"),HcA=XB("tool_search","tool-search-tool-2025-10-19"),LcA=XB("effort","effort-2025-11-24"),qcA=XB("task_budgets","task-budgets-2026-03-13"),jcA=XB("prompt_caching_scope","prompt-caching-scope-2026-01-05"),RcA=XB("extended_cache_ttl","extended-cache-ttl-2025-04-11"),xcA=XB("speed","fast-mode-2026-02-01"),OcA=XB("redact_thinking","redact-thinking-2026-02-12"),gcA=null,vcA=null,ScA=null,_cA=XB("advisor_tool","advisor-tool-2026-03-01"),PcA=XB("cache_diagnosis","cache-diagnosis-2026-04-07"),TcA=XB("context_hint","context-hint-2026-04-09"),kcA=XB("mcp_servers","mcp-servers-2025-12-04"),bcA=XB("files_api","files-api-2025-04-14"),kR=XB("environments","environments-2025-11-01"),ycA=XB("ccr_byoc","ccr-byoc-2025-07-29"),fcA=null,hcA=Object.freeze([XcA,DcA,VcA,wcA,McA,KcA,zcA,ZcA,HcA,LcA,qcA,jcA,RcA,xcA,OcA,gcA,vcA,ScA,_cA,PcA,TcA,kcA,bcA,kR,ycA,fcA].filter((A)=>A!==null)),o7Q=new Map(hcA.map((A)=>[A.header,A]));oC();mR();function kC(){return"claude-code/0.3.150"}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 GuA}from"crypto";function FCA(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:GuA()}}))}}}c0();eA();RQ();IQ();var $CA=2000,UuA=["session_ingress_token","environment_secret","access_token","secret","token"],FuA=new RegExp(`"(${UuA.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),$uA=16;function WuA(A){return A.replace(FuA,(Q,B,I)=>{if(I.length<$uA)return`"${B}":"[REDACTED]"`;let E=`${I.slice(0,8)}...${I.slice(-4)}`;return`"${B}":"${E}"`})}function t4(A){let Q=typeof A==="string"?A:LA(A),B=WuA(Q);if(B.length<=$CA)return B;return B.slice(0,$CA)+`... (${B.length} chars)`}function WCA(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 NCA(A){if(A&&typeof A==="object"&&"response"in A&&A.response&&typeof A.response.status==="number")return A.response.status;return}function pR(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 XCA(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 pR(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 DCA(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 NuA=/^[a-zA-Z0-9_-]+$/;function TI(A,Q){if(!A||!NuA.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 wCA(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":kR.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(),X=await J(W);if(X.status!==401)return X;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 O0(G.status,G.data,"Registration"),Q(`[bridge:api] POST /v1/environments/bridge -> ${G.status} environment_id=${G.data.environment_id}`),Q(`[bridge:api] >>> ${t4({machine_name:J.machineName,directory:J.dir,branch:J.branch,git_repo_url:GCA(J.gitRepoUrl),max_sessions:J.maxSessions,metadata:{worker_type:J.workerType}})}`),Q(`[bridge:api] <<< ${t4(G.data)}`),G.data},VCA)},async pollForWork(J,G,U,F){TI(J,"environmentId");let N=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:(X)=>X<500});if(O0(W.status,W.data,"Poll",W.headers),!W.data){if(B=N+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] <<< ${t4(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:(N)=>N<500});O0(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(N)=>WB.post(`${A.baseUrl}/v1/environments/${J}/work/${G}/stop`,{force:U},{headers:await E(N),timeout:1e4,validateStatus:(W)=>W<500}),"StopWork");O0(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");O0(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}O0(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:(N)=>N<500}),"ReconnectSession");O0(U.status,U.data,"ReconnectSession"),Q(`[bridge:api] POST .../bridge/reconnect -> ${U.status}`)},VCA)},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:(N)=>N<500});return O0(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:N}=FCA(A.baseUrl,J,[G],A.useCcrV2Routing?.()??!1);Q(`[bridge:api] POST ${F} type=${G.type}`);let W=await WB.post(F,N,{headers:await E(U),timeout:1e4,validateStatus:(X)=>X<500});O0(W.status,W.data,"SendPermissionResponseEvent"),Q(`[bridge:api] POST ${F} -> ${W.status}`),Q(`[bridge:api] >>> ${t4(N)}`),Q(`[bridge:api] <<< ${t4(W.data)}`)}}}function O0(A,Q,B,I){if(A===200||A===204)return;let E=YG(Q),C=XuA(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=pR(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 MCA(A){if(A.status!==403)return!1;return A.message.includes("external_poll_sessions")||A.message.includes("environments:manage")}function VCA(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 XuA(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 DuA}from"crypto";oC();c0();var KCA={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 zCA(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 VuA(A){return A!==null&&typeof A==="object"&&"type"in A&&typeof A.type==="string"}function wuA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_response"&&"response"in A}function MuA(A){return A!==null&&typeof A==="object"&&"type"in A&&A.type==="control_request"&&"request_id"in A&&"request"in A}function lR(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 ZCA(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 HCA(A,Q,B,I,E,C){try{let Y=zCA(mQ(A));if(wuA(Y)){z("[bridge:repl] Ingress message type=control_response"),E?.(Y);return}if(MuA(Y)){z(`[bridge:repl] Inbound control_request subtype=${Y.request.subtype}`),C?.(Y);return}if(!VuA(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}),uI("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 KuA="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function LCA(A,Q){let{transport:B,sessionId:I,outboundOnly:E,onInterrupt:C,onSetModel:Y,onSetMaxThinkingTokens:J,onSetPermissionMode:G,onRenameSession:U,onSetColor:F,onFileSuggestions:N,onReadFile:W,onGetContextUsage:X,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:KuA}};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(!N){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}N(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(!X){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}X().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 iR(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:{...KCA},modelUsage:{},permission_denials:[],session_id:A,uuid:DuA()}}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 qCA(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 dR{_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 xCA}from"crypto";c0();eA();oE();RQ();IQ();function zuA(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 jCA(A){let Q=zuA(A);if(Q!==null&&typeof Q==="object"&&"exp"in Q&&typeof Q.exp==="number")return Q.exp;return null}eA();oE();RQ();IQ();class nR{inflight=null;pending=null;closed=!1;config;constructor(A){this.config=A}enqueue(A){if(this.closed)return;this.pending=this.pending?RCA(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=RCA(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 RCA(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 ZuA=20000,HuA=100;function OCA(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 LuA=10,quA=3;function juA(){return{byMessage:new Map,scopeToMessage:new Map}}function xD(A){return`${A.session_id}:${A.parent_tool_use_id??""}`}function RuA(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(xD(E));if(Y)Q.byMessage.delete(Y);Q.scopeToMessage.set(xD(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(xD(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 xuA(A,Q){A.byMessage.delete(Q.message.id);let B=xD(Q);if(A.scopeToMessage.get(B)===Q.message.id)A.scopeToMessage.delete(B)}class oR{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamTextAccumulator=juA();workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(A,Q,B){if(this.onEpochMismatch=B?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=B?.heartbeatIntervalMs??ZuA,this.heartbeatJitterFraction=B?.heartbeatJitterFraction??0,this.getAuthHeaders=B?.getAuthHeaders??T6,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 nR({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),...vR({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>=quA)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=Z9(),U=G?jCA(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>=LuA)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:OCA(J)}),{ok:!1,reason:`fetch_failed:${OCA(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:OuA(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(),HuA);return}if(await this.flushStreamEventBuffer(),A.type==="assistant")xuA(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:xCA()},...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=RuA(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:xCA()},...B&&{is_compaction:!0},...I&&{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),...vR({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(),jW(),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 OuA(A){let Q=A.post_turn_summary;if(!guA(Q)||Q.status_category!=="blocked")return A;return{...A,post_turn_summary:{...Q,status_category:"need_input"}}}function guA(A){return A!==null&&typeof A==="object"&&"status_category"in A&&typeof A.status_category==="string"}eA();oE();RQ();IQ();QB();var vuA={};var SuA=!1;function gCA(A,Q){if(SuA)return;vuA[A]=Math.round(Q)}var _uA=1000,PuA=30000,vCA=45000,TuA=new Set([401,403,404]),OW=10,kuA=500,buA=8000,yuA={stream:!0};function fuA(){return!0}function huA(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(FEA(E))Q[I]=E;break;case"id":if($EA(E))Q[I]=E;break;c
187
187
  `);if(I.push(J),!G){E=J.endsWith(`
188
188
  `);continue}let{frames:U,remaining:F}=huA(I.join(""));I=F?[F]:[],E=F.endsWith(`
189
189
  `);for(let N of U){if(this.resetLivenessTimer(),N.id){let W=parseInt(N.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 X=this.lastSequenceNum-200;for(let D of this.seenSequenceNums)if(D<X)this.seenSequenceNums.delete(D)}if(W>this.lastSequenceNum)this.lastSequenceNum=W}}if(N.event&&N.data)this.handleSSEFrame(N.event,N.data);else if(N.data)z("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),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(_uA*Math.pow(2,this.reconnectAttempts-1),PuA),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 ${vCA/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,vCA)}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<=OW;I++){try{let C=await WB.post(this.postUrl,A,{headers:B,validateStatus:fuA});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}/${OW}`),a("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${OW}`),a("warn","cli_sse_post_network_error",{attempt:I})}if(I===OW){z(`SSETransport: POST failed after ${OW} attempts, continuing`),a("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(kuA*Math.pow(2,I-1),buA);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 muA(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 SCA="DEVICE_ATTESTATION_STATUS_",_CA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function cuA(A){if(A===void 0||A===null)return"UNSPECIFIED";if(typeof A==="number")return _CA[A]??"UNSPECIFIED";if(typeof A!=="string")return"UNSPECIFIED";let Q=A.startsWith(SCA)?A.slice(SCA.length):A;if(_CA.includes(Q))return Q;return"UNSPECIFIED"}function uuA(A){return A==="VERIFIED"||A==="VERIFIED_BY_GATE"}var puA={enforce:!1,acceptStatuses:new Set},luA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"],wZQ=k(()=>$.object({accept_statuses:$.array($.enum(luA)).default([])}));var iuA;var duA;function PCA(A){let Q=typeof A.payload?.type==="string"?A.payload.type:A.event_type,B=Q==="user"||Q==="control_response",I=cuA(A.device_attestation_status);if(uuA(I)){if(B)uI("bridge_event_attestation");return!1}let E=iuA?.()??puA;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"}),u0("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)u0("bridge_event_attestation",Y);else{tB("bridge_event_attestation",Y);try{duA?.({status:I,payloadType:Q})}catch(J){z(`[bridge:attestation] drop notifier threw: ${JA(J)}`,{level:"error"})}}}return!C}IQ();function TCA(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 kCA(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 rR(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 bCA(A,Q){return`${A.replace(/\/+$/,"")}/v1/code/sessions/${Q}`}async function yCA(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 fCA(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 hCA(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 H9(B);let J=A.epoch??await yCA(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 aR(G,{},I,void 0,E,Y),F,N=new oR(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(w){z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{N.reportDelivery(w.event_id,"received"),N.reportDelivery(w.event_id,"processed")}),U.setEventFilter(PCA);let W,X=!1,D=!1;return{write(w){return N.writeEvent(w)},async writeBatch(w){for(let V of w){if(D)break;await N.writeEvent(V)}},close(){D=!0,N.close(),U.close()},isConnectedStatus(){return X},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return X?"connected":"init";return"connecting"},setOnData(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{N.close(),w(V??4092)})},setOnConnect(w){W=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w,V){N.reportState(w,V)},reportMetadata(w){N.reportMetadata(w)},reportDelivery(w,V){N.reportDelivery(w,V)},flush(){return N.flush()},getInternalEventWriter(){return(w,V,M)=>N.writeInternalEvent(w,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{X=!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"}),N.close(),U.close(),F?.(4091)})}}}oC();eA();RQ();var nuA="2023-06-01",ouA="ccr-byoc-2025-07-29";async function mCA({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await 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:(X)=>X<500})}catch(X){return z(`[bridge] Session creation request failed: ${JA(X)}`),null}if(N.status!==200&&N.status!==201){let X=YG(N.data);return z(`[bridge] Session creation failed with status ${N.status}${X?`: ${X}`:""}`),null}let W=N.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 cCA(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 OD(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:s4(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`),uI(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:s4(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`),uI(Y),!0}function vD(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":nuA,"anthropic-beta":ouA,"anthropic-client-platform":SY(),"User-Agent":kC()};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}var rCA=2000,nCA=60000,oCA=900000,YpA=300000,aCA=3;function sCA(A){return A*(0.8+Math.random()*0.4)}var JpA=0;async function tCA(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:W,getCurrentTitle:X=()=>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=()=>e$,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=++JpA,{writeBridgePointer:iQ,clearBridgePointer:GQ,readBridgePointer:kI}=await Promise.resolve().then(() => (iCA(),lCA)),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=wCA({baseUrl:J,getAccessToken:F,runnerVersion:"0.3.149",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:dCA(),workerType:U,environmentId:dCA(),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(DCA("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 N({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:HO(),...TEA()});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),xB=new AbortController,NA=null,vE=0,XQ=bC?WA:0,zB=null,yC=null,e4=qCA(xB.signal),SE=e4.wake,gW=e4.signal,UE=new dR,PY=!yQ,mB=3,OB=0,NI=null;async function fC(){if(NI)return NI;NI=A1();try{return await NI}finally{NI=null}}async function A1(){if(OB++,vE++,z(`[bridge:repl] Reconnecting after env lost (attempt ${OB}/${mB})`),OB>mB)return z(`[bridge:repl] Environment reconnect limit reached (${mB}), giving up`),!1;if(NA){let TA=NA.getLastSequenceNum();if(TA>XQ)XQ=TA;bA?.(),NA.close(),NA=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"),OB=0,!0;zB=null,yC=null}if(xB.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>=aCA||xB.signal.aborted)return MQ.reuseEnvironmentId=void 0,z(`[bridge:repl] Environment re-registration failed (attempt ${TA}): ${JA(rQ)}`),!1;let SW=sCA(rCA*2**(TA-1));if(z(`[bridge:repl] Environment re-registration transient failure (attempt ${TA}/${aCA}), retrying in ${Math.round(SW)}ms: ${JA(rQ)}`),await kB(SW,xB.signal),xB.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}`),xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;if(NA!==null)return z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OB=0,!0;if(await _Y(m,MA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OB=0,!0;if(QA!==m)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await W(MA),xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;let UQ=X(),pA=await N({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(xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await W(pA),!1;if(MA=pA,yEA(s4(pA)).catch(()=>{}),LQ?.(MA),XQ=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("#");OD("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 OB=0,!0}function hC(){return F()}function Ax(){let m=UE.end();if(m.length===0)return;if(!NA){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`),NA.writeBatch(UQ)}let PD=null;function TD(){PD?.()}function Qx(m){if(z(`[bridge:repl] Transport permanently closed: code=${m}`),rA("tengu_bridge_repl_ws_closed",{code:m}),NA){let UQ=NA.getLastSequenceNum();if(UQ>XQ)XQ=UQ;bA?.(),NA=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"),xB.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(xB.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 Bx,Q0A=null,B0A={api:BQ,getCredentials:()=>({environmentId:QA,environmentSecret:gE}),signal:xB.signal,getPollIntervalConfig:M,onStateChange:$A,getWsState:()=>NA?.getStateLabel()??"null",isAtCapacity:()=>NA!==null,capacitySignal:gW,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`),NA){let GA=NA.getLastSequenceNum();if(GA>XQ)XQ=GA;bA?.(),NA.close(),NA=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(NA?.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=${rR(m,MA)}`),iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),!rR(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}H9(rQ)}if(rA("tengu_bridge_repl_work_received",{}),NA){bA?.();let AB=NA;NA=null;let GB=AB.getLastSequenceNum();if(GB>XQ)XQ=GB;AB.close()}UE.deactivate();let SW=(AB)=>LCA(AB,{transport:NA,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,Ex=(AB)=>{if(NA=AB,AB.setOnConnect(()=>{if(NA!==AB)return;if(z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!TA){let GB=hC();if(GB)H9(GB)}if(yD=!1,!fD&&L&&L.length>0){fD=!0;let GB=j,XI=L.filter((_W)=>lR(_W)&&!Z?.has(_W.uuid)),mC=GB>0&&XI.length>GB?XI.slice(-GB):XI;if(mC.length<XI.length)z(`[bridge:repl] Capped initial flush: ${XI.length} -> ${mC.length} (cap=${GB})`),rA("tengu_bridge_repl_history_capped",{eligible_count:XI.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 _W=v0.map((GG)=>({...GG,session_id:MA,historical:!0})),Cx=AB.droppedBatchCount;AB.writeBatch(_W).then(()=>{if(AB.droppedBatchCount>Cx){z(`[bridge:repl] Initial flush dropped ${AB.droppedBatchCount-Cx} 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(NA!==AB)return;Ax(),$A?.("connected")})}else Ax(),$A?.("connected")}else if(!UE.active)$A?.("connected")}),AB.setOnData((GB)=>{HCA(GB,GE,JG,g,T,SW)}),Q0A=Qx,AB.setOnClose((GB)=>{if(NA!==AB)return;Qx(GB)}),!fD&&L&&L.length>0)UE.start();AB.connect()};if(vE++,TA){let AB=bCA(J,m),GB=vE;z(`[bridge:repl] CCR v2: sessionUrl=${AB} session=${m} gen=${GB}`),hCA({sessionUrl:AB,ingressToken:GA,sessionId:m,initialSequenceNum:XQ}).then((XI)=>{if(xB.signal.aborted){XI.close();return}if(GB!==vE){z(`[bridge:repl] CCR v2: discarding stale handshake gen=${GB} current=${vE}`),XI.close();return}if(Ex(XI),mA){let mC=XI.getInternalEventWriter?.(),v0=XI.getInternalEventReaders?.();if(mC&&v0)mA(mC,v0)}},(XI)=>{if(z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(XI)}`,{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=kCA(G,m);z(`[bridge:repl] Ingress URL: ${AB}`),z(`[bridge:repl] Creating HybridTransport: session=${m}`);let GB=rQ??"";Ex(fCA(new PR(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()}})))}}};GpA(B0A);let kD=f?setInterval(()=>{if(NI)return;iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"})},3600000):null;kD?.unref?.();let Ix=M().session_keepalive_interval_v2_ms,bD=Ix>0?setInterval(()=>{if(!NA)return;z("[bridge:repl] keep_alive sent"),NA.write({type:"keep_alive"}).catch((m)=>{z(`[bridge:repl] keep_alive write failed: ${JA(m)}`)})},Ix):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=${NA?.getStateLabel()??"null"}`),kD!==null)clearInterval(kD);if(bD!==null)clearInterval(bD);if(Bx)process.off("SIGUSR2",Bx);if(xB.abort(),z("[bridge:repl] Teardown: poll loop aborted"),NA){let pA=NA.getLastSequenceNum();if(pA>XQ)XQ=pA}if(f){NA=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=NA;if(NA=null,UE.drop(),GA)GA.write(iR(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 vW={get bridgeSessionId(){return MA},outboundOnly:!1,get environmentId(){return QA},getLastSequenceNum(){return vW.getSSESequenceNum()},flush(){return NA?.flush()??Promise.resolve()},getSSESequenceNum(){let m=NA?.getLastSequenceNum()??0;return Math.max(XQ,m)},sessionIngressUrl:G,writeMessages(m){let GA=m.filter((TA)=>lR(TA)&&!g0.has(TA.uuid)&&!GE.has(TA.uuid));if(GA.length===0)return;if(!PY)for(let TA of GA){let rQ=ZCA(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(!NA){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}));NA.writeBatch(pA)},writeSdkMessages(m){let GA=m.filter((pA)=>!pA.uuid||!GE.has(pA.uuid));if(GA.length===0)return;if(!NA){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}));NA.writeBatch(UQ)},sendControlRequest(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_request");return}let GA={...m,session_id:MA};NA.write(GA),z(`[bridge:repl] Sent control_request request_id=${m.request_id}`)},sendControlResponse(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_response");return}let GA={...m,session_id:MA};NA.write(GA),z("[bridge:repl] Sent control_response")},sendControlCancelRequest(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let GA={type:"control_cancel_request",request_id:m,session_id:MA};NA.write(GA),z(`[bridge:repl] Sent control_cancel_request request_id=${m}`)},reportMetadata(m){NA?.reportMetadata(m)},sendResult(){if(!NA){z(`[bridge:repl] sendResult: skipping, transport not configured session=${MA}`);return}NA.write(iR(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 OD("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 OD("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(){I0A(),await PD?.(),z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return vW.teardown()}},I0A=m0(vW);return vW}async function GpA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>e$,getHeartbeatInfo:N,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&&N){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=N();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=TCA(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=MCA(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(nCA,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=NCA(S),iA=WCA(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>=oCA){z(`[bridge:repl] Poll failures exceeded ${oCA/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=XCA(S),PA=Math.min(rCA*2**(D-1),nCA),HQ=sCA(BA!==void 0?Math.max(PA,Math.min(BA,YpA)):PA);if(M=HQ,F().non_exclusive_heartbeat_interval_ms>0){let b=N?.();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 UpA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function FpA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function $pA(A,Q){if(FpA(A,Q))return"http://localhost:4000";if(UpA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function eCA(A,Q,B){let{toCompatSessionId:I}=U0A(UCA),E=I(A),Y=`${$pA(E,Q)}/code/${E}`;return B?`${Y}?${new URLSearchParams(B)}`:Y}eA();async function A0A(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:W=!1,initialSSESequenceNum:X,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:N},j=[],L=null,Z=[],g=null,T=[],S=null,d=!1,r=null,wA={detail:null},iA=WpA(),DA=()=>tCA({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})=>mCA({environmentId:YA,title:$A,tags:["claude-code-assistant"],signal:yQ},M),archiveSession:(YA)=>cCA(YA,M),perpetual:W,initialSSESequenceNum:X,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...e$,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(YA){let $A=Tl(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 eCA(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 XpA=1000,DpA=1e4,VpA=5000,wpA=60000,eR=3;function MpA(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 KpA(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"&&Fx(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){uI("assistant_worker_start");return}if(A.kind==="auth"||A.kind==="conflict")u0("assistant_worker_start",A.kind);else tB("assistant_worker_start",A.kind)}async function zpA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:W=()=>{}}=A;W("─── worker start ───");let X=await G?.load(),D={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??X?.lastSSESequenceNum};if(!D.getAccessToken()){let IA={kind:"auth",detail:"getAccessToken returned empty"};return _D(IA),{ok:!1,error:IA}}let w=await A0A(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=X?.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(N.addEventListener("abort",()=>{BA.abort(),b().catch((IA)=>W(`teardown threw: ${IA}`))}),N.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??VpA,yQ=null,LQ=!1,AA=!1,f="";async function WA(){if(!I)return;let IA=await Sl(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,DpA),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=NpA();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:$x(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,xB,NA,vE,XQ)=>{if(JG.delete(xB))NA(`permission timeout req=${xB}`),vE.sendControlCancelRequest(xB),XQ({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},wpA,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>=eR)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=Zu({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(!MpA(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>=eR)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<eR&&!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},XpA);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=KpA(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{zpA 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(_uA*Math.pow(2,this.reconnectAttempts-1),PuA),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 ${vCA/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,vCA)}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<=OW;I++){try{let C=await WB.post(this.postUrl,A,{headers:B,validateStatus:fuA});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}/${OW}`),a("warn","cli_sse_post_retryable_error",{status:C.status,attempt:I})}catch(C){z(`SSETransport: POST error: ${JA(C)}, attempt ${I}/${OW}`),a("warn","cli_sse_post_network_error",{attempt:I})}if(I===OW){z(`SSETransport: POST failed after ${OW} attempts, continuing`),a("warn","cli_sse_post_retries_exhausted");return}let E=Math.min(kuA*Math.pow(2,I-1),buA);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 muA(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 SCA="DEVICE_ATTESTATION_STATUS_",_CA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function cuA(A){if(A===void 0||A===null)return"UNSPECIFIED";if(typeof A==="number")return _CA[A]??"UNSPECIFIED";if(typeof A!=="string")return"UNSPECIFIED";let Q=A.startsWith(SCA)?A.slice(SCA.length):A;if(_CA.includes(Q))return Q;return"UNSPECIFIED"}function uuA(A){return A==="VERIFIED"||A==="VERIFIED_BY_GATE"}var puA={enforce:!1,acceptStatuses:new Set},luA=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"],wZQ=k(()=>$.object({accept_statuses:$.array($.enum(luA)).default([])}));var iuA;var duA;function PCA(A){let Q=typeof A.payload?.type==="string"?A.payload.type:A.event_type,B=Q==="user"||Q==="control_response",I=cuA(A.device_attestation_status);if(uuA(I)){if(B)uI("bridge_event_attestation");return!1}let E=iuA?.()??puA;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"}),u0("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)u0("bridge_event_attestation",Y);else{tB("bridge_event_attestation",Y);try{duA?.({status:I,payloadType:Q})}catch(J){z(`[bridge:attestation] drop notifier threw: ${JA(J)}`,{level:"error"})}}}return!C}IQ();function TCA(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 kCA(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 rR(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 bCA(A,Q){return`${A.replace(/\/+$/,"")}/v1/code/sessions/${Q}`}async function yCA(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 fCA(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 hCA(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 H9(B);let J=A.epoch??await yCA(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 aR(G,{},I,void 0,E,Y),F,N=new oR(U,new URL(Q),{getAuthHeaders:Y,heartbeatIntervalMs:A.heartbeatIntervalMs,heartbeatJitterFraction:A.heartbeatJitterFraction,onEpochMismatch:()=>{z("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{N.close(),U.close(),F?.(4090)}catch(w){z(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${JA(w)}`,{level:"error"})}throw Error("epoch superseded")}});U.setOnEvent((w)=>{N.reportDelivery(w.event_id,"received"),N.reportDelivery(w.event_id,"processed")}),U.setEventFilter(PCA);let W,X=!1,D=!1;return{write(w){return N.writeEvent(w)},async writeBatch(w){for(let V of w){if(D)break;await N.writeEvent(V)}},close(){D=!0,N.close(),U.close()},isConnectedStatus(){return X},getStateLabel(){if(U.isClosedStatus())return"closed";if(U.isConnectedStatus())return X?"connected":"init";return"connecting"},setOnData(w){U.setOnData(w)},setOnClose(w){F=w,U.setOnClose((V)=>{N.close(),w(V??4092)})},setOnConnect(w){W=w},getLastSequenceNum(){return U.getLastSequenceNum()},droppedBatchCount:0,reportState(w,V){N.reportState(w,V)},reportMetadata(w){N.reportMetadata(w)},reportDelivery(w,V){N.reportDelivery(w,V)},flush(){return N.flush()},getInternalEventWriter(){return(w,V,M)=>N.writeInternalEvent(w,V,M)},getInternalEventReaders(){return{readMain:()=>N.readInternalEvents(),readSubagents:()=>N.readSubagentInternalEvents()}},connect(){if(!A.outboundOnly)U.connect();N.initialize(J).then(()=>{X=!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"}),N.close(),U.close(),F?.(4091)})}}}oC();eA();RQ();var nuA="2023-06-01",ouA="ccr-byoc-2025-07-29";async function mCA({environmentId:A,title:Q,tags:B,signal:I},E){let{baseUrl:C,getAccessToken:Y,orgUUID:J,model:G}=E,U=Y();if(!U)return z("[bridge] No access token for session creation"),null;let F=`${C}/v1/sessions`,N;try{N=await 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:(X)=>X<500})}catch(X){return z(`[bridge] Session creation request failed: ${JA(X)}`),null}if(N.status!==200&&N.status!==201){let X=YG(N.data);return z(`[bridge] Session creation failed with status ${N.status}${X?`: ${X}`:""}`),null}let W=N.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 cCA(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 OD(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:s4(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`),uI(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:s4(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`),uI(Y),!0}function vD(A,Q){let B={Authorization:`Bearer ${A}`,"Content-Type":"application/json","anthropic-version":nuA,"anthropic-beta":ouA,"anthropic-client-platform":SY(),"User-Agent":kC()};if(Q!==void 0)B["x-organization-uuid"]=Q;return B}var rCA=2000,nCA=60000,oCA=900000,YpA=300000,aCA=3;function sCA(A){return A*(0.8+Math.random()*0.4)}var JpA=0;async function tCA(A){let{dir:Q,registrationDir:B,machineName:I,branch:E,gitRepoUrl:C,title:Y,baseUrl:J,sessionIngressUrl:G,workerType:U,getAccessToken:F,createSession:N,archiveSession:W,getCurrentTitle:X=()=>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=()=>e$,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=++JpA,{writeBridgePointer:iQ,clearBridgePointer:GQ,readBridgePointer:kI}=await Promise.resolve().then(() => (iCA(),lCA)),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=wCA({baseUrl:J,getAccessToken:F,runnerVersion:"0.3.150",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:dCA(),workerType:U,environmentId:dCA(),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(DCA("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 N({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:HO(),...TEA()});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),xB=new AbortController,NA=null,vE=0,XQ=bC?WA:0,zB=null,yC=null,e4=qCA(xB.signal),SE=e4.wake,gW=e4.signal,UE=new dR,PY=!yQ,mB=3,OB=0,NI=null;async function fC(){if(NI)return NI;NI=A1();try{return await NI}finally{NI=null}}async function A1(){if(OB++,vE++,z(`[bridge:repl] Reconnecting after env lost (attempt ${OB}/${mB})`),OB>mB)return z(`[bridge:repl] Environment reconnect limit reached (${mB}), giving up`),!1;if(NA){let TA=NA.getLastSequenceNum();if(TA>XQ)XQ=TA;bA?.(),NA.close(),NA=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"),OB=0,!0;zB=null,yC=null}if(xB.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>=aCA||xB.signal.aborted)return MQ.reuseEnvironmentId=void 0,z(`[bridge:repl] Environment re-registration failed (attempt ${TA}): ${JA(rQ)}`),!1;let SW=sCA(rCA*2**(TA-1));if(z(`[bridge:repl] Environment re-registration transient failure (attempt ${TA}/${aCA}), retrying in ${Math.round(SW)}ms: ${JA(rQ)}`),await kB(SW,xB.signal),xB.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}`),xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;if(NA!==null)return z("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),OB=0,!0;if(await _Y(m,MA))return rA("tengu_bridge_repl_reconnected_in_place",{}),OB=0,!0;if(QA!==m)rA("tengu_bridge_repl_env_expired_fresh_session",{});if(await W(MA),xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after archive, cleaning up"),await BQ.deregisterEnvironment(QA).catch(()=>{}),!1;let UQ=X(),pA=await N({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(xB.signal.aborted)return z("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await W(pA),!1;if(MA=pA,yEA(s4(pA)).catch(()=>{}),LQ?.(MA),XQ=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("#");OD("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 OB=0,!0}function hC(){return F()}function Ax(){let m=UE.end();if(m.length===0)return;if(!NA){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`),NA.writeBatch(UQ)}let PD=null;function TD(){PD?.()}function Qx(m){if(z(`[bridge:repl] Transport permanently closed: code=${m}`),rA("tengu_bridge_repl_ws_closed",{code:m}),NA){let UQ=NA.getLastSequenceNum();if(UQ>XQ)XQ=UQ;bA?.(),NA=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"),xB.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(xB.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 Bx,Q0A=null,B0A={api:BQ,getCredentials:()=>({environmentId:QA,environmentSecret:gE}),signal:xB.signal,getPollIntervalConfig:M,onStateChange:$A,getWsState:()=>NA?.getStateLabel()??"null",isAtCapacity:()=>NA!==null,capacitySignal:gW,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`),NA){let GA=NA.getLastSequenceNum();if(GA>XQ)XQ=GA;bA?.(),NA.close(),NA=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(NA?.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=${rR(m,MA)}`),iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"}),!rR(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}H9(rQ)}if(rA("tengu_bridge_repl_work_received",{}),NA){bA?.();let AB=NA;NA=null;let GB=AB.getLastSequenceNum();if(GB>XQ)XQ=GB;AB.close()}UE.deactivate();let SW=(AB)=>LCA(AB,{transport:NA,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,Ex=(AB)=>{if(NA=AB,AB.setOnConnect(()=>{if(NA!==AB)return;if(z("[bridge:repl] Ingress transport connected"),rA("tengu_bridge_repl_ws_connected",{}),!TA){let GB=hC();if(GB)H9(GB)}if(yD=!1,!fD&&L&&L.length>0){fD=!0;let GB=j,XI=L.filter((_W)=>lR(_W)&&!Z?.has(_W.uuid)),mC=GB>0&&XI.length>GB?XI.slice(-GB):XI;if(mC.length<XI.length)z(`[bridge:repl] Capped initial flush: ${XI.length} -> ${mC.length} (cap=${GB})`),rA("tengu_bridge_repl_history_capped",{eligible_count:XI.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 _W=v0.map((GG)=>({...GG,session_id:MA,historical:!0})),Cx=AB.droppedBatchCount;AB.writeBatch(_W).then(()=>{if(AB.droppedBatchCount>Cx){z(`[bridge:repl] Initial flush dropped ${AB.droppedBatchCount-Cx} 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(NA!==AB)return;Ax(),$A?.("connected")})}else Ax(),$A?.("connected")}else if(!UE.active)$A?.("connected")}),AB.setOnData((GB)=>{HCA(GB,GE,JG,g,T,SW)}),Q0A=Qx,AB.setOnClose((GB)=>{if(NA!==AB)return;Qx(GB)}),!fD&&L&&L.length>0)UE.start();AB.connect()};if(vE++,TA){let AB=bCA(J,m),GB=vE;z(`[bridge:repl] CCR v2: sessionUrl=${AB} session=${m} gen=${GB}`),hCA({sessionUrl:AB,ingressToken:GA,sessionId:m,initialSequenceNum:XQ}).then((XI)=>{if(xB.signal.aborted){XI.close();return}if(GB!==vE){z(`[bridge:repl] CCR v2: discarding stale handshake gen=${GB} current=${vE}`),XI.close();return}if(Ex(XI),mA){let mC=XI.getInternalEventWriter?.(),v0=XI.getInternalEventReaders?.();if(mC&&v0)mA(mC,v0)}},(XI)=>{if(z(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${JA(XI)}`,{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=kCA(G,m);z(`[bridge:repl] Ingress URL: ${AB}`),z(`[bridge:repl] Creating HybridTransport: session=${m}`);let GB=rQ??"";Ex(fCA(new PR(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()}})))}}};GpA(B0A);let kD=f?setInterval(()=>{if(NI)return;iQ(Q,{sessionId:MA,environmentId:QA,source:"repl"})},3600000):null;kD?.unref?.();let Ix=M().session_keepalive_interval_v2_ms,bD=Ix>0?setInterval(()=>{if(!NA)return;z("[bridge:repl] keep_alive sent"),NA.write({type:"keep_alive"}).catch((m)=>{z(`[bridge:repl] keep_alive write failed: ${JA(m)}`)})},Ix):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=${NA?.getStateLabel()??"null"}`),kD!==null)clearInterval(kD);if(bD!==null)clearInterval(bD);if(Bx)process.off("SIGUSR2",Bx);if(xB.abort(),z("[bridge:repl] Teardown: poll loop aborted"),NA){let pA=NA.getLastSequenceNum();if(pA>XQ)XQ=pA}if(f){NA=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=NA;if(NA=null,UE.drop(),GA)GA.write(iR(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 vW={get bridgeSessionId(){return MA},outboundOnly:!1,get environmentId(){return QA},getLastSequenceNum(){return vW.getSSESequenceNum()},flush(){return NA?.flush()??Promise.resolve()},getSSESequenceNum(){let m=NA?.getLastSequenceNum()??0;return Math.max(XQ,m)},sessionIngressUrl:G,writeMessages(m){let GA=m.filter((TA)=>lR(TA)&&!g0.has(TA.uuid)&&!GE.has(TA.uuid));if(GA.length===0)return;if(!PY)for(let TA of GA){let rQ=ZCA(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(!NA){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}));NA.writeBatch(pA)},writeSdkMessages(m){let GA=m.filter((pA)=>!pA.uuid||!GE.has(pA.uuid));if(GA.length===0)return;if(!NA){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}));NA.writeBatch(UQ)},sendControlRequest(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_request");return}let GA={...m,session_id:MA};NA.write(GA),z(`[bridge:repl] Sent control_request request_id=${m.request_id}`)},sendControlResponse(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_response");return}let GA={...m,session_id:MA};NA.write(GA),z("[bridge:repl] Sent control_response")},sendControlCancelRequest(m){if(!NA){z("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let GA={type:"control_cancel_request",request_id:m,session_id:MA};NA.write(GA),z(`[bridge:repl] Sent control_cancel_request request_id=${m}`)},reportMetadata(m){NA?.reportMetadata(m)},sendResult(){if(!NA){z(`[bridge:repl] sendResult: skipping, transport not configured session=${MA}`);return}NA.write(iR(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 OD("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 OD("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(){I0A(),await PD?.(),z("[bridge:repl] Torn down"),rA("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return vW.teardown()}},I0A=m0(vW);return vW}async function GpA({api:A,getCredentials:Q,signal:B,onStateChange:I,onWorkReceived:E,onEnvironmentLost:C,getWsState:Y,isAtCapacity:J,capacitySignal:G,onFatalError:U,getPollIntervalConfig:F=()=>e$,getHeartbeatInfo:N,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&&N){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=N();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=TCA(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=MCA(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(nCA,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=NCA(S),iA=WCA(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>=oCA){z(`[bridge:repl] Poll failures exceeded ${oCA/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=XCA(S),PA=Math.min(rCA*2**(D-1),nCA),HQ=sCA(BA!==void 0?Math.max(PA,Math.min(BA,YpA)):PA);if(M=HQ,F().non_exclusive_heartbeat_interval_ms>0){let b=N?.();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 UpA(A,Q){return A?.includes("_staging_")===!0||Q?.includes("staging")===!0}function FpA(A,Q){return A?.includes("_local_")===!0||Q?.includes("localhost")===!0}function $pA(A,Q){if(FpA(A,Q))return"http://localhost:4000";if(UpA(A,Q))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function eCA(A,Q,B){let{toCompatSessionId:I}=U0A(UCA),E=I(A),Y=`${$pA(E,Q)}/code/${E}`;return B?`${Y}?${new URLSearchParams(B)}`:Y}eA();async function A0A(A){let{dir:Q,registrationDir:B,name:I="Assistant",workerType:E="claude_code_assistant",branch:C="",gitRepoUrl:Y=null,getAccessToken:J,getTrustedDeviceToken:G,baseUrl:U,orgUUID:F,model:N,perpetual:W=!1,initialSSESequenceNum:X,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:N},j=[],L=null,Z=[],g=null,T=[],S=null,d=!1,r=null,wA={detail:null},iA=WpA(),DA=()=>tCA({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})=>mCA({environmentId:YA,title:$A,tags:["claude-code-assistant"],signal:yQ},M),archiveSession:(YA)=>cCA(YA,M),perpetual:W,initialSSESequenceNum:X,getCurrentTitle:()=>I,getPollIntervalConfig:()=>({...e$,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(YA){let $A=Tl(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 eCA(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 XpA=1000,DpA=1e4,VpA=5000,wpA=60000,eR=3;function MpA(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 KpA(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"&&Fx(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){uI("assistant_worker_start");return}if(A.kind==="auth"||A.kind==="conflict")u0("assistant_worker_start",A.kind);else tB("assistant_worker_start",A.kind)}async function zpA(A){let{bridge:Q,sandboxed:B=!1,scheduling:I,buildQueryOptions:E,canUseToolPreFilter:C,onPermissionResolved:Y,transformOutbound:J,stateAdapter:G,initialPrompt:U,userIdleMs:F=300000,signal:N,log:W=()=>{}}=A;W("─── worker start ───");let X=await G?.load(),D={...Q,initialSSESequenceNum:Q.initialSSESequenceNum??X?.lastSSESequenceNum};if(!D.getAccessToken()){let IA={kind:"auth",detail:"getAccessToken returned empty"};return _D(IA),{ok:!1,error:IA}}let w=await A0A(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=X?.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(N.addEventListener("abort",()=>{BA.abort(),b().catch((IA)=>W(`teardown threw: ${IA}`))}),N.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??VpA,yQ=null,LQ=!1,AA=!1,f="";async function WA(){if(!I)return;let IA=await Sl(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,DpA),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=NpA();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:$x(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,xB,NA,vE,XQ)=>{if(JG.delete(xB))NA(`permission timeout req=${xB}`),vE.sendControlCancelRequest(xB),XQ({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},wpA,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>=eR)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=Zu({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(!MpA(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>=eR)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<eR&&!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},XpA);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=KpA(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{zpA as runAssistantWorker};