@anthropic-ai/claude-agent-sdk 0.3.163 → 0.3.165

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.163
3
+ // Version: 0.3.165
4
4
  import{createRequire as Nie}from"node:module";var _ie=Object.create;var{getPrototypeOf:kie,defineProperty:up,getOwnPropertyNames:mM,getOwnPropertyDescriptor:Bie}=Object,hM=Object.prototype.hasOwnProperty;function yM(e){return this[e]}var Qie,Rie,ja=(e,t,r)=>{var n=e!=null&&typeof e==="object";if(n){var s=t?Qie??=new WeakMap:Rie??=new WeakMap,o=s.get(e);if(o)return o}r=e!=null?_ie(kie(e)):{};let i=t||!e||!e.__esModule?up(r,"default",{value:e,enumerable:!0}):r;for(let a of mM(e))if(!hM.call(i,a))up(i,a,{get:yM.bind(e,a),enumerable:!0});if(n)s.set(e,i);return i},Tie=(e)=>{var t=(gM??=new WeakMap).get(e),r;if(t)return t;if(t=up({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var n of mM(e))if(!hM.call(t,n))up(t,n,{get:yM.bind(e,n),enumerable:!(r=Bie(e,n))||r.enumerable})}return gM.set(e,t),t},gM,E=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Die=(e)=>e;function Pie(e,t){this[e]=Die.bind(null,t)}var Ds=(e,t)=>{for(var r in t)up(e,r,{get:t[r],enumerable:!0,configurable:!0,set:Pie.bind(t,r)})};var I=(e,t)=>()=>(e&&(t=e(e=0)),t);var k=Nie(import.meta.url),Mie=Symbol.dispose||Symbol.for("Symbol.dispose"),Oie=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),Dt=(e,t,r)=>{if(t!=null){if(typeof t!=="object"&&typeof t!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var n;if(r)n=t[Oie];if(n===void 0)n=t[Mie];if(typeof n!=="function")throw TypeError("Object not disposable");e.push([r,n,t])}else if(r)e.push([r]);return t},Pt=(e,t,r)=>{var n=typeof SuppressedError==="function"?SuppressedError:function(i,a,c,l){return l=Error(c),l.name="SuppressedError",l.error=i,l.suppressed=a,l},s=(i)=>t=r?new n(i,t,"An error was suppressed during disposal"):(r=!0,i),o=(i)=>{while(i=e.pop())try{var a=i[1]&&i[1].call(i[2]);if(i[0])return Promise.resolve(a).then(o,(c)=>(s(c),o()))}catch(c){s(c)}if(r)throw t};return o()};import{realpathSync as Lie}from"fs";import{dirname as IM,resolve as Jv,sep as vM}from"path";function $n(e){return process.platform==="darwin"?e.normalize("NFC"):e}function $ie(e){if(e.startsWith("\\\\?\\UNC\\"))return"\\\\"+e.slice(8);if(e.startsWith("\\\\?\\")&&e.length>=7&&e[5]===":")return e.slice(4);return e}function CM(e){try{return $ie(Lie.native(e))}catch{return null}}function jm(e,t){let r=Jv(t).toLowerCase(),n=Jv(e).toLowerCase();if(IM(n)===r||n.startsWith(r+vM))return!0;let s=CM(t)?.toLowerCase();if(s==null)return!1;let o=CM(IM(Jv(e)))?.toLowerCase();if(o==null)return!0;return o===s||o.startsWith(s+vM)}var jo=()=>{};var Yv=()=>{};function Ge(e){if(!e)return!1;if(typeof e==="boolean")return e;let t=String(e).toLowerCase().trim();return["1","true","yes","on"].includes(t)}function fp(e){if(!e||e.startsWith("-")||e.startsWith("/"))return!1;if(e.includes(".."))return!1;if(e.split("/").some((t)=>t==="."||t===""))return!1;return/^[a-zA-Z0-9/._+@-]+$/.test(e)}function Oi(){let e=new Set;return{subscribe(t){return e.add(t),()=>{e.delete(t)}},emit(...t){let r;for(let n of e)try{n(...t)}catch(s){(r??=[]).push(s)}if(r)throw r.length===1?r[0]:AggregateError(r,"Signal listener(s) threw")},clear(){e.clear()}}}var wM=()=>{};var Ap=I(()=>{wM()});var Gie,xM;var _M=I(()=>{Gie=typeof global=="object"&&global&&global.Object===Object&&global,xM=Gie});var Vie,Wie,hl;var Hm=I(()=>{_M();Vie=typeof self=="object"&&self&&self.Object===Object&&self,Wie=xM||Vie||Function("return this")(),hl=Wie});var Jie,yl;var Kv=I(()=>{Hm();Jie=hl.Symbol,yl=Jie});function Zie(e){var t=Yie.call(e,gp),r=e[gp];try{e[gp]=void 0;var n=!0}catch(o){}var s=Kie.call(e);if(n)if(t)e[gp]=r;else delete e[gp];return s}var kM,Yie,Kie,gp,BM;var QM=I(()=>{Kv();kM=Object.prototype,Yie=kM.hasOwnProperty,Kie=kM.toString,gp=yl?yl.toStringTag:void 0;BM=Zie});function tae(e){return eae.call(e)}var Xie,eae,RM;var TM=I(()=>{Xie=Object.prototype,eae=Xie.toString;RM=tae});function sae(e){if(e==null)return e===void 0?nae:rae;return DM&&DM in Object(e)?BM(e):RM(e)}var rae="[object Null]",nae="[object Undefined]",DM,PM;var NM=I(()=>{Kv();QM();TM();DM=yl?yl.toStringTag:void 0;PM=sae});function oae(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var qm;var Zv=I(()=>{qm=oae});function uae(e){if(!qm(e))return!1;var t=PM(e);return t==aae||t==cae||t==iae||t==lae}var iae="[object AsyncFunction]",aae="[object Function]",cae="[object GeneratorFunction]",lae="[object Proxy]",MM;var OM=I(()=>{NM();Zv();MM=uae});var dae,Gm;var UM=I(()=>{Hm();dae=hl["__core-js_shared__"],Gm=dae});function pae(e){return!!FM&&FM in e}var FM,LM;var $M=I(()=>{UM();FM=function(){var e=/[^.]+$/.exec(Gm&&Gm.keys&&Gm.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();LM=pae});function gae(e){if(e!=null){try{return Aae.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var fae,Aae,jM;var zM=I(()=>{fae=Function.prototype,Aae=fae.toString;jM=gae});function Cae(e){if(!qm(e)||LM(e))return!1;var t=MM(e)?vae:hae;return t.test(jM(e))}var mae,hae,yae,bae,Eae,Iae,vae,HM;var qM=I(()=>{OM();$M();Zv();zM();mae=/[\\^$.*+?()[\]{}|]/g,hae=/^\[object .+?Constructor\]$/,yae=Function.prototype,bae=Object.prototype,Eae=yae.toString,Iae=bae.hasOwnProperty,vae=RegExp("^"+Eae.call(Iae).replace(mae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");HM=Cae});function Sae(e,t){return e==null?void 0:e[t]}var GM;var VM=I(()=>{GM=Sae});function wae(e,t){var r=GM(e,t);return HM(r)?r:void 0}var Vm;var Xv=I(()=>{qM();VM();Vm=wae});var xae,zo;var mp=I(()=>{Xv();xae=Vm(Object,"create"),zo=xae});function _ae(){this.__data__=zo?zo(null):{},this.size=0}var WM;var JM=I(()=>{mp();WM=_ae});function kae(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var YM;var KM=I(()=>{YM=kae});function Tae(e){var t=this.__data__;if(zo){var r=t[e];return r===Bae?void 0:r}return Rae.call(t,e)?t[e]:void 0}var Bae="__lodash_hash_undefined__",Qae,Rae,ZM;var XM=I(()=>{mp();Qae=Object.prototype,Rae=Qae.hasOwnProperty;ZM=Tae});function Nae(e){var t=this.__data__;return zo?t[e]!==void 0:Pae.call(t,e)}var Dae,Pae,eO;var tO=I(()=>{mp();Dae=Object.prototype,Pae=Dae.hasOwnProperty;eO=Nae});function Oae(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=zo&&t===void 0?Mae:t,this}var Mae="__lodash_hash_undefined__",rO;var nO=I(()=>{mp();rO=Oae});function bl(e){var t=-1,r=e==null?0:e.length;this.clear();while(++t<r){var n=e[t];this.set(n[0],n[1])}}var eC;var sO=I(()=>{JM();KM();XM();tO();nO();bl.prototype.clear=WM;bl.prototype.delete=YM;bl.prototype.get=ZM;bl.prototype.has=eO;bl.prototype.set=rO;eC=bl});function Uae(){this.__data__=[],this.size=0}var oO;var iO=I(()=>{oO=Uae});function Fae(e,t){return e===t||e!==e&&t!==t}var aO;var cO=I(()=>{aO=Fae});function Lae(e,t){var r=e.length;while(r--)if(aO(e[r][0],t))return r;return-1}var Ui;var hp=I(()=>{cO();Ui=Lae});function zae(e){var t=this.__data__,r=Ui(t,e);if(r<0)return!1;var n=t.length-1;if(r==n)t.pop();else jae.call(t,r,1);return--this.size,!0}var $ae,jae,lO;var uO=I(()=>{hp();$ae=Array.prototype,jae=$ae.splice;lO=zae});function Hae(e){var t=this.__data__,r=Ui(t,e);return r<0?void 0:t[r][1]}var dO;var pO=I(()=>{hp();dO=Hae});function qae(e){return Ui(this.__data__,e)>-1}var fO;var AO=I(()=>{hp();fO=qae});function Gae(e,t){var r=this.__data__,n=Ui(r,e);if(n<0)++this.size,r.push([e,t]);else r[n][1]=t;return this}var gO;var mO=I(()=>{hp();gO=Gae});function El(e){var t=-1,r=e==null?0:e.length;this.clear();while(++t<r){var n=e[t];this.set(n[0],n[1])}}var hO;var yO=I(()=>{iO();uO();pO();AO();mO();El.prototype.clear=oO;El.prototype.delete=lO;El.prototype.get=dO;El.prototype.has=fO;El.prototype.set=gO;hO=El});var Vae,bO;var EO=I(()=>{Xv();Hm();Vae=Vm(hl,"Map"),bO=Vae});function Wae(){this.size=0,this.__data__={hash:new eC,map:new(bO||hO),string:new eC}}var IO;var vO=I(()=>{sO();yO();EO();IO=Wae});function Jae(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var CO;var SO=I(()=>{CO=Jae});function Yae(e,t){var r=e.__data__;return CO(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Fi;var yp=I(()=>{SO();Fi=Yae});function Kae(e){var t=Fi(this,e).delete(e);return this.size-=t?1:0,t}var wO;var xO=I(()=>{yp();wO=Kae});function Zae(e){return Fi(this,e).get(e)}var _O;var kO=I(()=>{yp();_O=Zae});function Xae(e){return Fi(this,e).has(e)}var BO;var QO=I(()=>{yp();BO=Xae});function ece(e,t){var r=Fi(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var RO;var TO=I(()=>{yp();RO=ece});function Il(e){var t=-1,r=e==null?0:e.length;this.clear();while(++t<r){var n=e[t];this.set(n[0],n[1])}}var tC;var DO=I(()=>{vO();xO();kO();QO();TO();Il.prototype.clear=IO;Il.prototype.delete=wO;Il.prototype.get=_O;Il.prototype.has=BO;Il.prototype.set=RO;tC=Il});function rC(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw TypeError(tce);var r=function(){var n=arguments,s=t?t.apply(this,n):n[0],o=r.cache;if(o.has(s))return o.get(s);var i=e.apply(this,n);return r.cache=o.set(s,i)||o,i};return r.cache=new(rC.Cache||tC),r}var tce="Expected a function",dt;var Ps=I(()=>{DO();rC.Cache=tC;dt=rC});import{homedir as rce}from"os";import{join as nce}from"path";function nC(e){let t=process.env.NODE_OPTIONS;if(!t)return!1;return t.split(/\s+/).includes(e)}function PO(){return!1}function NO(){return{namespace:void 0,cluster:void 0}}var ds,h9e;var nr=I(()=>{Ap();Ps();Ap();ds=dt(()=>{return(process.env.CLAUDE_CONFIG_DIR??nce(rce(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR);h9e=dt(()=>Ge(process.env.CLAUDE_CODE_SUPERVISED))});function J(e,t,r,n,s){if(n==="m")throw TypeError("Private method is not writable");if(n==="a"&&!s)throw TypeError("Private accessor was defined without a setter");if(typeof t==="function"?e!==t||!s:!t.has(e))throw TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?s.call(e,r):s?s.value=r:t.set(e,r),r}function _(e,t,r,n){if(r==="a"&&!n)throw TypeError("Private accessor was defined without a getter");if(typeof t==="function"?e!==t||!n:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(e):n?n.value:t.get(e)}var Ho=()=>{};var sC=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return sC=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(n)=>(+n^r()&15>>+n/4).toString(16))};function qo(e){return typeof e==="object"&&e!==null&&(("name"in e)&&e.name==="AbortError"||("message"in e)&&String(e.message).includes("FetchRequestCanceledException"))}var bp=(e)=>{if(e instanceof Error)return e;if(typeof e==="object"&&e!==null){try{if(Object.prototype.toString.call(e)==="[object Error]"){let t=Error(e.message,e.cause?{cause:e.cause}:{});if(e.stack)t.stack=e.stack;if(e.cause&&!t.cause)t.cause=e.cause;if(e.name)t.name=e.name;return t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)};var Z,kr,$r,Ha,Ep,Ip,vp,Cp,Sp,wp,xp,_p,kp;var jr=I(()=>{Z=class Z extends Error{};kr=class kr extends Z{constructor(e,t,r,n,s){super(`${kr.makeMessage(e,t,r)}`);this.status=e,this.headers=n,this.requestID=n?.get("request-id"),this.error=t,this.type=s??null}static makeMessage(e,t,r){let n=t?.message?typeof t.message==="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):r;if(e&&n)return`${e} ${n}`;if(e)return`${e} status code (no body)`;if(n)return n;return"(no status code or body)"}static generate(e,t,r,n){if(!e||!n)return new Ha({message:r,cause:bp(t)});let s=t,o=s?.error?.type;if(e===400)return new Ip(e,s,r,n,o);if(e===401)return new vp(e,s,r,n,o);if(e===403)return new Cp(e,s,r,n,o);if(e===404)return new Sp(e,s,r,n,o);if(e===409)return new wp(e,s,r,n,o);if(e===422)return new xp(e,s,r,n,o);if(e===429)return new _p(e,s,r,n,o);if(e>=500)return new kp(e,s,r,n,o);return new kr(e,s,r,n,o)}};$r=class $r extends kr{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}};Ha=class Ha extends kr{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0);if(t)this.cause=t}};Ep=class Ep extends Ha{constructor({message:e}={}){super({message:e??"Request timed out."})}};Ip=class Ip extends kr{};vp=class vp extends kr{};Cp=class Cp extends kr{};Sp=class Sp extends kr{};wp=class wp extends kr{};xp=class xp extends kr{};_p=class _p extends kr{};kp=class kp extends kr{}});function Wm(e){if(typeof e!=="object")return{};return e??{}}function aC(e){if(!e)return!0;for(let t in e)return!1;return!0}function OO(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var oce,MO=(e)=>{return oce.test(e)},oC=(e)=>(oC=Array.isArray,oC(e)),iC,UO=(e,t)=>{if(typeof t!=="number"||!Number.isInteger(t))throw new Z(`${e} must be an integer`);if(t<0)throw new Z(`${e} must be a positive integer`);return t},Jm=(e)=>{try{return JSON.parse(e)}catch(t){return}};var Li=I(()=>{jr();oce=/^[a-z][a-z0-9+.-]*:/i,iC=oC});var FO=(e)=>new Promise((t)=>setTimeout(t,e));var ps="0.94.0";function ice(){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 cce(){if(typeof navigator>"u"||!navigator)return null;let e=[{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:t,pattern:r}of e){let n=r.exec(navigator.userAgent);if(n){let s=n[1]||0,o=n[2]||0,i=n[3]||0;return{browser:t,version:`${s}.${o}.${i}`}}}return null}var zO=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},ace=()=>{let e=ice();if(e==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ps,"X-Stainless-OS":$O(Deno.build.os),"X-Stainless-Arch":LO(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":ps,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(e==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ps,"X-Stainless-OS":$O(globalThis.process.platform??"unknown"),"X-Stainless-Arch":LO(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let t=cce();if(t)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ps,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ps,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},LO=(e)=>{if(e==="x32")return"x32";if(e==="x86_64"||e==="x64")return"x64";if(e==="arm")return"arm";if(e==="aarch64"||e==="arm64")return"arm64";if(e)return`other:${e}`;return"unknown"},$O=(e)=>{if(e=e.toLowerCase(),e.includes("ios"))return"iOS";if(e==="android")return"Android";if(e==="darwin")return"MacOS";if(e==="win32")return"Windows";if(e==="freebsd")return"FreeBSD";if(e==="openbsd")return"OpenBSD";if(e==="linux")return"Linux";if(e)return`Other:${e}`;return"Unknown"},jO,Bp=()=>{return jO??(jO=ace())};var Ym=()=>{};function HO(){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 cC(...e){let t=globalThis.ReadableStream;if(typeof t>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function Km(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return cC({start(){},async pull(r){let{done:n,value:s}=await t.next();if(n)r.close();else r.enqueue(s)},async cancel(){await t.return?.()}})}function Qp(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let r=await t.read();if(r?.done)t.releaseLock();return r}catch(r){throw t.releaseLock(),r}},async return(){let r=t.cancel();return t.releaseLock(),await r,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function qO(e){if(e===null||typeof e!=="object")return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),r=t.cancel();t.releaseLock(),await r}var GO=({headers:e,body:t})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}};function VO(e){return Object.entries(e).filter(([t,r])=>typeof r<"u").map(([t,r])=>{if(typeof r==="string"||typeof r==="number"||typeof r==="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(r)}`;if(r===null)return`${encodeURIComponent(t)}=`;throw new Z(`Cannot stringify type ${typeof r}; 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 lC=I(()=>{jr()});function Xm(e){if(!e)return;let t;try{t=new URL(e)}catch(n){throw new St(`Invalid token endpoint base URL "${e}": ${n}`)}if(t.protocol==="https:")return;let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(t.protocol==="http:"&&(r==="localhost"||r==="127.0.0.1"||r==="::1"))return;throw new St(`Refusing to send credential over non-https token endpoint "${e}"`)}async function eh(e,t){let r=await pce(e),n;try{n=JSON.parse(r)}catch{throw new St(`Token endpoint returned non-JSON response (status ${e.status})`,e.status,mn(r),t)}if(!n.access_token)throw new St(`Token endpoint response missing access_token: ${JSON.stringify(mn(n))}`,e.status,mn(n),t);if(n.token_type&&n.token_type.toLowerCase()!=="bearer")throw new St(`Token endpoint response: unsupported token_type "${n.token_type}" (want Bearer)`,e.status,mn(n),t);return n}function mn(e){if(e==null)return e;if(typeof e==="string"){let t;try{t=JSON.parse(e)}catch{if(e.length<=uC)return e;return e.slice(0,uC)+`... <${e.length-uC} more chars>`}return JSON.stringify(mn(t))}if(typeof e==="object"&&!Array.isArray(e)){let t={};for(let[r,n]of Object.entries(e))if(dce.has(r))t[r]=n;return t}return null}async function th(e,t=(r)=>console.warn(`anthropic-sdk: ${r}`)){if(typeof process>"u"||process.platform==="win32")return;let r=await import("node:fs"),n=e,s;try{n=await r.promises.realpath(e),s=await r.promises.stat(n)}catch{return}let o=s.mode&511;if(o&18)throw new St(`Credentials file at ${n} is group/world-writable (mode 0o${o.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${n}\`.`);if(o&36)throw new St(`Credentials file at ${n} is group/world-readable (mode 0o${o.toString(8)}); run \`chmod 600 ${n}\` before retrying.`);if(typeof process.getuid==="function"&&s.uid!==process.getuid())t(`credentials file at ${n} is owned by uid ${s.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function rh(e,t){let r=await import("node:fs"),s=(await import("node:path")).dirname(e);await r.promises.mkdir(s,{recursive:!0,mode:448});let o=`${e}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let i=await r.promises.open(o,"w",384);try{await i.writeFile(JSON.stringify(t,null,2)),await i.sync()}finally{await i.close()}await r.promises.rename(o,e)}catch(i){throw await r.promises.unlink(o).catch(()=>{}),i}try{let i=await r.promises.open(s,"r");try{await i.sync()}finally{await i.close()}}catch{}}async function pce(e){if(!e.body)return"";let t=e.body.getReader(),r=[],n=0;for(;;){let{done:o,value:i}=await t.read();if(o)break;if(n+i.length>WO){let a=WO-n;if(a>0)r.push(i.subarray(0,a));await t.cancel();break}r.push(i),n+=i.length}let s;if(r.length===1)s=r[0];else{s=new Uint8Array(r.reduce((i,a)=>i+a.length,0));let o=0;for(let i of r)s.set(i,o),o+=i.length}return new TextDecoder("utf-8").decode(s)}var JO="urn:ietf:params:oauth:grant-type:jwt-bearer",YO="refresh_token",Zm="/v1/oauth/token",qa="oauth-2025-04-20",KO="oidc-federation-2026-04-01",ZO=120,vl=30,XO=5,WO=1048576,uC=2000,dce,St;var Cl=I(()=>{jr();dce=new Set(["error","error_description","error_uri"]);St=class St extends Z{constructor(e,t=null,r=null,n=null){super(e);this.statusCode=t,this.body=r,this.requestId=n}}});function Ns(){return Math.floor(Date.now()/1000)}class dC{constructor(e,t){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=e,this.onAdvisoryRefreshError=t}async getToken(){let e=this.nextForce;this.nextForce=!1;let t=this.cached;if(e||t==null)return(await this.refresh(e)).token;if(t.expiresAt==null)return t.token;let r=t.expiresAt-Ns();if(r>ZO)return t.token;if(r>vl)return this.backgroundRefresh(),t.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh(e=!1){if(this.pendingRefresh&&!e)return this.pendingRefresh;return this.doRefresh(e)}backgroundRefresh(){if(this.pendingRefresh)return;if(Ns()-this.lastAdvisoryError<XO)return;this.doRefresh().catch((e)=>{this.lastAdvisoryError=Ns(),this.onAdvisoryRefreshError?.(e)})}doRefresh(e=!1){return this.pendingRefresh=this.provider(e?{forceRefresh:!0}:void 0).then((t)=>{return this.cached=t,this.pendingRefresh=null,t},(t)=>{throw this.pendingRefresh=null,t}),this.pendingRefresh}}var eU=I(()=>{Cl()});var bt=(e)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[e]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(e)?.trim()||void 0;return};function nU(e){let t=0;for(let s of e)t+=s.length;let r=new Uint8Array(t),n=0;for(let s of e)r.set(s,n),n+=s.length;return r}function Sl(e){let t;return(tU??(t=new globalThis.TextEncoder,tU=t.encode.bind(t)))(e)}function pC(e){let t;return(rU??(t=new globalThis.TextDecoder,rU=t.decode.bind(t)))(e)}var tU,rU;var sU=I(()=>{jr()});function Rp(){}function nh(e,t,r){if(!t||sh[e]>sh[r])return Rp;else return t[e].bind(t)}function hr(e){let t=e.logger,r=e.logLevel??"off";if(!t)return fce;let n=oU.get(t);if(n&&n[0]===r)return n[1];let s={error:nh("error",t,r),warn:nh("warn",t,r),info:nh("info",t,r),debug:nh("debug",t,r)};return oU.set(t,[r,s]),s}var sh,fC=(e,t,r)=>{if(!e)return;if(OO(sh,e))return e;hr(r).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(sh))}`);return},fce,oU,Go=(e)=>{if(e.options)e.options={...e.options},delete e.options.headers;if(e.headers)e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([t,r])=>[t,t.toLowerCase()==="x-api-key"||t.toLowerCase()==="authorization"||t.toLowerCase()==="cookie"||t.toLowerCase()==="set-cookie"?"***":r]));if("retryOfRequestLogID"in e){if(e.retryOfRequestLogID)e.retryOf=e.retryOfRequestLogID;delete e.retryOfRequestLogID}return e};var Tp=I(()=>{Li();sh={off:0,error:200,warn:300,info:400,debug:500};fce={error:Rp,warn:Rp,info:Rp,debug:Rp},oU=new WeakMap});var iU=I(()=>{Li();sU();Tp();lC()});function aU(e){if(!e)throw Error("profile name is empty");if(e==="."||e==="..")throw Error(`profile name "${e}" is not allowed`);if(e.includes("/")||e.includes("\\"))throw Error(`profile name "${e}" must not contain path separators`);if(!Ace.test(e))throw Error(`profile name "${e}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var oh="1.0",Ace,cU=async(e)=>{var t,r;let n=await AC();if(n===null)return null;let s=e??await uU();if(s===null)return null;aU(s);let o=await import("node:fs"),a=(await import("node:path")).join(n,"configs",`${s}.json`),c;try{c=await o.promises.readFile(a,"utf-8")}catch(p){if(p?.code!=="ENOENT")throw Error(`failed to read config file ${a}: ${p}`);c=null}if(c===null){let p=bt("ANTHROPIC_ORGANIZATION_ID"),f=bt("ANTHROPIC_IDENTITY_TOKEN_FILE"),A=bt("ANTHROPIC_FEDERATION_RULE_ID");if(A&&p)return{fromFile:!1,config:{organization_id:p,workspace_id:bt("ANTHROPIC_WORKSPACE_ID"),base_url:bt("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:A,service_account_id:bt("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:f?{source:"file",path:f}:void 0,scope:bt("ANTHROPIC_SCOPE")}}};return null}let l;try{l=JSON.parse(c)}catch(p){throw Error(`failed to parse config file ${a}: ${p}`)}if(!l.authentication)throw Error(`config file ${a} is missing "authentication"`);let u=l.authentication.type;if(u!=="oidc_federation"&&u!=="user_oauth")throw Error(`authentication.type "${u}" is not a known authentication type`);if(l.organization_id??(l.organization_id=bt("ANTHROPIC_ORGANIZATION_ID")),l.workspace_id??(l.workspace_id=bt("ANTHROPIC_WORKSPACE_ID")),l.base_url??(l.base_url=bt("ANTHROPIC_BASE_URL")),(t=l.authentication).scope??(t.scope=bt("ANTHROPIC_SCOPE")),l.authentication.type==="oidc_federation"){if(!l.authentication.identity_token){let p=bt("ANTHROPIC_IDENTITY_TOKEN_FILE");if(p)l.authentication.identity_token={source:"file",path:p}}if(!l.authentication.federation_rule_id)l.authentication.federation_rule_id=bt("ANTHROPIC_FEDERATION_RULE_ID")??"";(r=l.authentication).service_account_id??(r.service_account_id=bt("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:l,fromFile:!0}},lU=async(e,t)=>{if(e?.authentication.credentials_path)return e.authentication.credentials_path;let r=await AC();if(!r)return null;let n=t??await uU();if(!n)return null;return aU(n),(await import("node:path")).join(r,"credentials",`${n}.json`)},AC=async()=>{if(!gce())return null;let e=await import("node:path"),t=bt("ANTHROPIC_CONFIG_DIR");if(t)return t;if(Bp()["X-Stainless-OS"]==="Windows"){let o=bt("APPDATA");if(o)return e.join(o,"Anthropic");let i=bt("USERPROFILE");if(i)return e.join(i,"AppData","Roaming","Anthropic");return null}let n=bt("XDG_CONFIG_HOME");if(n)return e.join(n,"anthropic");let s=bt("HOME");if(s)return e.join(s,".config","anthropic");return null},gce=()=>{let e=Bp()["X-Stainless-Runtime"];return e==="node"||e==="deno"},uU=async()=>{let e=await AC();if(!e)return null;let t=bt("ANTHROPIC_PROFILE");if(t)return t;let r=await import("node:fs"),s=(await import("node:path")).join(e,"active_config");try{return(await r.promises.readFile(s,"utf-8")).trim()||"default"}catch(o){if(o?.code!=="ENOENT")throw Error(`failed to read ${s}: ${o}`);return"default"}};var gC=I(()=>{Ym();iU();Ace=/^[A-Za-z0-9_.-]+$/});function mC(e){if(!e)throw new Z("Identity token file path is empty");return async()=>{let t=await import("node:fs"),r;try{r=await t.promises.readFile(e,"utf-8")}catch(s){throw new Z(`Failed to read identity token file at ${e}: ${s}`)}let n=r.trim();if(!n)throw new Z(`Identity token file at ${e} is empty`);return n}}function dU(e){if(!e)throw new Z("Identity token value is empty");return()=>e}var pU=I(()=>{jr()});function fU(e){return async()=>{Xm(e.baseURL);let t=await e.identityTokenProvider();if(t.length>16384)throw new St(`Identity token is ${Math.ceil(t.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let r={grant_type:JO,assertion:t,federation_rule_id:e.federationRuleId,organization_id:e.organizationId};if(e.serviceAccountId)r.service_account_id=e.serviceAccountId;if(e.workspaceId)r.workspace_id=e.workspaceId;let n=`${e.baseURL}${Zm}`,s;try{s=await e.fetch(n,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${qa},${KO}`,"User-Agent":e.userAgent||`anthropic-sdk-typescript/${ps} oidcFederationProvider`},body:JSON.stringify(r)})}catch(c){throw new St(`Failed to reach token endpoint ${n}: ${c}`)}let o=s.headers.get("Request-Id");if(!s.ok){let c=await s.text().catch(()=>""),l=mn(c),u="";if(s.status===401)u=` Ensure your federation rule matches your identity token. ${e.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 St(`Token exchange failed with status ${s.status}${o?` (request-id ${o})`:""}: ${l}${u}`,s.status,l,o)}let i=await eh(s,o),a=Number(i.expires_in);if(!Number.isFinite(a))throw new St(`Token endpoint response missing required fields: ${JSON.stringify(mn(i))}`,s.status,mn(i),o);return{token:i.access_token,expiresAt:Ns()+a}}}var AU=I(()=>{Cl()});function gU(e){return async(t)=>{let r=await import("node:fs");await th(e.credentialsPath,e.onSafetyWarning);let n;try{n=await r.promises.readFile(e.credentialsPath,"utf-8")}catch(m){throw new St(`Credentials file not found at ${e.credentialsPath}: ${m}`)}let s;try{s=JSON.parse(n)}catch(m){throw new St(`Credentials file at ${e.credentialsPath} is not valid JSON: ${m}`)}let o=s.access_token;if(!o)throw new St(`Credentials file at ${e.credentialsPath} must include 'access_token'`);let i=s.expires_at;if(!t?.forceRefresh&&(i==null||Ns()<i-vl))return{token:o,expiresAt:i??null};let a=s.refresh_token;if(!e.clientId||!a)throw new St(`Access token at ${e.credentialsPath} has expired and no refresh is available (client_id ${e.clientId?"set":"empty"}, refresh_token ${a?"set":"empty"})`);Xm(e.baseURL);let c={grant_type:YO,refresh_token:a,client_id:e.clientId},l=`${e.baseURL}${Zm}`,u;try{u=await e.fetch(l,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":qa,"User-Agent":e.userAgent||`anthropic-sdk-typescript/${ps} userOAuthProvider`},body:JSON.stringify(c)})}catch(m){throw new St(`User OAuth refresh failed to reach token endpoint: ${m}`)}let p=u.headers.get("Request-Id");if(!u.ok){let m=await u.text().catch(()=>"");throw new St(`User OAuth refresh failed (HTTP ${u.status}): ${mn(m)}`,u.status,mn(m),p)}let f=await eh(u,p),A=Number(f.expires_in);if(!Number.isFinite(A))throw new St(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(mn(f))}`,u.status,mn(f),p);let g=Ns()+A,h=f.refresh_token||a;return await rh(e.credentialsPath,{...s,version:oh,type:"oauth_token",access_token:f.access_token,expires_at:g,refresh_token:h}),{token:f.access_token,expiresAt:g}}}var mU=I(()=>{gC();Cl()});function hC(e,t){let r=e.authentication.credentials_path??null,n=(e.base_url||t.baseURL).replace(/\/+$/,""),s=mce(e,r,n,t),o={};if(e.workspace_id&&e.authentication.type==="user_oauth")o["anthropic-workspace-id"]=e.workspace_id;return{provider:s,extraHeaders:o,baseURL:e.base_url||void 0}}async function hU(e,t){let r=await cU(t);if(!r)return null;let{config:n,fromFile:s}=r,o=n.authentication.credentials_path||!s?n:{...n,authentication:{...n.authentication,credentials_path:await lU(n,t)??void 0}};return hC(o,e)}function mce(e,t,r,n){switch(e.authentication.type){case"oidc_federation":{let s=e.authentication,o=hce(s);if(!o)throw new St("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!s.federation_rule_id)throw new St("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(!e.organization_id)throw new St("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let i=fU({identityTokenProvider:o,federationRuleId:s.federation_rule_id,organizationId:e.organization_id,serviceAccountId:s.service_account_id,workspaceId:e.workspace_id,baseURL:r,fetch:n.fetch,userAgent:n.userAgent});if(t)return yce(i,t,n.onCacheWriteError,n.onSafetyWarning);return i}case"user_oauth":{if(!t)throw new St("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return gU({credentialsPath:t,clientId:e.authentication.client_id,baseURL:r,fetch:n.fetch,userAgent:n.userAgent,onSafetyWarning:n.onSafetyWarning})}default:{let s=e.authentication.type;throw new St(`authentication.type "${s}" is not a known authentication type`)}}}function hce(e){if(e.identity_token){let n=e.identity_token.source;if(n!=="file")throw new St(`identity_token.source "${n}" is not supported by this SDK version (only "file")`);if(!e.identity_token.path)throw new St('identity_token.source "file" requires a non-empty path');return mC(e.identity_token.path)}let t=bt("ANTHROPIC_IDENTITY_TOKEN_FILE");if(t)return mC(t);let r=bt("ANTHROPIC_IDENTITY_TOKEN");if(r)return dU(r);return null}function yce(e,t,r,n){return async(s)=>{let o=await import("node:fs");await th(t,n);let i;try{let c=await o.promises.readFile(t,"utf-8");i=JSON.parse(c);let l=i?.access_token;if(l&&!s?.forceRefresh){let u=i?.expires_at;if(u==null||Ns()<u-vl)return{token:l,expiresAt:u??null}}}catch(c){if(c?.code!=="ENOENT"&&!(c instanceof SyntaxError))r?.(c)}let a=await e(s);try{await rh(t,{...i??{},version:oh,type:"oauth_token",access_token:a.token,expires_at:a.expiresAt})}catch(c){r?.(c)}return a}}var yU=I(()=>{gC();Cl();pU();AU();mU()});class $i{constructor(){jn.set(this,void 0),zn.set(this,void 0),J(this,jn,new Uint8Array,"f"),J(this,zn,null,"f")}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==="string"?Sl(e):e;J(this,jn,nU([_(this,jn,"f"),t]),"f");let r=[],n;while((n=bce(_(this,jn,"f"),_(this,zn,"f")))!=null){if(n.carriage&&_(this,zn,"f")==null){J(this,zn,n.index,"f");continue}if(_(this,zn,"f")!=null&&(n.index!==_(this,zn,"f")+1||n.carriage)){r.push(pC(_(this,jn,"f").subarray(0,_(this,zn,"f")-1))),J(this,jn,_(this,jn,"f").subarray(_(this,zn,"f")),"f"),J(this,zn,null,"f");continue}let s=_(this,zn,"f")!==null?n.preceding-1:n.preceding,o=pC(_(this,jn,"f").subarray(0,s));r.push(o),J(this,jn,_(this,jn,"f").subarray(n.index),"f"),J(this,zn,null,"f")}return r}flush(){if(!_(this,jn,"f").length)return[];return this.decode(`
5
5
  `)}}function bce(e,t){for(let s=t??0;s<e.length;s++){if(e[s]===10)return{preceding:s,index:s+1,carriage:!1};if(e[s]===13)return{preceding:s,index:s+1,carriage:!0}}return null}function bU(e){for(let n=0;n<e.length-1;n++){if(e[n]===10&&e[n+1]===10)return n+2;if(e[n]===13&&e[n+1]===13)return n+2;if(e[n]===13&&e[n+1]===10&&n+3<e.length&&e[n+2]===13&&e[n+3]===10)return n+4}return-1}var jn,zn;var yC=I(()=>{Ho();jn=new WeakMap,zn=new WeakMap;$i.NEWLINE_CHARS=new Set([`
6
6
  `,"\r"]);$i.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*Ece(e,t){if(!e.body){if(t.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new Z("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 Z("Attempted to iterate over a response with no body")}let r=new EU,n=new $i,s=Qp(e.body);for await(let o of Ice(s))for(let i of n.decode(o)){let a=r.decode(i);if(a)yield a}for(let o of n.flush()){let i=r.decode(o);if(i)yield i}}async function*Ice(e){let t=new Uint8Array;for await(let r of e){if(r==null)continue;let n=r instanceof ArrayBuffer?new Uint8Array(r):typeof r==="string"?Sl(r):r,s=new Uint8Array(t.length+n.length);s.set(t),s.set(n,t.length),t=s;let o;while((o=bU(t))!==-1)yield t.slice(0,o),t=t.slice(o)}if(t.length>0)yield t}class EU{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r"))e=e.substring(0,e.length-1);if(!e){if(!this.event&&!this.data.length)return null;let s={event:this.event,data:this.data.join(`
@@ -177,7 +177,7 @@ ${s}`;break;case"retry":if(kse(s))t[n]=s;break;case"id":if(Bse(s))t[n]=s;break;c
177
177
  `+s}}catch(o){}}throw r}}_request(e,t){if(typeof e==="string")t=t||{},t.url=e;else t=e||{};t=ro(this.defaults,t);let{transitional:r,paramsSerializer:n,headers:s}=t;if(r!==void 0)_g.assertOptions(r,{silentJSONParsing:Is.transitional(Is.boolean),forcedJSONParsing:Is.transitional(Is.boolean),clarifyTimeoutError:Is.transitional(Is.boolean),legacyInterceptorReqResOrdering:Is.transitional(Is.boolean)},!1);if(n!=null)if(S.isFunction(n))t.paramsSerializer={serialize:n};else _g.assertOptions(n,{encode:Is.function,serialize:Is.function},!0);if(t.allowAbsoluteUrls!==void 0);else if(this.defaults.allowAbsoluteUrls!==void 0)t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls;else t.allowAbsoluteUrls=!0;_g.assertOptions(t,{baseUrl:Is.spelling("baseURL"),withXsrfToken:Is.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=s&&S.merge(s.common,s[t.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],(A)=>{delete s[A]}),t.headers=ar.concat(o,s);let i=[],a=!0;this.interceptors.request.forEach(function(g){if(typeof g.runWhen==="function"&&g.runWhen(t)===!1)return;a=a&&g.synchronous;let h=t.transitional||ga;if(h&&h.legacyInterceptorReqResOrdering)i.unshift(g.fulfilled,g.rejected);else i.push(g.fulfilled,g.rejected)});let c=[];this.interceptors.response.forEach(function(g){c.push(g.fulfilled,g.rejected)});let l,u=0,p;if(!a){let A=[jE.bind(this),void 0];A.unshift(...i),A.push(...c),p=A.length,l=Promise.resolve(t);while(u<p)l=l.then(A[u++],A[u++]);return l}p=i.length;let f=t;while(u<p){let A=i[u++],g=i[u++];try{f=A(f)}catch(h){g.call(this,h);break}}try{l=jE.call(this,f)}catch(A){return Promise.reject(A)}u=0,p=c.length;while(u<p)l=l.then(c[u++],c[u++]);return l}getUri(e){e=ro(this.defaults,e);let t=Oc(e.baseURL,e.url,e.allowAbsoluteUrls);return Mc(t,e.params,e.paramsSerializer)}}S.forEach(["delete","get","head","options"],function(t){kg.prototype[t]=function(r,n){return this.request(ro(n||{},{method:t,url:r,data:(n||{}).data}))}});S.forEach(["post","put","patch"],function(t){function r(n){return function(o,i,a){return this.request(ro(a||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:o,data:i}))}}kg.prototype[t]=r(),kg.prototype[t+"Form"]=r(!0)});var Bg=kg;class cD{constructor(e){if(typeof e!=="function")throw TypeError("executor must be a function.");let t;this.promise=new Promise(function(s){t=s});let r=this;this.promise.then((n)=>{if(!r._listeners)return;let s=r._listeners.length;while(s-- >0)r._listeners[s](n);r._listeners=null}),this.promise.then=(n)=>{let s,o=new Promise((i)=>{r.subscribe(i),s=i}).then(n);return o.cancel=function(){r.unsubscribe(s)},o},e(function(s,o,i){if(r.reason)return;r.reason=new Kn(s,o,i),t(r.reason)})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}if(this._listeners)this._listeners.push(e);else this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);if(t!==-1)this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=(r)=>{e.abort(r)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new cD(function(n){e=n}),cancel:e}}}var BZ=cD;function lD(e){return function(r){return e.apply(null,r)}}function uD(e){return S.isObject(e)&&e.isAxiosError===!0}var dD={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(dD).forEach(([e,t])=>{dD[t]=e});var QZ=dD;function RZ(e){let t=new Bg(e),r=lg(Bg.prototype.request,t);return S.extend(r,Bg.prototype,t,{allOwnKeys:!0}),S.extend(r,t,null,{allOwnKeys:!0}),r.create=function(s){return RZ(ro(e,s))},r}var Sr=RZ(rd);Sr.Axios=Bg;Sr.CanceledError=Kn;Sr.CancelToken=BZ;Sr.isCancel=Eg;Sr.VERSION=jc;Sr.toFormData=Aa;Sr.AxiosError=j;Sr.Cancel=Sr.CanceledError;Sr.all=function(t){return Promise.all(t)};Sr.spread=lD;Sr.isAxiosError=uD;Sr.mergeConfig=ro;Sr.AxiosHeaders=ar;Sr.formToJSON=(e)=>kE(S.isHTMLForm(e)?new FormData(e):e);Sr.getAdapter=$E.getAdapter;Sr.HttpStatusCode=QZ;Sr.default=Sr;var Ar=Sr;et();Ys();xt();bn();import{mkdirSync as SNe,writeFileSync as wNe}from"fs";bn();et();nr();xt();Kr();var HE="/home/claude/.claude/remote",sxt=`${HE}/.oauth_token`,oxt=`${HE}/.api_key`,qE=`${HE}/.session_ingress_token`;function TZ(e,t,r){if(!Ge(process.env.CLAUDE_CODE_REMOTE))return;try{SNe(HE,{recursive:!0,mode:448}),wNe(e,t,{encoding:"utf8",mode:384}),b(`Persisted ${r} to ${e} for subprocess access`)}catch(n){b(`Failed to persist ${r} to disk (non-fatal): ${ae(n)}`,{level:"error"})}}function pD(e,t){try{let n=Nt().readFileSync(e,{encoding:"utf8"}).trim();if(!n)return null;return b(`Read ${t} from well-known file ${e}`),n}catch(r){if(!Os(r))b(`Failed to read ${t} from ${e}: ${ae(r)}`,{level:"debug"});return null}}et();xt();Kr();function xNe(){let e=gF();if(e!==void 0)return e;let t=process.env.CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR;if(!t){let n=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??qE,s=pD(n,"session ingress token");return Ll(s),s}let r=parseInt(t,10);if(Number.isNaN(r))return b(`CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR must be a valid file descriptor number, got: ${t}`,{level:"error"}),Ll(null),null;try{let n=Nt(),s=process.platform==="darwin"||process.platform==="freebsd"?`/dev/fd/${r}`:`/proc/self/fd/${r}`,o=n.readFileSync(s,{encoding:"utf8"}).trim();if(!o)return b("File descriptor contained empty token",{level:"error"}),Ll(null),null;return b(`Successfully read token from file descriptor ${r}`),Ll(o),TZ(qE,o,"session ingress token"),o}catch(n){b(`Failed to read token from file descriptor ${r}: ${ae(n)}`,{level:"error"});let s=process.env.CLAUDE_SESSION_INGRESS_TOKEN_FILE??qE,o=pD(s,"session ingress token");return Ll(o),o}}function Qg(){let e=process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN;if(e)return e;return xNe()}function GE(){let e=Qg();if(!e)return{};if(e.startsWith("sk-ant-sid")){let t={Cookie:`sessionKey=${e}`},r=process.env.CLAUDE_CODE_ORGANIZATION_UUID;if(r)t["X-Organization-Uuid"]=r;return t}return{Authorization:`Bearer ${e}`}}function Rg(e){process.env.CLAUDE_CODE_SESSION_ACCESS_TOKEN=e}rt();class Hc extends Error{retryAfterMs;constructor(e,t){super(e);this.retryAfterMs=t}}class qc{pending=[];pendingAtClose=0;draining=!1;closed=!1;backpressureResolvers=[];sleepResolve=null;flushResolvers=[];droppedBatches=0;config;constructor(e){this.config=e}get droppedBatchCount(){return this.droppedBatches}get pendingCount(){return this.closed?this.pendingAtClose:this.pending.length}async enqueue(e){if(this.closed)return;let t=Array.isArray(e)?e:[e];if(t.length===0)return;while(this.pending.length+t.length>this.config.maxQueueSize&&!this.closed)await new Promise((r)=>{this.backpressureResolvers.push(r)});if(this.closed)return;this.pending.push(...t),this.drain()}flush(){if(this.pending.length===0&&!this.draining)return Promise.resolve();return this.drain(),new Promise((e)=>{this.flushResolvers.push(e)})}close(){if(this.closed)return;this.closed=!0,this.pendingAtClose=this.pending.length,this.pending=[],this.sleepResolve?.(),this.sleepResolve=null;for(let e of this.backpressureResolvers)e();this.backpressureResolvers=[];for(let e of this.flushResolvers)e();this.flushResolvers=[]}async drain(){if(this.draining||this.closed)return;this.draining=!0;let e=0;try{while(this.pending.length>0&&!this.closed){let t=this.takeBatch();if(t.length===0)continue;try{await this.config.send(t),e=0}catch(r){if(e++,this.config.maxConsecutiveFailures!==void 0&&e>=this.config.maxConsecutiveFailures){this.droppedBatches++,this.config.onBatchDropped?.(t.length,e),e=0,this.releaseBackpressure();continue}this.pending=t.concat(this.pending);let n=r instanceof Hc?r.retryAfterMs:void 0;await this.sleep(this.retryDelay(e,n));continue}this.releaseBackpressure()}}finally{if(this.draining=!1,this.pending.length===0){for(let t of this.flushResolvers)t();this.flushResolvers=[]}}}takeBatch(){let{maxBatchSize:e,maxBatchBytes:t}=this.config;if(t===void 0)return this.pending.splice(0,e);let r=0,n=0;while(n<this.pending.length&&n<e){let s;try{s=Buffer.byteLength(Ee(this.pending[n]))}catch{this.pending.splice(n,1);continue}if(n>0&&r+s>t)break;r+=s,n++}return this.pending.splice(0,n)}retryDelay(e,t){let r=Math.random()*this.config.jitterMs;if(t!==void 0)return Math.max(this.config.baseDelayMs,Math.min(t,this.config.maxDelayMs))+r;return Math.min(this.config.baseDelayMs*2**(e-1),this.config.maxDelayMs)+r}releaseBackpressure(){let e=this.backpressureResolvers;this.backpressureResolvers=[];for(let t of e)t()}sleep(e){return new Promise((t)=>{this.sleepResolve=t,setTimeout((r,n)=>{r.sleepResolve=null,n()},e,this,t)})}}Wi();class fD{capacity;buffer;head=0;size=0;constructor(e){this.capacity=e;this.buffer=Array(e)}add(e){if(this.buffer[this.head]=e,this.head=(this.head+1)%this.capacity,this.size<this.capacity)this.size++}addAll(e){for(let t of e)this.add(t)}getRecent(e){let t=[],r=this.size<this.capacity?0:this.head,n=Math.min(e,this.size);for(let s=0;s<n;s++){let o=(r+this.size-n+s)%this.capacity;t.push(this.buffer[o])}return t}toArray(){if(this.size===0)return[];let e=[],t=this.size<this.capacity?0:this.head;for(let r=0;r<this.size;r++){let n=(t+r)%this.capacity;e.push(this.buffer[n])}return e}clear(){this.buffer.length=0,this.head=0,this.size=0}length(){return this.size}}et();Ys();nr();Ps();import{Agent as kNe}from"https";Ps();et();nr();Kr();var DZ=["bundled","system"];function _Ne(){let e=process.env.CLAUDE_CODE_CERT_STORE;if(e){let t=[];for(let r of e.split(",")){let n=r.trim().toLowerCase();if(n==="bundled"||n==="system"){if(!t.includes(n))t.push(n)}else if(n)b(`CA certs: unrecognized CLAUDE_CODE_CERT_STORE source '${n}', ignoring`,{level:"warn"})}return t.length>0?t:DZ}if(nC("--use-system-ca")||nC("--use-openssl-ca"))return["system"];return DZ}var cd=dt(()=>{let e=_Ne(),t=process.env.NODE_EXTRA_CA_CERTS,r=e.includes("bundled"),n=e.includes("system");b(`CA certs: stores=${e.join(",")}, extraCertsPath=${t}`);let s=k("tls"),o=s.getCACertificates;if(!r&&n&&!o){b("CA certs: stores=system but system CA API unavailable, deferring to runtime");return}let i=[];if(r)i.push(...s.rootCertificates),b(`CA certs: Loaded ${s.rootCertificates.length} bundled root certificates`);if(n)try{let a=o?.("system");if(a&&a.length>0)i.push(...a),b(`CA certs: Loaded ${a.length} system CA certificates`);else if(b(`CA certs: system store ${o?"returned empty":"unavailable"}`),!r)i.push(...s.rootCertificates)}catch(a){if(b(`CA certs: Failed to load system CA certificates: ${a}`,{level:"error"}),!r)i.push(...s.rootCertificates)}if(t)try{let a=Nt().readFileSync(t,{encoding:"utf8"});i.push(a),b(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${t})`)}catch(a){b(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${t}): ${a}`,{level:"error"})}return i.length>0?_f(i):void 0});et();Kr();var Tg=dt(()=>{let e={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{e.cert=Nt().readFileSync(process.env.CLAUDE_CODE_CLIENT_CERT,{encoding:"utf8"}),b("mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT")}catch(t){b(`mTLS: Failed to load client certificate: ${t}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY)try{e.key=Nt().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY,{encoding:"utf8"}),b("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY")}catch(t){b(`mTLS: Failed to load client key: ${t}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE)e.passphrase=process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE,b("mTLS: Using client key passphrase");if(Object.keys(e).length===0)return;return e}),BNe=dt(()=>{let e=Tg(),t=cd();if(!e&&!t)return;let r={...e,...t&&{ca:t},keepAlive:!0};return b("mTLS: Creating HTTPS agent with custom certificates"),new kNe(r)});function PZ(){let e=Tg(),t=cd();if(!e&&!t)return;return{...e,...t&&{ca:t}}}function ld(){let e=Tg(),t=cd();if(!e&&!t)return{};return{tls:{...e,...t&&{ca:t}}}}Ps();bn();var hWe=ja(JZ(),1);import{isIP as qse}from"net";function gD(e,t){let r=t.lastIndexOf("/");if(r<0)return!1;let n=t.slice(0,r),s=t.slice(r+1);if(!/^\d+$/.test(s))return!1;let o=parseInt(s,10),i=YZ(n);if(!i)return!1;if(i.zone)return!1;let a=YZ(e);if(!a)return!1;let c=ZNe(a.bytes),l=i.bytes;if(c.length!==l.length)return!1;let u=l.length*8;if(o<0||o>u)return!1;return KNe(c,l,o)}function KNe(e,t,r){let n=r>>3;for(let i=0;i<n;i++)if(e[i]!==t[i])return!1;let s=r&7;if(s===0)return!0;let o=255<<8-s&255;return((e[n]??0)&o)===((t[n]??0)&o)}function ZNe(e){if(e.length!==16)return e;for(let t=0;t<10;t++)if(e[t]!==0)return e;if(e[10]!==255||e[11]!==255)return e;return e.slice(12)}function YZ(e){if(e==="")return null;let t="",r=e,n=e.indexOf("%");if(n>=0)t=e.slice(n+1),r=e.slice(0,n);if(r.includes(":")){let o=XNe(r);return o?{bytes:o,zone:t}:null}if(t)return null;let s=KZ(r);return s?{bytes:s,zone:""}:null}function KZ(e){let t=e.split(".");if(t.length!==4)return null;let r=new Uint8Array(4);for(let n=0;n<4;n++){let s=t[n];if(s===void 0||s===""||!/^\d{1,3}$/.test(s))return null;if(s.length>1&&s.startsWith("0"))return null;let o=parseInt(s,10);if(o>255)return null;r[n]=o}return r}function XNe(e){let t=null,r=e,n=e.lastIndexOf(":");if(n>=0&&e.slice(n+1).includes(".")){if(t=KZ(e.slice(n+1)),!t)return null;r=e.slice(0,n+1)}let s=r.split("::");if(s.length>2)return null;let o=[],i=(c,l)=>{if(c==="")return[];let u=c.split(":"),p=[];for(let f=0;f<u.length;f++){let A=u[f];if(A===""&&l&&f===u.length-1)continue;if(A===void 0||A===""||!/^[0-9a-fA-F]{1,4}$/.test(A))return null;p.push(parseInt(A,16))}return p};if(s.length===1){let c=s[0]??"",l=i(c,t!==null);if(!l)return null;o.push(...l);let u=t?6:8;if(o.length!==u)return null}else{let c=s[0]??"",l=s[1]??"",u=i(c,!1),p=i(l,t!==null);if(!u||!p)return null;let f=t?2:0,A=8-u.length-p.length-f;if(A<1)return null;o.push(...u);for(let g=0;g<A;g++)o.push(0);if(o.push(...p),o.length+f!==8)return null}let a=new Uint8Array(16);for(let c=0;c<o.length;c++){let l=o[c];if(l===void 0)return null;a[c*2]=l>>8&255,a[c*2+1]=l&255}if(t)a[12]=t[0]??0,a[13]=t[1]??0,a[14]=t[2]??0,a[15]=t[3]??0;return a}et();nr();XR();var yWe=!1;function Vse(e=process.env){return e.https_proxy||e.HTTPS_PROXY||e.http_proxy||e.HTTP_PROXY}function Wse(e=process.env){return e.no_proxy||e.NO_PROXY}function UN(e,t=Wse()){if(!t)return!1;if(t==="*")return!0;try{let r=new URL(e),n=r.hostname.toLowerCase(),s=r.port||(r.protocol==="https:"?"443":"80"),o=`${n}:${s}`;return t.split(/[,\s]+/).filter(Boolean).some((a)=>{if(a=a.toLowerCase().trim(),a.includes(":"))return o===a;if(a.startsWith(".")){let c=a;return n===a.substring(1)||n.endsWith(c)}return n===a})}catch{return!1}}function Gse(e,t){if(UN(e,t))return!0;if(!t)return!1;let r;try{r=new URL(e).hostname.replace(/^\[|\]$/g,"")}catch{return!1}if(qse(r)===0)return!1;return t.split(/[,\s]+/).filter(Boolean).some((n)=>{if(n.includes("/"))return gD(r,n);let s=qse(n);if(s===0)return!1;return gD(r,`${n}/${s===4?32:128}`)})}var Bkt=dt((e)=>{let t=Hse(),r=Tg(),n=cd(),s={httpProxy:e,httpsProxy:e,noProxy:process.env.NO_PROXY||process.env.no_proxy};if(r||n){let o={...r&&{cert:r.cert,key:r.key,passphrase:r.passphrase},...n&&{ca:n}};s.connect=o,s.requestTls=o}return new t.EnvHttpProxyAgent(s)});function Jse(e){let t=Vse();if(!t)return;if(UN(e))return;return t}var bWe=null;function EWe(){return bWe?.value??null}function FN(e){let t={...yWe&&{keepalive:!1},...e.forAnthropicAPI&&!Ge(process.env.API_FORCE_IDLE_TIMEOUT)&&{timeout:!1}};if(e.forAnthropicAPI){let n=process.env.ANTHROPIC_UNIX_SOCKET;if(n)return{...t,unix:n}}let r=Vse();if(r){if(e.url&&UN(e.url))return{...t,...ld()};let n=EWe();return{...t,proxy:n?{url:r,headers:{"Proxy-Authorization":n}}:r,...ld()}}if(e.fallbackProxy){if(e.url&&(Gse(e.url,e.fallbackProxy.noProxy)||Gse(e.url,Wse())))return{...t,...ld()};let n=ld();return{...t,proxy:e.fallbackProxy.url,...e.fallbackProxy.ca?{tls:{...n.tls,ca:e.fallbackProxy.ca}}:n}}return{...t,...ld()}}$l();Ys();nr();var IWe=30000;function vWe(){return{activityCallback:null,refcount:0,activeReasons:new Map,oldestActivityStartedAt:null,heartbeatTimer:null,idleTimer:null,cleanupHandle:null}}var CWe="cli",Yse=()=>CWe;var LN=new Map;function SWe(){let e=Yse(),t=LN.get(e);if(!t)t=vWe(),LN.set(e,t);return t}function wWe(){return LN.get(Yse())??null}function xWe(e){Kse(e),e.heartbeatTimer=setInterval((t)=>{if(H("debug","session_keepalive_heartbeat",{refcount:t.refcount}),Ge(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES))t.activityCallback?.()},IWe,e)}function Kse(e){if(e.idleTimer!==null)clearTimeout(e.idleTimer),e.idleTimer=null}function kv(e){let t=SWe();if(t.activityCallback=e,t.refcount>0&&t.heartbeatTimer===null)xWe(t)}function Pm(){let e=wWe();if(!e)return;if(e.activityCallback=null,e.heartbeatTimer!==null)clearInterval(e.heartbeatTimer),e.heartbeatTimer=null;Kse(e)}rt();var _We=`{"type":"keep_alive"}
178
178
  `,kWe=1000,BWe=1000,Xse=30000,QWe=600000,RWe=1e4,TWe=300000,Zse=Xse*2,DWe=new Set([1002,4001,4003]);class $N{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(e,t={},r,n,s){this.url=e,this.headers=t,this.sessionId=r,this.refreshHeaders=n,this.autoReconnect=s?.autoReconnect??!0,this.isBridge=s?.isBridge??!1,this.messageBuffer=new fD(kWe)}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){b(`WebSocketTransport: Cannot connect, current state is ${this.state}`,{level:"error"}),H("error","cli_websocket_connect_failed");return}this.state="reconnecting",this.connectStartTime=Date.now(),b(`WebSocketTransport: Opening ${this.url.href}`),H("info","cli_websocket_connect_opening");let e={...this.headers};if(this.lastSentId)e["X-Last-Request-Id"]=this.lastSentId,b(`WebSocketTransport: Adding X-Last-Request-Id header: ${this.lastSentId}`);let t=new globalThis.WebSocket(this.url.href,{headers:e,proxy:Jse(this.url.href),tls:PZ()||void 0});this.ws=t,t.addEventListener("open",this.onBunOpen),t.addEventListener("message",this.onBunMessage),t.addEventListener("error",this.onBunError),t.addEventListener("close",this.onBunClose),t.addEventListener("pong",this.onPong)}onBunOpen=()=>{if(this.handleOpenEvent(),this.lastSentId)this.replayBufferedMessages("")};onBunMessage=(e)=>{let t=typeof e.data==="string"?e.data:String(e.data);if(this.lastActivityTime=Date.now(),H("info","cli_websocket_message_received",{length:t.length}),this.onData)this.onData(t)};onBunError=()=>{b("WebSocketTransport: Error",{level:"error"}),H("error","cli_websocket_connect_error")};onBunClose=(e)=>{let t=e.code===1000||e.code===1001;b(`WebSocketTransport: Closed: ${e.code}`,t?void 0:{level:"error"}),H("error","cli_websocket_connect_closed"),this.handleConnectionError(e.code)};onPong=()=>{this.pongReceived=!0};handleOpenEvent(){let e=Date.now()-this.connectStartTime;if(b("WebSocketTransport: Connected"),H("info","cli_websocket_connect_connected",{duration_ms:e}),this.isBridge&&this.reconnectStartTime!==null)Ye("tengu_ws_transport_reconnected",{attempts:this.reconnectAttempts,downtimeMs:Date.now()-this.reconnectStartTime});if(this.reconnectAttempts>0){let t=this.reconnectStartTime?Math.round((Date.now()-this.reconnectStartTime)/1000):0;this.onDiagnostic?.(`WS reconnected after ${this.reconnectAttempts} attempt(s), ${t}s downtime`+(this.connectErrorsSeen.size>0?`, errors=[${[...this.connectErrorsSeen].join(",")}]`:""))}else this.onDiagnostic?.(`WS connected in ${e}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(),kv(()=>{this.write({type:"keep_alive"})})}sendLine(e){if(!this.ws||this.state!=="connected")return b("WebSocketTransport: Not connected"),H("info","cli_websocket_send_not_connected"),!1;try{return this.ws.send(e),this.lastActivityTime=Date.now(),!0}catch(t){return b(`WebSocketTransport: Failed to send: ${t}`,{level:"error"}),H("error","cli_websocket_send_error"),this.handleConnectionError(),!1}}removeWsListeners(e){let t=e;t.removeEventListener("open",this.onBunOpen),t.removeEventListener("message",this.onBunMessage),t.removeEventListener("error",this.onBunError),t.removeEventListener("close",this.onBunClose),t.removeEventListener("pong",this.onPong)}doDisconnect(){if(this.stopPingInterval(),this.stopKeepaliveInterval(),Pm(),this.ws)this.removeWsListeners(this.ws),this.ws.close(),this.ws=null}handleConnectionError(e){if(b(`WebSocketTransport: Disconnected from ${this.url.href}`+(e!=null?` (code ${e})`:"")),H("info","cli_websocket_disconnected"),e!=null)this.connectErrorsSeen.add(`ws_${e}`);if(this.isBridge)Ye("tengu_ws_transport_closed",{closeCode:e,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 t=!1;if(e===4003&&this.refreshHeaders){let s=this.refreshHeaders();if(s.Authorization!==this.headers.Authorization)Object.assign(this.headers,s),t=!0,b("WebSocketTransport: 4003 received but headers refreshed, scheduling reconnect"),H("info","cli_websocket_4003_token_refreshed")}if(e!=null&&DWe.has(e)&&!t){b(`WebSocketTransport: Permanent close code ${e}, not reconnecting`,{level:"error"}),H("error","cli_websocket_permanent_close",{closeCode:e}),this.onDiagnostic?.(`WS permanent close (code ${e}), not reconnecting`),this.state="closed",this.onCloseCallback?.(e);return}if(!this.autoReconnect){this.state="closed",this.onCloseCallback?.(e);return}let r=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=r;if(this.lastReconnectAttemptTime!==null&&r-this.lastReconnectAttemptTime>Zse)b(`WebSocketTransport: Detected system sleep (${Math.round((r-this.lastReconnectAttemptTime)/1000)}s gap), resetting reconnection budget`),H("info","cli_websocket_sleep_detected",{gapMs:r-this.lastReconnectAttemptTime}),this.reconnectStartTime=r,this.reconnectAttempts=0;this.lastReconnectAttemptTime=r;let n=r-this.reconnectStartTime;if(n<QWe){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(!t&&this.refreshHeaders){let i=this.refreshHeaders();Object.assign(this.headers,i),b("WebSocketTransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let s=Math.min(BWe*Math.pow(2,this.reconnectAttempts-1),Xse),o=Math.max(0,s+s*0.25*(2*Math.random()-1));if(b(`WebSocketTransport: Reconnecting in ${Math.round(o)}ms (attempt ${this.reconnectAttempts}, ${Math.round(n/1000)}s elapsed)`),H("error","cli_websocket_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.onDiagnostic?.(`WS reconnect (${e!=null?`code ${e}`:"no code"}) attempt=${this.reconnectAttempts} ${Math.round(n/1000)}s elapsed, retry in ${Math.round(o)}ms`+(this.connectErrorsSeen.size>1?`, errors=[${[...this.connectErrorsSeen].join(",")}]`:"")),this.isBridge)Ye("tengu_ws_transport_reconnecting",{attempt:this.reconnectAttempts,elapsedMs:n,delayMs:Math.round(o)});this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},o)}else if(b(`WebSocketTransport: Reconnection time budget exhausted after ${Math.round(n/1000)}s for ${this.url.href}`,{level:"error"}),H("error","cli_websocket_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:n}),this.onDiagnostic?.(`WS reconnection budget exhausted: ${this.reconnectAttempts} attempts over ${Math.round(n/1000)}s, errors=[${[...this.connectErrorsSeen].join(",")||"none"}], last code=${e??"none"}`),this.state="closed",this.onCloseCallback)this.onCloseCallback(e)}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.stopPingInterval(),this.stopKeepaliveInterval(),Pm(),this.state="closing",this.doDisconnect()}[Symbol.dispose](){this.close()}replayBufferedMessages(e){let t=this.messageBuffer.toArray();if(t.length===0)return;let r=0;if(e){let s=t.findIndex((o)=>("uuid"in o)&&o.uuid===e);if(s>=0){r=s+1;let o=t.slice(r);if(this.messageBuffer.clear(),this.messageBuffer.addAll(o),o.length===0)this.lastSentId=null;b(`WebSocketTransport: Evicted ${r} confirmed messages, ${o.length} remaining`),H("info","cli_websocket_evicted_confirmed_messages",{evicted:r,remaining:o.length})}}let n=t.slice(r);if(n.length===0){b("WebSocketTransport: No new messages to replay"),H("info","cli_websocket_no_messages_to_replay");return}b(`WebSocketTransport: Replaying ${n.length} buffered messages`),H("info","cli_websocket_messages_to_replay",{count:n.length});for(let s of n){let o=Ee(s)+`
179
179
  `;if(!this.sendLine(o)){this.handleConnectionError();break}}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(e){this.onData=e}setOnConnect(e){this.onConnectCallback=e}setOnClose(e){this.onCloseCallback=e}setOnDiagnostic(e){this.onDiagnostic=e}getStateLabel(){return this.state}async write(e){if("uuid"in e&&typeof e.uuid==="string")this.messageBuffer.add(e),this.lastSentId=e.uuid;let t=Ee(e)+`
180
- `;if(this.state!=="connected")return;let r=this.sessionId?` session=${this.sessionId}`:"",n=this.getControlMessageDetailLabel(e);b(`WebSocketTransport: Sending message type=${e.type}${r}${n}`),this.sendLine(t)}getControlMessageDetailLabel(e){if(e.type==="control_request"){let{request_id:t,request:r}=e,n=r.subtype==="can_use_tool"?r.tool_name:"";return` subtype=${r.subtype} request_id=${t}${n?` tool=${n}`:""}`}if(e.type==="control_response"){let{subtype:t,request_id:r}=e.response;return` subtype=${t} request_id=${r}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let e=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let t=Date.now(),r=t-e;if(e=t,r>Zse){b(`WebSocketTransport: ${Math.round(r/1000)}s tick gap detected — process was suspended, forcing reconnect`),H("info","cli_websocket_sleep_detected_on_ping",{gapMs:r}),this.handleConnectionError();return}if(!this.pongReceived){b("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),H("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(n){b(`WebSocketTransport: Ping failed: ${n}`,{level:"error"}),H("error","cli_websocket_ping_failed")}}},RWe)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),Ge(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(_We),this.lastActivityTime=Date.now(),b("WebSocketTransport: Sent periodic keep_alive data frame")}catch(e){b(`WebSocketTransport: Periodic keep_alive failed: ${e}`,{level:"error"}),H("error","cli_websocket_keepalive_failed")}},TWe)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var PWe=100,NWe=15000,MWe=3000;class jN extends $N{postUrl;uploader;streamEventBuffer=[];streamEventTimer=null;constructor(e,t={},r,n,s){super(e,t,r,n,s);let{maxConsecutiveFailures:o,onBatchDropped:i}=s??{};this.postUrl=OWe(e),this.uploader=new qc({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:o,onBatchDropped:(a,c)=>{H("error","cli_hybrid_batch_dropped_max_failures",{batchSize:a,failures:c}),i?.(a,c)},send:(a)=>this.postOnce(a)}),b(`HybridTransport: POST URL = ${this.postUrl}`),H("info","cli_hybrid_transport_initialized")}async write(e){if(e.type==="stream_event"){if(this.streamEventBuffer.push(e),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),PWe);return}return await this.uploader.enqueue([...this.takeStreamEvents(),e]),this.uploader.flush()}async writeBatch(e){return await this.uploader.enqueue([...this.takeStreamEvents(),...e]),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 e=this.streamEventBuffer;return this.streamEventBuffer=[],e}flushStreamEvents(){this.streamEventTimer=null,this.uploader.enqueue(this.takeStreamEvents())}close(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[];let e=this.uploader,t;Promise.race([e.flush(),new Promise((r)=>{t=setTimeout(r,MWe)})]).finally(()=>{clearTimeout(t),e.close()}),super.close()}async postOnce(e){let t=Qg();if(!t){b("HybridTransport: No session token available for POST"),H("warn","cli_hybrid_post_no_token");return}let r={Authorization:`Bearer ${t}`,"Content-Type":"application/json"},n;try{n=await Ar.post(this.postUrl,{events:e},{headers:r,validateStatus:()=>!0,timeout:NWe})}catch(s){throw b(`HybridTransport: POST error: ${ae(s)}`),H("warn","cli_hybrid_post_network_error"),s}if(n.status>=200&&n.status<300){b(`HybridTransport: POST success count=${e.length}`);return}if(n.status>=400&&n.status<500&&n.status!==429){b(`HybridTransport: POST returned ${n.status} (permanent), dropping`),H("warn","cli_hybrid_post_client_error",{status:n.status});return}throw b(`HybridTransport: POST returned ${n.status} (retryable)`),H("warn","cli_hybrid_post_retryable_error",{status:n.status}),Error(`POST failed with ${n.status}`)}}function OWe(e){let t=e.protocol==="wss:"?"https:":"http:",r=e.pathname;if(r=r.replace("/ws/","/session/"),!r.endsWith("/events"))r=r.endsWith("/")?r+"events":r+"/events";return`${t}//${e.host}${r}${e.search}`}Wi();nr();function eoe(){let{namespace:e,cluster:t}=NO();return{...e&&{cooNamespace:e},...t&&{cooCluster:t}}}$l();import{chmod as hBt,mkdir as yBt,readdir as bBt,readFile as $We,unlink as EBt,writeFile as jWe}from"fs/promises";import{join as roe}from"path";bn();Wi();$l();et();nr();xt();dE();rt();import{AsyncLocalStorage as UWe}from"async_hooks";var rBt=new UWe;nr();var OBt=N(()=>bo.object({pid:bo.number(),sessionId:bo.string(),cwd:bo.string().optional(),startedAt:bo.number(),version:bo.string().optional(),kind:bo.enum(["interactive","bg","daemon","daemon-worker"])}));function zWe(){return roe(ds(),"sessions")}var toe=Promise.resolve();async function HWe(e){let t=roe(zWe(),`${process.pid}.json`),r=toe.then(async()=>{try{let n=Gt(await $We(t,"utf8"));await jWe(t,Ee({...n,...e}))}catch(n){b(`[concurrentSessions] updatePidFile failed: ${ae(n)}`)}});toe=r,await r}async function noe(e){await HWe({bridgeSessionId:e})}et();Ys();nr();xt();function Yt(e,t){return Object.freeze({name:e,header:t})}var qWe=Yt("claude_code","claude-code-20250219"),GWe=Yt("oauth_auth",J1),VWe=Yt("interleaved_thinking","interleaved-thinking-2025-05-14"),WWe=Yt("long_context","context-1m-2025-08-07"),JWe=Yt("context_management","context-management-2025-06-27"),YWe=Yt("structured_outputs","structured-outputs-2025-12-15"),KWe=Yt("web_search","web-search-2025-03-05"),ZWe=Yt("tool_search","advanced-tool-use-2025-11-20"),XWe=Yt("tool_search","tool-search-tool-2025-10-19"),eJe=Yt("effort","effort-2025-11-24"),tJe=Yt("task_budgets","task-budgets-2026-03-13"),rJe=Yt("prompt_caching_scope","prompt-caching-scope-2026-01-05"),nJe=Yt("extended_cache_ttl","extended-cache-ttl-2025-04-11"),sJe=Yt("speed","fast-mode-2026-02-01"),oJe=Yt("redact_thinking","redact-thinking-2026-02-12"),iJe=null,aJe=Yt("narration_summaries","summarize-connector-text-2026-03-13"),cJe=Yt("afk_mode","afk-mode-2026-01-31"),lJe=Yt("advisor_tool","advisor-tool-2026-03-01"),uJe=Yt("cache_diagnosis","cache-diagnosis-2026-04-07"),dJe=Yt("context_hint","context-hint-2026-04-09"),pJe=Yt("mcp_servers","mcp-servers-2025-12-04"),fJe=Yt("files_api","files-api-2025-04-14"),zN=Yt("environments","environments-2025-11-01"),AJe=Yt("ccr_byoc","ccr-byoc-2025-07-29"),gJe=Yt("mid_conversation_system","mid-conversation-system-2026-04-07"),mJe=Object.freeze([qWe,GWe,VWe,WWe,JWe,YWe,KWe,ZWe,XWe,eJe,tJe,rJe,nJe,sJe,oJe,iJe,aJe,cJe,lJe,uJe,dJe,pJe,fJe,zN,AJe,gJe].filter((e)=>e!==null)),$Bt=new Map(mJe.map((e)=>[e.header,e]));go();YN();function Lo(){return"claude-code/0.3.163"}function Oa(){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 LJe}from"crypto";function Roe(e,t,r,n){if(!n)return{url:`${e}/v1/sessions/${t}/events`,body:{events:r}};let s=Mm(t);return{url:`${e}/v1/code/sessions/${encodeURIComponent(s)}/events`,body:{events:r.map((o)=>({payload:typeof o.uuid==="string"&&o.uuid?o:{...o,uuid:LJe()}}))}}}Wi();et();xt();rt();var Toe=2000,$Je=["session_ingress_token","environment_secret","access_token","secret","token"],jJe=new RegExp(`"(${$Je.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),zJe=16;function HJe(e){return e.replace(jJe,(t,r,n)=>{if(n.length<zJe)return`"${r}":"[REDACTED]"`;let s=`${n.slice(0,8)}...${n.slice(-4)}`;return`"${r}":"${s}"`})}function ap(e){let t=typeof e==="string"?e:Ee(e),r=HJe(t);if(r.length<=Toe)return r;return r.slice(0,Toe)+`... (${r.length} chars)`}function Doe(e){let t=ae(e);if(e&&typeof e==="object"&&"response"in e){let r=e.response;if(r?.data&&typeof r.data==="object"){let n=r.data,s=typeof n.message==="string"?n.message:typeof n.error==="object"&&n.error&&("message"in n.error)&&typeof n.error.message==="string"?n.error.message:void 0;if(s)return`${t}: ${s}`}}return t}function Poe(e){if(e&&typeof e==="object"&&"response"in e&&e.response&&typeof e.response.status==="number")return e.response.status;return}function XN(e,t=Date.now()){if(!e)return;let r=Number(e);if(Number.isFinite(r)&&r>=0)return r*1000;let n=Date.parse(e);if(Number.isFinite(n)){let s=n-t;return s>0?s:void 0}return}function Noe(e){if(!e||typeof e!=="object")return;if("retryAfterMs"in e&&typeof e.retryAfterMs==="number")return e.retryAfterMs;if("response"in e){let r=e.response?.headers?.["retry-after"];if(typeof r==="string")return XN(r)}return}function gl(e){if(!e||typeof e!=="object")return;if("message"in e&&typeof e.message==="string")return e.message;if("error"in e&&e.error!==null&&typeof e.error==="object"&&"message"in e.error&&typeof e.error.message==="string")return e.error.message;return}function Moe(e,t,r){if(t)b(t);Ye("tengu_bridge_repl_skipped",{reason:e,...r!==void 0&&{v2:r}})}var Pv="Remote Control is only available with claude.ai subscriptions. Please use `/login` to sign in with your claude.ai account.";var qJe=/^[a-zA-Z0-9_-]+$/;function On(e,t){if(!e||!qJe.test(e))throw Error(`Invalid ${t}: contains unsafe characters`);return e}class cs extends Error{status;errorType;constructor(e,t,r){super(e);this.name="BridgeFatalError",this.status=t,this.errorType=r}}function Uoe(e){function t(a){e.onDebug?.(a)}let r=0,n=100;async function s(a){let c={Authorization:`Bearer ${a}`,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-beta":zN.header,"x-environment-runner-version":e.runnerVersion,"User-Agent":Lo()},l=await e.getTrustedDeviceToken?.();if(l)c["X-Trusted-Device-Token"]=l;return c}function o(){let a=e.getAccessToken();if(!a)throw Error(Pv);return a}async function i(a,c){let l=o(),u=await a(l);if(u.status!==401)return u;if(!e.onAuth401)return t(`[bridge:api] ${c}: 401 received, no refresh handler`),u;if(t(`[bridge:api] ${c}: 401 received, attempting token refresh`),await e.onAuth401(l)){t(`[bridge:api] ${c}: Token refreshed, retrying request`);let f=o(),A=await a(f);if(A.status!==401)return A;t(`[bridge:api] ${c}: Retry after refresh also got 401`)}else t(`[bridge:api] ${c}: Token refresh failed`);return u}return{async registerBridgeEnvironment(a){return En("bridge_environment_register",async()=>{t(`[bridge:api] POST /v1/environments/bridge bridgeId=${a.bridgeId}`);let c=await i(async(l)=>Ar.post(`${e.baseUrl}/v1/environments/bridge`,{machine_name:a.machineName,directory:a.dir,branch:a.branch,git_repo_url:a.gitRepoUrl,max_sessions:a.maxSessions,metadata:{worker_type:a.workerType},...a.reuseEnvironmentId&&{environment_id:a.reuseEnvironmentId}},{headers:await s(l),timeout:15000,validateStatus:(u)=>u<500}),"Registration");return Bi(c.status,c.data,"Registration"),t(`[bridge:api] POST /v1/environments/bridge -> ${c.status} environment_id=${c.data.environment_id}`),t(`[bridge:api] >>> ${ap({machine_name:a.machineName,directory:a.dir,branch:a.branch,git_repo_url:Boe(a.gitRepoUrl),max_sessions:a.maxSessions,metadata:{worker_type:a.workerType}})}`),t(`[bridge:api] <<< ${ap(c.data)}`),c.data},Ooe)},async pollForWork(a,c,l,u){On(a,"environmentId");let p=r;r=0;let f=await Ar.get(`${e.baseUrl}/v1/environments/${a}/work/poll`,{headers:await s(c),params:u!==void 0?{reclaim_older_than_ms:u}:void 0,timeout:1e4,signal:l,validateStatus:(A)=>A<500});if(Bi(f.status,f.data,"Poll",f.headers),!f.data){if(r=p+1,r===1||r%n===0)t(`[bridge:api] GET .../work/poll -> ${f.status} (no work, ${r} consecutive empty polls)`);return null}return t(`[bridge:api] GET .../work/poll -> ${f.status} workId=${f.data.id} type=${f.data.data?.type}${f.data.data?.id?` sessionId=${f.data.data.id}`:""}`),t(`[bridge:api] <<< ${ap(f.data)}`),f.data},async acknowledgeWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/ack`);let u=await Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/ack`,{},{headers:await s(l),timeout:1e4,validateStatus:(p)=>p<500});Bi(u.status,u.data,"Acknowledge"),t(`[bridge:api] POST .../work/${c}/ack -> ${u.status}`)},async stopWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/stop force=${l}`);let u=await i(async(p)=>Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/stop`,{force:l},{headers:await s(p),timeout:1e4,validateStatus:(f)=>f<500}),"StopWork");Bi(u.status,u.data,"StopWork"),t(`[bridge:api] POST .../work/${c}/stop -> ${u.status}`)},async deregisterEnvironment(a){On(a,"environmentId"),t(`[bridge:api] DELETE /v1/environments/bridge/${a}`);let c=await i(async(l)=>Ar.delete(`${e.baseUrl}/v1/environments/bridge/${a}`,{headers:await s(l),timeout:1e4,validateStatus:(u)=>u<500}),"Deregister");Bi(c.status,c.data,"Deregister"),t(`[bridge:api] DELETE /v1/environments/bridge/${a} -> ${c.status}`)},async archiveSession(a){On(a,"sessionId"),t(`[bridge:api] POST /v1/sessions/${a}/archive`);let c=await i(async(l)=>Ar.post(`${e.baseUrl}/v1/sessions/${a}/archive`,{},{headers:await s(l),timeout:1e4,validateStatus:(u)=>u<500}),"ArchiveSession");if(c.status===409){t(`[bridge:api] POST /v1/sessions/${a}/archive -> 409 (already archived)`);return}Bi(c.status,c.data,"ArchiveSession"),t(`[bridge:api] POST /v1/sessions/${a}/archive -> ${c.status}`)},async reconnectSession(a,c){return En("bridge_session_reconnect",async()=>{On(a,"environmentId"),On(c,"sessionId"),t(`[bridge:api] POST /v1/environments/${a}/bridge/reconnect session_id=${c}`);let l=await i(async(u)=>Ar.post(`${e.baseUrl}/v1/environments/${a}/bridge/reconnect`,{session_id:c},{headers:await s(u),timeout:1e4,validateStatus:(p)=>p<500}),"ReconnectSession");Bi(l.status,l.data,"ReconnectSession"),t(`[bridge:api] POST .../bridge/reconnect -> ${l.status}`)},Ooe)},async heartbeatWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/heartbeat`);let u=await Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/heartbeat`,{},{headers:await s(l),timeout:1e4,validateStatus:(p)=>p<500});return Bi(u.status,u.data,"Heartbeat"),t(`[bridge:api] POST .../work/${c}/heartbeat -> ${u.status} lease_extended=${u.data.lease_extended} state=${u.data.state}`),u.data},async sendPermissionResponseEvent(a,c,l){On(a,"sessionId");let{url:u,body:p}=Roe(e.baseUrl,a,[c],e.useCcrV2Routing?.()??!1);t(`[bridge:api] POST ${u} type=${c.type}`);let f=await Ar.post(u,p,{headers:await s(l),timeout:1e4,validateStatus:(A)=>A<500});Bi(f.status,f.data,"SendPermissionResponseEvent"),t(`[bridge:api] POST ${u} -> ${f.status}`),t(`[bridge:api] >>> ${ap(p)}`),t(`[bridge:api] <<< ${ap(f.data)}`)}}}function Bi(e,t,r,n){if(e===200||e===204)return;let s=gl(t),o=GJe(t);switch(e){case 401:throw new cs(`${r}: Authentication failed (401)${s?`: ${s}`:""}. ${Pv}`,401,o);case 403:throw new cs(Nv(o)?"Remote Control session expired.":`${r}: Access denied (403)${s?`: ${s}`:""}. Check your organization permissions.`,403,o);case 404:throw new cs(s??`${r}: Not found (404). Remote Control may not be available for this organization.`,404,o);case 410:throw new cs(s??"Remote Control session expired.",410,o??"environment_expired");case 429:{let i=XN(typeof n?.["retry-after"]==="string"?n["retry-after"]:void 0);throw Object.assign(Error(`${r}: Rate limited (429). Polling too frequently.`),i!==void 0?{status:e,retryAfterMs:i}:{status:e})}default:throw Object.assign(Error(`${r}: Failed with status ${e}${s?`: ${s}`:""}`),{status:e})}}function Nv(e){if(!e)return!1;return e.includes("expired")||e.includes("lifetime")}function Foe(e){if(e.status!==403)return!1;return e.message.includes("external_poll_sessions")||e.message.includes("environments:manage")}function Ooe(e){if(e instanceof cs)return e.status===401?"auth_failed":"http_error";if(e instanceof Error){if(e.message===Pv)return"no_token";if("status"in e&&typeof e.status==="number")return"http_error"}return"request_failed"}function GJe(e){if(e&&typeof e==="object"){if("error"in e&&e.error&&typeof e.error==="object"&&"type"in e.error&&typeof e.error.type==="string")return e.error.type}return}et();import{randomUUID as VJe}from"crypto";go();Wi();var Loe={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 $oe(e){if(e===null||typeof e!=="object")return e;let t=e;if("requestId"in t&&!("request_id"in t))t.request_id=t.requestId,delete t.requestId;if("response"in t&&t.response!==null&&typeof t.response==="object"){let r=t.response;if("requestId"in r&&!("request_id"in r))r.request_id=r.requestId,delete r.requestId}return e}et();nR();xt();rt();function WJe(e){return e!==null&&typeof e==="object"&&"type"in e&&typeof e.type==="string"}function JJe(e){return e!==null&&typeof e==="object"&&"type"in e&&e.type==="control_response"&&"response"in e}function YJe(e){return e!==null&&typeof e==="object"&&"type"in e&&e.type==="control_request"&&"request_id"in e&&"request"in e}function eM(e){if((e.type==="user"||e.type==="assistant")&&e.isVirtual)return!1;return e.type==="user"||e.type==="assistant"||e.type==="system"&&e.subtype==="local_command"}function joe(e){if(e.type!=="user"||e.isMeta||e.toolUseResult||e.isCompactSummary)return;if(e.origin&&e.origin.kind!=="human")return;let t=e.message.content,r;if(typeof t==="string")r=t;else for(let s of t)if(s.type==="text"){r=s.text;break}if(!r)return;return rR(r)||void 0}function zoe(e,t,r,n,s,o){try{let i=$oe(Gt(e));if(JJe(i)){b("[bridge:repl] Ingress message type=control_response"),s?.(i);return}if(YJe(i)){b(`[bridge:repl] Inbound control_request subtype=${i.request.subtype}`),o?.(i);return}if(!WJe(i))return;let a="uuid"in i&&typeof i.uuid==="string"?i.uuid:void 0;if(a&&t.has(a)){b(`[bridge:repl] Ignoring echo: type=${i.type} uuid=${a}`);return}if(a&&r.has(a)){b(`[bridge:repl] Ignoring re-delivered inbound: type=${i.type} uuid=${a}`);return}if(b(`[bridge:repl] Ingress message type=${i.type}${a?` uuid=${a}`:""}`),i.type==="user"){if(a)r.add(a);Ye("tengu_bridge_message_received",{is_repl:!0}),ln("bridge_message_receive"),n?.(i)}else b(`[bridge:repl] Ignoring non-user inbound message: type=${i.type}`)}catch(i){b(`[bridge:repl] Failed to parse ingress message: ${ae(i)}`),Zr("bridge_message_receive","bridge_message_receive_parse_failed")}}var KJe="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function Hoe(e,t){let{transport:r,sessionId:n,outboundOnly:s,onInterrupt:o,onSetModel:i,onSetMaxThinkingTokens:a,onSetPermissionMode:c,onRenameSession:l,onSetColor:u,onFileSuggestions:p,onReadFile:f,onGetContextUsage:A,onMcpAuthenticate:g,onMcpOauthCallbackUrl:h,onMcpReconnect:m,onMcpStatus:y}=t;if(!r){b("[bridge:repl] Cannot respond to control_request: transport not configured");return}let w;if(s&&e.request.subtype!=="initialize"){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:KJe}};let v={...w,session_id:n};r.write(v),b(`[bridge:repl] Rejected ${e.request.subtype} (outbound-only) request_id=${e.request_id}`);return}switch(e.request.subtype){case"initialize":w={type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{commands:[],output_style:"normal",available_output_styles:["normal"],models:[],account:{},pid:process.pid}}};break;case"set_model":i?.(e.request.model),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;case"set_max_thinking_tokens":a?.(e.request.max_thinking_tokens),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;case"set_permission_mode":{let v=c?.(e.request.mode)??{ok:!1,error:"set_permission_mode is not supported in this context (onSetPermissionMode callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"rename_session":{let v=l?.(e.request.title)??{ok:!1,error:"rename_session is not supported in this context (onRenameSession callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"set_color":{let v=u?.(e.request.color)??{ok:!1,error:"set_color is not supported in this context (onSetColor callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"file_suggestions":{if(!p){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"file_suggestions is not supported in this context (onFileSuggestions callback not registered)"}};break}p(e.request.query).then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{suggestions:v}}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for file_suggestions request_id=${e.request_id} result=${v.response.subtype}`)});return}case"read_file":{if(!f){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"read_file is not supported in this context (onReadFile callback not registered)"}};break}f(e.request.path,e.request.max_bytes,e.request.encoding).then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:v}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for read_file request_id=${e.request_id} result=${v.response.subtype}`)});return}case"get_context_usage":{if(!A){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"get_context_usage is not supported in this context (onGetContextUsage callback not registered)"}};break}A().then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{...v}}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for get_context_usage request_id=${e.request_id} result=${v.response.subtype}`)});return}case"mcp_status":w={type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{mcpServers:y?.()??[]}}};break;case"mcp_authenticate":case"mcp_oauth_callback_url":case"mcp_reconnect":{let v=e.request,{subtype:B,serverName:P}=v,R=v.subtype==="mcp_authenticate"?g&&((V)=>g(V,v.redirectUri)):v.subtype==="mcp_oauth_callback_url"?h&&((V)=>h(V,v.callbackUrl)):m;if(!R){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:`${B} is not supported in this context (callback not registered)`}};break}R(P).then((V)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:V??{}}})).catch((V)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(V)}})).then((V)=>{let Y={...V,session_id:n};r.write(Y),b(`[bridge:repl] Sent control_response for ${B} request_id=${e.request_id} result=${V.response.subtype}`)});return}case"interrupt":o?.(),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;default:w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:`REPL bridge does not handle control_request subtype: ${e.request.subtype}`}}}let C={...w,session_id:n};r.write(C),b(`[bridge:repl] Sent control_response for ${e.request.subtype} request_id=${e.request_id} result=${w.response.subtype}`)}function tM(e){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:{...Loe},modelUsage:{},permission_denials:[],session_id:e,uuid:VJe()}}class Mv{capacity;ring;set=new Set;writeIdx=0;constructor(e){this.capacity=e,this.ring=Array(e)}add(e){if(this.set.has(e))return;let t=this.ring[this.writeIdx];if(t!==void 0)this.set.delete(t);this.ring[this.writeIdx]=e,this.set.add(e),this.writeIdx=(this.writeIdx+1)%this.capacity}has(e){return this.set.has(e)}clear(){this.set.clear(),this.ring.fill(void 0),this.writeIdx=0}}function qoe(e){let t=new AbortController;function r(){t.abort(),t=new AbortController}function n(){let s=new AbortController,o=()=>s.abort();if(e.aborted||t.signal.aborted)return s.abort(),{signal:s.signal,cleanup:()=>{}};e.addEventListener("abort",o,{once:!0});let i=t.signal;return i.addEventListener("abort",o,{once:!0}),{signal:s.signal,cleanup:()=>{e.removeEventListener("abort",o),i.removeEventListener("abort",o)}}}return{signal:n,wake:r}}class rM{_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(...e){if(!this._active)return!1;return this._pending.push(...e),!0}drop(){this._active=!1;let e=this._pending.length;return this._pending.length=0,e}deactivate(){this._active=!1}}import{randomUUID as Woe}from"crypto";Wi();et();Ys();xt();rt();function ZJe(e){let r=(e.startsWith("sk-ant-si-")?e.slice(10):e).split(".");if(r.length!==3||!r[1])return null;try{return Gt(Buffer.from(r[1],"base64url").toString("utf8"))}catch{return null}}function Goe(e){let t=ZJe(e);if(t!==null&&typeof t==="object"&&"exp"in t&&typeof t.exp==="number")return t.exp;return null}go();et();Ys();xt();rt();class nM{inflight=null;pending=null;closed=!1;config;constructor(e){this.config=e}enqueue(e){if(this.closed)return;this.pending=this.pending?Voe(this.pending,e):e,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 e=this.pending;this.pending=null,this.inflight=this.sendWithRetry(e).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(e){let t=e,r=0;while(!this.closed){if(await this.config.send(t))return;if(r++,await Mr(this.retryDelay(r)),this.pending&&!this.closed)t=Voe(t,this.pending),this.pending=null}}retryDelay(e){let t=Math.min(this.config.baseDelayMs*2**(e-1),this.config.maxDelayMs),r=Math.random()*this.config.jitterMs;return t+r}}function Voe(e,t){let r={...e};for(let[n,s]of Object.entries(t))if((n==="external_metadata"||n==="internal_metadata")&&r[n]&&typeof r[n]==="object"&&typeof s==="object"&&s!==null)r[n]={...r[n],...s};else r[n]=s;return r}var XJe=20000,eYe=100,Joe=61440;function Om(e){return e===400||e===413||e===422}function Yoe(e){let t=Qr(e);if(t)return t;if(e&&typeof e==="object"&&"name"in e&&typeof e.name==="string")return e.name;return}class Ov extends Error{reason;httpStatus;constructor(e,t){super(`CCRClient init failed: ${e}`);this.reason=e;this.httpStatus=t}}var tYe=10,rYe=3;class sM{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamedEphemeralSinceLastAssistant=!1;workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(e,t,r){if(this.onEpochMismatch=r?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=r?.heartbeatIntervalMs??XJe,this.heartbeatJitterFraction=r?.heartbeatJitterFraction??0,this.getAuthHeaders=r?.getAuthHeaders??GE,this.onDiagnostic=r?.onDiagnostic,t.protocol!=="http:"&&t.protocol!=="https:")throw Error(`CCRClient: Expected http(s) URL, got ${t.protocol}`);let n=t.pathname.replace(/\/$/,"");this.sessionBaseUrl=`${t.protocol}//${t.host}${n}`,this.sessionId=n.split("/").pop()||"",this.workerState=new nM({send:async(s)=>{let o=await this.request("put","/worker",{worker_epoch:this.workerEpoch,...s},"PUT worker");if(o.ok)return!0;if(Om(o.status))return H("warn","cli_worker_state_4xx_dropped",{status:o.status}),!0;return!1},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qc({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(s)=>{let o=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:s},"client events");if(o.ok)return;if(Om(o.status)){let i=s.filter((c)=>!c.ephemeral),a=s.length-i.length;if(a>0){if(b(`CCRClient: client event POST rejected (${o.status}) — dropping ${a} ephemeral event(s), retrying ${i.length} durable event(s)`,{level:"warn"}),Us("ccr_partial_messages","ephemeral_dropped_on_4xx"),s.splice(0,s.length,...i),i.length===0)return;let c=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:i},"client events (durable retry)");if(c.ok)return;if(!Om(c.status))throw new Hc("client event POST failed",c.retryAfterMs)}H("warn","cli_worker_events_4xx_dropped",{status:o.status,count:i.length});return}throw new Hc("client event POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qc({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(s)=>{let o=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:s},"internal events");if(o.ok)return;if(Om(o.status)){H("warn","cli_worker_internal_events_4xx_dropped",{status:o.status,count:s.length});return}throw new Hc("internal event POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qc({maxBatchSize:64,maxQueueSize:64,send:async(s)=>{let o=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:s.map((i)=>({event_id:i.eventId,status:i.status}))},"delivery batch");if(o.ok)return;if(Om(o.status)){H("warn","cli_worker_delivery_4xx_dropped",{status:o.status,count:s.length});return}throw new Hc("delivery POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),e.setOnEvent((s)=>{this.reportDelivery(s.event_id,"received")})}async initialize(e){let t=Date.now();if(Object.keys(this.getAuthHeaders()).length===0)throw new Ov("no_auth_headers");if(e===void 0){let c=process.env.CLAUDE_CODE_WORKER_EPOCH;e=c?parseInt(c,10):NaN}if(isNaN(e))throw new Ov("missing_epoch");this.workerEpoch=e;let r=this.getWorkerState(),n={ok:!1},s=new Set,o=3;for(let c=1;c<=o;c++){if(n=await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)"),n.ok||this.closed)break;if(n.reason)s.add(n.reason);if(this.onDiagnostic?.(`PUT /worker failed (${n.reason??"unknown"}) attempt=${c}/${o}, ${Math.round((Date.now()-t)/1000)}s elapsed`),c<o){let l=Math.min(500*2**(c-1),30000)+Math.random()*500;await Mr(l)}}if(!n.ok){if(!this.closed)H("error","cli_worker_init_put_retries_exhausted"),this.onDiagnostic?.(`PUT /worker retries exhausted: ${o} attempts over ${Math.round((Date.now()-t)/1000)}s, errors=[${[...s].join(",")||"unknown"}]`);throw new Ov("worker_register_failed",n.status)}this.currentState="idle",this.startHeartbeat(),kv(()=>{this.writeEvent({type:"keep_alive"})}),b(`CCRClient: initialized, epoch=${this.workerEpoch}`),H("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-t});let{metadata:i,durationMs:a}=await r;if(!this.closed)H("info","cli_worker_state_restored",{duration_ms:a,had_state:i.external!==null||i.internal!==null});return i}async getWorkerState(){let e=Date.now(),t=this.getAuthHeaders();if(Object.keys(t).length===0)return{metadata:{external:null,internal:null},durationMs:0};let r=await this.getWithRetry(`${this.sessionBaseUrl}/worker`,t,"worker_state");return{metadata:{external:r?.worker?.external_metadata??null,internal:r?.worker?.internal_metadata??null},durationMs:Date.now()-e}}async request(e,t,r,n,{timeout:s=1e4}={}){let o=this.getAuthHeaders();if(Object.keys(o).length===0)return{ok:!1,reason:"no_auth_headers"};let i=`${this.sessionBaseUrl}${t}`;try{let a=await fetch(i,{method:e.toUpperCase(),headers:{...o,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()},body:Ee(r),signal:AbortSignal.timeout(s),...FN({url:i})});if(a.body?.cancel(),a.ok)return this.consecutiveAuthFailures=0,this.consecutiveNotFound=0,{ok:!0};if(a.status===409)this.handleEpochMismatch();if(a.status===404){if(this.consecutiveNotFound++,this.consecutiveNotFound>=rYe)b(`CCRClient: ${this.consecutiveNotFound} consecutive 404s — session gone, exiting`,{level:"error"}),H("error","cli_worker_session_not_found"),this.onDiagnostic?.(`${this.consecutiveNotFound} consecutive 404s on ${t} — session gone, exiting`),this.onEpochMismatch()}if(a.status===401||a.status===403){let c=Qg(),l=c?Goe(c):null;if(l!==null&&l*1000<Date.now())b(`CCRClient: session_token expired (exp=${new Date(l*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),H("error","cli_worker_token_expired_no_refresh"),this.onDiagnostic?.(`session_token expired (exp=${new Date(l*1000).toISOString()}) — no refresh delivered, exiting`),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=tYe)b(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),H("error","cli_worker_auth_failures_exhausted"),this.onDiagnostic?.(`${this.consecutiveAuthFailures} consecutive auth failures (HTTP ${a.status}) with valid-looking token — exiting`),this.onEpochMismatch()}if(b(`CCRClient: ${n} returned ${a.status}`,{level:"warn"}),H("warn","cli_worker_request_failed",{method:e,path:t,status:a.status}),a.status===429){let c=a.headers.get("retry-after"),l=c?parseInt(c,10):NaN;if(!isNaN(l)&&l>=0)return{ok:!1,retryAfterMs:l*1000,status:a.status,reason:`http_${a.status}`}}return{ok:!1,status:a.status,reason:`http_${a.status}`}}catch(a){return b(`CCRClient: ${n} failed: ${ae(a)}`,{level:"warn"}),H("warn","cli_worker_request_error",{method:e,path:t,error_code:Yoe(a)}),{ok:!1,reason:`fetch_failed:${Yoe(a)}`}}}reportState(e,t){if(e===this.currentState&&!t)return;this.currentState=e,this.workerState.enqueue({worker_status:e,requires_action_details:t?{tool_name:t.tool_name,display_tool_name:t.display_tool_name,action_description:t.action_description,raw_command:t.raw_command,request_id:t.request_id,tool_use_id:t.tool_use_id}:null})}reportMetadata(e){this.workerState.enqueue({external_metadata:nYe(e)})}reportInternalMetadata(e){this.workerState.enqueue({internal_metadata:e})}handleEpochMismatch(){b("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),H("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 e=()=>{let r=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(t,this.heartbeatIntervalMs+r)},t=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;e()};e()}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)b("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(e){if(e.type==="stream_event"){if(this.streamEventBuffer.push(e),this.streamedEphemeralSinceLastAssistant=!0,!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),eYe);return}if(await this.flushStreamEventBuffer(),e.type==="assistant"&&this.streamedEphemeralSinceLastAssistant)ln("ccr_partial_messages"),this.streamedEphemeralSinceLastAssistant=!1;await this.eventUploader.enqueue(this.toClientEvent(e))}toClientEvent(e){let t=e,r=t.historical===!0;return{payload:{...t,uuid:typeof t.uuid==="string"?t.uuid:Woe()},...r&&{historical:!0}}}async flushStreamEventBuffer(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;if(this.streamEventBuffer.length===0)return;let e=this.streamEventBuffer;this.streamEventBuffer=[];let t=e.filter((r)=>{if(Buffer.byteLength(Ee(r))<=Joe)return!0;return b(`CCRClient: dropping oversize ephemeral stream_event (>${Joe} bytes)`,{level:"warn"}),Us("ccr_partial_messages","oversize_ephemeral_skipped"),!1});await this.eventUploader.enqueue(t.map((r)=>({payload:r,ephemeral:!0})))}async writeInternalEvent(e,t,{isCompaction:r=!1,agentId:n,preservedEventIds:s}={}){let o={payload:{type:e,...t,uuid:typeof t.uuid==="string"?t.uuid:Woe()},...r&&{is_compaction:!0},...n&&{session_agent_id:n},...s?.length&&{preserved_event_ids:s}};await this.internalEventUploader.enqueue(o)}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",{limit:"1000"},"internal_events")}async readSubagentInternalEvents(){return this.paginatedGet("/worker/internal-events",{subagents:"true",limit:"1000"},"subagent_events")}async paginatedGet(e,t,r){let n=this.getAuthHeaders();if(Object.keys(n).length===0)return null;let s=[],o,i=0,a=0,c=null;do{let l=new URL(`${this.sessionBaseUrl}${e}`);for(let[p,f]of Object.entries(t))l.searchParams.set(p,f);if(o)l.searchParams.set("cursor",o);let u=await this.getWithRetry(l.toString(),n,r,(p)=>{i++,c??=p.headers.get("content-encoding");let f=p.headers.get("content-length");if(f!==null&&a!==null)a+=Number(f);else a=null});if(!u)return null;s.push(...u.data??[]),o=u.next_cursor}while(o);return b(`CCRClient: Read ${s.length} internal events from ${e}${t.subagents?" (subagents)":""}`),{events:s,stats:{pageCount:i,bytesReceived:a,contentEncoding:c??"none"}}}async getWithRetry(e,t,r,n){for(let s=1;s<=10;s++){let o;try{if(o=await fetch(e,{headers:{...t,"anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()},signal:AbortSignal.timeout(30000),...FN({url:e})}),o.ok){let i=await o.json();return n?.(o),i}}catch(i){if(b(`CCRClient: GET ${e} failed (attempt ${s}/10): ${ae(i)}`,{level:"warn"}),s<10){let a=Math.min(500*2**(s-1),30000)+Math.random()*500;await Mr(a)}continue}if(o.body?.cancel(),o.status===409)this.handleEpochMismatch();if(b(`CCRClient: GET ${e} returned ${o.status} (attempt ${s}/10)`,{level:"warn"}),s<10){let i=Math.min(500*2**(s-1),30000)+Math.random()*500;await Mr(i)}}return b("CCRClient: GET retries exhausted",{level:"error"}),H("error","cli_worker_get_retries_exhausted",{context:r}),null}reportDelivery(e,t){if(t==="processing"){if(this.closed)return;if(this.pendingProcessingAcks.push(e)===1)queueMicrotask(()=>{let r=this.pendingProcessingAcks;if(this.pendingProcessingAcks=[],this.closed||r.length===0)return;this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:r.map((n)=>({event_id:n,status:"processing"}))},"processing ack")});return}this.deliveryUploader.enqueue({eventId:e,status:t})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),Pm(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.pendingProcessingAcks=[],this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}function nYe(e){let t=e.post_turn_summary;if(!sYe(t)||t.status_category!=="blocked")return e;return{...e,post_turn_summary:{...t,status_category:"need_input"}}}function sYe(e){return e!==null&&typeof e==="object"&&"status_category"in e&&typeof e.status_category==="string"}et();Ys();xt();rt();nr();var Koe={},oYe={};var iYe=!1;function Zoe(e,t,r){if(iYe)return;if(e==="skills_load_ms"&&Koe[e]!==void 0)return;if(Koe[e]=Math.round(t),r!==void 0)oYe[e]=Math.round(r)}var aYe=1000,cYe=30000,Xoe=45000,lYe=new Set([401,403,404]),Um=10,uYe=500,dYe=8000,pYe={stream:!0};function fYe(){return!0}function AYe(e){let t=[],r=0,n;while((n=e.indexOf(`
180
+ `;if(this.state!=="connected")return;let r=this.sessionId?` session=${this.sessionId}`:"",n=this.getControlMessageDetailLabel(e);b(`WebSocketTransport: Sending message type=${e.type}${r}${n}`),this.sendLine(t)}getControlMessageDetailLabel(e){if(e.type==="control_request"){let{request_id:t,request:r}=e,n=r.subtype==="can_use_tool"?r.tool_name:"";return` subtype=${r.subtype} request_id=${t}${n?` tool=${n}`:""}`}if(e.type==="control_response"){let{subtype:t,request_id:r}=e.response;return` subtype=${t} request_id=${r}`}return""}startPingInterval(){this.stopPingInterval(),this.pongReceived=!0;let e=Date.now();this.pingInterval=setInterval(()=>{if(this.state==="connected"&&this.ws){let t=Date.now(),r=t-e;if(e=t,r>Zse){b(`WebSocketTransport: ${Math.round(r/1000)}s tick gap detected — process was suspended, forcing reconnect`),H("info","cli_websocket_sleep_detected_on_ping",{gapMs:r}),this.handleConnectionError();return}if(!this.pongReceived){b("WebSocketTransport: No pong received, connection appears dead",{level:"error"}),H("error","cli_websocket_pong_timeout"),this.handleConnectionError();return}this.pongReceived=!1;try{this.ws.ping?.()}catch(n){b(`WebSocketTransport: Ping failed: ${n}`,{level:"error"}),H("error","cli_websocket_ping_failed")}}},RWe)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}startKeepaliveInterval(){if(this.stopKeepaliveInterval(),Ge(process.env.CLAUDE_CODE_REMOTE))return;this.keepAliveInterval=setInterval(()=>{if(this.state==="connected"&&this.ws)try{this.ws.send(_We),this.lastActivityTime=Date.now(),b("WebSocketTransport: Sent periodic keep_alive data frame")}catch(e){b(`WebSocketTransport: Periodic keep_alive failed: ${e}`,{level:"error"}),H("error","cli_websocket_keepalive_failed")}},TWe)}stopKeepaliveInterval(){if(this.keepAliveInterval)clearInterval(this.keepAliveInterval),this.keepAliveInterval=null}}var PWe=100,NWe=15000,MWe=3000;class jN extends $N{postUrl;uploader;streamEventBuffer=[];streamEventTimer=null;constructor(e,t={},r,n,s){super(e,t,r,n,s);let{maxConsecutiveFailures:o,onBatchDropped:i}=s??{};this.postUrl=OWe(e),this.uploader=new qc({maxBatchSize:500,maxQueueSize:1e5,baseDelayMs:500,maxDelayMs:8000,jitterMs:1000,maxConsecutiveFailures:o,onBatchDropped:(a,c)=>{H("error","cli_hybrid_batch_dropped_max_failures",{batchSize:a,failures:c}),i?.(a,c)},send:(a)=>this.postOnce(a)}),b(`HybridTransport: POST URL = ${this.postUrl}`),H("info","cli_hybrid_transport_initialized")}async write(e){if(e.type==="stream_event"){if(this.streamEventBuffer.push(e),!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>this.flushStreamEvents(),PWe);return}return await this.uploader.enqueue([...this.takeStreamEvents(),e]),this.uploader.flush()}async writeBatch(e){return await this.uploader.enqueue([...this.takeStreamEvents(),...e]),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 e=this.streamEventBuffer;return this.streamEventBuffer=[],e}flushStreamEvents(){this.streamEventTimer=null,this.uploader.enqueue(this.takeStreamEvents())}close(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[];let e=this.uploader,t;Promise.race([e.flush(),new Promise((r)=>{t=setTimeout(r,MWe)})]).finally(()=>{clearTimeout(t),e.close()}),super.close()}async postOnce(e){let t=Qg();if(!t){b("HybridTransport: No session token available for POST"),H("warn","cli_hybrid_post_no_token");return}let r={Authorization:`Bearer ${t}`,"Content-Type":"application/json"},n;try{n=await Ar.post(this.postUrl,{events:e},{headers:r,validateStatus:()=>!0,timeout:NWe})}catch(s){throw b(`HybridTransport: POST error: ${ae(s)}`),H("warn","cli_hybrid_post_network_error"),s}if(n.status>=200&&n.status<300){b(`HybridTransport: POST success count=${e.length}`);return}if(n.status>=400&&n.status<500&&n.status!==429){b(`HybridTransport: POST returned ${n.status} (permanent), dropping`),H("warn","cli_hybrid_post_client_error",{status:n.status});return}throw b(`HybridTransport: POST returned ${n.status} (retryable)`),H("warn","cli_hybrid_post_retryable_error",{status:n.status}),Error(`POST failed with ${n.status}`)}}function OWe(e){let t=e.protocol==="wss:"?"https:":"http:",r=e.pathname;if(r=r.replace("/ws/","/session/"),!r.endsWith("/events"))r=r.endsWith("/")?r+"events":r+"/events";return`${t}//${e.host}${r}${e.search}`}Wi();nr();function eoe(){let{namespace:e,cluster:t}=NO();return{...e&&{cooNamespace:e},...t&&{cooCluster:t}}}$l();import{chmod as hBt,mkdir as yBt,readdir as bBt,readFile as $We,unlink as EBt,writeFile as jWe}from"fs/promises";import{join as roe}from"path";bn();Wi();$l();et();nr();xt();dE();rt();import{AsyncLocalStorage as UWe}from"async_hooks";var rBt=new UWe;nr();var OBt=N(()=>bo.object({pid:bo.number(),sessionId:bo.string(),cwd:bo.string().optional(),startedAt:bo.number(),version:bo.string().optional(),kind:bo.enum(["interactive","bg","daemon","daemon-worker"])}));function zWe(){return roe(ds(),"sessions")}var toe=Promise.resolve();async function HWe(e){let t=roe(zWe(),`${process.pid}.json`),r=toe.then(async()=>{try{let n=Gt(await $We(t,"utf8"));await jWe(t,Ee({...n,...e}))}catch(n){b(`[concurrentSessions] updatePidFile failed: ${ae(n)}`)}});toe=r,await r}async function noe(e){await HWe({bridgeSessionId:e})}et();Ys();nr();xt();function Yt(e,t){return Object.freeze({name:e,header:t})}var qWe=Yt("claude_code","claude-code-20250219"),GWe=Yt("oauth_auth",J1),VWe=Yt("interleaved_thinking","interleaved-thinking-2025-05-14"),WWe=Yt("long_context","context-1m-2025-08-07"),JWe=Yt("context_management","context-management-2025-06-27"),YWe=Yt("structured_outputs","structured-outputs-2025-12-15"),KWe=Yt("web_search","web-search-2025-03-05"),ZWe=Yt("tool_search","advanced-tool-use-2025-11-20"),XWe=Yt("tool_search","tool-search-tool-2025-10-19"),eJe=Yt("effort","effort-2025-11-24"),tJe=Yt("task_budgets","task-budgets-2026-03-13"),rJe=Yt("prompt_caching_scope","prompt-caching-scope-2026-01-05"),nJe=Yt("extended_cache_ttl","extended-cache-ttl-2025-04-11"),sJe=Yt("speed","fast-mode-2026-02-01"),oJe=Yt("redact_thinking","redact-thinking-2026-02-12"),iJe=null,aJe=Yt("narration_summaries","summarize-connector-text-2026-03-13"),cJe=Yt("afk_mode","afk-mode-2026-01-31"),lJe=Yt("advisor_tool","advisor-tool-2026-03-01"),uJe=Yt("cache_diagnosis","cache-diagnosis-2026-04-07"),dJe=Yt("context_hint","context-hint-2026-04-09"),pJe=Yt("mcp_servers","mcp-servers-2025-12-04"),fJe=Yt("files_api","files-api-2025-04-14"),zN=Yt("environments","environments-2025-11-01"),AJe=Yt("ccr_byoc","ccr-byoc-2025-07-29"),gJe=Yt("mid_conversation_system","mid-conversation-system-2026-04-07"),mJe=Object.freeze([qWe,GWe,VWe,WWe,JWe,YWe,KWe,ZWe,XWe,eJe,tJe,rJe,nJe,sJe,oJe,iJe,aJe,cJe,lJe,uJe,dJe,pJe,fJe,zN,AJe,gJe].filter((e)=>e!==null)),$Bt=new Map(mJe.map((e)=>[e.header,e]));go();YN();function Lo(){return"claude-code/0.3.165"}function Oa(){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 LJe}from"crypto";function Roe(e,t,r,n){if(!n)return{url:`${e}/v1/sessions/${t}/events`,body:{events:r}};let s=Mm(t);return{url:`${e}/v1/code/sessions/${encodeURIComponent(s)}/events`,body:{events:r.map((o)=>({payload:typeof o.uuid==="string"&&o.uuid?o:{...o,uuid:LJe()}}))}}}Wi();et();xt();rt();var Toe=2000,$Je=["session_ingress_token","environment_secret","access_token","secret","token"],jJe=new RegExp(`"(${$Je.join("|")})"\\s*:\\s*"([^"]*)"`,"g"),zJe=16;function HJe(e){return e.replace(jJe,(t,r,n)=>{if(n.length<zJe)return`"${r}":"[REDACTED]"`;let s=`${n.slice(0,8)}...${n.slice(-4)}`;return`"${r}":"${s}"`})}function ap(e){let t=typeof e==="string"?e:Ee(e),r=HJe(t);if(r.length<=Toe)return r;return r.slice(0,Toe)+`... (${r.length} chars)`}function Doe(e){let t=ae(e);if(e&&typeof e==="object"&&"response"in e){let r=e.response;if(r?.data&&typeof r.data==="object"){let n=r.data,s=typeof n.message==="string"?n.message:typeof n.error==="object"&&n.error&&("message"in n.error)&&typeof n.error.message==="string"?n.error.message:void 0;if(s)return`${t}: ${s}`}}return t}function Poe(e){if(e&&typeof e==="object"&&"response"in e&&e.response&&typeof e.response.status==="number")return e.response.status;return}function XN(e,t=Date.now()){if(!e)return;let r=Number(e);if(Number.isFinite(r)&&r>=0)return r*1000;let n=Date.parse(e);if(Number.isFinite(n)){let s=n-t;return s>0?s:void 0}return}function Noe(e){if(!e||typeof e!=="object")return;if("retryAfterMs"in e&&typeof e.retryAfterMs==="number")return e.retryAfterMs;if("response"in e){let r=e.response?.headers?.["retry-after"];if(typeof r==="string")return XN(r)}return}function gl(e){if(!e||typeof e!=="object")return;if("message"in e&&typeof e.message==="string")return e.message;if("error"in e&&e.error!==null&&typeof e.error==="object"&&"message"in e.error&&typeof e.error.message==="string")return e.error.message;return}function Moe(e,t,r){if(t)b(t);Ye("tengu_bridge_repl_skipped",{reason:e,...r!==void 0&&{v2:r}})}var Pv="Remote Control is only available with claude.ai subscriptions. Please use `/login` to sign in with your claude.ai account.";var qJe=/^[a-zA-Z0-9_-]+$/;function On(e,t){if(!e||!qJe.test(e))throw Error(`Invalid ${t}: contains unsafe characters`);return e}class cs extends Error{status;errorType;constructor(e,t,r){super(e);this.name="BridgeFatalError",this.status=t,this.errorType=r}}function Uoe(e){function t(a){e.onDebug?.(a)}let r=0,n=100;async function s(a){let c={Authorization:`Bearer ${a}`,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-beta":zN.header,"x-environment-runner-version":e.runnerVersion,"User-Agent":Lo()},l=await e.getTrustedDeviceToken?.();if(l)c["X-Trusted-Device-Token"]=l;return c}function o(){let a=e.getAccessToken();if(!a)throw Error(Pv);return a}async function i(a,c){let l=o(),u=await a(l);if(u.status!==401)return u;if(!e.onAuth401)return t(`[bridge:api] ${c}: 401 received, no refresh handler`),u;if(t(`[bridge:api] ${c}: 401 received, attempting token refresh`),await e.onAuth401(l)){t(`[bridge:api] ${c}: Token refreshed, retrying request`);let f=o(),A=await a(f);if(A.status!==401)return A;t(`[bridge:api] ${c}: Retry after refresh also got 401`)}else t(`[bridge:api] ${c}: Token refresh failed`);return u}return{async registerBridgeEnvironment(a){return En("bridge_environment_register",async()=>{t(`[bridge:api] POST /v1/environments/bridge bridgeId=${a.bridgeId}`);let c=await i(async(l)=>Ar.post(`${e.baseUrl}/v1/environments/bridge`,{machine_name:a.machineName,directory:a.dir,branch:a.branch,git_repo_url:a.gitRepoUrl,max_sessions:a.maxSessions,metadata:{worker_type:a.workerType},...a.reuseEnvironmentId&&{environment_id:a.reuseEnvironmentId}},{headers:await s(l),timeout:15000,validateStatus:(u)=>u<500}),"Registration");return Bi(c.status,c.data,"Registration"),t(`[bridge:api] POST /v1/environments/bridge -> ${c.status} environment_id=${c.data.environment_id}`),t(`[bridge:api] >>> ${ap({machine_name:a.machineName,directory:a.dir,branch:a.branch,git_repo_url:Boe(a.gitRepoUrl),max_sessions:a.maxSessions,metadata:{worker_type:a.workerType}})}`),t(`[bridge:api] <<< ${ap(c.data)}`),c.data},Ooe)},async pollForWork(a,c,l,u){On(a,"environmentId");let p=r;r=0;let f=await Ar.get(`${e.baseUrl}/v1/environments/${a}/work/poll`,{headers:await s(c),params:u!==void 0?{reclaim_older_than_ms:u}:void 0,timeout:1e4,signal:l,validateStatus:(A)=>A<500});if(Bi(f.status,f.data,"Poll",f.headers),!f.data){if(r=p+1,r===1||r%n===0)t(`[bridge:api] GET .../work/poll -> ${f.status} (no work, ${r} consecutive empty polls)`);return null}return t(`[bridge:api] GET .../work/poll -> ${f.status} workId=${f.data.id} type=${f.data.data?.type}${f.data.data?.id?` sessionId=${f.data.data.id}`:""}`),t(`[bridge:api] <<< ${ap(f.data)}`),f.data},async acknowledgeWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/ack`);let u=await Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/ack`,{},{headers:await s(l),timeout:1e4,validateStatus:(p)=>p<500});Bi(u.status,u.data,"Acknowledge"),t(`[bridge:api] POST .../work/${c}/ack -> ${u.status}`)},async stopWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/stop force=${l}`);let u=await i(async(p)=>Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/stop`,{force:l},{headers:await s(p),timeout:1e4,validateStatus:(f)=>f<500}),"StopWork");Bi(u.status,u.data,"StopWork"),t(`[bridge:api] POST .../work/${c}/stop -> ${u.status}`)},async deregisterEnvironment(a){On(a,"environmentId"),t(`[bridge:api] DELETE /v1/environments/bridge/${a}`);let c=await i(async(l)=>Ar.delete(`${e.baseUrl}/v1/environments/bridge/${a}`,{headers:await s(l),timeout:1e4,validateStatus:(u)=>u<500}),"Deregister");Bi(c.status,c.data,"Deregister"),t(`[bridge:api] DELETE /v1/environments/bridge/${a} -> ${c.status}`)},async archiveSession(a){On(a,"sessionId"),t(`[bridge:api] POST /v1/sessions/${a}/archive`);let c=await i(async(l)=>Ar.post(`${e.baseUrl}/v1/sessions/${a}/archive`,{},{headers:await s(l),timeout:1e4,validateStatus:(u)=>u<500}),"ArchiveSession");if(c.status===409){t(`[bridge:api] POST /v1/sessions/${a}/archive -> 409 (already archived)`);return}Bi(c.status,c.data,"ArchiveSession"),t(`[bridge:api] POST /v1/sessions/${a}/archive -> ${c.status}`)},async reconnectSession(a,c){return En("bridge_session_reconnect",async()=>{On(a,"environmentId"),On(c,"sessionId"),t(`[bridge:api] POST /v1/environments/${a}/bridge/reconnect session_id=${c}`);let l=await i(async(u)=>Ar.post(`${e.baseUrl}/v1/environments/${a}/bridge/reconnect`,{session_id:c},{headers:await s(u),timeout:1e4,validateStatus:(p)=>p<500}),"ReconnectSession");Bi(l.status,l.data,"ReconnectSession"),t(`[bridge:api] POST .../bridge/reconnect -> ${l.status}`)},Ooe)},async heartbeatWork(a,c,l){On(a,"environmentId"),On(c,"workId"),t(`[bridge:api] POST .../work/${c}/heartbeat`);let u=await Ar.post(`${e.baseUrl}/v1/environments/${a}/work/${c}/heartbeat`,{},{headers:await s(l),timeout:1e4,validateStatus:(p)=>p<500});return Bi(u.status,u.data,"Heartbeat"),t(`[bridge:api] POST .../work/${c}/heartbeat -> ${u.status} lease_extended=${u.data.lease_extended} state=${u.data.state}`),u.data},async sendPermissionResponseEvent(a,c,l){On(a,"sessionId");let{url:u,body:p}=Roe(e.baseUrl,a,[c],e.useCcrV2Routing?.()??!1);t(`[bridge:api] POST ${u} type=${c.type}`);let f=await Ar.post(u,p,{headers:await s(l),timeout:1e4,validateStatus:(A)=>A<500});Bi(f.status,f.data,"SendPermissionResponseEvent"),t(`[bridge:api] POST ${u} -> ${f.status}`),t(`[bridge:api] >>> ${ap(p)}`),t(`[bridge:api] <<< ${ap(f.data)}`)}}}function Bi(e,t,r,n){if(e===200||e===204)return;let s=gl(t),o=GJe(t);switch(e){case 401:throw new cs(`${r}: Authentication failed (401)${s?`: ${s}`:""}. ${Pv}`,401,o);case 403:throw new cs(Nv(o)?"Remote Control session expired.":`${r}: Access denied (403)${s?`: ${s}`:""}. Check your organization permissions.`,403,o);case 404:throw new cs(s??`${r}: Not found (404). Remote Control may not be available for this organization.`,404,o);case 410:throw new cs(s??"Remote Control session expired.",410,o??"environment_expired");case 429:{let i=XN(typeof n?.["retry-after"]==="string"?n["retry-after"]:void 0);throw Object.assign(Error(`${r}: Rate limited (429). Polling too frequently.`),i!==void 0?{status:e,retryAfterMs:i}:{status:e})}default:throw Object.assign(Error(`${r}: Failed with status ${e}${s?`: ${s}`:""}`),{status:e})}}function Nv(e){if(!e)return!1;return e.includes("expired")||e.includes("lifetime")}function Foe(e){if(e.status!==403)return!1;return e.message.includes("external_poll_sessions")||e.message.includes("environments:manage")}function Ooe(e){if(e instanceof cs)return e.status===401?"auth_failed":"http_error";if(e instanceof Error){if(e.message===Pv)return"no_token";if("status"in e&&typeof e.status==="number")return"http_error"}return"request_failed"}function GJe(e){if(e&&typeof e==="object"){if("error"in e&&e.error&&typeof e.error==="object"&&"type"in e.error&&typeof e.error.type==="string")return e.error.type}return}et();import{randomUUID as VJe}from"crypto";go();Wi();var Loe={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 $oe(e){if(e===null||typeof e!=="object")return e;let t=e;if("requestId"in t&&!("request_id"in t))t.request_id=t.requestId,delete t.requestId;if("response"in t&&t.response!==null&&typeof t.response==="object"){let r=t.response;if("requestId"in r&&!("request_id"in r))r.request_id=r.requestId,delete r.requestId}return e}et();nR();xt();rt();function WJe(e){return e!==null&&typeof e==="object"&&"type"in e&&typeof e.type==="string"}function JJe(e){return e!==null&&typeof e==="object"&&"type"in e&&e.type==="control_response"&&"response"in e}function YJe(e){return e!==null&&typeof e==="object"&&"type"in e&&e.type==="control_request"&&"request_id"in e&&"request"in e}function eM(e){if((e.type==="user"||e.type==="assistant")&&e.isVirtual)return!1;return e.type==="user"||e.type==="assistant"||e.type==="system"&&e.subtype==="local_command"}function joe(e){if(e.type!=="user"||e.isMeta||e.toolUseResult||e.isCompactSummary)return;if(e.origin&&e.origin.kind!=="human")return;let t=e.message.content,r;if(typeof t==="string")r=t;else for(let s of t)if(s.type==="text"){r=s.text;break}if(!r)return;return rR(r)||void 0}function zoe(e,t,r,n,s,o){try{let i=$oe(Gt(e));if(JJe(i)){b("[bridge:repl] Ingress message type=control_response"),s?.(i);return}if(YJe(i)){b(`[bridge:repl] Inbound control_request subtype=${i.request.subtype}`),o?.(i);return}if(!WJe(i))return;let a="uuid"in i&&typeof i.uuid==="string"?i.uuid:void 0;if(a&&t.has(a)){b(`[bridge:repl] Ignoring echo: type=${i.type} uuid=${a}`);return}if(a&&r.has(a)){b(`[bridge:repl] Ignoring re-delivered inbound: type=${i.type} uuid=${a}`);return}if(b(`[bridge:repl] Ingress message type=${i.type}${a?` uuid=${a}`:""}`),i.type==="user"){if(a)r.add(a);Ye("tengu_bridge_message_received",{is_repl:!0}),ln("bridge_message_receive"),n?.(i)}else b(`[bridge:repl] Ignoring non-user inbound message: type=${i.type}`)}catch(i){b(`[bridge:repl] Failed to parse ingress message: ${ae(i)}`),Zr("bridge_message_receive","bridge_message_receive_parse_failed")}}var KJe="This session is outbound-only. Enable Remote Control locally to allow inbound control.";function Hoe(e,t){let{transport:r,sessionId:n,outboundOnly:s,onInterrupt:o,onSetModel:i,onSetMaxThinkingTokens:a,onSetPermissionMode:c,onRenameSession:l,onSetColor:u,onFileSuggestions:p,onReadFile:f,onGetContextUsage:A,onMcpAuthenticate:g,onMcpOauthCallbackUrl:h,onMcpReconnect:m,onMcpStatus:y}=t;if(!r){b("[bridge:repl] Cannot respond to control_request: transport not configured");return}let w;if(s&&e.request.subtype!=="initialize"){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:KJe}};let v={...w,session_id:n};r.write(v),b(`[bridge:repl] Rejected ${e.request.subtype} (outbound-only) request_id=${e.request_id}`);return}switch(e.request.subtype){case"initialize":w={type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{commands:[],output_style:"normal",available_output_styles:["normal"],models:[],account:{},pid:process.pid}}};break;case"set_model":i?.(e.request.model),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;case"set_max_thinking_tokens":a?.(e.request.max_thinking_tokens),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;case"set_permission_mode":{let v=c?.(e.request.mode)??{ok:!1,error:"set_permission_mode is not supported in this context (onSetPermissionMode callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"rename_session":{let v=l?.(e.request.title)??{ok:!1,error:"rename_session is not supported in this context (onRenameSession callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"set_color":{let v=u?.(e.request.color)??{ok:!1,error:"set_color is not supported in this context (onSetColor callback not registered)"};if(v.ok)w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};else w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:v.error}};break}case"file_suggestions":{if(!p){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"file_suggestions is not supported in this context (onFileSuggestions callback not registered)"}};break}p(e.request.query).then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{suggestions:v}}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for file_suggestions request_id=${e.request_id} result=${v.response.subtype}`)});return}case"read_file":{if(!f){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"read_file is not supported in this context (onReadFile callback not registered)"}};break}f(e.request.path,e.request.max_bytes,e.request.encoding).then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:v}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for read_file request_id=${e.request_id} result=${v.response.subtype}`)});return}case"get_context_usage":{if(!A){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:"get_context_usage is not supported in this context (onGetContextUsage callback not registered)"}};break}A().then((v)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{...v}}})).catch((v)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(v)}})).then((v)=>{let B={...v,session_id:n};r.write(B),b(`[bridge:repl] Sent control_response for get_context_usage request_id=${e.request_id} result=${v.response.subtype}`)});return}case"mcp_status":w={type:"control_response",response:{subtype:"success",request_id:e.request_id,response:{mcpServers:y?.()??[]}}};break;case"mcp_authenticate":case"mcp_oauth_callback_url":case"mcp_reconnect":{let v=e.request,{subtype:B,serverName:P}=v,R=v.subtype==="mcp_authenticate"?g&&((V)=>g(V,v.redirectUri)):v.subtype==="mcp_oauth_callback_url"?h&&((V)=>h(V,v.callbackUrl)):m;if(!R){w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:`${B} is not supported in this context (callback not registered)`}};break}R(P).then((V)=>({type:"control_response",response:{subtype:"success",request_id:e.request_id,response:V??{}}})).catch((V)=>({type:"control_response",response:{subtype:"error",request_id:e.request_id,error:ae(V)}})).then((V)=>{let Y={...V,session_id:n};r.write(Y),b(`[bridge:repl] Sent control_response for ${B} request_id=${e.request_id} result=${V.response.subtype}`)});return}case"interrupt":o?.(),w={type:"control_response",response:{subtype:"success",request_id:e.request_id}};break;default:w={type:"control_response",response:{subtype:"error",request_id:e.request_id,error:`REPL bridge does not handle control_request subtype: ${e.request.subtype}`}}}let C={...w,session_id:n};r.write(C),b(`[bridge:repl] Sent control_response for ${e.request.subtype} request_id=${e.request_id} result=${w.response.subtype}`)}function tM(e){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:{...Loe},modelUsage:{},permission_denials:[],session_id:e,uuid:VJe()}}class Mv{capacity;ring;set=new Set;writeIdx=0;constructor(e){this.capacity=e,this.ring=Array(e)}add(e){if(this.set.has(e))return;let t=this.ring[this.writeIdx];if(t!==void 0)this.set.delete(t);this.ring[this.writeIdx]=e,this.set.add(e),this.writeIdx=(this.writeIdx+1)%this.capacity}has(e){return this.set.has(e)}clear(){this.set.clear(),this.ring.fill(void 0),this.writeIdx=0}}function qoe(e){let t=new AbortController;function r(){t.abort(),t=new AbortController}function n(){let s=new AbortController,o=()=>s.abort();if(e.aborted||t.signal.aborted)return s.abort(),{signal:s.signal,cleanup:()=>{}};e.addEventListener("abort",o,{once:!0});let i=t.signal;return i.addEventListener("abort",o,{once:!0}),{signal:s.signal,cleanup:()=>{e.removeEventListener("abort",o),i.removeEventListener("abort",o)}}}return{signal:n,wake:r}}class rM{_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(...e){if(!this._active)return!1;return this._pending.push(...e),!0}drop(){this._active=!1;let e=this._pending.length;return this._pending.length=0,e}deactivate(){this._active=!1}}import{randomUUID as Woe}from"crypto";Wi();et();Ys();xt();rt();function ZJe(e){let r=(e.startsWith("sk-ant-si-")?e.slice(10):e).split(".");if(r.length!==3||!r[1])return null;try{return Gt(Buffer.from(r[1],"base64url").toString("utf8"))}catch{return null}}function Goe(e){let t=ZJe(e);if(t!==null&&typeof t==="object"&&"exp"in t&&typeof t.exp==="number")return t.exp;return null}go();et();Ys();xt();rt();class nM{inflight=null;pending=null;closed=!1;config;constructor(e){this.config=e}enqueue(e){if(this.closed)return;this.pending=this.pending?Voe(this.pending,e):e,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 e=this.pending;this.pending=null,this.inflight=this.sendWithRetry(e).then(()=>{if(this.inflight=null,this.pending&&!this.closed)this.drain()})}async sendWithRetry(e){let t=e,r=0;while(!this.closed){if(await this.config.send(t))return;if(r++,await Mr(this.retryDelay(r)),this.pending&&!this.closed)t=Voe(t,this.pending),this.pending=null}}retryDelay(e){let t=Math.min(this.config.baseDelayMs*2**(e-1),this.config.maxDelayMs),r=Math.random()*this.config.jitterMs;return t+r}}function Voe(e,t){let r={...e};for(let[n,s]of Object.entries(t))if((n==="external_metadata"||n==="internal_metadata")&&r[n]&&typeof r[n]==="object"&&typeof s==="object"&&s!==null)r[n]={...r[n],...s};else r[n]=s;return r}var XJe=20000,eYe=100,Joe=61440;function Om(e){return e===400||e===413||e===422}function Yoe(e){let t=Qr(e);if(t)return t;if(e&&typeof e==="object"&&"name"in e&&typeof e.name==="string")return e.name;return}class Ov extends Error{reason;httpStatus;constructor(e,t){super(`CCRClient init failed: ${e}`);this.reason=e;this.httpStatus=t}}var tYe=10,rYe=3;class sM{workerEpoch=0;heartbeatIntervalMs;heartbeatJitterFraction;heartbeatTimer=null;heartbeatInFlight=!1;closed=!1;consecutiveAuthFailures=0;consecutiveNotFound=0;currentState=null;sessionBaseUrl;sessionId;streamEventBuffer=[];streamEventTimer=null;streamedEphemeralSinceLastAssistant=!1;workerState;eventUploader;internalEventUploader;deliveryUploader;pendingProcessingAcks=[];onEpochMismatch;getAuthHeaders;onDiagnostic;constructor(e,t,r){if(this.onEpochMismatch=r?.onEpochMismatch??(()=>{process.exit(1)}),this.heartbeatIntervalMs=r?.heartbeatIntervalMs??XJe,this.heartbeatJitterFraction=r?.heartbeatJitterFraction??0,this.getAuthHeaders=r?.getAuthHeaders??GE,this.onDiagnostic=r?.onDiagnostic,t.protocol!=="http:"&&t.protocol!=="https:")throw Error(`CCRClient: Expected http(s) URL, got ${t.protocol}`);let n=t.pathname.replace(/\/$/,"");this.sessionBaseUrl=`${t.protocol}//${t.host}${n}`,this.sessionId=n.split("/").pop()||"",this.workerState=new nM({send:async(s)=>{let o=await this.request("put","/worker",{worker_epoch:this.workerEpoch,...s},"PUT worker");if(o.ok)return!0;if(Om(o.status))return H("warn","cli_worker_state_4xx_dropped",{status:o.status}),!0;return!1},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.eventUploader=new qc({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:1e5,send:async(s)=>{let o=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:s},"client events");if(o.ok)return;if(Om(o.status)){let i=s.filter((c)=>!c.ephemeral),a=s.length-i.length;if(a>0){if(b(`CCRClient: client event POST rejected (${o.status}) — dropping ${a} ephemeral event(s), retrying ${i.length} durable event(s)`,{level:"warn"}),Us("ccr_partial_messages","ephemeral_dropped_on_4xx"),s.splice(0,s.length,...i),i.length===0)return;let c=await this.request("post","/worker/events",{worker_epoch:this.workerEpoch,events:i},"client events (durable retry)");if(c.ok)return;if(!Om(c.status))throw new Hc("client event POST failed",c.retryAfterMs)}H("warn","cli_worker_events_4xx_dropped",{status:o.status,count:i.length});return}throw new Hc("client event POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.internalEventUploader=new qc({maxBatchSize:100,maxBatchBytes:10485760,maxQueueSize:200,send:async(s)=>{let o=await this.request("post","/worker/internal-events",{worker_epoch:this.workerEpoch,events:s},"internal events");if(o.ok)return;if(Om(o.status)){H("warn","cli_worker_internal_events_4xx_dropped",{status:o.status,count:s.length});return}throw new Hc("internal event POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),this.deliveryUploader=new qc({maxBatchSize:64,maxQueueSize:64,send:async(s)=>{let o=await this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:s.map((i)=>({event_id:i.eventId,status:i.status}))},"delivery batch");if(o.ok)return;if(Om(o.status)){H("warn","cli_worker_delivery_4xx_dropped",{status:o.status,count:s.length});return}throw new Hc("delivery POST failed",o.retryAfterMs)},baseDelayMs:500,maxDelayMs:30000,jitterMs:500}),e.setOnEvent((s)=>{this.reportDelivery(s.event_id,"received")})}async initialize(e){let t=Date.now();if(Object.keys(this.getAuthHeaders()).length===0)throw new Ov("no_auth_headers");if(e===void 0){let c=process.env.CLAUDE_CODE_WORKER_EPOCH;e=c?parseInt(c,10):NaN}if(isNaN(e))throw new Ov("missing_epoch");this.workerEpoch=e;let r=this.getWorkerState(),n={ok:!1},s=new Set,o=3;for(let c=1;c<=o;c++){if(n=await this.request("put","/worker",{worker_status:"idle",worker_epoch:this.workerEpoch,external_metadata:{pending_action:null,task_summary:null}},"PUT worker (init)"),n.ok||this.closed)break;if(n.reason)s.add(n.reason);if(this.onDiagnostic?.(`PUT /worker failed (${n.reason??"unknown"}) attempt=${c}/${o}, ${Math.round((Date.now()-t)/1000)}s elapsed`),c<o){let l=Math.min(500*2**(c-1),30000)+Math.random()*500;await Mr(l)}}if(!n.ok){if(!this.closed)H("error","cli_worker_init_put_retries_exhausted"),this.onDiagnostic?.(`PUT /worker retries exhausted: ${o} attempts over ${Math.round((Date.now()-t)/1000)}s, errors=[${[...s].join(",")||"unknown"}]`);throw new Ov("worker_register_failed",n.status)}this.currentState="idle",this.startHeartbeat(),kv(()=>{this.writeEvent({type:"keep_alive"})}),b(`CCRClient: initialized, epoch=${this.workerEpoch}`),H("info","cli_worker_lifecycle_initialized",{epoch:this.workerEpoch,duration_ms:Date.now()-t});let{metadata:i,durationMs:a}=await r;if(!this.closed)H("info","cli_worker_state_restored",{duration_ms:a,had_state:i.external!==null||i.internal!==null});return i}async getWorkerState(){let e=Date.now(),t=this.getAuthHeaders();if(Object.keys(t).length===0)return{metadata:{external:null,internal:null},durationMs:0};let r=await this.getWithRetry(`${this.sessionBaseUrl}/worker`,t,"worker_state");return{metadata:{external:r?.worker?.external_metadata??null,internal:r?.worker?.internal_metadata??null},durationMs:Date.now()-e}}async request(e,t,r,n,{timeout:s=1e4}={}){let o=this.getAuthHeaders();if(Object.keys(o).length===0)return{ok:!1,reason:"no_auth_headers"};let i=`${this.sessionBaseUrl}${t}`;try{let a=await fetch(i,{method:e.toUpperCase(),headers:{...o,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()},body:Ee(r),signal:AbortSignal.timeout(s),...FN({url:i})});if(a.body?.cancel(),a.ok)return this.consecutiveAuthFailures=0,this.consecutiveNotFound=0,{ok:!0};if(a.status===409)this.handleEpochMismatch();if(a.status===404){if(this.consecutiveNotFound++,this.consecutiveNotFound>=rYe)b(`CCRClient: ${this.consecutiveNotFound} consecutive 404s — session gone, exiting`,{level:"error"}),H("error","cli_worker_session_not_found"),this.onDiagnostic?.(`${this.consecutiveNotFound} consecutive 404s on ${t} — session gone, exiting`),this.onEpochMismatch()}if(a.status===401||a.status===403){let c=Qg(),l=c?Goe(c):null;if(l!==null&&l*1000<Date.now())b(`CCRClient: session_token expired (exp=${new Date(l*1000).toISOString()}) — no refresh was delivered, exiting`,{level:"error"}),H("error","cli_worker_token_expired_no_refresh"),this.onDiagnostic?.(`session_token expired (exp=${new Date(l*1000).toISOString()}) — no refresh delivered, exiting`),this.onEpochMismatch();if(this.consecutiveAuthFailures++,this.consecutiveAuthFailures>=tYe)b(`CCRClient: ${this.consecutiveAuthFailures} consecutive auth failures with a valid-looking token — server-side auth unrecoverable, exiting`,{level:"error"}),H("error","cli_worker_auth_failures_exhausted"),this.onDiagnostic?.(`${this.consecutiveAuthFailures} consecutive auth failures (HTTP ${a.status}) with valid-looking token — exiting`),this.onEpochMismatch()}if(b(`CCRClient: ${n} returned ${a.status}`,{level:"warn"}),H("warn","cli_worker_request_failed",{method:e,path:t,status:a.status}),a.status===429){let c=a.headers.get("retry-after"),l=c?parseInt(c,10):NaN;if(!isNaN(l)&&l>=0)return{ok:!1,retryAfterMs:l*1000,status:a.status,reason:`http_${a.status}`}}return{ok:!1,status:a.status,reason:`http_${a.status}`}}catch(a){return b(`CCRClient: ${n} failed: ${ae(a)}`,{level:"warn"}),H("warn","cli_worker_request_error",{method:e,path:t,error_code:Yoe(a)}),{ok:!1,reason:`fetch_failed:${Yoe(a)}`}}}reportState(e,t){if(e===this.currentState&&!t)return;this.currentState=e,this.workerState.enqueue({worker_status:e,requires_action_details:t?{tool_name:t.tool_name,display_tool_name:t.display_tool_name,action_description:t.action_description,raw_command:t.raw_command,request_id:t.request_id,tool_use_id:t.tool_use_id}:null})}reportMetadata(e){this.workerState.enqueue({external_metadata:nYe(e)})}reportInternalMetadata(e){this.workerState.enqueue({internal_metadata:e})}handleEpochMismatch(){b("CCRClient: Epoch mismatch (409), shutting down",{level:"error"}),H("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 e=()=>{let r=this.heartbeatIntervalMs*this.heartbeatJitterFraction*(2*Math.random()-1);this.heartbeatTimer=setTimeout(t,this.heartbeatIntervalMs+r)},t=()=>{if(this.sendHeartbeat(),this.heartbeatTimer===null)return;e()};e()}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)b("CCRClient: Heartbeat sent")}finally{this.heartbeatInFlight=!1}}async writeEvent(e){if(e.type==="stream_event"){if(this.streamEventBuffer.push(e),this.streamedEphemeralSinceLastAssistant=!0,!this.streamEventTimer)this.streamEventTimer=setTimeout(()=>void this.flushStreamEventBuffer(),eYe);return}if(await this.flushStreamEventBuffer(),e.type==="assistant"&&this.streamedEphemeralSinceLastAssistant)ln("ccr_partial_messages"),this.streamedEphemeralSinceLastAssistant=!1;await this.eventUploader.enqueue(this.toClientEvent(e))}toClientEvent(e){let t=e,r=t.historical===!0;return{payload:{...t,uuid:typeof t.uuid==="string"?t.uuid:Woe()},...r&&{historical:!0}}}async flushStreamEventBuffer(){if(this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;if(this.streamEventBuffer.length===0)return;let e=this.streamEventBuffer;this.streamEventBuffer=[];let t=e.filter((r)=>{if(Buffer.byteLength(Ee(r))<=Joe)return!0;return b(`CCRClient: dropping oversize ephemeral stream_event (>${Joe} bytes)`,{level:"warn"}),Us("ccr_partial_messages","oversize_ephemeral_skipped"),!1});await this.eventUploader.enqueue(t.map((r)=>({payload:r,ephemeral:!0})))}async writeInternalEvent(e,t,{isCompaction:r=!1,agentId:n,preservedEventIds:s}={}){let o={payload:{type:e,...t,uuid:typeof t.uuid==="string"?t.uuid:Woe()},...r&&{is_compaction:!0},...n&&{session_agent_id:n},...s?.length&&{preserved_event_ids:s}};await this.internalEventUploader.enqueue(o)}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",{limit:"1000"},"internal_events")}async readSubagentInternalEvents(){return this.paginatedGet("/worker/internal-events",{subagents:"true",limit:"1000"},"subagent_events")}async paginatedGet(e,t,r){let n=this.getAuthHeaders();if(Object.keys(n).length===0)return null;let s=[],o,i=0,a=0,c=null;do{let l=new URL(`${this.sessionBaseUrl}${e}`);for(let[p,f]of Object.entries(t))l.searchParams.set(p,f);if(o)l.searchParams.set("cursor",o);let u=await this.getWithRetry(l.toString(),n,r,(p)=>{i++,c??=p.headers.get("content-encoding");let f=p.headers.get("content-length");if(f!==null&&a!==null)a+=Number(f);else a=null});if(!u)return null;s.push(...u.data??[]),o=u.next_cursor}while(o);return b(`CCRClient: Read ${s.length} internal events from ${e}${t.subagents?" (subagents)":""}`),{events:s,stats:{pageCount:i,bytesReceived:a,contentEncoding:c??"none"}}}async getWithRetry(e,t,r,n){for(let s=1;s<=10;s++){let o;try{if(o=await fetch(e,{headers:{...t,"anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()},signal:AbortSignal.timeout(30000),...FN({url:e})}),o.ok){let i=await o.json();return n?.(o),i}}catch(i){if(b(`CCRClient: GET ${e} failed (attempt ${s}/10): ${ae(i)}`,{level:"warn"}),s<10){let a=Math.min(500*2**(s-1),30000)+Math.random()*500;await Mr(a)}continue}if(o.body?.cancel(),o.status===409)this.handleEpochMismatch();if(b(`CCRClient: GET ${e} returned ${o.status} (attempt ${s}/10)`,{level:"warn"}),s<10){let i=Math.min(500*2**(s-1),30000)+Math.random()*500;await Mr(i)}}return b("CCRClient: GET retries exhausted",{level:"error"}),H("error","cli_worker_get_retries_exhausted",{context:r}),null}reportDelivery(e,t){if(t==="processing"){if(this.closed)return;if(this.pendingProcessingAcks.push(e)===1)queueMicrotask(()=>{let r=this.pendingProcessingAcks;if(this.pendingProcessingAcks=[],this.closed||r.length===0)return;this.request("post","/worker/events/delivery",{worker_epoch:this.workerEpoch,updates:r.map((n)=>({event_id:n,status:"processing"}))},"processing ack")});return}this.deliveryUploader.enqueue({eventId:e,status:t})}getWorkerEpoch(){return this.workerEpoch}get internalEventsPending(){return this.internalEventUploader.pendingCount}close(){if(this.closed=!0,this.stopHeartbeat(),Pm(),this.streamEventTimer)clearTimeout(this.streamEventTimer),this.streamEventTimer=null;this.streamEventBuffer=[],this.pendingProcessingAcks=[],this.workerState.close(),this.eventUploader.close(),this.internalEventUploader.close(),this.deliveryUploader.close()}}function nYe(e){let t=e.post_turn_summary;if(!sYe(t)||t.status_category!=="blocked")return e;return{...e,post_turn_summary:{...t,status_category:"need_input"}}}function sYe(e){return e!==null&&typeof e==="object"&&"status_category"in e&&typeof e.status_category==="string"}et();Ys();xt();rt();nr();var Koe={},oYe={};var iYe=!1;function Zoe(e,t,r){if(iYe)return;if(e==="skills_load_ms"&&Koe[e]!==void 0)return;if(Koe[e]=Math.round(t),r!==void 0)oYe[e]=Math.round(r)}var aYe=1000,cYe=30000,Xoe=45000,lYe=new Set([401,403,404]),Um=10,uYe=500,dYe=8000,pYe={stream:!0};function fYe(){return!0}function AYe(e){let t=[],r=0,n;while((n=e.indexOf(`
181
181
 
182
182
  `,r))!==-1){let s=e.slice(r,n);if(r=n+2,!s.trim())continue;let o={},i=!1;for(let a of s.split(`
183
183
  `)){if(a.startsWith(":")){i=!0;continue}let c=a.indexOf(":");if(c===-1)continue;let l=a.slice(0,c),u=a[c+1]===" "?a.slice(c+2):a.slice(c+1);switch(l){case"event":o.event=u;break;case"id":o.id=u;break;case"data":o.data=o.data?o.data+`
@@ -187,4 +187,4 @@ ${s}`;break;case"retry":if(kse(s))t[n]=s;break;case"id":if(Bse(s))t[n]=s;break;c
187
187
  `);if(n.push(a),!c){s=a.endsWith(`
188
188
  `);continue}let{frames:l,remaining:u}=AYe(n.join(""));n=u?[u]:[],s=u.endsWith(`
189
189
  `);for(let p of l){if(this.resetLivenessTimer(),p.id){let f=parseInt(p.id,10);if(!isNaN(f)){if(this.seenSequenceNums.has(f))b(`SSETransport: DUPLICATE frame seq=${f} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),H("warn","cli_sse_duplicate_sequence");else if(this.seenSequenceNums.add(f),this.seenSequenceNums.size>1000){let A=this.lastSequenceNum-200;for(let g of this.seenSequenceNums)if(g<A)this.seenSequenceNums.delete(g)}if(f>this.lastSequenceNum)this.lastSequenceNum=f}}if(p.event&&p.data)this.handleSSEFrame(p.event,p.data);else if(p.data)b("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),H("warn","cli_sse_frame_missing_event_field")}}}catch(o){if(this.abortController?.signal.aborted)return;b(`SSETransport: Stream read error: ${ae(o)}`,{level:"error"}),H("error","cli_sse_stream_read_error")}finally{t.releaseLock()}if(this.state!=="closing"&&this.state!=="closed"){if(b("SSETransport: Stream ended, reconnecting"),this.state==="connected")this.connectErrorsSeen.add("stream_ended"),this.onDiagnostic?.("SSE stream ended by server, reconnecting");this.handleConnectionError()}}handleSSEFrame(e,t){if(e!=="client_event"){b(`SSETransport: Unexpected SSE event type '${e}' on worker stream`,{level:"warn"}),H("warn","cli_sse_unexpected_event_type",{event_type:e});return}let r;try{r=Gt(t)}catch(s){b(`SSETransport: Failed to parse client_event data: ${ae(s)}`,{level:"error"});return}let n=r.payload;if(n&&typeof n==="object"&&"type"in n){let s=this.sessionId?` session=${this.sessionId}`:"",o=r.device_attestation_status?` attestation=${r.device_attestation_status}`:"";if(b(`SSETransport: Event seq=${r.sequence_num} event_id=${r.event_id} event_type=${r.event_type} payload_type=${String(n.type)}${o}${s}`),H("info","cli_sse_message_received"),this.eventFilter?.(r))H("warn","cli_sse_event_filtered");else this.onData?.(Ee(n)+`
190
- `)}else b(`SSETransport: Ignoring client_event with no type in payload: event_id=${r.event_id}`);this.onEventCallback?.(r)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let e=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=e;let t=e-this.reconnectStartTime;if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let s=this.refreshHeaders();Object.assign(this.headers,s),b("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let r=Math.min(aYe*Math.pow(2,this.reconnectAttempts-1),cYe),n=Math.max(0,r+r*0.25*(2*Math.random()-1));b(`SSETransport: Reconnecting in ${Math.round(n)}ms (attempt ${this.reconnectAttempts}, ${Math.round(t/1000)}s elapsed)`),H("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},n)}onLivenessTimeout=()=>{this.livenessTimer=null,b("SSETransport: Liveness timeout, reconnecting",{level:"error"}),H("error","cli_sse_liveness_timeout"),this.connectErrorsSeen.add("liveness_timeout"),this.onDiagnostic?.(`SSE liveness timeout — no frame in ${Xoe/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,Xoe)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(e){let t=this.getAuthHeaders();if(Object.keys(t).length===0){b("SSETransport: No session token available for POST"),H("warn","cli_sse_post_no_token");return}let r={...t,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()};b(`SSETransport: POST body keys=${Object.keys(e).join(",")}`);for(let n=1;n<=Um;n++){try{let o=await Ar.post(this.postUrl,e,{headers:r,validateStatus:fYe});if(o.status===200||o.status===201){b(`SSETransport: POST success type=${e.type}`);return}if(b(`SSETransport: POST ${o.status} body=${Ee(o.data).slice(0,200)}`),o.status>=400&&o.status<500&&o.status!==429){b(`SSETransport: POST returned ${o.status} (client error), not retrying`),H("warn","cli_sse_post_client_error",{status:o.status});return}b(`SSETransport: POST returned ${o.status}, attempt ${n}/${Um}`),H("warn","cli_sse_post_retryable_error",{status:o.status,attempt:n})}catch(o){b(`SSETransport: POST error: ${ae(o)}, attempt ${n}/${Um}`),H("warn","cli_sse_post_network_error",{attempt:n})}if(n===Um){b(`SSETransport: POST failed after ${Um} attempts, continuing`),H("warn","cli_sse_post_retries_exhausted");return}let s=Math.min(uYe*Math.pow(2,n-1),dYe);await Mr(s)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(e){this.onData=e}setOnClose(e){this.onCloseCallback=e}setOnEvent(e){this.onEventCallback=e}setOnDiagnostic(e){this.onDiagnostic=e}setEventFilter(e){this.eventFilter=e}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 gYe(e){let t=e.pathname;if(t.endsWith("/stream"))t=t.slice(0,-7);return`${e.protocol}//${e.host}${t}`}et();xt();Jn();go();et();xt();var eie="DEVICE_ATTESTATION_STATUS_",tie=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function mYe(e){if(e===void 0||e===null)return"UNSPECIFIED";if(typeof e==="number")return tie[e]??"UNSPECIFIED";if(typeof e!=="string")return"UNSPECIFIED";let t=e.startsWith(eie)?e.slice(eie.length):e;if(tie.includes(t))return t;return"UNSPECIFIED"}function hYe(e,t){if(e==="VERIFIED")return!0;if(e==="VERIFIED_BY_GATE")return t==="VERIFIED_BY_GATE";return!1}var yYe={enforce:!1,acceptLevel:"VERIFIED",acceptStatuses:new Set},bYe=["UNSPECIFIED","ABSENT","INVALID","UNCHECKED"],vRt=N(()=>d.object({accept_level:d.enum(["VERIFIED","VERIFIED_BY_GATE"]).default("VERIFIED"),accept_statuses:d.array(d.enum(bYe)).default([])}));var EYe;var IYe;function rie(e){let t=typeof e.payload?.type==="string"?e.payload.type:e.event_type,r=t==="user"||t==="control_response",n=mYe(e.device_attestation_status),s=EYe?.()??yYe;if(hYe(n,s.acceptLevel)){if(r)ln("bridge_event_attestation");return!1}if(!s.enforce){if(n==="UNSPECIFIED")return!1;if(r)b(`[bridge:attestation] accepting unverified ${t} event_id=${e.event_id} status=${n}`,{level:"info"}),Us("bridge_event_attestation",`${n.toLowerCase()}_${t}`);return!1}let o=s.acceptStatuses.has(n);if(r){let i=`${n.toLowerCase()}_${t}`;if(b(`[bridge:attestation] ${o?"accepting (config exception)":"DROPPING"} unverified ${t} event_id=${e.event_id} status=${n}`,{level:o?"info":"warn"}),o)Us("bridge_event_attestation",i);else{Zr("bridge_event_attestation",i);try{IYe?.({status:n,payloadType:t})}catch(a){b(`[bridge:attestation] drop notifier threw: ${ae(a)}`,{level:"error"})}}}return!o}rt();function nie(e){let t=Buffer.from(e,"base64url").toString("utf-8"),r=Gt(t);if(!r||typeof r!=="object"||!("version"in r)||r.version!==1)throw Error(`Unsupported work secret version: ${r&&typeof r==="object"&&"version"in r?r.version:"unknown"}`);let n=r;if(typeof n.session_ingress_token!=="string"||n.session_ingress_token.length===0)throw Error("Invalid work secret: missing or empty session_ingress_token");if(typeof n.api_base_url!=="string")throw Error("Invalid work secret: missing api_base_url");return r}function sie(e,t){let r=e.includes("localhost")||e.includes("127.0.0.1"),n=r?"ws":"wss",s=r?"v2":"v1",o=e.replace(/^https?:\/\//,"").replace(/\/+$/,"");return`${n}://${o}/${s}/session_ingress/ws/${t}`}function iM(e,t){if(e===t)return!0;let r=e.slice(e.lastIndexOf("_")+1),n=t.slice(t.lastIndexOf("_")+1);return r.length>=4&&r===n}function oie(e,t){return`${e.replace(/\/+$/,"")}/v1/code/sessions/${t}`}async function iie(e,t){let r=await Ar.post(`${e}/worker/register`,{},{headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json","anthropic-version":"2023-06-01"},timeout:1e4}),n=r.data?.worker_epoch,s=typeof n==="string"?Number(n):n;if(typeof s!=="number"||!Number.isFinite(s)||!Number.isSafeInteger(s))throw Error(`registerWorker: invalid worker_epoch in response: ${Ee(r.data)}`);return s}function aie(e){return{write:(t)=>e.write(t),writeBatch:(t)=>e.writeBatch(t),close:()=>e.close(),isConnectedStatus:()=>e.isConnectedStatus(),getStateLabel:()=>e.getStateLabel(),setOnData:(t)=>e.setOnData(t),setOnClose:(t)=>e.setOnClose(t),setOnConnect:(t)=>e.setOnConnect(t),connect:()=>void e.connect(),getLastSequenceNum:()=>0,get droppedBatchCount(){return e.droppedBatchCount},reportState:()=>{},reportMetadata:()=>{},reportDelivery:()=>{},flush:()=>Promise.resolve()}}async function cie(e){let{sessionUrl:t,ingressToken:r,sessionId:n,initialSequenceNum:s,getAuthToken:o}=e,i;if(o)i=()=>{let h=o();if(!h)return{};return{Authorization:`Bearer ${h}`}};else Rg(r);let a=e.epoch??await iie(t,r);b(`[bridge:repl] CCR v2: worker sessionId=${n} epoch=${a}${e.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let c=new URL(t);c.pathname=c.pathname.replace(/\/$/,"")+"/worker/events/stream";let l=new oM(c,{},n,void 0,s,i),u,p=new sM(l,new URL(t),{getAuthHeaders:i,heartbeatIntervalMs:e.heartbeatIntervalMs,heartbeatJitterFraction:e.heartbeatJitterFraction,onEpochMismatch:()=>{b("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{p.close(),l.close(),u?.(4090)}catch(h){b(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${ae(h)}`,{level:"error"})}throw Error("epoch superseded")}});l.setOnEvent((h)=>{p.reportDelivery(h.event_id,"received"),p.reportDelivery(h.event_id,"processed")}),l.setEventFilter(rie);let f,A=!1,g=!1;return{write(h){return p.writeEvent(h)},async writeBatch(h){for(let m of h){if(g)break;await p.writeEvent(m)}},close(){g=!0,p.close(),l.close()},isConnectedStatus(){return A},getStateLabel(){if(l.isClosedStatus())return"closed";if(l.isConnectedStatus())return A?"connected":"init";return"connecting"},setOnData(h){l.setOnData(h)},setOnClose(h){u=h,l.setOnClose((m)=>{p.close(),h(m??4092)})},setOnConnect(h){f=h},getLastSequenceNum(){return l.getLastSequenceNum()},droppedBatchCount:0,reportState(h,m){p.reportState(h,m)},reportMetadata(h){p.reportMetadata(h)},reportDelivery(h,m){p.reportDelivery(h,m)},flush(){return p.flush()},getInternalEventWriter(){return(h,m,y)=>p.writeInternalEvent(h,m,y)},getInternalEventReaders(){return{readMain:()=>p.readInternalEvents(),readSubagents:()=>p.readSubagentInternalEvents()}},connect(){if(!e.outboundOnly)l.connect();p.initialize(a).then(()=>{A=!0,b(`[bridge:repl] v2 transport ready for writes (epoch=${a}, sse=${l.isConnectedStatus()?"open":"opening"})`),f?.()},(h)=>{b(`[bridge:repl] CCR v2 initialize failed: ${ae(h)}`,{level:"error"}),p.close(),l.close(),u?.(4091)})}}}go();et();xt();var vYe="2023-06-01",CYe="ccr-byoc-2025-07-29";async function lie({environmentId:e,title:t,tags:r,signal:n},s){let{baseUrl:o,getAccessToken:i,orgUUID:a,model:c}=s,l=i();if(!l)return b("[bridge] No access token for session creation"),null;let u=`${o}/v1/sessions`,p;try{p=await Ar.post(u,{title:t,events:[],session_context:{sources:[],outcomes:[],model:c},...{environment_id:e},source:"remote-control",...r!==void 0&&{tags:r}},{headers:Lv(l,{orgUUID:a}),signal:n,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] Session creation request failed: ${ae(A)}`),null}if(p.status!==200&&p.status!==201){let A=gl(p.data);return b(`[bridge] Session creation failed with status ${p.status}${A?`: ${A}`:""}`),null}let f=p.data;if(!f||typeof f!=="object"||!("id"in f)||typeof f.id!=="string")return b("[bridge] No session ID in response"),null;return f.id}async function uie(e,t){let{baseUrl:r,getAccessToken:n,orgUUID:s}=t,o=n();if(!o){b("[bridge] No access token for session archive");return}let i=`${r}/v1/sessions/${e}/archive`;b(`[bridge] Archiving session ${e}`);try{let a=await Ar.post(i,{},{headers:Lv(o,{orgUUID:s}),timeout:1e4,validateStatus:(c)=>c<500});if(a.status===200||a.status===409)b(`[bridge] Session ${e} archived successfully`);else{let c=gl(a.data);b(`[bridge] Session archive failed with status ${a.status}${c?`: ${c}`:""}`)}}catch(a){b(`[bridge] Session archive request failed: ${ae(a)}`)}}async function Uv(e,t,r,n,s,o,i){let a=e==="subscribe"?"bridge_pr_subscribe":"bridge_pr_unsubscribe",c=o();if(!c)return b(`[bridge] No access token for ${e}-pr`),Zr(a,"no_token"),!1;let l=`${s}/v1/code/github/${e}-pr`,u={session_id:ip(t),repo:r,pr_number:n},p;try{p=await Ar.post(l,u,{headers:Lv(c,{trustedDeviceToken:await i?.()}),timeout:1e4,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] ${e}-pr request failed: ${ae(A)}`),Zr(a,"request_failed"),!1}if(!(p.status>=200&&p.status<300||p.status===409)){let A=gl(p.data);return b(`[bridge] ${e}-pr failed ${p.status}${A?`: ${A}`:""}`),Zr(a,"http_error"),!1}return b(`[bridge] ${e}-pr ${r}#${n} ok`),ln(a),!0}async function Fv(e,t,r,n,s,o,i){let a=e==="subscribe"?"bridge_slack_subscribe":"bridge_slack_unsubscribe",c=o();if(!c)return b(`[bridge] No access token for ${e}-thread`),Zr(a,"no_token"),!1;let l=`${s}/v1/code/slack/${e}-thread`,u={session_id:ip(t),channel:r,thread_ts:n},p;try{p=await Ar.post(l,u,{headers:Lv(c,{trustedDeviceToken:await i?.()}),timeout:1e4,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] ${e}-thread request failed: ${ae(A)}`),Zr(a,"request_failed"),!1}if(!(p.status>=200&&p.status<300||p.status===409)){let A=gl(p.data);return b(`[bridge] ${e}-thread failed ${p.status}${A?`: ${A}`:""}`),Zr(a,"http_error"),!1}return b(`[bridge] ${e}-thread ${r}/${n} ok`),ln(a),!0}function Lv(e,{orgUUID:t,trustedDeviceToken:r}={}){let n={Authorization:`Bearer ${e}`,"Content-Type":"application/json","anthropic-version":vYe,"anthropic-beta":CYe,"anthropic-client-platform":Oa(),"User-Agent":Lo()};if(t!==void 0)n["x-organization-uuid"]=t;if(r!==void 0)n["X-Trusted-Device-Token"]=r;return n}var bie=2000,mie=60000,hie=900000,NYe=300000,yie=3;function Eie(e){return e*(0.8+Math.random()*0.4)}var MYe=0;async function Iie(e){let{dir:t,registrationDir:r,machineName:n,branch:s,gitRepoUrl:o,title:i,baseUrl:a,sessionIngressUrl:c,workerType:l,getAccessToken:u,createSession:p,archiveSession:f,getCurrentTitle:A=()=>i,toSDKMessages:g=()=>{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:h,getTrustedDeviceToken:m,getPollIntervalConfig:y=()=>cg,initialHistoryCap:w=200,initialMessages:C,previouslyFlushedUUIDs:v,onInboundMessage:B,onPermissionResponse:P,onInterrupt:R,onSetModel:V,onSetMaxThinkingTokens:Y,onSetPermissionMode:he,onRenameSession:He,onSetColor:Ae,onFileSuggestions:ne,onReadFile:Pe,onMcpAuthenticate:vt,onMcpOauthCallbackUrl:M,onMcpReconnect:yt,onMcpStatus:ie,onStateChange:de,onUserMessage:Ft,onSessionEstablished:Ct,onInitError:ee,perpetual:U,initialSSESequenceNum:we=0,onTransportPersistenceReady:_e,onTransportPersistenceTeardown:qe}=e,Kt=++MYe,{writeBridgePointer:tr,clearBridgePointer:Xe,readBridgePointer:Un}=await Promise.resolve().then(() => (Aie(),fie)),ls=U?await Un(t):null,at=ls?.source==="repl"?ls:null;b(`[bridge:repl] initBridgeCore #${Kt} starting (initialMessages=${C?.length??0}${at?` perpetual prior=env:${at.environmentId}`:""})`);let ct=Uoe({baseUrl:a,getAccessToken:u,runnerVersion:"0.3.163",onDebug:b,onAuth401:h,getTrustedDeviceToken:m}),gt={dir:r??t,machineName:n,branch:s,gitRepoUrl:o,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:gie(),workerType:l,environmentId:gie(),reuseEnvironmentId:at?.environmentId,apiBaseUrl:a,sessionIngressUrl:c},te,Qs;try{let L=await ct.registerBridgeEnvironment(gt);te=L.environment_id,Qs=L.environment_secret}catch(L){if(Moe("registration_failed",`[bridge:repl] Environment registration failed: ${ae(L)}`),ee?.(`[bridge:repl] Environment registration failed: ${ae(L)}`),at&&L instanceof cs&&(L.status===410||L.status!==401&&Nv(L.errorType)))await Xe(t);return de?.("failed",ae(L)),null}b(`[bridge:repl] Environment registered: ${te}`),H("info","bridge_repl_env_registered"),Ye("tengu_bridge_repl_env_registered",{});async function Ua(L,ce){if(te!==L)return b(`[bridge:repl] Env mismatch (requested ${L}, got ${te}) — cannot reconnect in place`),!1;let lt=Mm(ce),je=lt===ce?[ce]:[ce,lt];for(let Ne of je)try{return await ct.reconnectSession(te,Ne),b(`[bridge:repl] Reconnected session ${Ne} in place on env ${te}`),!0}catch(Zt){b(`[bridge:repl] reconnectSession(${Ne}) failed: ${ae(Zt)}`)}return b("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let Qi=at?await Ua(at.environmentId,at.sessionId):!1;if(at&&!Qi)await Xe(t);let ye,Fn=new Set,lr=new Map,Rs=new Set;if(Qi&&at){if(ye=at.sessionId,b(`[bridge:repl] Perpetual session reused: ${ye}`),C&&v)for(let L of C)v.add(L.uuid)}else{let L=await p({environmentId:te,title:i,gitRepoUrl:o,branch:s,signal:AbortSignal.timeout(15000)});if(!L)return b("[bridge:repl] Session creation failed, deregistering environment"),ee?.("[bridge:repl] Session creation failed, deregistering environment"),Ye("tengu_bridge_repl_session_failed",{}),await ct.deregisterEnvironment(te).catch(()=>{}),de?.("failed","Session creation failed"),null;ye=L,b(`[bridge:repl] Session created: ${ye}`)}Ct?.(ye),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),H("info","bridge_repl_session_created"),Ye("tengu_bridge_repl_started",{has_initial_messages:!!(C&&C.length>0),inProtectedNamespace:PO(),...eoe()});let Ri=new Set;if(C)for(let L of C)Ri.add(L.uuid);let Ts=new Mv(2000);for(let L of Ri)Ts.add(L);let Ti=new Mv(2000),_r=new AbortController,ge=null,us=0,Pr=Qi?we:0,ut=null,po=null,cp=qoe(_r.signal),Di=cp.wake,Fa=cp.signal,Ln=new rM,lp=!Ft,La=3,mr=0,Nr=null;async function fo(){if(Nr)return Nr;Nr=Pi();try{return await Nr}finally{Nr=null}}async function Pi(){if(mr++,us++,b(`[bridge:repl] Reconnecting after env lost (attempt ${mr}/${La})`),mr>La)return b(`[bridge:repl] Environment reconnect limit reached (${La}), giving up`),!1;if(ge){let Ne=ge.getLastSequenceNum();if(Ne>Pr)Pr=Ne;qe?.(),ge.close(),ge=null}if(Di(),Ln.drop(),ut){let Ne=ut;if(await ct.stopWork(te,Ne,!1).catch(()=>{}),ut!==Ne)return b("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),mr=0,!0;ut=null,po=null}if(_r.signal.aborted)return b("[bridge:repl] Reconnect aborted by teardown"),!1;let L=te;gt.reuseEnvironmentId=L;let ce;for(let Ne=1;;Ne++)try{ce=await ct.registerBridgeEnvironment(gt);break}catch(Zt){if(Zt instanceof cs||Ne>=yie||_r.signal.aborted)return gt.reuseEnvironmentId=void 0,b(`[bridge:repl] Environment re-registration failed (attempt ${Ne}): ${ae(Zt)}`),!1;let Lm=Eie(bie*2**(Ne-1));if(b(`[bridge:repl] Environment re-registration transient failure (attempt ${Ne}/${yie}), retrying in ${Math.round(Lm)}ms: ${ae(Zt)}`),await Mr(Lm,_r.signal),_r.signal.aborted)return gt.reuseEnvironmentId=void 0,!1}if(te=ce.environment_id,Qs=ce.environment_secret,gt.reuseEnvironmentId=void 0,b(`[bridge:repl] Re-registered: requested=${L} got=${te}`),_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await ct.deregisterEnvironment(te).catch(()=>{}),!1;if(ge!==null)return b("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),mr=0,!0;if(await Ua(L,ye))return Ye("tengu_bridge_repl_reconnected_in_place",{}),mr=0,!0;if(te!==L)Ye("tengu_bridge_repl_env_expired_fresh_session",{});if(await f(ye),_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after archive, cleaning up"),await ct.deregisterEnvironment(te).catch(()=>{}),!1;let lt=A(),je=await p({environmentId:te,title:lt,gitRepoUrl:o,branch:s,signal:AbortSignal.timeout(15000)});if(!je)return b("[bridge:repl] Session creation failed during reconnection"),!1;if(_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await f(je),!1;if(ye=je,noe(ip(je)).catch(()=>{}),Ct?.(ye),Pr=0,Ti.clear(),lp=!Ft,b(`[bridge:repl] Re-created session: ${ye}`),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),v?.clear(),Fn.size>0){b(`[bridge:repl] Replaying ${Fn.size} PR subscription(s) against new session`);for(let Ne of Fn){let Zt=Ne.lastIndexOf("#");Uv("subscribe",ye,Ne.slice(0,Zt),Number(Ne.slice(Zt+1)),a,u,m)}}if(Rs.size>0){b(`[bridge:repl] Replaying ${Rs.size} Slack thread subscription(s) against new session`);for(let Ne of Rs){let Zt=Ne.indexOf("/");Fv("subscribe",ye,Ne.slice(0,Zt),Ne.slice(Zt+1),a,u,m)}}return mr=0,!0}function $a(){return u()}function Ni(){let L=Ln.end();if(L.length===0)return;if(!ge){b(`[bridge:repl] Cannot drain ${L.length} pending message(s): no transport`);return}for(let je of L)Ts.add(je.uuid);let lt=g(L).map((je)=>({...je,session_id:ye}));b(`[bridge:repl] Drained ${L.length} pending message(s) after flush`),ge.writeBatch(lt)}let zv=null;function Hv(){zv?.()}function uM(L){if(b(`[bridge:repl] Transport permanently closed: code=${L}`),Ye("tengu_bridge_repl_ws_closed",{code:L}),ge){let lt=ge.getLastSequenceNum();if(lt>Pr)Pr=lt;qe?.(),ge=null}Di();let ce=Ln.drop();if(ce>0)b(`[bridge:repl] Dropping ${ce} pending message(s) on transport close (code=${L})`,{level:"warn"});if(L===1000){de?.("failed","session ended"),_r.abort(),Hv();return}de?.("reconnecting",`Remote Control connection lost (code ${L})`),b(`[bridge:repl] Transport reconnect budget exhausted (code=${L}), attempting env reconnect`),fo().then((lt)=>{if(lt)return;if(_r.signal.aborted)return;b("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),Ye("tengu_bridge_repl_reconnect_failed",{close_code:L}),de?.("failed","reconnection failed"),Hv()})}let dM,Sie=null,wie={api:ct,getCredentials:()=>({environmentId:te,environmentSecret:Qs}),signal:_r.signal,getPollIntervalConfig:y,onStateChange:de,getWsState:()=>ge?.getStateLabel()??"null",isAtCapacity:()=>ge!==null,capacitySignal:Fa,onFatalError:Hv,getHeartbeatInfo:()=>{if(!ut||!po)return null;return{environmentId:te,workId:ut,sessionToken:po}},onHeartbeatFatal:(L)=>{if(b(`[bridge:repl] heartbeatWork fatal (status=${L.status}) — tearing down work item for fast re-dispatch`),ge){let ce=ge.getLastSequenceNum();if(ce>Pr)Pr=ce;qe?.(),ge.close(),ge=null}if(Ln.drop(),ut)ct.stopWork(te,ut,!1).catch((ce)=>{b(`[bridge:repl] stopWork after heartbeat fatal: ${ae(ce)}`)});ut=null,po=null,Di(),de?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await fo())return null;return{environmentId:te,environmentSecret:Qs}},onWorkReceived:(L,ce,lt,je)=>{if(ge?.isConnectedStatus())b(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${lt})`);if(b(`[bridge:repl] Work received: workId=${lt} workSessionId=${L} currentSessionId=${ye} match=${iM(L,ye)}`),tr(t,{sessionId:ye,environmentId:te,source:"repl"}),!iM(L,ye)){b(`[bridge:repl] Rejecting foreign session: expected=${ye} got=${L}`);return}ut=lt,po=ce;let Ne=je||Ge(process.env.CLAUDE_BRIDGE_USE_CCR_V2),Zt;if(!Ne){if(Zt=$a(),!Zt){b("[bridge:repl] No OAuth token available for session ingress, skipping work");return}Rg(Zt)}if(Ye("tengu_bridge_repl_work_received",{}),ge){qe?.();let rr=ge;ge=null;let ur=rr.getLastSequenceNum();if(ur>Pr)Pr=ur;rr.close()}Ln.deactivate();let Lm=(rr)=>Hoe(rr,{transport:ge,sessionId:ye,onInterrupt:R,onSetModel:V,onSetMaxThinkingTokens:Y,onSetPermissionMode:he,onRenameSession:He,onSetColor:Ae,onFileSuggestions:ne,onReadFile:Pe,onMcpAuthenticate:vt,onMcpOauthCallbackUrl:M,onMcpReconnect:yt,onMcpStatus:ie}),Wv=!1,fM=(rr)=>{if(ge=rr,rr.setOnConnect(()=>{if(ge!==rr)return;if(b("[bridge:repl] Ingress transport connected"),Ye("tengu_bridge_repl_ws_connected",{}),!Ne){let ur=$a();if(ur)Rg(ur)}if(Vv=!1,!Wv&&C&&C.length>0){Wv=!0;let ur=w,gn=C.filter(($m)=>eM($m)&&!v?.has($m.uuid)),$o=ur>0&&gn.length>ur?gn.slice(-ur):gn;if($o.length<gn.length)b(`[bridge:repl] Capped initial flush: ${gn.length} -> ${$o.length} (cap=${ur})`),Ye("tengu_bridge_repl_history_capped",{eligible_count:gn.length,capped_count:$o.length});let Mi=g($o);if(Mi.length>0){b(`[bridge:repl] Flushing ${Mi.length} initial message(s) via transport`);let $m=Mi.map((ml)=>({...ml,session_id:ye,historical:!0})),AM=rr.droppedBatchCount;rr.writeBatch($m).then(()=>{if(rr.droppedBatchCount>AM){b(`[bridge:repl] Initial flush dropped ${rr.droppedBatchCount-AM} batch(es) — not marking ${Mi.length} UUID(s) as flushed`);return}if(v){for(let ml of Mi)if(ml.uuid)v.add(ml.uuid)}}).catch((ml)=>b(`[bridge:repl] Initial flush failed: ${ml}`)).finally(()=>{if(ge!==rr)return;Ni(),de?.("connected")})}else Ni(),de?.("connected")}else if(!Ln.active)de?.("connected")}),rr.setOnData((ur)=>{zoe(ur,Ts,Ti,B,P,Lm)}),Sie=uM,rr.setOnClose((ur)=>{if(ge!==rr)return;uM(ur)}),!Wv&&C&&C.length>0)Ln.start();rr.connect()};if(us++,Ne){let rr=oie(a,L),ur=us;b(`[bridge:repl] CCR v2: sessionUrl=${rr} session=${L} gen=${ur}`),cie({sessionUrl:rr,ingressToken:ce,sessionId:L,initialSequenceNum:Pr}).then((gn)=>{if(_r.signal.aborted){gn.close();return}if(ur!==us){b(`[bridge:repl] CCR v2: discarding stale handshake gen=${ur} current=${us}`),gn.close();return}if(fM(gn),_e){let $o=gn.getInternalEventWriter?.(),Mi=gn.getInternalEventReaders?.();if($o&&Mi)_e($o,Mi)}},(gn)=>{if(b(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${ae(gn)}`,{level:"error"}),Ye("tengu_bridge_repl_ccr_v2_init_failed",{}),ur!==us)return;if(ut)ct.stopWork(te,ut,!1).catch(($o)=>{b(`[bridge:repl] stopWork after v2 init failure: ${ae($o)}`)}),ut=null,po=null;Di()})}else{let rr=sie(c,L);b(`[bridge:repl] Ingress URL: ${rr}`),b(`[bridge:repl] Creating HybridTransport: session=${L}`);let ur=Zt??"";fM(aie(new jN(new URL(rr),{Authorization:`Bearer ${ur}`,"anthropic-version":"2023-06-01"},L,()=>({Authorization:`Bearer ${$a()??ur}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{de?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),Di()}})))}}};OYe(wie);let qv=U?setInterval(()=>{if(Nr)return;tr(t,{sessionId:ye,environmentId:te,source:"repl"})},3600000):null;qv?.unref?.();let pM=y().session_keepalive_interval_v2_ms,Gv=pM>0?setInterval(()=>{if(!ge)return;b("[bridge:repl] keep_alive sent"),ge.write({type:"keep_alive"}).catch((L)=>{b(`[bridge:repl] keep_alive write failed: ${ae(L)}`)})},pM):null;Gv?.unref?.();let Vv=!1;zv=async()=>{if(Vv){b(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${te} session=${ye}`);return}Vv=!0,qe?.();let L=Date.now();if(b(`[bridge:repl] Teardown starting: env=${te} session=${ye} workId=${ut??"none"} transportState=${ge?.getStateLabel()??"null"}`),qv!==null)clearInterval(qv);if(Gv!==null)clearInterval(Gv);if(dM)process.off("SIGUSR2",dM);if(_r.abort(),b("[bridge:repl] Teardown: poll loop aborted"),ge){let je=ge.getLastSequenceNum();if(je>Pr)Pr=je}if(U){ge=null,Ln.drop(),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),b(`[bridge:repl] Teardown (perpetual): leaving env=${te} session=${ye} alive on server, duration=${Date.now()-L}ms`);return}let ce=ge;if(ge=null,Ln.drop(),ce)ce.write(tM(ye));let lt=ut?ct.stopWork(te,ut,!0).then(()=>{b("[bridge:repl] Teardown: stopWork completed")}).catch((je)=>{b(`[bridge:repl] Teardown stopWork failed: ${ae(je)}`)}):Promise.resolve();await Promise.all([lt,f(ye)]),ce?.close(),b("[bridge:repl] Teardown: transport closed"),await ct.deregisterEnvironment(te).catch((je)=>{b(`[bridge:repl] Teardown deregister failed: ${ae(je)}`)}),await Xe(t),b(`[bridge:repl] Teardown complete: env=${te} duration=${Date.now()-L}ms`)},b(`[bridge:repl] Ready: env=${te} session=${ye}`),de?.("ready");let Fm={get bridgeSessionId(){return ye},outboundOnly:!1,get environmentId(){return te},getLastSequenceNum(){return Fm.getSSESequenceNum()},flush(){return ge?.flush()??Promise.resolve()},getSSESequenceNum(){let L=ge?.getLastSequenceNum()??0;return Math.max(Pr,L)},sessionIngressUrl:c,writeMessages(L){let ce=L.filter((Ne)=>eM(Ne)&&!Ri.has(Ne.uuid)&&!Ts.has(Ne.uuid)&&!Ti.has(Ne.uuid));if(ce.length===0)return;if(!lp)for(let Ne of ce){let Zt=joe(Ne);if(Zt!==void 0&&Ft?.(Zt,ye)){lp=!0;break}}if(Ln.enqueue(...ce)){b(`[bridge:repl] Queued ${ce.length} message(s) during initial flush`);return}if(!ge){let Ne=ce.map((Zt)=>Zt.type).join(",");b(`[bridge:repl] Transport not configured, dropping ${ce.length} message(s) [${Ne}] for session=${ye}`,{level:"warn"});return}for(let Ne of ce)Ts.add(Ne.uuid);b(`[bridge:repl] Sending ${ce.length} message(s) via transport`);let je=g(ce).map((Ne)=>({...Ne,session_id:ye}));ge.writeBatch(je)},writeSdkMessages(L){let ce=L.filter((je)=>!je.uuid||!Ts.has(je.uuid));if(ce.length===0)return;if(!ge){b(`[bridge:repl] Transport not configured, dropping ${ce.length} SDK message(s) for session=${ye}`,{level:"warn"});return}for(let je of ce)if(je.uuid)Ts.add(je.uuid);let lt=ce.map((je)=>({...je,session_id:ye}));ge.writeBatch(lt)},sendControlRequest(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_request");return}let ce={...L,session_id:ye};ge.write(ce),b(`[bridge:repl] Sent control_request request_id=${L.request_id}`)},sendControlResponse(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_response");return}let ce={...L,session_id:ye};ge.write(ce),b("[bridge:repl] Sent control_response")},sendControlCancelRequest(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let ce={type:"control_cancel_request",request_id:L,session_id:ye};ge.write(ce),b(`[bridge:repl] Sent control_cancel_request request_id=${L}`)},reportMetadata(L){ge?.reportMetadata(L)},sendResult(){if(!ge){b(`[bridge:repl] sendResult: skipping, transport not configured session=${ye}`);return}ge.write(tM(ye)),b(`[bridge:repl] Sent result for session=${ye}`)},async subscribePR(L,ce,lt){let je=`${L}#${ce}`,Ne=lr.get(je);if(lt)lr.set(je,{agentId:lt,repo:L,prNumber:ce});let Zt=await Uv("subscribe",ye,L,ce,a,u,m);if(Zt)Fn.add(je);else if(lt)if(Ne)lr.set(je,Ne);else lr.delete(je);return Zt},async unsubscribePR(L,ce){let lt=await Uv("unsubscribe",ye,L,ce,a,u,m);if(lt){let je=`${L}#${ce}`;Fn.delete(je),lr.delete(je)}return lt},async subscribeSlackThread(L,ce){let lt=await Fv("subscribe",ye,L,ce,a,u,m);if(lt)Rs.add(`${L}/${ce}`);return lt},async unsubscribeSlackThread(L,ce){let lt=await Fv("unsubscribe",ye,L,ce,a,u,m);if(lt)Rs.delete(`${L}/${ce}`);return lt},getPRWebhookTargets(){return[...lr.values()]},async teardown(){xie(),await zv?.(),b("[bridge:repl] Torn down"),Ye("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return Fm.teardown()}},xie=Vi(Fm);return Fm}async function OYe({api:e,getCredentials:t,signal:r,onStateChange:n,onWorkReceived:s,onEnvironmentLost:o,getWsState:i,isAtCapacity:a,capacitySignal:c,onFatalError:l,getPollIntervalConfig:u=()=>cg,getHeartbeatInfo:p,onHeartbeatFatal:f}){b(`[bridge:repl] Starting work poll loop for env=${t().environmentId}`);let g=0,h=null,m=null,y=0,w=0,C=!1;while(!r.aborted){let{environmentId:v,environmentSecret:B}=t(),P=u();try{let R=await e.pollForWork(v,B,r,P.reclaim_older_than_ms);if(w=0,g>0)b(`[bridge:repl] Poll recovered after ${g} consecutive error(s)`),g=0,h=null,m=null,y=0,n?.("ready");if(!R){let Y=C;if(C=!1,a?.()&&c&&!Y){let he=P.poll_interval_ms_at_capacity;if(P.non_exclusive_heartbeat_interval_ms>0&&p){Ye("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:P.non_exclusive_heartbeat_interval_ms});let Ae=he>0?Date.now()+he:null,ne=!1,Pe=0;while(!r.aborted&&a()&&(Ae===null||Date.now()<Ae)){let M=u();if(M.non_exclusive_heartbeat_interval_ms<=0)break;let yt=p();if(!yt)break;let ie=c();try{await e.heartbeatWork(yt.environmentId,yt.workId,yt.sessionToken)}catch(de){if(b(`[bridge:repl:heartbeat] Failed: ${ae(de)}`),de instanceof cs){if(ie.cleanup(),Ye("tengu_bridge_heartbeat_error",{status:de.status,error_type:VF(de.status===401||de.status===403?"auth_failed":"fatal")}),f)f(de),b(`[bridge:repl:heartbeat] Fatal (status=${de.status}), work state cleared — fast-polling for re-dispatch`);else ne=!0;break}}Pe++,await Mr(M.non_exclusive_heartbeat_interval_ms,ie.signal),ie.cleanup()}let vt=ne?"error":r.aborted?"shutdown":!a()?"capacity_changed":Ae!==null&&Date.now()>=Ae?"poll_due":"config_disabled";if(Ye("tengu_bridge_heartbeat_mode_exited",{reason:zl(vt),heartbeat_cycles:Pe}),!ne){if(vt==="poll_due")b(`[bridge:repl] Heartbeat poll_due after ${Pe} cycles — falling through to pollForWork`);continue}}let He=he>0?he:P.non_exclusive_heartbeat_interval_ms;if(He>0){let Ae=c(),ne=Date.now();await Mr(He,Ae.signal),Ae.cleanup();let Pe=Date.now()-ne-He;if(Pe>60000)b(`[bridge:repl] At-capacity sleep overran by ${Math.round(Pe/1000)}s — process suspension detected, forcing one fast-poll cycle`),Ye("tengu_bridge_repl_suspension_detected",{overrun_ms:Pe}),C=!0}}else await Mr(P.poll_interval_ms_not_at_capacity,r);continue}let V;try{V=nie(R.secret)}catch(Y){b(`[bridge:repl] Failed to decode work secret: ${ae(Y)}`),Ye("tengu_bridge_repl_work_secret_failed",{}),await e.stopWork(v,R.id,!1).catch(()=>{});continue}b(`[bridge:repl] Acknowledging workId=${R.id}`);try{await e.acknowledgeWork(v,R.id,V.session_ingress_token)}catch(Y){b(`[bridge:repl] Acknowledge failed workId=${R.id}: ${ae(Y)}`)}if(R.data.type==="healthcheck"){b("[bridge:repl] Healthcheck received");continue}if(R.data.type==="session"){let Y=R.data.id;try{On(Y,"session_id")}catch{b(`[bridge:repl] Invalid session_id in work: ${Y}`);continue}s(Y,V.session_ingress_token,R.id,V.use_code_sessions===!0),b("[bridge:repl] Work accepted, continuing poll loop")}}catch(R){if(r.aborted)break;if(R instanceof cs&&R.status===404&&o){let M=t().environmentId;if(v!==M){b(`[bridge:repl] Stale poll error for old env=${v}, current env=${M} — skipping onEnvironmentLost`),g=0,h=null;continue}if(w++,b(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${w}/3)`),Ye("tengu_bridge_repl_env_lost",{attempt:w}),w>3){b("[bridge:repl] Environment re-registration limit reached (3), giving up"),n?.("failed","Environment deleted and re-registration limit reached"),l?.();break}n?.("reconnecting","environment lost, recreating session");let yt=await o();if(r.aborted)break;if(yt){g=0,h=null,n?.("ready"),b(`[bridge:repl] Re-registered environment: ${yt.environmentId}`);continue}n?.("failed","Environment deleted and re-registration failed"),l?.();break}if(R instanceof cs){let M=Nv(R.errorType),yt=Foe(R);if(b(`[bridge:repl] Fatal poll error: ${R.message} (status=${R.status}, type=${R.errorType??"unknown"})${yt?" (suppressed)":""}`),Ye("tengu_bridge_repl_fatal_error",{status:R.status,error_type:R.errorType}),H(M?"info":"error","bridge_repl_fatal_error",{status:R.status,error_type:R.errorType}),!yt)n?.("failed",M?"Remote Control session expired.":R.message);l?.();break}let V=Date.now();if(m!==null&&V-m>Math.max(mie,y)*2)b(`[bridge:repl] Detected system sleep (${Math.round((V-m)/1000)}s gap), resetting poll error budget`),H("info","bridge_repl_poll_sleep_detected",{gapMs:V-m}),g=0,h=null;if(m=V,g++,h===null)h=V;let Y=V-h,he=Poe(R),He=Doe(R),Ae=i?.()??"unknown";if(b(`[bridge:repl] Poll error (attempt ${g}, elapsed ${Math.round(Y/1000)}s, ws=${Ae}): ${He}`),Ye("tengu_bridge_repl_poll_error",{status:he,consecutiveErrors:g,elapsedMs:Y}),g===1)n?.("reconnecting",He);if(Y>=hie){b(`[bridge:repl] Poll failures exceeded ${hie/1000}s (${g} errors), giving up`),H("info","bridge_repl_poll_give_up"),Ye("tengu_bridge_repl_poll_give_up",{consecutiveErrors:g,elapsedMs:Y,lastStatus:he}),n?.("failed","connection to server lost");break}let ne=Noe(R),Pe=Math.min(bie*2**(g-1),mie),vt=Eie(ne!==void 0?Math.max(Pe,Math.min(ne,NYe)):Pe);if(y=vt,u().non_exclusive_heartbeat_interval_ms>0){let M=p?.();if(M)try{await e.heartbeatWork(M.environmentId,M.workId,M.sessionToken)}catch{}}await Mr(vt,r)}}b(`[bridge:repl] Work poll loop ended (aborted=${r.aborted}) env=${t().environmentId}`)}function UYe(e,t){return e?.includes("_staging_")===!0||t?.includes("staging")===!0}function FYe(e,t){return e?.includes("_local_")===!0||t?.includes("localhost")===!0}function LYe(e,t){if(FYe(e,t))return"http://localhost:4000";if(UYe(e,t))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function vie(e,t,r){let{toCompatSessionId:n}=Tie(Qoe),s=n(e),i=`${LYe(s,t)}/code/${s}`;return r?`${i}?${new URLSearchParams(r)}`:i}et();async function Cie(e){let{dir:t,registrationDir:r,name:n="Assistant",workerType:s="claude_code_assistant",branch:o="",gitRepoUrl:i=null,getAccessToken:a,getTrustedDeviceToken:c,baseUrl:l,orgUUID:u,model:p,perpetual:f=!1,initialSSESequenceNum:A,onConflict:g}=e,h=e.onAuth401;if(!a())return b("[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 m=l,y={baseUrl:l,getAccessToken:a,orgUUID:u,model:p},w=[],C=null,v=[],B=null,P=[],R=null,V=!1,Y=null,he={detail:null},He=$Ye(),Ae=()=>Iie({dir:t,registrationDir:r,machineName:He,branch:o,gitRepoUrl:i,title:n,baseUrl:l,sessionIngressUrl:m,workerType:s,getAccessToken:a,getTrustedDeviceToken:c,onAuth401:h,onInitError:console.error,createSession:({environmentId:ie,title:de,signal:Ft})=>lie({environmentId:ie,title:de,tags:["claude-code-assistant"],signal:Ft},y),archiveSession:(ie)=>uie(ie,y),perpetual:f,initialSSESequenceNum:A,getCurrentTitle:()=>n,getPollIntervalConfig:()=>({...cg,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(ie){let de=Z4(ie);if(!de)return;w.push({content:de.content,uuid:de.uuid}),C?.(),C=null},onInterrupt(){v.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),B?.(),B=null},onSetModel(ie){v.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:ie}}),B?.(),B=null},onSetMaxThinkingTokens(ie){v.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:ie}}),B?.(),B=null},onPermissionResponse(ie){P.push(ie),R?.(),R=null},onStateChange(ie,de){if(Y?.(ie,de),ie==="failed")he.detail=de??"unknown failure",V=!0,C?.(),B?.(),R?.()}}),ne=await Ae();if(!ne&&g&&he.detail?.includes("409")){if(await g({machineName:He,message:he.detail})==="takeover")V=!1,he.detail=null,ne=await Ae()}if(!ne){let ie=he.detail??"initBridgeCore returned null (env registration or session creation failed)";return b(`[bridge:daemon] connectRemoteControl failed: ${ie}`),{ok:!1,error:{kind:he.detail?.includes("409")?"conflict":he.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:ie}}}async function*Pe(){while(!V){while(w.length>0)if(yield w.shift(),V)return;await new Promise((ie)=>{C=ie})}}async function*vt(){while(!V){while(v.length>0)if(yield v.shift(),V)return;await new Promise((ie)=>{B=ie})}}async function*M(){while(!V){while(P.length>0)if(yield P.shift(),V)return;await new Promise((ie)=>{R=ie})}}return{ok:!0,handle:{get sessionUrl(){return vie(ne.bridgeSessionId,m)},get environmentId(){return ne.environmentId},get bridgeSessionId(){return ne.bridgeSessionId},getSSESequenceNum(){return ne.getSSESequenceNum()},hasPendingPrompts(){return w.length>0},write(ie){ne.writeSdkMessages([ie])},sendResult(){ne.sendResult()},sendControlRequest(ie){ne.sendControlRequest(ie)},sendControlResponse(ie){ne.sendControlResponse(ie)},sendControlCancelRequest(ie){ne.sendControlCancelRequest(ie)},inboundPrompts:Pe,controlRequests:vt,permissionResponses:M,onStateChange(ie){Y=ie},async teardown(){V=!0,C?.(),B?.(),R?.(),await ne.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var zYe=1000,HYe=1e4,qYe=5000,GYe=60000,lM=3;function VYe(e){if((e.type==="user"||e.type==="assistant")&&e.parent_tool_use_id!==null)return!1;if(e.type==="user"){let t=e.message.content;if(!(Array.isArray(t)&&t.some((n)=>n.type==="tool_result")))return!1}return!0}function WYe(e,t,r){let n=e.response?.request_id;if(!n)return null;let s=t.get(n);if(!s)return n;t.delete(n),r(n);let o=e.response;if(o.subtype==="success"&&bM(o.response))s(o.response);else s({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}function jv(e){if(!e){ln("assistant_worker_start");return}if(e.kind==="auth"||e.kind==="conflict")Us("assistant_worker_start",e.kind);else Zr("assistant_worker_start",e.kind)}async function JYe(e){let{bridge:t,sandboxed:r=!1,scheduling:n,buildQueryOptions:s,canUseToolPreFilter:o,onPermissionResolved:i,transformOutbound:a,stateAdapter:c,initialPrompt:l,userIdleMs:u=300000,signal:p,log:f=()=>{}}=e;f("─── worker start ───");let A=await c?.load(),g={...t,initialSSESequenceNum:t.initialSSESequenceNum??A?.lastSSESequenceNum};if(!g.getAccessToken()){let re={kind:"auth",detail:"getAccessToken returned empty"};return jv(re),{ok:!1,error:re}}let h=await Cie(g);if(!h.ok)return f(`bridge connection failed: ${h.error.kind} — ${h.error.detail}`),jv(h.error),{ok:!1,error:h.error};let m=h.handle;f(`bridge connected url=${m.sessionUrl} env=${m.environmentId}`);let y=A?.claudeSessionId,w=m.bridgeSessionId,C=[],v=null,B=!1,P=null,R=0,V=!0,Y=0,he=Promise.resolve();function He(){if(!c)return;let re={claudeSessionId:y,lastSSESequenceNum:m.getSSESequenceNum(),bridgeSessionId:m.bridgeSessionId};he=he.then(()=>c.save(re).catch((ct)=>{f(`stateAdapter.save threw: ${ct}`)}))}function Ae(){if(C.length>0||m.hasPendingPrompts()){f("persist skipped: prompt queued");return}He()}He();let ne=new AbortController,Pe=new Map,vt=null;function M(){return vt??=(async()=>{Ae();for(let re of Pe.keys())m.sendControlCancelRequest(re);Pe.clear(),await m.teardown(),await he})()}if(p.addEventListener("abort",()=>{ne.abort(),M().catch((re)=>f(`teardown threw: ${re}`))}),p.aborted){await M();let re={kind:"unknown",detail:"aborted before start"};return jv(re),{ok:!1,error:re}}let yt="connected";m.onStateChange((re,ct)=>{if(f(`bridge state=${re} detail=${ct??""}`),yt=re,re==="ready"&&m.bridgeSessionId!==w)w=m.bridgeSessionId,He();else if(re==="connected")Ae();if(re==="failed")f(`bridge failed: ${ct??"unknown"}`),ne.abort(),M().catch((gt)=>f(`teardown threw: ${gt}`))});let ie=n?.horizonMs??600000,de=n?.leadMs??qYe,Ft=null,Ct=!1,ee=!1,U="";async function we(){if(!n)return;let re=await W4(n.dir).catch((gt)=>{return f(`computeCronHorizon threw: ${gt}`),{nextFire:null,hasOverdue:!1}});Ft=re.nextFire,ee=re.hasOverdue;let ct=re.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(re.nextFire).toISOString()} hasOverdue=${re.hasOverdue}`;if(ct!==U)U=ct,f(ct)}let _e;if(n)await we(),_e=setInterval(we,HYe),_e.unref?.();function qe(re){C.push({type:"user",message:{role:"user",content:re},parent_tool_use_id:null,session_id:""}),v?.(),v=null}async function Kt(re,ct,gt){if(o){let lr=await o(re,ct,gt);if(lr)return i?.(re,lr),lr}if(yt!=="connected"){f(`permission denied — bridge state=${yt}, request would drop`);let lr={behavior:"deny",message:`Cannot request permission: remote control is ${yt}. Try again in a moment.`};return i?.(re,lr),lr}let te=jYe();f(`permission request tool=${re} req=${te}`);let{signal:Qs,suggestions:Ua,blockedPath:Qi,toolUseID:ye}=gt;m.sendControlRequest({type:"control_request",request_id:te,request:{subtype:"can_use_tool",tool_name:re,display_name:EM(re),input:ct,tool_use_id:ye,...Ua&&{permission_suggestions:Ua},...Qi&&{blocked_path:Qi},..."decisionReason"in gt&&gt.decisionReason&&{decision_reason:gt.decisionReason},..."agentID"in gt&&gt.agentID&&{agent_id:gt.agentID}}});let Fn;try{let lr=await new Promise((Ri,Ts)=>{Pe.set(te,Ri),Fn=setTimeout((Ti,_r,ge,us,Pr)=>{if(Ti.delete(_r))ge(`permission timeout req=${_r}`),us.sendControlCancelRequest(_r),Pr({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},GYe,Pe,te,f,m,Ri),Fn.unref?.(),Qs.addEventListener("abort",()=>{if(Pe.delete(te))m.sendControlCancelRequest(te);Ts(Error("aborted"))},{once:!0})});f(`permission response req=${te} behavior=${lr.behavior}`);let Rs=lr.behavior==="allow"?{behavior:"allow",updatedInput:lr.updatedInput,updatedPermissions:lr.updatedPermissions}:{behavior:"deny",message:lr.message??"Denied via remote control"};return i?.(re,Rs),Rs}finally{if(Fn)clearTimeout(Fn);Pe.delete(te)}}let tr=!1;async function Xe(){if(P!==null||tr||ne.signal.aborted)return;if(tr=!0,B=!1,C.length>0)V=!1;async function*re(){while(!B){while(C.length>0)if(V=!1,yield C.shift(),B)return;await new Promise((te)=>{v=te})}}f(`spawning query resume=${y??"<fresh>"}`);let ct={assistant:!0,cwd:t.dir,resume:y,stderr:(te)=>f(`[child] ${te.trimEnd()}`),canUseTool:Kt},gt;try{if(gt=await s(ct),r)gt={...gt,env:{...gt.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(te){if(f(`buildQueryOptions threw: ${te}`),tr=!1,Y++,Y>=lM)f(`${Y} consecutive buildQueryOptions failures — dropping ${C.length} queued input(s)`),C.length=0;else if(C.length>0&&!ne.signal.aborted)Xe();return}if(ne.signal.aborted){tr=!1;return}try{P=UJ({prompt:re(),options:gt})}finally{tr=!1}(async()=>{try{f("output pump started");for await(let te of P){if(te.type==="system"&&te.subtype==="init"){if(te.session_id!==y)y=te.session_id,Ae()}if(te.type==="result")V=!0,Y=0,Ct=!0,Ae();if(!VYe(te))continue;let Qs=a?a(te):te;if(Qs===null)continue;m.write(Qs)}}catch(te){f(`query threw: ${te}`),Y++}finally{f("output pump ended"),P=null;for(let te of Pe.keys())m.sendControlCancelRequest(te);if(Pe.clear(),C.length>0&&!ne.signal.aborted)if(Y>=lM)f(`${Y} consecutive crashes — dropping ${C.length} queued input(s)`),C.length=0;else Xe()}})()}let Un=setInterval(()=>{let re=Date.now(),ct=Ft!==null&&Ft-re<ie;if(P===null){let gt=Ft!==null&&Ft-re<de;if((gt||ee&&!Ct)&&Y<lM&&!ne.signal.aborted)f(gt?`cron due in ${Ft-re}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),Xe();return}if(B)return;if(!V||C.length>0)return;if(re-R<u)return;if(ct)return;if(ee&&!Ct)return;f("idle conditions met → closing input gen"),Ae(),B=!0,v?.(),v=null},zYe);if(Un.unref?.(),l)f("initialPrompt → injecting"),R=Date.now(),qe(l),Xe();let ls=(async()=>{if(await Promise.all([(async()=>{for await(let re of m.inboundPrompts()){if(ne.signal.aborted)return;if(f("bridge prompt received"),R=Date.now(),re.uuid)m.write({type:"user",uuid:re.uuid,session_id:"",message:{role:"user",content:re.content},parent_tool_use_id:null});qe(re.content),Xe()}})(),(async()=>{for await(let re of m.controlRequests()){if(ne.signal.aborted)return;switch(re.request.subtype){case"interrupt":f("bridge interrupt"),P?.interrupt();break;case"set_model":f(`bridge setModel=${re.request.model??"<default>"}`),P?.setModel(re.request.model);break;case"set_max_thinking_tokens":f(`bridge setMaxThinkingTokens=${re.request.max_thinking_tokens}`),P?.setMaxThinkingTokens(re.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let re of m.permissionResponses()){if(ne.signal.aborted)return;let ct=WYe(re,Pe,m.sendControlCancelRequest);if(ct)f(`permission response for unknown req=${ct} (stale)`)}})()]),clearInterval(Un),_e)clearInterval(_e);P?.close(),await M(),f("─── worker stop ───")})(),at={get sessionUrl(){return m.sessionUrl},get bridgeSessionId(){return m.bridgeSessionId},get claudeSessionId(){return y},pushPrompt(re){R=Date.now(),qe(re),Xe()},async interrupt(){await P?.interrupt()},done:ls,teardown:M,[Symbol.asyncDispose]:M};return jv(null),{ok:!0,handle:at}}process.env.NoDefaultCurrentDirectoryInExePath="1";export{JYe as runAssistantWorker};
190
+ `)}else b(`SSETransport: Ignoring client_event with no type in payload: event_id=${r.event_id}`);this.onEventCallback?.(r)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let e=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=e;let t=e-this.reconnectStartTime;if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let s=this.refreshHeaders();Object.assign(this.headers,s),b("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let r=Math.min(aYe*Math.pow(2,this.reconnectAttempts-1),cYe),n=Math.max(0,r+r*0.25*(2*Math.random()-1));b(`SSETransport: Reconnecting in ${Math.round(n)}ms (attempt ${this.reconnectAttempts}, ${Math.round(t/1000)}s elapsed)`),H("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},n)}onLivenessTimeout=()=>{this.livenessTimer=null,b("SSETransport: Liveness timeout, reconnecting",{level:"error"}),H("error","cli_sse_liveness_timeout"),this.connectErrorsSeen.add("liveness_timeout"),this.onDiagnostic?.(`SSE liveness timeout — no frame in ${Xoe/1000}s, reconnecting`),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,Xoe)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(e){let t=this.getAuthHeaders();if(Object.keys(t).length===0){b("SSETransport: No session token available for POST"),H("warn","cli_sse_post_no_token");return}let r={...t,"Content-Type":"application/json","anthropic-version":"2023-06-01","anthropic-client-platform":Oa(),"User-Agent":Lo()};b(`SSETransport: POST body keys=${Object.keys(e).join(",")}`);for(let n=1;n<=Um;n++){try{let o=await Ar.post(this.postUrl,e,{headers:r,validateStatus:fYe});if(o.status===200||o.status===201){b(`SSETransport: POST success type=${e.type}`);return}if(b(`SSETransport: POST ${o.status} body=${Ee(o.data).slice(0,200)}`),o.status>=400&&o.status<500&&o.status!==429){b(`SSETransport: POST returned ${o.status} (client error), not retrying`),H("warn","cli_sse_post_client_error",{status:o.status});return}b(`SSETransport: POST returned ${o.status}, attempt ${n}/${Um}`),H("warn","cli_sse_post_retryable_error",{status:o.status,attempt:n})}catch(o){b(`SSETransport: POST error: ${ae(o)}, attempt ${n}/${Um}`),H("warn","cli_sse_post_network_error",{attempt:n})}if(n===Um){b(`SSETransport: POST failed after ${Um} attempts, continuing`),H("warn","cli_sse_post_retries_exhausted");return}let s=Math.min(uYe*Math.pow(2,n-1),dYe);await Mr(s)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(e){this.onData=e}setOnClose(e){this.onCloseCallback=e}setOnEvent(e){this.onEventCallback=e}setOnDiagnostic(e){this.onDiagnostic=e}setEventFilter(e){this.eventFilter=e}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 gYe(e){let t=e.pathname;if(t.endsWith("/stream"))t=t.slice(0,-7);return`${e.protocol}//${e.host}${t}`}et();xt();Jn();go();et();xt();var eie="DEVICE_ATTESTATION_STATUS_",tie=["UNSPECIFIED","ABSENT","VERIFIED","VERIFIED_BY_GATE","INVALID","UNCHECKED"];function mYe(e){if(e===void 0||e===null)return"UNSPECIFIED";if(typeof e==="number")return tie[e]??"UNSPECIFIED";if(typeof e!=="string")return"UNSPECIFIED";let t=e.startsWith(eie)?e.slice(eie.length):e;if(tie.includes(t))return t;return"UNSPECIFIED"}function hYe(e,t){if(e==="VERIFIED")return!0;if(e==="VERIFIED_BY_GATE")return t==="VERIFIED_BY_GATE";return!1}var yYe={enforce:!1,acceptLevel:"VERIFIED",acceptStatuses:new Set},bYe=["UNSPECIFIED","ABSENT","INVALID","UNCHECKED"],vRt=N(()=>d.object({accept_level:d.enum(["VERIFIED","VERIFIED_BY_GATE"]).default("VERIFIED"),accept_statuses:d.array(d.enum(bYe)).default([])}));var EYe;var IYe;function rie(e){let t=typeof e.payload?.type==="string"?e.payload.type:e.event_type,r=t==="user"||t==="control_response",n=mYe(e.device_attestation_status),s=EYe?.()??yYe;if(hYe(n,s.acceptLevel)){if(r)ln("bridge_event_attestation");return!1}if(!s.enforce){if(n==="UNSPECIFIED")return!1;if(r)b(`[bridge:attestation] accepting unverified ${t} event_id=${e.event_id} status=${n}`,{level:"info"}),Us("bridge_event_attestation",`${n.toLowerCase()}_${t}`);return!1}let o=s.acceptStatuses.has(n);if(r){let i=`${n.toLowerCase()}_${t}`;if(b(`[bridge:attestation] ${o?"accepting (config exception)":"DROPPING"} unverified ${t} event_id=${e.event_id} status=${n}`,{level:o?"info":"warn"}),o)Us("bridge_event_attestation",i);else{Zr("bridge_event_attestation",i);try{IYe?.({status:n,payloadType:t})}catch(a){b(`[bridge:attestation] drop notifier threw: ${ae(a)}`,{level:"error"})}}}return!o}rt();function nie(e){let t=Buffer.from(e,"base64url").toString("utf-8"),r=Gt(t);if(!r||typeof r!=="object"||!("version"in r)||r.version!==1)throw Error(`Unsupported work secret version: ${r&&typeof r==="object"&&"version"in r?r.version:"unknown"}`);let n=r;if(typeof n.session_ingress_token!=="string"||n.session_ingress_token.length===0)throw Error("Invalid work secret: missing or empty session_ingress_token");if(typeof n.api_base_url!=="string")throw Error("Invalid work secret: missing api_base_url");return r}function sie(e,t){let r=e.includes("localhost")||e.includes("127.0.0.1"),n=r?"ws":"wss",s=r?"v2":"v1",o=e.replace(/^https?:\/\//,"").replace(/\/+$/,"");return`${n}://${o}/${s}/session_ingress/ws/${t}`}function iM(e,t){if(e===t)return!0;let r=e.slice(e.lastIndexOf("_")+1),n=t.slice(t.lastIndexOf("_")+1);return r.length>=4&&r===n}function oie(e,t){return`${e.replace(/\/+$/,"")}/v1/code/sessions/${t}`}async function iie(e,t){let r=await Ar.post(`${e}/worker/register`,{},{headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json","anthropic-version":"2023-06-01"},timeout:1e4}),n=r.data?.worker_epoch,s=typeof n==="string"?Number(n):n;if(typeof s!=="number"||!Number.isFinite(s)||!Number.isSafeInteger(s))throw Error(`registerWorker: invalid worker_epoch in response: ${Ee(r.data)}`);return s}function aie(e){return{write:(t)=>e.write(t),writeBatch:(t)=>e.writeBatch(t),close:()=>e.close(),isConnectedStatus:()=>e.isConnectedStatus(),getStateLabel:()=>e.getStateLabel(),setOnData:(t)=>e.setOnData(t),setOnClose:(t)=>e.setOnClose(t),setOnConnect:(t)=>e.setOnConnect(t),connect:()=>void e.connect(),getLastSequenceNum:()=>0,get droppedBatchCount(){return e.droppedBatchCount},reportState:()=>{},reportMetadata:()=>{},reportDelivery:()=>{},flush:()=>Promise.resolve()}}async function cie(e){let{sessionUrl:t,ingressToken:r,sessionId:n,initialSequenceNum:s,getAuthToken:o}=e,i;if(o)i=()=>{let h=o();if(!h)return{};return{Authorization:`Bearer ${h}`}};else Rg(r);let a=e.epoch??await iie(t,r);b(`[bridge:repl] CCR v2: worker sessionId=${n} epoch=${a}${e.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let c=new URL(t);c.pathname=c.pathname.replace(/\/$/,"")+"/worker/events/stream";let l=new oM(c,{},n,void 0,s,i),u,p=new sM(l,new URL(t),{getAuthHeaders:i,heartbeatIntervalMs:e.heartbeatIntervalMs,heartbeatJitterFraction:e.heartbeatJitterFraction,onEpochMismatch:()=>{b("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{p.close(),l.close(),u?.(4090)}catch(h){b(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${ae(h)}`,{level:"error"})}throw Error("epoch superseded")}});l.setOnEvent((h)=>{p.reportDelivery(h.event_id,"received"),p.reportDelivery(h.event_id,"processed")}),l.setEventFilter(rie);let f,A=!1,g=!1;return{write(h){return p.writeEvent(h)},async writeBatch(h){for(let m of h){if(g)break;await p.writeEvent(m)}},close(){g=!0,p.close(),l.close()},isConnectedStatus(){return A},getStateLabel(){if(l.isClosedStatus())return"closed";if(l.isConnectedStatus())return A?"connected":"init";return"connecting"},setOnData(h){l.setOnData(h)},setOnClose(h){u=h,l.setOnClose((m)=>{p.close(),h(m??4092)})},setOnConnect(h){f=h},getLastSequenceNum(){return l.getLastSequenceNum()},droppedBatchCount:0,reportState(h,m){p.reportState(h,m)},reportMetadata(h){p.reportMetadata(h)},reportDelivery(h,m){p.reportDelivery(h,m)},flush(){return p.flush()},getInternalEventWriter(){return(h,m,y)=>p.writeInternalEvent(h,m,y)},getInternalEventReaders(){return{readMain:()=>p.readInternalEvents(),readSubagents:()=>p.readSubagentInternalEvents()}},connect(){if(!e.outboundOnly)l.connect();p.initialize(a).then(()=>{A=!0,b(`[bridge:repl] v2 transport ready for writes (epoch=${a}, sse=${l.isConnectedStatus()?"open":"opening"})`),f?.()},(h)=>{b(`[bridge:repl] CCR v2 initialize failed: ${ae(h)}`,{level:"error"}),p.close(),l.close(),u?.(4091)})}}}go();et();xt();var vYe="2023-06-01",CYe="ccr-byoc-2025-07-29";async function lie({environmentId:e,title:t,tags:r,signal:n},s){let{baseUrl:o,getAccessToken:i,orgUUID:a,model:c}=s,l=i();if(!l)return b("[bridge] No access token for session creation"),null;let u=`${o}/v1/sessions`,p;try{p=await Ar.post(u,{title:t,events:[],session_context:{sources:[],outcomes:[],model:c},...{environment_id:e},source:"remote-control",...r!==void 0&&{tags:r}},{headers:Lv(l,{orgUUID:a}),signal:n,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] Session creation request failed: ${ae(A)}`),null}if(p.status!==200&&p.status!==201){let A=gl(p.data);return b(`[bridge] Session creation failed with status ${p.status}${A?`: ${A}`:""}`),null}let f=p.data;if(!f||typeof f!=="object"||!("id"in f)||typeof f.id!=="string")return b("[bridge] No session ID in response"),null;return f.id}async function uie(e,t){let{baseUrl:r,getAccessToken:n,orgUUID:s}=t,o=n();if(!o){b("[bridge] No access token for session archive");return}let i=`${r}/v1/sessions/${e}/archive`;b(`[bridge] Archiving session ${e}`);try{let a=await Ar.post(i,{},{headers:Lv(o,{orgUUID:s}),timeout:1e4,validateStatus:(c)=>c<500});if(a.status===200||a.status===409)b(`[bridge] Session ${e} archived successfully`);else{let c=gl(a.data);b(`[bridge] Session archive failed with status ${a.status}${c?`: ${c}`:""}`)}}catch(a){b(`[bridge] Session archive request failed: ${ae(a)}`)}}async function Uv(e,t,r,n,s,o,i){let a=e==="subscribe"?"bridge_pr_subscribe":"bridge_pr_unsubscribe",c=o();if(!c)return b(`[bridge] No access token for ${e}-pr`),Zr(a,"no_token"),!1;let l=`${s}/v1/code/github/${e}-pr`,u={session_id:ip(t),repo:r,pr_number:n},p;try{p=await Ar.post(l,u,{headers:Lv(c,{trustedDeviceToken:await i?.()}),timeout:1e4,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] ${e}-pr request failed: ${ae(A)}`),Zr(a,"request_failed"),!1}if(!(p.status>=200&&p.status<300||p.status===409)){let A=gl(p.data);return b(`[bridge] ${e}-pr failed ${p.status}${A?`: ${A}`:""}`),Zr(a,"http_error"),!1}return b(`[bridge] ${e}-pr ${r}#${n} ok`),ln(a),!0}async function Fv(e,t,r,n,s,o,i){let a=e==="subscribe"?"bridge_slack_subscribe":"bridge_slack_unsubscribe",c=o();if(!c)return b(`[bridge] No access token for ${e}-thread`),Zr(a,"no_token"),!1;let l=`${s}/v1/code/slack/${e}-thread`,u={session_id:ip(t),channel:r,thread_ts:n},p;try{p=await Ar.post(l,u,{headers:Lv(c,{trustedDeviceToken:await i?.()}),timeout:1e4,validateStatus:(A)=>A<500})}catch(A){return b(`[bridge] ${e}-thread request failed: ${ae(A)}`),Zr(a,"request_failed"),!1}if(!(p.status>=200&&p.status<300||p.status===409)){let A=gl(p.data);return b(`[bridge] ${e}-thread failed ${p.status}${A?`: ${A}`:""}`),Zr(a,"http_error"),!1}return b(`[bridge] ${e}-thread ${r}/${n} ok`),ln(a),!0}function Lv(e,{orgUUID:t,trustedDeviceToken:r}={}){let n={Authorization:`Bearer ${e}`,"Content-Type":"application/json","anthropic-version":vYe,"anthropic-beta":CYe,"anthropic-client-platform":Oa(),"User-Agent":Lo()};if(t!==void 0)n["x-organization-uuid"]=t;if(r!==void 0)n["X-Trusted-Device-Token"]=r;return n}var bie=2000,mie=60000,hie=900000,NYe=300000,yie=3;function Eie(e){return e*(0.8+Math.random()*0.4)}var MYe=0;async function Iie(e){let{dir:t,registrationDir:r,machineName:n,branch:s,gitRepoUrl:o,title:i,baseUrl:a,sessionIngressUrl:c,workerType:l,getAccessToken:u,createSession:p,archiveSession:f,getCurrentTitle:A=()=>i,toSDKMessages:g=()=>{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:h,getTrustedDeviceToken:m,getPollIntervalConfig:y=()=>cg,initialHistoryCap:w=200,initialMessages:C,previouslyFlushedUUIDs:v,onInboundMessage:B,onPermissionResponse:P,onInterrupt:R,onSetModel:V,onSetMaxThinkingTokens:Y,onSetPermissionMode:he,onRenameSession:He,onSetColor:Ae,onFileSuggestions:ne,onReadFile:Pe,onMcpAuthenticate:vt,onMcpOauthCallbackUrl:M,onMcpReconnect:yt,onMcpStatus:ie,onStateChange:de,onUserMessage:Ft,onSessionEstablished:Ct,onInitError:ee,perpetual:U,initialSSESequenceNum:we=0,onTransportPersistenceReady:_e,onTransportPersistenceTeardown:qe}=e,Kt=++MYe,{writeBridgePointer:tr,clearBridgePointer:Xe,readBridgePointer:Un}=await Promise.resolve().then(() => (Aie(),fie)),ls=U?await Un(t):null,at=ls?.source==="repl"?ls:null;b(`[bridge:repl] initBridgeCore #${Kt} starting (initialMessages=${C?.length??0}${at?` perpetual prior=env:${at.environmentId}`:""})`);let ct=Uoe({baseUrl:a,getAccessToken:u,runnerVersion:"0.3.165",onDebug:b,onAuth401:h,getTrustedDeviceToken:m}),gt={dir:r??t,machineName:n,branch:s,gitRepoUrl:o,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:gie(),workerType:l,environmentId:gie(),reuseEnvironmentId:at?.environmentId,apiBaseUrl:a,sessionIngressUrl:c},te,Qs;try{let L=await ct.registerBridgeEnvironment(gt);te=L.environment_id,Qs=L.environment_secret}catch(L){if(Moe("registration_failed",`[bridge:repl] Environment registration failed: ${ae(L)}`),ee?.(`[bridge:repl] Environment registration failed: ${ae(L)}`),at&&L instanceof cs&&(L.status===410||L.status!==401&&Nv(L.errorType)))await Xe(t);return de?.("failed",ae(L)),null}b(`[bridge:repl] Environment registered: ${te}`),H("info","bridge_repl_env_registered"),Ye("tengu_bridge_repl_env_registered",{});async function Ua(L,ce){if(te!==L)return b(`[bridge:repl] Env mismatch (requested ${L}, got ${te}) — cannot reconnect in place`),!1;let lt=Mm(ce),je=lt===ce?[ce]:[ce,lt];for(let Ne of je)try{return await ct.reconnectSession(te,Ne),b(`[bridge:repl] Reconnected session ${Ne} in place on env ${te}`),!0}catch(Zt){b(`[bridge:repl] reconnectSession(${Ne}) failed: ${ae(Zt)}`)}return b("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let Qi=at?await Ua(at.environmentId,at.sessionId):!1;if(at&&!Qi)await Xe(t);let ye,Fn=new Set,lr=new Map,Rs=new Set;if(Qi&&at){if(ye=at.sessionId,b(`[bridge:repl] Perpetual session reused: ${ye}`),C&&v)for(let L of C)v.add(L.uuid)}else{let L=await p({environmentId:te,title:i,gitRepoUrl:o,branch:s,signal:AbortSignal.timeout(15000)});if(!L)return b("[bridge:repl] Session creation failed, deregistering environment"),ee?.("[bridge:repl] Session creation failed, deregistering environment"),Ye("tengu_bridge_repl_session_failed",{}),await ct.deregisterEnvironment(te).catch(()=>{}),de?.("failed","Session creation failed"),null;ye=L,b(`[bridge:repl] Session created: ${ye}`)}Ct?.(ye),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),H("info","bridge_repl_session_created"),Ye("tengu_bridge_repl_started",{has_initial_messages:!!(C&&C.length>0),inProtectedNamespace:PO(),...eoe()});let Ri=new Set;if(C)for(let L of C)Ri.add(L.uuid);let Ts=new Mv(2000);for(let L of Ri)Ts.add(L);let Ti=new Mv(2000),_r=new AbortController,ge=null,us=0,Pr=Qi?we:0,ut=null,po=null,cp=qoe(_r.signal),Di=cp.wake,Fa=cp.signal,Ln=new rM,lp=!Ft,La=3,mr=0,Nr=null;async function fo(){if(Nr)return Nr;Nr=Pi();try{return await Nr}finally{Nr=null}}async function Pi(){if(mr++,us++,b(`[bridge:repl] Reconnecting after env lost (attempt ${mr}/${La})`),mr>La)return b(`[bridge:repl] Environment reconnect limit reached (${La}), giving up`),!1;if(ge){let Ne=ge.getLastSequenceNum();if(Ne>Pr)Pr=Ne;qe?.(),ge.close(),ge=null}if(Di(),Ln.drop(),ut){let Ne=ut;if(await ct.stopWork(te,Ne,!1).catch(()=>{}),ut!==Ne)return b("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),mr=0,!0;ut=null,po=null}if(_r.signal.aborted)return b("[bridge:repl] Reconnect aborted by teardown"),!1;let L=te;gt.reuseEnvironmentId=L;let ce;for(let Ne=1;;Ne++)try{ce=await ct.registerBridgeEnvironment(gt);break}catch(Zt){if(Zt instanceof cs||Ne>=yie||_r.signal.aborted)return gt.reuseEnvironmentId=void 0,b(`[bridge:repl] Environment re-registration failed (attempt ${Ne}): ${ae(Zt)}`),!1;let Lm=Eie(bie*2**(Ne-1));if(b(`[bridge:repl] Environment re-registration transient failure (attempt ${Ne}/${yie}), retrying in ${Math.round(Lm)}ms: ${ae(Zt)}`),await Mr(Lm,_r.signal),_r.signal.aborted)return gt.reuseEnvironmentId=void 0,!1}if(te=ce.environment_id,Qs=ce.environment_secret,gt.reuseEnvironmentId=void 0,b(`[bridge:repl] Re-registered: requested=${L} got=${te}`),_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await ct.deregisterEnvironment(te).catch(()=>{}),!1;if(ge!==null)return b("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),mr=0,!0;if(await Ua(L,ye))return Ye("tengu_bridge_repl_reconnected_in_place",{}),mr=0,!0;if(te!==L)Ye("tengu_bridge_repl_env_expired_fresh_session",{});if(await f(ye),_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after archive, cleaning up"),await ct.deregisterEnvironment(te).catch(()=>{}),!1;let lt=A(),je=await p({environmentId:te,title:lt,gitRepoUrl:o,branch:s,signal:AbortSignal.timeout(15000)});if(!je)return b("[bridge:repl] Session creation failed during reconnection"),!1;if(_r.signal.aborted)return b("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await f(je),!1;if(ye=je,noe(ip(je)).catch(()=>{}),Ct?.(ye),Pr=0,Ti.clear(),lp=!Ft,b(`[bridge:repl] Re-created session: ${ye}`),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),v?.clear(),Fn.size>0){b(`[bridge:repl] Replaying ${Fn.size} PR subscription(s) against new session`);for(let Ne of Fn){let Zt=Ne.lastIndexOf("#");Uv("subscribe",ye,Ne.slice(0,Zt),Number(Ne.slice(Zt+1)),a,u,m)}}if(Rs.size>0){b(`[bridge:repl] Replaying ${Rs.size} Slack thread subscription(s) against new session`);for(let Ne of Rs){let Zt=Ne.indexOf("/");Fv("subscribe",ye,Ne.slice(0,Zt),Ne.slice(Zt+1),a,u,m)}}return mr=0,!0}function $a(){return u()}function Ni(){let L=Ln.end();if(L.length===0)return;if(!ge){b(`[bridge:repl] Cannot drain ${L.length} pending message(s): no transport`);return}for(let je of L)Ts.add(je.uuid);let lt=g(L).map((je)=>({...je,session_id:ye}));b(`[bridge:repl] Drained ${L.length} pending message(s) after flush`),ge.writeBatch(lt)}let zv=null;function Hv(){zv?.()}function uM(L){if(b(`[bridge:repl] Transport permanently closed: code=${L}`),Ye("tengu_bridge_repl_ws_closed",{code:L}),ge){let lt=ge.getLastSequenceNum();if(lt>Pr)Pr=lt;qe?.(),ge=null}Di();let ce=Ln.drop();if(ce>0)b(`[bridge:repl] Dropping ${ce} pending message(s) on transport close (code=${L})`,{level:"warn"});if(L===1000){de?.("failed","session ended"),_r.abort(),Hv();return}de?.("reconnecting",`Remote Control connection lost (code ${L})`),b(`[bridge:repl] Transport reconnect budget exhausted (code=${L}), attempting env reconnect`),fo().then((lt)=>{if(lt)return;if(_r.signal.aborted)return;b("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),Ye("tengu_bridge_repl_reconnect_failed",{close_code:L}),de?.("failed","reconnection failed"),Hv()})}let dM,Sie=null,wie={api:ct,getCredentials:()=>({environmentId:te,environmentSecret:Qs}),signal:_r.signal,getPollIntervalConfig:y,onStateChange:de,getWsState:()=>ge?.getStateLabel()??"null",isAtCapacity:()=>ge!==null,capacitySignal:Fa,onFatalError:Hv,getHeartbeatInfo:()=>{if(!ut||!po)return null;return{environmentId:te,workId:ut,sessionToken:po}},onHeartbeatFatal:(L)=>{if(b(`[bridge:repl] heartbeatWork fatal (status=${L.status}) — tearing down work item for fast re-dispatch`),ge){let ce=ge.getLastSequenceNum();if(ce>Pr)Pr=ce;qe?.(),ge.close(),ge=null}if(Ln.drop(),ut)ct.stopWork(te,ut,!1).catch((ce)=>{b(`[bridge:repl] stopWork after heartbeat fatal: ${ae(ce)}`)});ut=null,po=null,Di(),de?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await fo())return null;return{environmentId:te,environmentSecret:Qs}},onWorkReceived:(L,ce,lt,je)=>{if(ge?.isConnectedStatus())b(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${lt})`);if(b(`[bridge:repl] Work received: workId=${lt} workSessionId=${L} currentSessionId=${ye} match=${iM(L,ye)}`),tr(t,{sessionId:ye,environmentId:te,source:"repl"}),!iM(L,ye)){b(`[bridge:repl] Rejecting foreign session: expected=${ye} got=${L}`);return}ut=lt,po=ce;let Ne=je||Ge(process.env.CLAUDE_BRIDGE_USE_CCR_V2),Zt;if(!Ne){if(Zt=$a(),!Zt){b("[bridge:repl] No OAuth token available for session ingress, skipping work");return}Rg(Zt)}if(Ye("tengu_bridge_repl_work_received",{}),ge){qe?.();let rr=ge;ge=null;let ur=rr.getLastSequenceNum();if(ur>Pr)Pr=ur;rr.close()}Ln.deactivate();let Lm=(rr)=>Hoe(rr,{transport:ge,sessionId:ye,onInterrupt:R,onSetModel:V,onSetMaxThinkingTokens:Y,onSetPermissionMode:he,onRenameSession:He,onSetColor:Ae,onFileSuggestions:ne,onReadFile:Pe,onMcpAuthenticate:vt,onMcpOauthCallbackUrl:M,onMcpReconnect:yt,onMcpStatus:ie}),Wv=!1,fM=(rr)=>{if(ge=rr,rr.setOnConnect(()=>{if(ge!==rr)return;if(b("[bridge:repl] Ingress transport connected"),Ye("tengu_bridge_repl_ws_connected",{}),!Ne){let ur=$a();if(ur)Rg(ur)}if(Vv=!1,!Wv&&C&&C.length>0){Wv=!0;let ur=w,gn=C.filter(($m)=>eM($m)&&!v?.has($m.uuid)),$o=ur>0&&gn.length>ur?gn.slice(-ur):gn;if($o.length<gn.length)b(`[bridge:repl] Capped initial flush: ${gn.length} -> ${$o.length} (cap=${ur})`),Ye("tengu_bridge_repl_history_capped",{eligible_count:gn.length,capped_count:$o.length});let Mi=g($o);if(Mi.length>0){b(`[bridge:repl] Flushing ${Mi.length} initial message(s) via transport`);let $m=Mi.map((ml)=>({...ml,session_id:ye,historical:!0})),AM=rr.droppedBatchCount;rr.writeBatch($m).then(()=>{if(rr.droppedBatchCount>AM){b(`[bridge:repl] Initial flush dropped ${rr.droppedBatchCount-AM} batch(es) — not marking ${Mi.length} UUID(s) as flushed`);return}if(v){for(let ml of Mi)if(ml.uuid)v.add(ml.uuid)}}).catch((ml)=>b(`[bridge:repl] Initial flush failed: ${ml}`)).finally(()=>{if(ge!==rr)return;Ni(),de?.("connected")})}else Ni(),de?.("connected")}else if(!Ln.active)de?.("connected")}),rr.setOnData((ur)=>{zoe(ur,Ts,Ti,B,P,Lm)}),Sie=uM,rr.setOnClose((ur)=>{if(ge!==rr)return;uM(ur)}),!Wv&&C&&C.length>0)Ln.start();rr.connect()};if(us++,Ne){let rr=oie(a,L),ur=us;b(`[bridge:repl] CCR v2: sessionUrl=${rr} session=${L} gen=${ur}`),cie({sessionUrl:rr,ingressToken:ce,sessionId:L,initialSequenceNum:Pr}).then((gn)=>{if(_r.signal.aborted){gn.close();return}if(ur!==us){b(`[bridge:repl] CCR v2: discarding stale handshake gen=${ur} current=${us}`),gn.close();return}if(fM(gn),_e){let $o=gn.getInternalEventWriter?.(),Mi=gn.getInternalEventReaders?.();if($o&&Mi)_e($o,Mi)}},(gn)=>{if(b(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${ae(gn)}`,{level:"error"}),Ye("tengu_bridge_repl_ccr_v2_init_failed",{}),ur!==us)return;if(ut)ct.stopWork(te,ut,!1).catch(($o)=>{b(`[bridge:repl] stopWork after v2 init failure: ${ae($o)}`)}),ut=null,po=null;Di()})}else{let rr=sie(c,L);b(`[bridge:repl] Ingress URL: ${rr}`),b(`[bridge:repl] Creating HybridTransport: session=${L}`);let ur=Zt??"";fM(aie(new jN(new URL(rr),{Authorization:`Bearer ${ur}`,"anthropic-version":"2023-06-01"},L,()=>({Authorization:`Bearer ${$a()??ur}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{de?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),Di()}})))}}};OYe(wie);let qv=U?setInterval(()=>{if(Nr)return;tr(t,{sessionId:ye,environmentId:te,source:"repl"})},3600000):null;qv?.unref?.();let pM=y().session_keepalive_interval_v2_ms,Gv=pM>0?setInterval(()=>{if(!ge)return;b("[bridge:repl] keep_alive sent"),ge.write({type:"keep_alive"}).catch((L)=>{b(`[bridge:repl] keep_alive write failed: ${ae(L)}`)})},pM):null;Gv?.unref?.();let Vv=!1;zv=async()=>{if(Vv){b(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${te} session=${ye}`);return}Vv=!0,qe?.();let L=Date.now();if(b(`[bridge:repl] Teardown starting: env=${te} session=${ye} workId=${ut??"none"} transportState=${ge?.getStateLabel()??"null"}`),qv!==null)clearInterval(qv);if(Gv!==null)clearInterval(Gv);if(dM)process.off("SIGUSR2",dM);if(_r.abort(),b("[bridge:repl] Teardown: poll loop aborted"),ge){let je=ge.getLastSequenceNum();if(je>Pr)Pr=je}if(U){ge=null,Ln.drop(),await tr(t,{sessionId:ye,environmentId:te,source:"repl"}),b(`[bridge:repl] Teardown (perpetual): leaving env=${te} session=${ye} alive on server, duration=${Date.now()-L}ms`);return}let ce=ge;if(ge=null,Ln.drop(),ce)ce.write(tM(ye));let lt=ut?ct.stopWork(te,ut,!0).then(()=>{b("[bridge:repl] Teardown: stopWork completed")}).catch((je)=>{b(`[bridge:repl] Teardown stopWork failed: ${ae(je)}`)}):Promise.resolve();await Promise.all([lt,f(ye)]),ce?.close(),b("[bridge:repl] Teardown: transport closed"),await ct.deregisterEnvironment(te).catch((je)=>{b(`[bridge:repl] Teardown deregister failed: ${ae(je)}`)}),await Xe(t),b(`[bridge:repl] Teardown complete: env=${te} duration=${Date.now()-L}ms`)},b(`[bridge:repl] Ready: env=${te} session=${ye}`),de?.("ready");let Fm={get bridgeSessionId(){return ye},outboundOnly:!1,get environmentId(){return te},getLastSequenceNum(){return Fm.getSSESequenceNum()},flush(){return ge?.flush()??Promise.resolve()},getSSESequenceNum(){let L=ge?.getLastSequenceNum()??0;return Math.max(Pr,L)},sessionIngressUrl:c,writeMessages(L){let ce=L.filter((Ne)=>eM(Ne)&&!Ri.has(Ne.uuid)&&!Ts.has(Ne.uuid)&&!Ti.has(Ne.uuid));if(ce.length===0)return;if(!lp)for(let Ne of ce){let Zt=joe(Ne);if(Zt!==void 0&&Ft?.(Zt,ye)){lp=!0;break}}if(Ln.enqueue(...ce)){b(`[bridge:repl] Queued ${ce.length} message(s) during initial flush`);return}if(!ge){let Ne=ce.map((Zt)=>Zt.type).join(",");b(`[bridge:repl] Transport not configured, dropping ${ce.length} message(s) [${Ne}] for session=${ye}`,{level:"warn"});return}for(let Ne of ce)Ts.add(Ne.uuid);b(`[bridge:repl] Sending ${ce.length} message(s) via transport`);let je=g(ce).map((Ne)=>({...Ne,session_id:ye}));ge.writeBatch(je)},writeSdkMessages(L){let ce=L.filter((je)=>!je.uuid||!Ts.has(je.uuid));if(ce.length===0)return;if(!ge){b(`[bridge:repl] Transport not configured, dropping ${ce.length} SDK message(s) for session=${ye}`,{level:"warn"});return}for(let je of ce)if(je.uuid)Ts.add(je.uuid);let lt=ce.map((je)=>({...je,session_id:ye}));ge.writeBatch(lt)},sendControlRequest(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_request");return}let ce={...L,session_id:ye};ge.write(ce),b(`[bridge:repl] Sent control_request request_id=${L.request_id}`)},sendControlResponse(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_response");return}let ce={...L,session_id:ye};ge.write(ce),b("[bridge:repl] Sent control_response")},sendControlCancelRequest(L){if(!ge){b("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let ce={type:"control_cancel_request",request_id:L,session_id:ye};ge.write(ce),b(`[bridge:repl] Sent control_cancel_request request_id=${L}`)},reportMetadata(L){ge?.reportMetadata(L)},sendResult(){if(!ge){b(`[bridge:repl] sendResult: skipping, transport not configured session=${ye}`);return}ge.write(tM(ye)),b(`[bridge:repl] Sent result for session=${ye}`)},async subscribePR(L,ce,lt){let je=`${L}#${ce}`,Ne=lr.get(je);if(lt)lr.set(je,{agentId:lt,repo:L,prNumber:ce});let Zt=await Uv("subscribe",ye,L,ce,a,u,m);if(Zt)Fn.add(je);else if(lt)if(Ne)lr.set(je,Ne);else lr.delete(je);return Zt},async unsubscribePR(L,ce){let lt=await Uv("unsubscribe",ye,L,ce,a,u,m);if(lt){let je=`${L}#${ce}`;Fn.delete(je),lr.delete(je)}return lt},async subscribeSlackThread(L,ce){let lt=await Fv("subscribe",ye,L,ce,a,u,m);if(lt)Rs.add(`${L}/${ce}`);return lt},async unsubscribeSlackThread(L,ce){let lt=await Fv("unsubscribe",ye,L,ce,a,u,m);if(lt)Rs.delete(`${L}/${ce}`);return lt},getPRWebhookTargets(){return[...lr.values()]},async teardown(){xie(),await zv?.(),b("[bridge:repl] Torn down"),Ye("tengu_bridge_repl_teardown",{})},[Symbol.asyncDispose](){return Fm.teardown()}},xie=Vi(Fm);return Fm}async function OYe({api:e,getCredentials:t,signal:r,onStateChange:n,onWorkReceived:s,onEnvironmentLost:o,getWsState:i,isAtCapacity:a,capacitySignal:c,onFatalError:l,getPollIntervalConfig:u=()=>cg,getHeartbeatInfo:p,onHeartbeatFatal:f}){b(`[bridge:repl] Starting work poll loop for env=${t().environmentId}`);let g=0,h=null,m=null,y=0,w=0,C=!1;while(!r.aborted){let{environmentId:v,environmentSecret:B}=t(),P=u();try{let R=await e.pollForWork(v,B,r,P.reclaim_older_than_ms);if(w=0,g>0)b(`[bridge:repl] Poll recovered after ${g} consecutive error(s)`),g=0,h=null,m=null,y=0,n?.("ready");if(!R){let Y=C;if(C=!1,a?.()&&c&&!Y){let he=P.poll_interval_ms_at_capacity;if(P.non_exclusive_heartbeat_interval_ms>0&&p){Ye("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:P.non_exclusive_heartbeat_interval_ms});let Ae=he>0?Date.now()+he:null,ne=!1,Pe=0;while(!r.aborted&&a()&&(Ae===null||Date.now()<Ae)){let M=u();if(M.non_exclusive_heartbeat_interval_ms<=0)break;let yt=p();if(!yt)break;let ie=c();try{await e.heartbeatWork(yt.environmentId,yt.workId,yt.sessionToken)}catch(de){if(b(`[bridge:repl:heartbeat] Failed: ${ae(de)}`),de instanceof cs){if(ie.cleanup(),Ye("tengu_bridge_heartbeat_error",{status:de.status,error_type:VF(de.status===401||de.status===403?"auth_failed":"fatal")}),f)f(de),b(`[bridge:repl:heartbeat] Fatal (status=${de.status}), work state cleared — fast-polling for re-dispatch`);else ne=!0;break}}Pe++,await Mr(M.non_exclusive_heartbeat_interval_ms,ie.signal),ie.cleanup()}let vt=ne?"error":r.aborted?"shutdown":!a()?"capacity_changed":Ae!==null&&Date.now()>=Ae?"poll_due":"config_disabled";if(Ye("tengu_bridge_heartbeat_mode_exited",{reason:zl(vt),heartbeat_cycles:Pe}),!ne){if(vt==="poll_due")b(`[bridge:repl] Heartbeat poll_due after ${Pe} cycles — falling through to pollForWork`);continue}}let He=he>0?he:P.non_exclusive_heartbeat_interval_ms;if(He>0){let Ae=c(),ne=Date.now();await Mr(He,Ae.signal),Ae.cleanup();let Pe=Date.now()-ne-He;if(Pe>60000)b(`[bridge:repl] At-capacity sleep overran by ${Math.round(Pe/1000)}s — process suspension detected, forcing one fast-poll cycle`),Ye("tengu_bridge_repl_suspension_detected",{overrun_ms:Pe}),C=!0}}else await Mr(P.poll_interval_ms_not_at_capacity,r);continue}let V;try{V=nie(R.secret)}catch(Y){b(`[bridge:repl] Failed to decode work secret: ${ae(Y)}`),Ye("tengu_bridge_repl_work_secret_failed",{}),await e.stopWork(v,R.id,!1).catch(()=>{});continue}b(`[bridge:repl] Acknowledging workId=${R.id}`);try{await e.acknowledgeWork(v,R.id,V.session_ingress_token)}catch(Y){b(`[bridge:repl] Acknowledge failed workId=${R.id}: ${ae(Y)}`)}if(R.data.type==="healthcheck"){b("[bridge:repl] Healthcheck received");continue}if(R.data.type==="session"){let Y=R.data.id;try{On(Y,"session_id")}catch{b(`[bridge:repl] Invalid session_id in work: ${Y}`);continue}s(Y,V.session_ingress_token,R.id,V.use_code_sessions===!0),b("[bridge:repl] Work accepted, continuing poll loop")}}catch(R){if(r.aborted)break;if(R instanceof cs&&R.status===404&&o){let M=t().environmentId;if(v!==M){b(`[bridge:repl] Stale poll error for old env=${v}, current env=${M} — skipping onEnvironmentLost`),g=0,h=null;continue}if(w++,b(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${w}/3)`),Ye("tengu_bridge_repl_env_lost",{attempt:w}),w>3){b("[bridge:repl] Environment re-registration limit reached (3), giving up"),n?.("failed","Environment deleted and re-registration limit reached"),l?.();break}n?.("reconnecting","environment lost, recreating session");let yt=await o();if(r.aborted)break;if(yt){g=0,h=null,n?.("ready"),b(`[bridge:repl] Re-registered environment: ${yt.environmentId}`);continue}n?.("failed","Environment deleted and re-registration failed"),l?.();break}if(R instanceof cs){let M=Nv(R.errorType),yt=Foe(R);if(b(`[bridge:repl] Fatal poll error: ${R.message} (status=${R.status}, type=${R.errorType??"unknown"})${yt?" (suppressed)":""}`),Ye("tengu_bridge_repl_fatal_error",{status:R.status,error_type:R.errorType}),H(M?"info":"error","bridge_repl_fatal_error",{status:R.status,error_type:R.errorType}),!yt)n?.("failed",M?"Remote Control session expired.":R.message);l?.();break}let V=Date.now();if(m!==null&&V-m>Math.max(mie,y)*2)b(`[bridge:repl] Detected system sleep (${Math.round((V-m)/1000)}s gap), resetting poll error budget`),H("info","bridge_repl_poll_sleep_detected",{gapMs:V-m}),g=0,h=null;if(m=V,g++,h===null)h=V;let Y=V-h,he=Poe(R),He=Doe(R),Ae=i?.()??"unknown";if(b(`[bridge:repl] Poll error (attempt ${g}, elapsed ${Math.round(Y/1000)}s, ws=${Ae}): ${He}`),Ye("tengu_bridge_repl_poll_error",{status:he,consecutiveErrors:g,elapsedMs:Y}),g===1)n?.("reconnecting",He);if(Y>=hie){b(`[bridge:repl] Poll failures exceeded ${hie/1000}s (${g} errors), giving up`),H("info","bridge_repl_poll_give_up"),Ye("tengu_bridge_repl_poll_give_up",{consecutiveErrors:g,elapsedMs:Y,lastStatus:he}),n?.("failed","connection to server lost");break}let ne=Noe(R),Pe=Math.min(bie*2**(g-1),mie),vt=Eie(ne!==void 0?Math.max(Pe,Math.min(ne,NYe)):Pe);if(y=vt,u().non_exclusive_heartbeat_interval_ms>0){let M=p?.();if(M)try{await e.heartbeatWork(M.environmentId,M.workId,M.sessionToken)}catch{}}await Mr(vt,r)}}b(`[bridge:repl] Work poll loop ended (aborted=${r.aborted}) env=${t().environmentId}`)}function UYe(e,t){return e?.includes("_staging_")===!0||t?.includes("staging")===!0}function FYe(e,t){return e?.includes("_local_")===!0||t?.includes("localhost")===!0}function LYe(e,t){if(FYe(e,t))return"http://localhost:4000";if(UYe(e,t))return"https://claude-ai.staging.ant.dev";return"https://claude.ai"}function vie(e,t,r){let{toCompatSessionId:n}=Tie(Qoe),s=n(e),i=`${LYe(s,t)}/code/${s}`;return r?`${i}?${new URLSearchParams(r)}`:i}et();async function Cie(e){let{dir:t,registrationDir:r,name:n="Assistant",workerType:s="claude_code_assistant",branch:o="",gitRepoUrl:i=null,getAccessToken:a,getTrustedDeviceToken:c,baseUrl:l,orgUUID:u,model:p,perpetual:f=!1,initialSSESequenceNum:A,onConflict:g}=e,h=e.onAuth401;if(!a())return b("[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 m=l,y={baseUrl:l,getAccessToken:a,orgUUID:u,model:p},w=[],C=null,v=[],B=null,P=[],R=null,V=!1,Y=null,he={detail:null},He=$Ye(),Ae=()=>Iie({dir:t,registrationDir:r,machineName:He,branch:o,gitRepoUrl:i,title:n,baseUrl:l,sessionIngressUrl:m,workerType:s,getAccessToken:a,getTrustedDeviceToken:c,onAuth401:h,onInitError:console.error,createSession:({environmentId:ie,title:de,signal:Ft})=>lie({environmentId:ie,title:de,tags:["claude-code-assistant"],signal:Ft},y),archiveSession:(ie)=>uie(ie,y),perpetual:f,initialSSESequenceNum:A,getCurrentTitle:()=>n,getPollIntervalConfig:()=>({...cg,non_exclusive_heartbeat_interval_ms:60000,poll_interval_ms_at_capacity:0}),onInboundMessage(ie){let de=Z4(ie);if(!de)return;w.push({content:de.content,uuid:de.uuid}),C?.(),C=null},onInterrupt(){v.push({type:"control_request",request_id:"",request:{subtype:"interrupt"}}),B?.(),B=null},onSetModel(ie){v.push({type:"control_request",request_id:"",request:{subtype:"set_model",model:ie}}),B?.(),B=null},onSetMaxThinkingTokens(ie){v.push({type:"control_request",request_id:"",request:{subtype:"set_max_thinking_tokens",max_thinking_tokens:ie}}),B?.(),B=null},onPermissionResponse(ie){P.push(ie),R?.(),R=null},onStateChange(ie,de){if(Y?.(ie,de),ie==="failed")he.detail=de??"unknown failure",V=!0,C?.(),B?.(),R?.()}}),ne=await Ae();if(!ne&&g&&he.detail?.includes("409")){if(await g({machineName:He,message:he.detail})==="takeover")V=!1,he.detail=null,ne=await Ae()}if(!ne){let ie=he.detail??"initBridgeCore returned null (env registration or session creation failed)";return b(`[bridge:daemon] connectRemoteControl failed: ${ie}`),{ok:!1,error:{kind:he.detail?.includes("409")?"conflict":he.detail?.match(/ECONN|ETIMEDOUT|ENOTFOUND|network/i)?"network":"unknown",detail:ie}}}async function*Pe(){while(!V){while(w.length>0)if(yield w.shift(),V)return;await new Promise((ie)=>{C=ie})}}async function*vt(){while(!V){while(v.length>0)if(yield v.shift(),V)return;await new Promise((ie)=>{B=ie})}}async function*M(){while(!V){while(P.length>0)if(yield P.shift(),V)return;await new Promise((ie)=>{R=ie})}}return{ok:!0,handle:{get sessionUrl(){return vie(ne.bridgeSessionId,m)},get environmentId(){return ne.environmentId},get bridgeSessionId(){return ne.bridgeSessionId},getSSESequenceNum(){return ne.getSSESequenceNum()},hasPendingPrompts(){return w.length>0},write(ie){ne.writeSdkMessages([ie])},sendResult(){ne.sendResult()},sendControlRequest(ie){ne.sendControlRequest(ie)},sendControlResponse(ie){ne.sendControlResponse(ie)},sendControlCancelRequest(ie){ne.sendControlCancelRequest(ie)},inboundPrompts:Pe,controlRequests:vt,permissionResponses:M,onStateChange(ie){Y=ie},async teardown(){V=!0,C?.(),B?.(),R?.(),await ne.teardown()},[Symbol.asyncDispose](){return this.teardown()}}}}var zYe=1000,HYe=1e4,qYe=5000,GYe=60000,lM=3;function VYe(e){if((e.type==="user"||e.type==="assistant")&&e.parent_tool_use_id!==null)return!1;if(e.type==="user"){let t=e.message.content;if(!(Array.isArray(t)&&t.some((n)=>n.type==="tool_result")))return!1}return!0}function WYe(e,t,r){let n=e.response?.request_id;if(!n)return null;let s=t.get(n);if(!s)return n;t.delete(n),r(n);let o=e.response;if(o.subtype==="success"&&bM(o.response))s(o.response);else s({behavior:"deny",message:"Bridge returned non-success or malformed permission response"});return null}function jv(e){if(!e){ln("assistant_worker_start");return}if(e.kind==="auth"||e.kind==="conflict")Us("assistant_worker_start",e.kind);else Zr("assistant_worker_start",e.kind)}async function JYe(e){let{bridge:t,sandboxed:r=!1,scheduling:n,buildQueryOptions:s,canUseToolPreFilter:o,onPermissionResolved:i,transformOutbound:a,stateAdapter:c,initialPrompt:l,userIdleMs:u=300000,signal:p,log:f=()=>{}}=e;f("─── worker start ───");let A=await c?.load(),g={...t,initialSSESequenceNum:t.initialSSESequenceNum??A?.lastSSESequenceNum};if(!g.getAccessToken()){let re={kind:"auth",detail:"getAccessToken returned empty"};return jv(re),{ok:!1,error:re}}let h=await Cie(g);if(!h.ok)return f(`bridge connection failed: ${h.error.kind} — ${h.error.detail}`),jv(h.error),{ok:!1,error:h.error};let m=h.handle;f(`bridge connected url=${m.sessionUrl} env=${m.environmentId}`);let y=A?.claudeSessionId,w=m.bridgeSessionId,C=[],v=null,B=!1,P=null,R=0,V=!0,Y=0,he=Promise.resolve();function He(){if(!c)return;let re={claudeSessionId:y,lastSSESequenceNum:m.getSSESequenceNum(),bridgeSessionId:m.bridgeSessionId};he=he.then(()=>c.save(re).catch((ct)=>{f(`stateAdapter.save threw: ${ct}`)}))}function Ae(){if(C.length>0||m.hasPendingPrompts()){f("persist skipped: prompt queued");return}He()}He();let ne=new AbortController,Pe=new Map,vt=null;function M(){return vt??=(async()=>{Ae();for(let re of Pe.keys())m.sendControlCancelRequest(re);Pe.clear(),await m.teardown(),await he})()}if(p.addEventListener("abort",()=>{ne.abort(),M().catch((re)=>f(`teardown threw: ${re}`))}),p.aborted){await M();let re={kind:"unknown",detail:"aborted before start"};return jv(re),{ok:!1,error:re}}let yt="connected";m.onStateChange((re,ct)=>{if(f(`bridge state=${re} detail=${ct??""}`),yt=re,re==="ready"&&m.bridgeSessionId!==w)w=m.bridgeSessionId,He();else if(re==="connected")Ae();if(re==="failed")f(`bridge failed: ${ct??"unknown"}`),ne.abort(),M().catch((gt)=>f(`teardown threw: ${gt}`))});let ie=n?.horizonMs??600000,de=n?.leadMs??qYe,Ft=null,Ct=!1,ee=!1,U="";async function we(){if(!n)return;let re=await W4(n.dir).catch((gt)=>{return f(`computeCronHorizon threw: ${gt}`),{nextFire:null,hasOverdue:!1}});Ft=re.nextFire,ee=re.hasOverdue;let ct=re.nextFire===null?"cron horizon: no tasks":`cron horizon: nextFire=${new Date(re.nextFire).toISOString()} hasOverdue=${re.hasOverdue}`;if(ct!==U)U=ct,f(ct)}let _e;if(n)await we(),_e=setInterval(we,HYe),_e.unref?.();function qe(re){C.push({type:"user",message:{role:"user",content:re},parent_tool_use_id:null,session_id:""}),v?.(),v=null}async function Kt(re,ct,gt){if(o){let lr=await o(re,ct,gt);if(lr)return i?.(re,lr),lr}if(yt!=="connected"){f(`permission denied — bridge state=${yt}, request would drop`);let lr={behavior:"deny",message:`Cannot request permission: remote control is ${yt}. Try again in a moment.`};return i?.(re,lr),lr}let te=jYe();f(`permission request tool=${re} req=${te}`);let{signal:Qs,suggestions:Ua,blockedPath:Qi,toolUseID:ye}=gt;m.sendControlRequest({type:"control_request",request_id:te,request:{subtype:"can_use_tool",tool_name:re,display_name:EM(re),input:ct,tool_use_id:ye,...Ua&&{permission_suggestions:Ua},...Qi&&{blocked_path:Qi},..."decisionReason"in gt&&gt.decisionReason&&{decision_reason:gt.decisionReason},..."agentID"in gt&&gt.agentID&&{agent_id:gt.agentID}}});let Fn;try{let lr=await new Promise((Ri,Ts)=>{Pe.set(te,Ri),Fn=setTimeout((Ti,_r,ge,us,Pr)=>{if(Ti.delete(_r))ge(`permission timeout req=${_r}`),us.sendControlCancelRequest(_r),Pr({behavior:"deny",message:"Permission request timed out (no response in 60s)"})},GYe,Pe,te,f,m,Ri),Fn.unref?.(),Qs.addEventListener("abort",()=>{if(Pe.delete(te))m.sendControlCancelRequest(te);Ts(Error("aborted"))},{once:!0})});f(`permission response req=${te} behavior=${lr.behavior}`);let Rs=lr.behavior==="allow"?{behavior:"allow",updatedInput:lr.updatedInput,updatedPermissions:lr.updatedPermissions}:{behavior:"deny",message:lr.message??"Denied via remote control"};return i?.(re,Rs),Rs}finally{if(Fn)clearTimeout(Fn);Pe.delete(te)}}let tr=!1;async function Xe(){if(P!==null||tr||ne.signal.aborted)return;if(tr=!0,B=!1,C.length>0)V=!1;async function*re(){while(!B){while(C.length>0)if(V=!1,yield C.shift(),B)return;await new Promise((te)=>{v=te})}}f(`spawning query resume=${y??"<fresh>"}`);let ct={assistant:!0,cwd:t.dir,resume:y,stderr:(te)=>f(`[child] ${te.trimEnd()}`),canUseTool:Kt},gt;try{if(gt=await s(ct),r)gt={...gt,env:{...gt.env,CLAUDE_CODE_SANDBOXED:"1"}}}catch(te){if(f(`buildQueryOptions threw: ${te}`),tr=!1,Y++,Y>=lM)f(`${Y} consecutive buildQueryOptions failures — dropping ${C.length} queued input(s)`),C.length=0;else if(C.length>0&&!ne.signal.aborted)Xe();return}if(ne.signal.aborted){tr=!1;return}try{P=UJ({prompt:re(),options:gt})}finally{tr=!1}(async()=>{try{f("output pump started");for await(let te of P){if(te.type==="system"&&te.subtype==="init"){if(te.session_id!==y)y=te.session_id,Ae()}if(te.type==="result")V=!0,Y=0,Ct=!0,Ae();if(!VYe(te))continue;let Qs=a?a(te):te;if(Qs===null)continue;m.write(Qs)}}catch(te){f(`query threw: ${te}`),Y++}finally{f("output pump ended"),P=null;for(let te of Pe.keys())m.sendControlCancelRequest(te);if(Pe.clear(),C.length>0&&!ne.signal.aborted)if(Y>=lM)f(`${Y} consecutive crashes — dropping ${C.length} queued input(s)`),C.length=0;else Xe()}})()}let Un=setInterval(()=>{let re=Date.now(),ct=Ft!==null&&Ft-re<ie;if(P===null){let gt=Ft!==null&&Ft-re<de;if((gt||ee&&!Ct)&&Y<lM&&!ne.signal.aborted)f(gt?`cron due in ${Ft-re}ms, spawning child`:"overdue cron detected, spawning child for catch-up"),Xe();return}if(B)return;if(!V||C.length>0)return;if(re-R<u)return;if(ct)return;if(ee&&!Ct)return;f("idle conditions met → closing input gen"),Ae(),B=!0,v?.(),v=null},zYe);if(Un.unref?.(),l)f("initialPrompt → injecting"),R=Date.now(),qe(l),Xe();let ls=(async()=>{if(await Promise.all([(async()=>{for await(let re of m.inboundPrompts()){if(ne.signal.aborted)return;if(f("bridge prompt received"),R=Date.now(),re.uuid)m.write({type:"user",uuid:re.uuid,session_id:"",message:{role:"user",content:re.content},parent_tool_use_id:null});qe(re.content),Xe()}})(),(async()=>{for await(let re of m.controlRequests()){if(ne.signal.aborted)return;switch(re.request.subtype){case"interrupt":f("bridge interrupt"),P?.interrupt();break;case"set_model":f(`bridge setModel=${re.request.model??"<default>"}`),P?.setModel(re.request.model);break;case"set_max_thinking_tokens":f(`bridge setMaxThinkingTokens=${re.request.max_thinking_tokens}`),P?.setMaxThinkingTokens(re.request.max_thinking_tokens);break;default:}}})(),(async()=>{for await(let re of m.permissionResponses()){if(ne.signal.aborted)return;let ct=WYe(re,Pe,m.sendControlCancelRequest);if(ct)f(`permission response for unknown req=${ct} (stale)`)}})()]),clearInterval(Un),_e)clearInterval(_e);P?.close(),await M(),f("─── worker stop ───")})(),at={get sessionUrl(){return m.sessionUrl},get bridgeSessionId(){return m.bridgeSessionId},get claudeSessionId(){return y},pushPrompt(re){R=Date.now(),qe(re),Xe()},async interrupt(){await P?.interrupt()},done:ls,teardown:M,[Symbol.asyncDispose]:M};return jv(null),{ok:!0,handle:at}}process.env.NoDefaultCurrentDirectoryInExePath="1";export{JYe as runAssistantWorker};