MCPcopy Index your code
hub / github.com/ChinaSiro/claude-code-sourcemap / setOnEvent

Method setOnEvent

package/cli.js:7970–7970  ·  view source on GitHub ↗
(q)

Source from the content-addressed store, hash-verified

7968`,_))!==-1){let Y=q.slice(_,z);if(_=z+2,!Y.trim())continue;let $={},A=!1;for(let O of Y.split(`
7969`)){if(O.startsWith(":")){A=!0;continue}let w=O.indexOf(":");if(w===-1)continue;let j=O.slice(0,w),H=O[w+1]===" "?O.slice(w+2):O.slice(w+1);switch(j){case"event":$.event=H;break;case"id":$.id=H;break;case"data":$.data=$.data?$.data+`
7970`+H:H;break}}if($.data||A)K.push($)}return{frames:K,remaining:q.slice(_)}}class bJ6{url;state="idle";onData;onCloseCallback;onEventCallback;headers;sessionId;refreshHeaders;getAuthHeaders;abortController=null;lastSequenceNum=0;seenSequenceNums=new Set;reconnectAttempts=0;reconnectStartTime=null;reconnectTimer=null;livenessTimer=null;postUrl;constructor(q,K={},_,z,Y,$){this.url=q;if(this.headers=K,this.sessionId=_,this.refreshHeaders=z,this.getAuthHeaders=$??SE8,this.postUrl=VIY(q),Y!==void 0&&Y>0)this.lastSequenceNum=Y;N(`SSETransport: SSE URL = ${q.href}`),N(`SSETransport: POST URL = ${this.postUrl}`),c8("info","cli_sse_transport_initialized")}getLastSequenceNum(){return this.lastSequenceNum}async connect(){if(this.state!=="idle"&&this.state!=="reconnecting"){N(`SSETransport: Cannot connect, current state is ${this.state}`,{level:"error"}),c8("error","cli_sse_connect_failed");return}this.state="reconnecting";let q=Date.now(),K=new URL(this.url.href);if(this.lastSequenceNum>0)K.searchParams.set("from_sequence_num",String(this.lastSequenceNum));let _=this.getAuthHeaders(),z={...this.headers,..._,Accept:"text/event-stream","anthropic-version":"2023-06-01","User-Agent":n$()};if(_.Cookie)delete z.Authorization;if(this.lastSequenceNum>0)z["Last-Event-ID"]=String(this.lastSequenceNum);N(`SSETransport: Opening ${K.href}`),c8("info","cli_sse_connect_opening"),this.abortController=new AbortController;try{let Y=await fetch(K.href,{headers:z,signal:this.abortController.signal});if(!Y.ok){let A=fIY.has(Y.status);if(N(`SSETransport: HTTP ${Y.status}${A?" (permanent)":""}`,{level:"error"}),c8("error","cli_sse_connect_http_error",{status:Y.status}),A){this.state="closed",this.onCloseCallback?.(Y.status);return}this.handleConnectionError();return}if(!Y.body){N("SSETransport: No response body"),this.handleConnectionError();return}let $=Date.now()-q;N("SSETransport: Connected"),c8("info","cli_sse_connect_connected",{duration_ms:$}),this.state="connected",this.reconnectAttempts=0,this.reconnectStartTime=null,this.resetLivenessTimer(),await this.readStream(Y.body)}catch(Y){if(this.abortController?.signal.aborted)return;N(`SSETransport: Connection error: ${d6(Y)}`,{level:"error"}),c8("error","cli_sse_connect_error"),this.handleConnectionError()}}async readStream(q){let K=q.getReader(),_=new TextDecoder,z="";try{while(!0){let{done:Y,value:$}=await K.read();if(Y)break;z+=_.decode($,TIY);let{frames:A,remaining:O}=kIY(z);z=O;for(let w of A){if(this.resetLivenessTimer(),w.id){let j=parseInt(w.id,10);if(!isNaN(j)){if(this.seenSequenceNums.has(j))N(`SSETransport: DUPLICATE frame seq=${j} (lastSequenceNum=${this.lastSequenceNum}, seenCount=${this.seenSequenceNums.size})`,{level:"warn"}),c8("warn","cli_sse_duplicate_sequence");else if(this.seenSequenceNums.add(j),this.seenSequenceNums.size>1000){let H=this.lastSequenceNum-200;for(let J of this.seenSequenceNums)if(J<H)this.seenSequenceNums.delete(J)}if(j>this.lastSequenceNum)this.lastSequenceNum=j}}if(w.event&&w.data)this.handleSSEFrame(w.event,w.data);else if(w.data)N("SSETransport: Frame has data: but no event: field — dropped",{level:"warn"}),c8("warn","cli_sse_frame_missing_event_field")}}}catch(Y){if(this.abortController?.signal.aborted)return;N(`SSETransport: Stream read error: ${d6(Y)}`,{level:"error"}),c8("error","cli_sse_stream_read_error")}finally{K.releaseLock()}if(this.state!=="closing"&&this.state!=="closed")N("SSETransport: Stream ended, reconnecting"),this.handleConnectionError()}handleSSEFrame(q,K){if(q!=="client_event"){N(`SSETransport: Unexpected SSE event type '${q}' on worker stream`,{level:"warn"}),c8("warn","cli_sse_unexpected_event_type",{event_type:q});return}let _;try{_=r8(K)}catch(Y){N(`SSETransport: Failed to parse client_event data: ${d6(Y)}`,{level:"error"});return}let z=_.payload;if(z&&typeof z==="object"&&"type"in z){let Y=this.sessionId?` session=${this.sessionId}`:"";N(`SSETransport: Event seq=${_.sequence_num} event_id=${_.event_id} event_type=${_.event_type} payload_type=${String(z.type)}${Y}`),c8("info","cli_sse_message_received"),this.onData?.(g6(z)+`
7971`)}else N(`SSETransport: Ignoring client_event with no type in payload: event_id=${_.event_id}`);this.onEventCallback?.(_)}handleConnectionError(){if(this.clearLivenessTimer(),this.state==="closing"||this.state==="closed")return;this.abortController?.abort(),this.abortController=null;let q=Date.now();if(!this.reconnectStartTime)this.reconnectStartTime=q;let K=q-this.reconnectStartTime;if(K<WIY){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.refreshHeaders){let Y=this.refreshHeaders();Object.assign(this.headers,Y),N("SSETransport: Refreshed headers for reconnect")}this.state="reconnecting",this.reconnectAttempts++;let _=Math.min(XIY*Math.pow(2,this.reconnectAttempts-1),PIY),z=Math.max(0,_+_*0.25*(2*Math.random()-1));N(`SSETransport: Reconnecting in ${Math.round(z)}ms (attempt ${this.reconnectAttempts}, ${Math.round(K/1000)}s elapsed)`),c8("error","cli_sse_reconnect_attempt",{reconnectAttempts:this.reconnectAttempts}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},z)}else N(`SSETransport: Reconnection time budget exhausted after ${Math.round(K/1000)}s`,{level:"error"}),c8("error","cli_sse_reconnect_exhausted",{reconnectAttempts:this.reconnectAttempts,elapsedMs:K}),this.state="closed",this.onCloseCallback?.()}onLivenessTimeout=()=>{this.livenessTimer=null,N("SSETransport: Liveness timeout, reconnecting",{level:"error"}),c8("error","cli_sse_liveness_timeout"),this.abortController?.abort(),this.handleConnectionError()};resetLivenessTimer(){this.clearLivenessTimer(),this.livenessTimer=setTimeout(this.onLivenessTimeout,DIY)}clearLivenessTimer(){if(this.livenessTimer)clearTimeout(this.livenessTimer),this.livenessTimer=null}async write(q){let K=this.getAuthHeaders();if(Object.keys(K).length===0){N("SSETransport: No session token available for POST"),c8("warn","cli_sse_post_no_token");return}let _={...K,"Content-Type":"application/json","anthropic-version":"2023-06-01","User-Agent":n$()};N(`SSETransport: POST body keys=${Object.keys(q).join(",")}`);for(let z=1;z<=w48;z++){try{let $=await $1.post(this.postUrl,q,{headers:_,validateStatus:vIY});if($.status===200||$.status===201){N(`SSETransport: POST success type=${q.type}`);return}if(N(`SSETransport: POST ${$.status} body=${g6($.data).slice(0,200)}`),$.status>=400&&$.status<500&&$.status!==429){N(`SSETransport: POST returned ${$.status} (client error), not retrying`),c8("warn","cli_sse_post_client_error",{status:$.status});return}N(`SSETransport: POST returned ${$.status}, attempt ${z}/${w48}`),c8("warn","cli_sse_post_retryable_error",{status:$.status,attempt:z})}catch($){N(`SSETransport: POST error: ${$.message}, attempt ${z}/${w48}`),c8("warn","cli_sse_post_network_error",{attempt:z})}if(z===w48){N(`SSETransport: POST failed after ${w48} attempts, continuing`),c8("warn","cli_sse_post_retries_exhausted");return}let Y=Math.min(ZIY*Math.pow(2,z-1),GIY);await R7(Y)}}isConnectedStatus(){return this.state==="connected"}isClosedStatus(){return this.state==="closed"}setOnData(q){this.onData=q}setOnClose(q){this.onCloseCallback=q}setOnEvent(q){this.onEventCallback=q}close(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;this.clearLivenessTimer(),this.state="closing",this.abortController?.abort(),this.abortController=null}}function VIY(q){let K=q.pathname;if(K.endsWith("/stream"))K=K.slice(0,-7);return`${q.protocol}//${q.host}${K}`}var XIY=1000,PIY=30000,WIY=600000,DIY=45000,fIY,w48=10,ZIY=500,GIY=8000,TIY;var Ad8=y(()=>{CK();_8();oY();y8();nC();l8();fIY=new Set([401,403,404]),TIY={stream:!0}});function MQK(q){return{write:(K)=>q.write(K),writeBatch:(K)=>q.writeBatch(K),close:()=>q.close(),isConnectedStatus:()=>q.isConnectedStatus(),getStateLabel:()=>q.getStateLabel(),setOnData:(K)=>q.setOnData(K),setOnClose:(K)=>q.setOnClose(K),setOnConnect:(K)=>q.setOnConnect(K),connect:()=>void q.connect(),getLastSequenceNum:()=>0,get droppedBatchCount(){return q.droppedBatchCount},reportState:()=>{},reportMetadata:()=>{},reportDelivery:()=>{},flush:()=>Promise.resolve()}}async function j48(q){let{sessionUrl:K,ingressToken:_,sessionId:z,initialSequenceNum:Y,getAuthToken:$}=q,A;if($)A=()=>{let W=$();if(!W)return{};return{Authorization:`Bearer ${W}`}};else va6(_);let O=q.epoch??await dQ8(K,_);N(`[bridge:repl] CCR v2: worker sessionId=${z} epoch=${O}${q.epoch!==void 0?" (from /bridge)":" (via registerWorker)"}`);let w=new URL(K);w.pathname=w.pathname.replace(/\/$/,"")+"/worker/events/stream";let j=new bJ6(w,{},z,void 0,Y,A),H,J=new O48(j,new URL(K),{getAuthHeaders:A,heartbeatIntervalMs:q.heartbeatIntervalMs,heartbeatJitterFraction:q.heartbeatJitterFraction,onEpochMismatch:()=>{N("[bridge:repl] CCR v2: epoch superseded (409) — closing for poll-loop recovery");try{J.close(),j.close(),H?.(4090)}catch(W){N(`[bridge:repl] CCR v2: error during epoch-mismatch cleanup: ${d6(W)}`,{level:"error"})}throw Error("epoch superseded")}});j.setOnEvent((W)=>{J.reportDelivery(W.event_id,"received"),J.reportDelivery(W.event_id,"processed")});let M,X=!1,P=!1;return{write(W){return J.writeEvent(W)},async writeBatch(W){for(let D of W){if(P)break;await J.writeEvent(D)}},close(){P=!0,J.close(),j.close()},isConnectedStatus(){return X},getStateLabel(){if(j.isClosedStatus())return"closed";if(j.isConnectedStatus())return X?"connected":"init";return"connecting"},setOnData(W){j.setOnData(W)},setOnClose(W){H=W,j.setOnClose((D)=>{J.close(),W(D??4092)})},setOnConnect(W){M=W},getLastSequenceNum(){return j.getLastSequenceNum()},droppedBatchCount:0,reportState(W){J.reportState(W)},reportMetadata(W){J.reportMetadata(W)},reportDelivery(W,D){J.reportDelivery(W,D)},flush(){return J.flush()},connect(){if(!q.outboundOnly)j.connect();J.initialize(O).then(()=>{X=!0,N(`[bridge:repl] v2 transport ready for writes (epoch=${O}, sse=${j.isConnectedStatus()?"open":"opening"})`),M?.()},(W)=>{N(`[bridge:repl] CCR v2 initialize failed: ${d6(W)}`,{level:"error"}),J.close(),j.close(),H?.(4091)})}}}var Tz7=y(()=>{Gz7();Ad8();_8();y8();nC();nq8()});class H48{_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(...q){if(!this._active)return!1;return this._pending.push(...q),!0}drop(){this._active=!1;let q=this._pending.length;return this._pending.length=0,q}deactivate(){this._active=!1}}import{randomUUID as XQK}from"crypto";async function DQK(q){let{dir:K,machineName:_,branch:z,gitRepoUrl:Y,title:$,baseUrl:A,sessionIngressUrl:O,workerType:w,getAccessToken:j,createSession:H,archiveSession:J,getCurrentTitle:M=()=>$,toSDKMessages:X=()=>{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:P,getPollIntervalConfig:W=()=>Ls,initialHistoryCap:D=200,initialMessages:f,previouslyFlushedUUIDs:G,onInboundMessage:Z,onPermissionResponse:T,onInterrupt:v,onSetModel:V,onSetMaxThinkingTokens:E,onSetPermissionMode:S,onStateChange:R,onUserMessage:x,perpetual:I,initialSSESequenceNum:B=0}=q,p=++yIY,{writeBridgePointer:C,clearBridgePointer:g,readBridgePointer:F}=await Promise.resolve().then(() => (rq8(),iq8)),U=I?await F(K):null,c=U?.source==="repl"?U:null;N(`[bridge:repl] initBridgeCore #${p} starting (initialMessages=${f?.length??0}${c?` perpetual prior=env:${c.environmentId}`:""})`);let t=Tq8({baseUrl:A,getAccessToken:j,runnerVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.88",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-03-30T21:59:52Z"}.VERSION,onDebug:N,onAuth401:P,getTrustedDeviceToken:q46}),q6={dir:K,machineName:_,branch:z,gitRepoUrl:Y,maxSessions:1,spawnMode:"single-session",verbose:!1,sandbox:!1,bridgeId:XQK(),workerType:w,environmentId:XQK(),reuseEnvironmentId:c?.environmentId,apiBaseUrl:A,sessionIngressUrl:O},e,i;try{let v6=await t.registerBridgeEnvironment(q6);e=v6.environment_id,i=v6.environment_secret}catch(v6){if(Zy("registration_failed",`[bridge:repl] Environment registration failed: ${d6(v6)}`),c)await g(K);return R?.("failed",d6(v6)),null}N(`[bridge:repl] Environment registered: ${e}`),c8("info","bridge_repl_env_registered"),d("tengu_bridge_repl_env_registered",{});async function $6(v6,m6){if(e!==v6)return N(`[bridge:repl] Env mismatch (requested ${v6}, got ${e}) — cannot reconnect in place`),!1;let K8=op1(m6),H8=K8===m6?[m6]:[m6,K8];for(let M8 of H8)try{return await t.reconnectSession(e,M8),N(`[bridge:repl] Reconnected session ${M8} in place on env ${e}`),!0}catch(X1){N(`[bridge:repl] reconnectSession(${M8}) failed: ${d6(X1)}`)}return N("[bridge:repl] reconnectSession exhausted — falling through to fresh session"),!1}let M6=c?await $6(c.environmentId,c.sessionId):!1;if(c&&!M6)await g(K);let j6;if(M6&&c){if(j6=c.sessionId,N(`[bridge:repl] Perpetual session reused: ${j6}`),f&&G)for(let v6 of f)G.add(v6.uuid)}else{let v6=await H({environmentId:e,title:$,gitRepoUrl:Y,branch:z,signal:AbortSignal.timeout(15000)});if(!v6)return N("[bridge:repl] Session creation failed, deregistering environment"),d("tengu_bridge_repl_session_failed",{}),await t.deregisterEnvironment(e).catch(()=>{}),R?.("failed","Session creation failed"),null;j6=v6,N(`[bridge:repl] Session created: ${j6}`)}await C(K,{sessionId:j6,environmentId:e,source:"repl"}),c8("info","bridge_repl_session_created"),d("tengu_bridge_repl_started",{has_initial_messages:!!(f&&f.length>0),inProtectedNamespace:Ik()});let G6=new Set;if(f)for(let v6 of f)G6.add(v6.uuid);let w6=new Cs(2000);for(let v6 of G6)w6.add(v6);let o=new Cs(2000),s=new AbortController,a=null,n=0,l=M6?B:0,A6=null,J6=null,X6=mQ8(s.signal),f6=X6.wake,N6=X6.signal,Z6=new H48,V6=!x,y6=3,T6=0,n6=null;async function o6(){if(n6)return n6;n6=I6();try{return await n6}finally{n6=null}}async function I6(){if(T6++,n++,N(`[bridge:repl] Reconnecting after env lost (attempt ${T6}/${y6})`),T6>y6)return N(`[bridge:repl] Environment reconnect limit reached (${y6}), giving up`),!1;if(a){let H8=a.getLastSequenceNum();if(H8>l)l=H8;a.close(),a=null}if(f6(),Z6.drop(),A6){let H8=A6;if(await t.stopWork(e,H8,!1).catch(()=>{}),A6!==H8)return N("[bridge:repl] Poll loop recovered during stopWork await — deferring to it"),T6=0,!0;A6=null,J6=null}if(s.signal.aborted)return N("[bridge:repl] Reconnect aborted by teardown"),!1;let v6=e;q6.reuseEnvironmentId=v6;try{let H8=await t.registerBridgeEnvironment(q6);e=H8.environment_id,i=H8.environment_secret}catch(H8){return q6.reuseEnvironmentId=void 0,N(`[bridge:repl] Environment re-registration failed: ${d6(H8)}`),!1}if(q6.reuseEnvironmentId=void 0,N(`[bridge:repl] Re-registered: requested=${v6} got=${e}`),s.signal.aborted)return N("[bridge:repl] Reconnect aborted after env registration, cleaning up"),await t.deregisterEnvironment(e).catch(()=>{}),!1;if(a!==null)return N("[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it"),T6=0,!0;if(await $6(v6,j6))return d("tengu_bridge_repl_reconnected_in_place",{}),T6=0,!0;if(e!==v6)d("tengu_bridge_repl_env_expired_fresh_session",{});if(await J(j6),s.signal.aborted)return N("[bridge:repl] Reconnect aborted after archive, cleaning up"),await t.deregisterEnvironment(e).catch(()=>{}),!1;let m6=M(),K8=await H({environmentId:e,title:m6,gitRepoUrl:Y,branch:z,signal:AbortSignal.timeout(15000)});if(!K8)return N("[bridge:repl] Session creation failed during reconnection"),!1;if(s.signal.aborted)return N("[bridge:repl] Reconnect aborted after session creation, cleaning up"),await J(K8),!1;return j6=K8,mm8(FC(K8)).catch(()=>{}),l=0,o.clear(),V6=!x,N(`[bridge:repl] Re-created session: ${j6}`),await C(K,{sessionId:j6,environmentId:e,source:"repl"}),G?.clear(),T6=0,!0}function C6(){return j()}function l6(){let v6=Z6.end();if(v6.length===0)return;if(!a){N(`[bridge:repl] Cannot drain ${v6.length} pending message(s): no transport`);return}for(let H8 of v6)w6.add(H8.uuid);let K8=X(v6).map((H8)=>({...H8,session_id:j6}));N(`[bridge:repl] Drained ${v6.length} pending message(s) after flush`),a.writeBatch(K8)}let S6=null;function E6(){S6?.()}function R6(v6){if(N(`[bridge:repl] Transport permanently closed: code=${v6}`),d("tengu_bridge_repl_ws_closed",{code:v6}),a){let K8=a.getLastSequenceNum();if(K8>l)l=K8;a=null}f6();let m6=Z6.drop();if(m6>0)N(`[bridge:repl] Dropping ${m6} pending message(s) on transport close (code=${v6})`,{level:"warn"});if(v6===1000){R?.("failed","session ended"),s.abort(),E6();return}R?.("reconnecting",`Remote Control connection lost (code ${v6})`),N(`[bridge:repl] Transport reconnect budget exhausted (code=${v6}), attempting env reconnect`),o6().then((K8)=>{if(K8)return;if(s.signal.aborted)return;N("[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down"),d("tengu_bridge_repl_reconnect_failed",{close_code:v6}),R?.("failed","reconnection failed"),E6()})}let h6,x6=null,b6={api:t,getCredentials:()=>({environmentId:e,environmentSecret:i}),signal:s.signal,getPollIntervalConfig:W,onStateChange:R,getWsState:()=>a?.getStateLabel()??"null",isAtCapacity:()=>a!==null,capacitySignal:N6,onFatalError:E6,getHeartbeatInfo:()=>{if(!A6||!J6)return null;return{environmentId:e,workId:A6,sessionToken:J6}},onHeartbeatFatal:(v6)=>{if(N(`[bridge:repl] heartbeatWork fatal (status=${v6.status}) — tearing down work item for fast re-dispatch`),a){let m6=a.getLastSequenceNum();if(m6>l)l=m6;a.close(),a=null}if(Z6.drop(),A6)t.stopWork(e,A6,!1).catch((m6)=>{N(`[bridge:repl] stopWork after heartbeat fatal: ${d6(m6)}`)});A6=null,J6=null,f6(),R?.("reconnecting","Work item lease expired, fetching fresh token")},async onEnvironmentLost(){if(!await o6())return null;return{environmentId:e,environmentSecret:i}},onWorkReceived:(v6,m6,K8,H8)=>{if(a?.isConnectedStatus())N(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${K8})`);if(N(`[bridge:repl] Work received: workId=${K8} workSessionId=${v6} currentSessionId=${j6} match=${lq8(v6,j6)}`),C(K,{sessionId:j6,environmentId:e,source:"repl"}),!lq8(v6,j6)){N(`[bridge:repl] Rejecting foreign session: expected=${j6} got=${v6}`);return}A6=K8,J6=m6;let M8=H8||i6(process.env.CLAUDE_BRIDGE_USE_CCR_V2),X1;if(!M8){if(X1=C6(),!X1){N("[bridge:repl] No OAuth token available for session ingress, skipping work");return}va6(X1)}if(d("tengu_bridge_repl_work_received",{}),a){let X7=a;a=null;let Y1=X7.getLastSequenceNum();if(Y1>l)l=Y1;X7.close()}Z6.deactivate();let j1=(X7)=>zd8(X7,{transport:a,sessionId:j6,onInterrupt:v,onSetModel:V,onSetMaxThinkingTokens:E,onSetPermissionMode:S}),h1=!1,T7=(X7)=>{if(a=X7,X7.setOnConnect(()=>{if(a!==X7)return;if(N("[bridge:repl] Ingress transport connected"),d("tengu_bridge_repl_ws_connected",{}),!M8){let Y1=C6();if(Y1)va6(Y1)}if(F6=!1,!h1&&f&&f.length>0){h1=!0;let Y1=D,Y7=f.filter((B7)=>KC6(B7)&&!G?.has(B7.uuid)),P7=Y1>0&&Y7.length>Y1?Y7.slice(-Y1):Y7;if(P7.length<Y7.length)N(`[bridge:repl] Capped initial flush: ${Y7.length} -> ${P7.length} (cap=${Y1})`),d("tengu_bridge_repl_history_capped",{eligible_count:Y7.length,capped_count:P7.length});let L1=X(P7);if(L1.length>0){N(`[bridge:repl] Flushing ${L1.length} initial message(s) via transport`);let B7=L1.map((j7)=>({...j7,session_id:j6})),B1=X7.droppedBatchCount;X7.writeBatch(B7).then(()=>{if(X7.droppedBatchCount>B1){N(`[bridge:repl] Initial flush dropped ${X7.droppedBatchCount-B1} batch(es) — not marking ${L1.length} UUID(s) as flushed`);return}if(G){for(let j7 of L1)if(j7.uuid)G.add(j7.uuid)}}).catch((j7)=>N(`[bridge:repl] Initial flush failed: ${j7}`)).finally(()=>{if(a!==X7)return;l6(),R?.("connected")})}else l6(),R?.("connected")}else if(!Z6.active)R?.("connected")}),X7.setOnData((Y1)=>{_d8(Y1,w6,o,Z,T,j1)}),x6=R6,X7.setOnClose((Y1)=>{if(a!==X7)return;R6(Y1)}),!h1&&f&&f.length>0)Z6.start();X7.connect()};if(n++,M8){let X7=EJ6(A,v6),Y1=n;N(`[bridge:repl] CCR v2: sessionUrl=${X7} session=${v6} gen=${Y1}`),j48({sessionUrl:X7,ingressToken:m6,sessionId:v6,initialSequenceNum:l}).then((Y7)=>{if(s.signal.aborted){Y7.close();return}if(Y1!==n){N(`[bridge:repl] CCR v2: discarding stale handshake gen=${Y1} current=${n}`),Y7.close();return}T7(Y7)},(Y7)=>{if(N(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${d6(Y7)}`,{level:"error"}),d("tengu_bridge_repl_ccr_v2_init_failed",{}),Y1!==n)return;if(A6)t.stopWork(e,A6,!1).catch((P7)=>{N(`[bridge:repl] stopWork after v2 init failure: ${d6(P7)}`)}),A6=null,J6=null;f6()})}else{let X7=QQ8(O,v6);N(`[bridge:repl] Ingress URL: ${X7}`),N(`[bridge:repl] Creating HybridTransport: session=${v6}`);let Y1=X1??"";T7(MQK(new A48(new URL(X7),{Authorization:`Bearer ${Y1}`,"anthropic-version":"2023-06-01"},v6,()=>({Authorization:`Bearer ${C6()??Y1}`,"anthropic-version":"2023-06-01"}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{R?.("reconnecting","Lost sync with Remote Control — events could not be delivered"),f6()}})))}}};EIY(b6);let Q6=I?setInterval(()=>{if(n6)return;C(K,{sessionId:j6,environmentId:e,source:"repl"})},3600000):null;Q6?.unref?.();let Y6=W().session_keepalive_interval_v2_ms,_6=Y6>0?setInterval(()=>{if(!a)return;N("[bridge:repl] keep_alive sent"),a.write({type:"keep_alive"}).catch((v6)=>{N(`[bridge:repl] keep_alive write failed: ${d6(v6)}`)})},Y6):null;_6?.unref?.();let F6=!1;S6=async()=>{if(F6){N(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${e} session=${j6}`);return}F6=!0;let v6=Date.now();if(N(`[bridge:repl] Teardown starting: env=${e} session=${j6} workId=${A6??"none"} transportState=${a?.getStateLabel()??"null"}`),Q6!==null)clearInterval(Q6);if(_6!==null)clearInterval(_6);if(h6)process.off("SIGUSR2",h6);if(s.abort(),N("[bridge:repl] Teardown: poll loop aborted"),a){let H8=a.getLastSequenceNum();if(H8>l)l=H8}if(I){a=null,Z6.drop(),await C(K,{sessionId:j6,environmentId:e,source:"repl"}),N(`[bridge:repl] Teardown (perpetual): leaving env=${e} session=${j6} alive on server, duration=${Date.now()-v6}ms`);return}let m6=a;if(a=null,Z6.drop(),m6)m6.write(_C6(j6));let K8=A6?t.stopWork(e,A6,!0).then(()=>{N("[bridge:repl] Teardown: stopWork completed")}).catch((H8)=>{N(`[bridge:repl] Teardown stopWork failed: ${d6(H8)}`)}):Promise.resolve();await Promise.all([K8,J(j6)]),m6?.close(),N("[bridge:repl] Teardown: transport closed"),await t.deregisterEnvironment(e).catch((H8)=>{N(`[bridge:repl] Teardown deregister failed: ${d6(H8)}`)}),await g(K),N(`[bridge:repl] Teardown complete: env=${e} duration=${Date.now()-v6}ms`)};let W6=pq(()=>S6?.());return N(`[bridge:repl] Ready: env=${e} session=${j6}`),R?.("ready"),{get bridgeSessionId(){return j6},get environmentId(){return e},getSSESequenceNum(){let v6=a?.getLastSequenceNum()??0;return Math.max(l,v6)},sessionIngressUrl:O,writeMessages(v6){let m6=v6.filter((M8)=>KC6(M8)&&!G6.has(M8.uuid)&&!w6.has(M8.uuid));if(m6.length===0)return;if(!V6)for(let M8 of m6){let X1=Kd8(M8);if(X1!==void 0&&x?.(X1,j6)){V6=!0;break}}if(Z6.enqueue(...m6)){N(`[bridge:repl] Queued ${m6.length} message(s) during initial flush`);return}if(!a){let M8=m6.map((X1)=>X1.type).join(",");N(`[bridge:repl] Transport not configured, dropping ${m6.length} message(s) [${M8}] for session=${j6}`,{level:"warn"});return}for(let M8 of m6)w6.add(M8.uuid);N(`[bridge:repl] Sending ${m6.length} message(s) via transport`);let H8=X(m6).map((M8)=>({...M8,session_id:j6}));a.writeBatch(H8)},writeSdkMessages(v6){let m6=v6.filter((H8)=>!H8.uuid||!w6.has(H8.uuid));if(m6.length===0)return;if(!a){N(`[bridge:repl] Transport not configured, dropping ${m6.length} SDK message(s) for session=${j6}`,{level:"warn"});return}for(let H8 of m6)if(H8.uuid)w6.add(H8.uuid);let K8=m6.map((H8)=>({...H8,session_id:j6}));a.writeBatch(K8)},sendControlRequest(v6){if(!a){N("[bridge:repl] Transport not configured, skipping control_request");return}let m6={...v6,session_id:j6};a.write(m6),N(`[bridge:repl] Sent control_request request_id=${v6.request_id}`)},sendControlResponse(v6){if(!a){N("[bridge:repl] Transport not configured, skipping control_response");return}let m6={...v6,session_id:j6};a.write(m6),N("[bridge:repl] Sent control_response")},sendControlCancelRequest(v6){if(!a){N("[bridge:repl] Transport not configured, skipping control_cancel_request");return}let m6={type:"control_cancel_request",request_id:v6,session_id:j6};a.write(m6),N(`[bridge:repl] Sent control_cancel_request request_id=${v6}`)},sendResult(){if(!a){N(`[bridge:repl] sendResult: skipping, transport not configured session=${j6}`);return}a.write(_C6(j6)),N(`[bridge:repl] Sent result for session=${j6}`)},async teardown(){W6(),await S6?.(),N("[bridge:repl] Torn down"),d("tengu_bridge_repl_teardown",{})}}}async function EIY({api:q,getCredentials:K,signal:_,onStateChange:z,onWorkReceived:Y,onEnvironmentLost:$,getWsState:A,isAtCapacity:O,capacitySignal:w,onFatalError:j,getPollIntervalConfig:H=()=>Ls,getHeartbeatInfo:J,onHeartbeatFatal:M}){N(`[bridge:repl] Starting work poll loop for env=${K().environmentId}`);let P=0,W=null,D=null,f=0,G=!1;while(!_.aborted){let{environmentId:Z,environmentSecret:T}=K(),v=H();try{let V=await q.pollForWork(Z,T,_,v.reclaim_older_than_ms);if(f=0,P>0)N(`[bridge:repl] Poll recovered after ${P} consecutive error(s)`),P=0,W=null,D=null,z?.("ready");if(!V){let S=G;if(G=!1,O?.()&&w&&!S){let R=v.poll_interval_ms_at_capacity;if(v.non_exclusive_heartbeat_interval_ms>0&&J){d("tengu_bridge_heartbeat_mode_entered",{heartbeat_interval_ms:v.non_exclusive_heartbeat_interval_ms});let I=R>0?Date.now()+R:null,B=!1,p=0;while(!_.aborted&&O()&&(I===null||Date.now()<I)){let g=H();if(g.non_exclusive_heartbeat_interval_ms<=0)break;let F=J();if(!F)break;let U=w();try{await q.heartbeatWork(F.environmentId,F.workId,F.sessionToken)}catch(c){if(N(`[bridge:repl:heartbeat] Failed: ${d6(c)}`),c instanceof PT){if(U.cleanup(),d("tengu_bridge_heartbeat_error",{status:c.status,error_type:c.status===401||c.status===403?"auth_failed":"fatal"}),M)M(c),N(`[bridge:repl:heartbeat] Fatal (status=${c.status}), work state cleared — fast-polling for re-dispatch`);else B=!0;break}}p++,await R7(g.non_exclusive_heartbeat_interval_ms,U.signal),U.cleanup()}let C=B?"error":_.aborted?"shutdown":!O()?"capacity_changed":I!==null&&Date.now()>=I?"poll_due":"config_disabled";if(d("tengu_bridge_heartbeat_mode_exited",{reason:C,heartbeat_cycles:p}),!B){if(C==="poll_due")N(`[bridge:repl] Heartbeat poll_due after ${p} cycles — falling through to pollForWork`);continue}}let x=R>0?R:v.non_exclusive_heartbeat_interval_ms;if(x>0){let I=w(),B=Date.now();await R7(x,I.signal),I.cleanup();let p=Date.now()-B-x;if(p>60000)N(`[bridge:repl] At-capacity sleep overran by ${Math.round(p/1000)}s — process suspension detected, forcing one fast-poll cycle`),d("tengu_bridge_repl_suspension_detected",{overrun_ms:p}),G=!0}}else await R7(v.poll_interval_ms_not_at_capacity,_);continue}let E;try{E=UQ8(V.secret)}catch(S){N(`[bridge:repl] Failed to decode work secret: ${d6(S)}`),d("tengu_bridge_repl_work_secret_failed",{}),await q.stopWork(Z,V.id,!1).catch(()=>{});continue}N(`[bridge:repl] Acknowledging workId=${V.id}`);try{await q.acknowledgeWork(Z,V.id,E.session_ingress_token)}catch(S){N(`[bridge:repl] Acknowledge failed workId=${V.id}: ${d6(S)}`)}if(V.data.type==="healthcheck"){N("[bridge:repl] Healthcheck received");continue}if(V.data.type==="session"){let S=V.data.id;try{XT(S,"session_id")}catch{N(`[bridge:repl] Invalid session_id in work: ${S}`);continue}Y(S,E.session_ingress_token,V.id,E.use_code_sessions===!0),N("[bridge:repl] Work accepted, continuing poll loop")}}catch(V){if(_.aborted)break;if(V instanceof PT&&V.status===404&&$){let p=K().environmentId;if(Z!==p){N(`[bridge:repl] Stale poll error for old env=${Z}, current env=${p} — skipping onEnvironmentLost`),P=0,W=null;continue}if(f++,N(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${f}/3)`),d("tengu_bridge_repl_env_lost",{attempt:f}),f>3){N("[bridge:repl] Environment re-registration limit reached (3), giving up"),z?.("failed","Environment deleted and re-registration limit reached"),j?.();break}z?.("reconnecting","environment lost, recreating session");let C=await $();if(_.aborted)break;if(C){P=0,W=null,z?.("ready"),N(`[bridge:repl] Re-registered environment: ${C.environmentId}`);continue}z?.("failed","Environment deleted and re-registration failed"),j?.();break}if(V instanceof PT){let p=bS6(V.errorType),C=vq8(V);if(N(`[bridge:repl] Fatal poll error: ${V.message} (status=${V.status}, type=${V.errorType??"unknown"})${C?" (suppressed)":""}`),d("tengu_bridge_repl_fatal_error",{status:V.status,error_type:V.errorType}),c8(p?"info":"error","bridge_repl_fatal_error",{status:V.status,error_type:V.errorType}),!C)z?.("failed",p?"session expired · /remote-control to reconnect":V.message);j?.();break}let E=Date.now();if(D!==null&&E-D>PQK*2)N(`[bridge:repl] Detected system sleep (${Math.round((E-D)/1000)}s gap), resetting poll error budget`),c8("info","bridge_repl_poll_sleep_detected",{gapMs:E-D}),P=0,W=null;if(D=E,P++,W===null)W=E;let S=E-W,R=XRK(V),x=uF8(V),I=A?.()??"unknown";if(N(`[bridge:repl] Poll error (attempt ${P}, elapsed ${Math.round(S/1000)}s, ws=${I}): ${x}`),d("tengu_bridge_repl_poll_error",{status:R,consecutiveErrors:P,elapsedMs:S}),P===1)z?.("reconnecting",x);if(S>=WQK){N(`[bridge:repl] Poll failures exceeded ${WQK/1000}s (${P} errors), giving up`),c8("info","bridge_repl_poll_give_up"),d("tengu_bridge_repl_poll_give_up",{consecutiveErrors:P,elapsedMs:S,lastStatus:R}),z?.("failed","connection to server lost");break}let B=Math.min(NIY*2**(P-1),PQK);if(H().non_exclusive_heartbeat_interval_ms>0){let p=J?.();if(p)try{await q.heartbeatWork(p.environmentId,p.workId,p.sessionToken)}catch{}}await R7(B,_)}}N(`[bridge:repl] Work poll loop ended (aborted=${_.aborted}) env=${K().environmentId}`)}var NIY=2000,PQK=60000,WQK=900000,yIY=0;var fQK=y(()=>{kq8();_8();oY();k8();c9();Yd8();nq8();lQ();rw6();fz7();Tz7();nC();m8();kq8();Ys();S_7();y8();Q37()});function ZQK(q){return{Authorization:`Bearer ${q}`,"Content-Type":"application/json","anthropic-version":LIY}}async function Od8(q,K,_,z,Y){let $=`${q}/v1/code/sessions`,A;try{A=await $1.post($,{title:_,bridge:{},...Y?.length?{tags:Y}:{}},{headers:ZQK(K),timeout:z,validateStatus:(w)=>w<500})}catch(w){return N(`[code-session] Session create request failed: ${d6(w)}`),null}if(A.status!==200&&A.status!==201){let w=vd(A.data);return N(`[code-session] Session create failed ${A.status}${w?`: ${w}`:""}`),null}let O=A.data;if(!O||typeof O!=="object"||!("session"in O)||!O.session||typeof O.session!=="object"||!("id"in O.session)||typeof O.session.id!=="string"||!O.session.id.startsWith("cse_"))return N(`[code-session] No session.id (cse_*) in response: ${g6(O).slice(0,200)}`),null;return O.session.id}async function GQK(q,K,_,z,Y){let $=`${K}/v1/code/sessions/${q}/bridge`,A=ZQK(_);if(Y)A["X-Trusted-Device-Token"]=Y;let O;try{O=await $1.post($,{},{headers:A,timeout:z,validateStatus:(J)=>J<500})}catch(J){return N(`[code-session] /bridge request failed: ${d6(J)}`),null}if(O.status!==200){let J=vd(O.data);return N(`[code-session] /bridge failed ${O.status}${J?`: ${J}`:""}`),null}let w=O.data;if(w===null||typeof w!=="object"||!("worker_jwt"in w)||typeof w.worker_jwt!=="string"||!("expires_in"in w)||typeof w.expires_in!=="number"||!("api_base_url"in w)||typeof w.api_base_url!=="string"||!("worker_epoch"in w))return N(`[code-session] /bridge response malformed (need worker_jwt, expires_in, api_base_url, worker_epoch): ${g6(w).slice(0,200)}`),null;let j=w.worker_epoch,H=typeof j==="string"?Number(j):j;if(typeof H!=="number"||!Number.isFinite(H)||!Number.isSafeInteger(H))return N(`[code-session] /bridge worker_epoch invalid: ${g6(j)}`),null;return{worker_jwt:w.worker_jwt,api_base_url:w.api_base_url,expires_in:w.expires_in,worker_epoch:H}}var LIY="2023-06-01";var vz7=y(()=>{CK();_8();y8();l8();Ys()});var TQK={};T8(TQK,{initEnvLessBridgeCore:()=>CIY,fetchRemoteCredentials:()=>Hd8,createCodeSession:()=>Od8});function SIY(q){return{Authorization:`Bearer ${q}`,"Content-Type":"application/json","anthropic-version":hIY}}async function CIY(q){let{baseUrl:K,orgUUID:_,title:z,getAccessToken:Y,onAuth401:$,toSDKMessages:A,initialHistoryCap:O,initialMessages:w,onInboundMessage:j,onUserMessage:H,onPermissionResponse:J,onInterrupt:M,onSetModel:X,onSetMaxThinkingTokens:P,onSetPermissionMode:W,onStateChange:D,outboundOnly:f,tags:G}=q,Z=await Lq8(),T=Y();if(!T)return N("[remote-bridge] No OAuth token"),null;let v=await wd8(()=>Od8(K,T,z,Z.http_timeout_ms,G),"createCodeSession",Z);if(!v)return D?.("failed","Session creation failed — see debug log"),Zy("v2_session_create_failed",void 0,!0),null;let V=v;N(`[remote-bridge] Created session ${V}`),c8("info","bridge_repl_v2_session_created");let E=await wd8(()=>Hd8(V,K,T,Z.http_timeout_ms),"fetchRemoteCredentials",Z);if(!E)return D?.("failed","Remote credentials fetch failed — see debug log"),Zy("v2_remote_creds_failed",void 0,!0),jd8(V,K,T,_,Z.http_timeout_ms),null;N(`[remote-bridge] Fetched bridge credentials (expires_in=${E.expires_in}s)`);let S=EJ6(E.api_base_url,V);N(`[remote-bridge] v2 session URL: ${S}`);let R;try{R=await j48({sessionUrl:S,ingressToken:E.worker_jwt,sessionId:V,epoch:E.worker_epoch,heartbeatIntervalMs:Z.heartbeat_interval_ms,heartbeatJitterFraction:Z.heartbeat_jitter_fraction,getAuthToken:()=>E.worker_jwt,outboundOnly:f})}catch(o){return N(`[remote-bridge] v2 transport setup failed: ${d6(o)}`,{level:"error"}),D?.("failed",`Transport setup failed: ${d6(o)}`),Zy("v2_transport_setup_failed",void 0,!0),jd8(V,K,T,_,Z.http_timeout_ms),null}N(`[remote-bridge] v2 transport created (epoch=${E.worker_epoch})`),D?.("ready");let x=new Cs(Z.uuid_dedup_buffer_size),I=new Set;if(w)for(let o of w)I.add(o.uuid),x.add(o.uuid);let B=new Cs(Z.uuid_dedup_buffer_size),p=new H48,C=!1,g=!1,F=!1,U=!H,c="initial",K6;function t(o){if(g)return;d("tengu_bridge_repl_connect_timeout",{v2:!0,elapsed_ms:Z.connect_timeout_ms,cause:o})}let q6=pQ8({refreshBufferMs:Z.token_refresh_buffer_ms,getAccessToken:async()=>{let o=Y();if($)await $(o??"");return Y()??o},onRefresh:(o,s)=>{(async()=>{if(F||g){N("[remote-bridge] Recovery already in flight, skipping proactive refresh");return}F=!0;try{let a=await wd8(()=>Hd8(o,K,s,Z.http_timeout_ms),"fetchRemoteCredentials (proactive)",Z);if(!a||g)return;await i(a,"proactive_refresh"),N("[remote-bridge] Transport rebuilt (proactive refresh)")}catch(a){if(N(`[remote-bridge] Proactive refresh rebuild failed: ${d6(a)}`,{level:"error"}),c8("error","bridge_repl_v2_proactive_refresh_failed"),!g)D?.("failed",`Refresh failed: ${d6(a)}`)}finally{F=!1}})()},label:"remote"});q6.scheduleFromExpiresIn(V,E.expires_in);function e(){R.setOnConnect(()=>{if(clearTimeout(K6),N("[remote-bridge] v2 transport connected"),c8("info","bridge_repl_v2_transport_connected"),d("tengu_bridge_repl_ws_connected",{v2:!0,cause:c}),!C&&w&&w.length>0){C=!0;let o=R;j6(w).catch((s)=>N(`[remote-bridge] flushHistory failed: ${s}`)).finally(()=>{if(R!==o||g||F)return;M6(),D?.("connected")})}else if(!p.active)D?.("connected")}),R.setOnData((o)=>{_d8(o,x,B,j,J?(s)=>{R.reportState("running"),J(s)}:void 0,(s)=>zd8(s,{transport:R,sessionId:V,onInterrupt:M,onSetModel:X,onSetMaxThinkingTokens:P,onSetPermissionMode:W,outboundOnly:f}))}),R.setOnClose((o)=>{if(clearTimeout(K6),g)return;if(N(`[remote-bridge] v2 transport closed (code=${o})`),d("tengu_bridge_repl_ws_closed",{code:o,v2:!0}),o===401&&!F){$6();return}D?.("failed",`Transport closed (code ${o})`)})}async function i(o,s){c=s,p.start();try{let a=R.getLastSequenceNum();if(R.close(),R=await j48({sessionUrl:EJ6(o.api_base_url,V),ingressToken:o.worker_jwt,sessionId:V,epoch:o.worker_epoch,heartbeatIntervalMs:Z.heartbeat_interval_ms,heartbeatJitterFraction:Z.heartbeat_jitter_fraction,initialSequenceNum:a,getAuthToken:()=>o.worker_jwt,outboundOnly:f}),g){R.close();return}e(),R.connect(),K6=setTimeout(t,Z.connect_timeout_ms,c),q6.scheduleFromExpiresIn(V,o.expires_in),M6()}finally{p.drop()}}async function $6(){if(F)return;F=!0,D?.("reconnecting","JWT expired — refreshing"),N("[remote-bridge] 401 on SSE — attempting JWT refresh");try{let o=Y();if($)await $(o??"");let s=Y()??o;if(!s||g){if(!g)D?.("failed","JWT refresh failed: no OAuth token");return}let a=await wd8(()=>Hd8(V,K,s,Z.http_timeout_ms),"fetchRemoteCredentials (recovery)",Z);if(!a||g){if(!g)D?.("failed","JWT refresh failed after 401");return}C=!1,await i(a,"auth_401_recovery"),N("[remote-bridge] Transport rebuilt after 401")}catch(o){if(N(`[remote-bridge] 401 recovery failed: ${d6(o)}`,{level:"error"}),c8("error","bridge_repl_v2_jwt_refresh_failed"),!g)D?.("failed",`JWT refresh failed: ${d6(o)}`)}finally{F=!1}}if(e(),w&&w.length>0)p.start();R.connect(),K6=setTimeout(t,Z.connect_timeout_ms,c);function M6(){let o=p.end();if(o.length===0)return;for(let a of o)x.add(a.uuid);let s=A(o).map((a)=>({...a,session_id:V}));if(o.some((a)=>a.type==="user"))R.reportState("running");N(`[remote-bridge] Drained ${o.length} queued message(s) after flush`),R.writeBatch(s)}async function j6(o){let s=o.filter(KC6),a=O>0&&s.length>O?s.slice(-O):s;if(a.length<s.length)N(`[remote-bridge] Capped initial flush: ${s.length} -> ${a.length} (cap=${O})`);let n=A(a).map((l)=>({...l,session_id:V}));if(n.length===0)return;if(s.at(-1)?.type==="user")R.reportState("running");N(`[remote-bridge] Flushing ${n.length} history events`),await R.writeBatch(n)}async function G6(){if(g)return;g=!0,q6.cancelAll(),clearTimeout(K6),p.drop(),R.reportState("idle"),R.write(_C6(V));let o=Y(),s=await jd8(V,K,o,_,Z.teardown_archive_timeout_ms);if(s===401&&$)try{await $(o??""),o=Y(),s=await jd8(V,K,o,_,Z.teardown_archive_timeout_ms)}catch(n){N(`[remote-bridge] Teardown 401 retry threw: ${d6(n)}`,{level:"error"})}R.close();let a=s==="no_token"?"skipped_no_token":s==="timeout"||s==="error"?"network_error":s>=500?"server_5xx":s>=400?"server_4xx":"ok";N(`[remote-bridge] Torn down (archive=${s})`),c8("info","bridge_repl_v2_teardown"),d("tengu_bridge_repl_teardown",{v2:!0,archive_status:a,archive_ok:typeof s==="number"&&s<400,archive_http_status:typeof s==="number"?s:void 0,archive_timeout:s==="timeout",archive_no_token:s==="no_token"})}let w6=pq(G6);return d("tengu_bridge_repl_started",{has_initial_messages:!!(w&&w.length>0),v2:!0,expires_in_s:E.expires_in,inProtectedNamespace:Ik()}),{bridgeSessionId:V,environmentId:"",sessionIngressUrl:E.api_base_url,writeMessages(o){let s=o.filter((n)=>KC6(n)&&!I.has(n.uuid)&&!x.has(n.uuid));if(s.length===0)return;if(!U)for(let n of s){let l=Kd8(n);if(l!==void 0&&H?.(l,V)){U=!0;break}}if(p.enqueue(...s)){N(`[remote-bridge] Queued ${s.length} message(s) during flush`);return}for(let n of s)x.add(n.uuid);let a=A(s).map((n)=>({...n,session_id:V}));if(s.some((n)=>n.type==="user"))R.reportState("running");N(`[remote-bridge] Sending ${s.length} message(s)`),R.writeBatch(a)},writeSdkMessages(o){let s=o.filter((n)=>!n.uuid||!x.has(n.uuid));if(s.length===0)return;for(let n of s)if(n.uuid)x.add(n.uuid);let a=s.map((n)=>({...n,session_id:V}));R.writeBatch(a)},sendControlRequest(o){if(F){N(`[remote-bridge] Dropping control_request during 401 recovery: ${o.request_id}`);return}let s={...o,session_id:V};if(o.request.subtype==="can_use_tool")R.reportState("requires_action");R.write(s),N(`[remote-bridge] Sent control_request request_id=${o.request_id}`)},sendControlResponse(o){if(F){N("[remote-bridge] Dropping control_response during 401 recovery");return}let s={...o,session_id:V};R.reportState("running"),R.write(s),N("[remote-bridge] Sent control_response")},sendControlCancelRequest(o){if(F){N(`[remote-bridge] Dropping control_cancel_request during 401 recovery: ${o}`);return}let s={type:"control_cancel_request",request_id:o,session_id:V};R.reportState("running"),R.write(s),N(`[remote-bridge] Sent control_cancel_request request_id=${o}`)},sendResult(){if(F){N("[remote-bridge] Dropping result during 401 recovery");return}R.reportState("idle"),R.write(_C6(V)),N("[remote-bridge] Sent result")},async teardown(){w6(),await G6()}}}async function wd8(q,K,_){let z=_.init_retry_max_attempts;for(let Y=1;Y<=z;Y++){let $=await q();if($!==null)return $;if(Y<z){let A=_.init_retry_base_delay_ms*2**(Y-1),O=A*_.init_retry_jitter_fraction*(2*Math.random()-1),w=Math.min(A+O,_.init_retry_max_delay_ms);N(`[remote-bridge] ${K} failed (attempt ${Y}/${z}), retrying in ${Math.round(w)}ms`),await R7(w)}}return null}async function Hd8(q,K,_,z){let Y=await GQK(q,K,_,z,q46());if(!Y)return null;return xK6()?{...Y,api_base_url:K}:Y}async function jd8(q,K,_,z,Y){if(!_)return"no_token";let $=FC(q);try{let A=await $1.post(`${K}/v1/sessions/${$}/archive`,{},{headers:{...SIY(_),"anthropic-beta":"ccr-byoc-2025-07-29","x-organization-uuid":z},timeout:Y,validateStatus:()=>!0});return N(`[remote-bridge] Archive ${$} status=${A.status}`),A.status}catch(A){let O=d6(A);return N(`[remote-bridge] Archive failed: ${O}`),$1.isAxiosError(A)&&A.code==="ECONNABORTED"?"timeout":"error"}}var hIY="2023-06-01";var vQK=y(()=>{CK();Tz7();nq8();BQ8();rw6();hq8();Yd8();Ys();_8();oY();m8();y8();c9();k8();vz7();vz7();Ea()});var kz7={};T8(kz7,{initReplBridge:()=>xIY});import{hostname as bIY}from"os";async function xIY(q){let{onInboundMessage:K,onPermissionResponse:_,onInterrupt:z,onSetModel:Y,onSetMaxThinkingTokens:$,onSetPermissionMode:A,onStateChange:O,initialMessages:w,getMessages:j,previouslyFlushedUUIDs:H,initialName:J,perpetual:M,outboundOnly:X,tags:P}=q??{};if(rp1(lq7),!await Qq7())return Zy("not_enabled","[bridge:repl] Skipping: bridge not enabled"),null;if(!Ay())return Zy("no_oauth","[bridge:repl] Skipping: no OAuth tokens"),O?.("failed","/login"),null;if(await _s6(),!OO("allow_remote_control"))return Zy("policy_denied","[bridge:repl] Skipping: allow_remote_control policy not allowed"),O?.("failed","disabled by your organization's policy"),null;if(!DR6()){let F=j8();if(F.bridgeOauthDeadExpiresAt!=null&&(F.bridgeOauthDeadFailCount??0)>=3&&Kq()?.expiresAt===F.bridgeOauthDeadExpiresAt)return N(`[bridge:repl] Skipping: cross-process backoff (dead token seen ${F.bridgeOauthDeadFailCount} times)`),null;await k$();let U=Kq();if(U&&U.expiresAt!==null&&U.expiresAt<=Date.now()){Zy("oauth_expired_unrefreshable","[bridge:repl] Skipping: OAuth token expired and refresh failed (re-login required)"),O?.("failed","/login");let c=U.expiresAt;return b8((K6)=>({...K6,bridgeOauthDeadExpiresAt:c,bridgeOauthDeadFailCount:K6.bridgeOauthDeadExpiresAt===c?(K6.bridgeOauthDeadFailCount??0)+1:1})),null}}let W=E88(),D=`remote-control-${S5K()}`,f=!1,G=!1;if(J)D=J,f=!0,G=!0;else{let F=N8(),U=F?k0(F):void 0;if(U)D=U,f=!0,G=!0;else if(w&&w.length>0)for(let c=w.length-1;c>=0;c--){let K6=w[c];if(K6.type!=="user"||K6.isMeta||K6.toolUseResult||K6.isCompactSummary||K6.origin&&K6.origin.kind!=="human"||$H6(K6))continue;let t=EQ(K6.message.content);if(!t)continue;let q6=VQK(t);if(!q6)continue;D=q6,f=!0;break}}let Z=0,T,v=0,V=(F,U,c)=>{f=!0,D=F,N(`[bridge:repl] derived title from message ${c}: ${F}`),_57(U,F,{baseUrl:W,getAccessToken:Ay}).catch(()=>{})},E=(F,U)=>{let c=++v,K6=Z;h56(F,AbortSignal.timeout(15000)).then((t)=>{if(t&&c===v&&T===U&&!k0(N8()))V(t,U,K6)})},S=(F,U)=>{if(G||k0(N8()))return!0;if(T!==void 0&&T!==U)Z=0;if(T=U,Z++,Z===1&&!f){let c=VQK(F);if(c)V(c,U,Z);E(F,U)}else if(Z===3){let c=j?.(),K6=c?bF8(i2(c)):F;E(K6,U)}return Z>=3},R=gV("tengu_bridge_initial_history_cap",200,300000),x=await mW();if(!x)return Zy("no_org_uuid","[bridge:repl] Skipping: no org UUID"),O?.("failed","/login"),null;if(mH6()&&!M){let F=await Rq8();if(F)return Zy("version_too_old",`[bridge:repl] Skipping: ${F}`,!0),O?.("failed","run `claude update` to upgrade"),null;N("[bridge:repl] Using env-less bridge path (tengu_bridge_repl_v2)");let{initEnvLessBridgeCore:U}=await Promise.resolve().then(() => (vQK(),TQK));return U({baseUrl:W,orgUUID:x,title:D,getAccessToken:Ay,onAuth401:OS,toSDKMessages:t57,initialHistoryCap:R,initialMessages:w,onInboundMessage:K,onUserMessage:S,onPermissionResponse:_,onInterrupt:z,onSetModel:Y,onSetMaxThinkingTokens:$,onSetPermissionMode:A,onStateChange:O,outboundOnly:X,tags:P})}let I=X78();if(I)return Zy("version_too_old",`[bridge:repl] Skipping: ${I}`),O?.("failed","run `claude update` to upgrade"),null;let B=await oM(),p=await EB(),C=W,g="claude_code";return DQK({dir:r1(),machineName:bIY(),branch:B,gitRepoUrl:p,title:D,baseUrl:W,sessionIngressUrl:C,workerType:g,getAccessToken:Ay,createSession:(F)=>q57({...F,events:[],baseUrl:W,getAccessToken:Ay}),archiveSession:(F)=>K57(F,{baseUrl:W,getAccessToken:Ay,timeoutMs:1500}).catch((U)=>{N(`[bridge:repl] archiveBridgeSession threw: ${d6(U)}`,{level:"error"})}),getCurrentTitle:()=>k0(N8())??D,onUserMessage:S,toSDKMessages:t57,onAuth401:OS,getPollIntervalConfig:bd,initialHistoryCap:R,initialMessages:w,previouslyFlushedUUIDs:H,onInboundMessage:K,onPermissionResponse:_,onInterrupt:z,onSetModel:Y,onSetMaxThinkingTokens:$,onSetPermissionMode:A,onStateChange:O,perpetual:M})}function VQK(q){let K=CW6(q),z=(/^(.*?[.!?])\s/.exec(K)?.[1]??K).replace(/\s+/g," ").trim();if(!z)return;return z.length>kQK?z.slice(0,kQK-1)+"…":z}var kQK=50;var Vz7=y(()=>{v8();o1();pW();ZD();G7();V1();_8();bW6();y8();E5();yS6();i1();_K();PS6();Wx8();Ea();Jd();eH6();Ys();hq8();gQ8();fQK()});var RQK={};T8(RQK,{resolveInboundAttachments:()=>EQK,resolveAndPrepend:()=>Nz7,prependPathRefs:()=>LQK,extractInboundAttachments:()=>yQK});import{randomUUID as IIY}from"crypto";import{mkdir as uIY,writeFile as mIY}from"fs/promises";import{basename as pIY,join as NQK}from"path";function $C6(q){N(`[bridge:inbound-attach] ${q}`)}function yQK(q){if(typeof q!=="object"||q===null||!("file_attachments"in q))return[];let K=FIY().safeParse(q.file_attachments);return K.success?K.data:[]}function UIY(q){return pIY(q).replace(/[^a-zA-Z0-9._-]/g,"_")||"attachment"}function QIY(){return NQK(c1(),"uploads",N8())}async function dIY(q){let K=Ay();if(!K){$C6("skip: no oauth token");return}let _;try{let O=`${E88()}/api/oauth/files/${encodeURIComponent(q.file_uuid)}/content`,w=await $1.get(O,{headers:{Authorization:`Bearer ${K}`},responseType:"arraybuffer",timeout:BIY,validateStatus:()=>!0});if(w.status!==200){$C6(`fetch ${q.file_uuid} failed: status=${w.status}`);return}_=Buffer.from(w.data)}catch(O){$C6(`fetch ${q.file_uuid} threw: ${O}`);return}let z=UIY(q.file_name),Y=(q.file_uuid.slice(0,8)||IIY().slice(0,8)).replace(/[^a-zA-Z0-9_-]/g,"_"),$=QIY(),A=NQK($,`${Y}-${z}`);try{await uIY($,{recursive:!0}),await mIY(A,_)}catch(O){$C6(`write ${A} failed: ${O}`);return}return $C6(`resolved ${q.file_uuid} → ${A} (${_.length} bytes)`),A}async function EQK(q){if(q.length===0)return"";$C6(`resolving ${q.length} attachment(s)`);let _=(await Promise.all(q.map(dIY))).filter((z)=>z!==void 0);if(_.length===0)return"";return _.map((z)=>`@"${z}"`).join(" ")+" "}function LQK(q,K){if(!K)return q;if(typeof q==="string")return K+q;let _=q.findLastIndex((z)=>z.type==="text");if(_!==-1){let z=q[_];if(z.type==="text")return[...q.slice(0,_),{...z,text:K+z.text},...q.slice(_+1)]}return[...q,{type:"text",text:K.trimEnd()}]}async function Nz7(q,K){let _=yQK(q);if(_.length===0)return K;let z=await EQK(_);return LQK(K,z)}var BIY=30000,gIY,FIY;var yz7=y(()=>{CK();x7();v8();_8();m8();Ea();gIY=B6(()=>L.object({file_uuid:L.string(),file_name:L.string()})),FIY=B6(()=>L.array(gIY()))});function hQK(q,K,_,z,Y){let $=rX.useRef(null),A=rX.useRef(void 0),O=rX.useRef(0),w=rX.useRef(new Set),j=rX.useRef(void 0),H=rX.useRef(0),J=s7(),M=rX.useRef(z);M.current=z;let X=rX.useRef(Y);X.current=Y;let P=rX.useRef(q);P.current=q;let W=jz(),{addNotification:D}=PK(),f=P8((V)=>V.replBridgeEnabled),G=P8((V)=>V.replBridgeConnected),Z=P8((V)=>V.replBridgeOutboundOnly),T=P8((V)=>V.replBridgeInitialName);return rX.useEffect(()=>{{let E=function(x){if(V)return;D({key:"bridge-failed",jsx:rX.default.createElement(rX.default.Fragment,null,rX.default.createElement(k,{color:"error"},"Remote Control failed"),x&&rX.default.createElement(k,{dimColor:!0}," · ",x)),priority:"immediate"})};if(!f)return;let V=Z;if(H.current>=cIY){N(`[bridge:repl] Hook: ${H.current} consecutive init failures, not retrying this session`);let x="disabled after repeated failures · restart to retry";E(x),J((I)=>{if(I.replBridgeError===x&&!I.replBridgeEnabled)return I;return{...I,replBridgeError:x,replBridgeEnabled:!1}});return}let S=!1,R=q.length;return(async()=>{try{let C=function(c,K6){if(S)return;if(V){if(N(`[bridge:repl] Mirror state=${c}${K6?` detail=${K6}`:""}`),c==="failed")J((q6)=>{if(!q6.replBridgeConnected)return q6;return{...q6,replBridgeConnected:!1}});else if(c==="ready"||c==="connected")J((q6)=>{if(q6.replBridgeConnected)return q6;return{...q6,replBridgeConnected:!0}});return}let t=$.current;switch(c){case"ready":J((q6)=>{let e=t&&t.environmentId!==""?U46(t.environmentId,t.sessionIngressUrl):q6.replBridgeConnectUrl,i=t?MM(t.bridgeSessionId,t.sessionIngressUrl):q6.replBridgeSessionUrl,$6=t?.environmentId,M6=t?.bridgeSessionId;if(q6.replBridgeConnected&&!q6.replBridgeSessionActive&&!q6.replBridgeReconnecting&&q6.replBridgeConnectUrl===e&&q6.replBridgeSessionUrl===i&&q6.replBridgeEnvironmentId===$6&&q6.replBridgeSessionId===M6)return q6;return{...q6,replBridgeConnected:!0,replBridgeSessionActive:!1,replBridgeReconnecting:!1,replBridgeConnectUrl:e,replBridgeSessionUrl:i,replBridgeEnvironmentId:$6,replBridgeSessionId:M6,replBridgeError:void 0}});break;case"connected":{if(J((q6)=>{if(q6.replBridgeSessionActive)return q6;return{...q6,replBridgeConnected:!0,replBridgeSessionActive:!0,replBridgeReconnecting:!1,replBridgeError:void 0}}),g8("tengu_bridge_system_init",!1))(async()=>{try{let q6=await EO6(Z8());if(S)return;let e=W.getState();$.current?.writeSdkMessages([eQ8({tools:[],mcpClients:[],model:X.current,permissionMode:e.toolPermissionContext.mode,commands:M.current.filter(wQ8),agents:e.agentDefinitions.activeAgents,skills:q6,plugins:[],fastMode:e.fastMode})])}catch(q6){N(`[bridge:repl] Failed to send system/init: ${d6(q6)}`,{level:"error"})}})();break}case"reconnecting":J((q6)=>{if(q6.replBridgeReconnecting)return q6;return{...q6,replBridgeReconnecting:!0,replBridgeSessionActive:!1}});break;case"failed":clearTimeout(j.current),E(K6),J((q6)=>({...q6,replBridgeError:K6,replBridgeReconnecting:!1,replBridgeSessionActive:!1,replBridgeConnected:!1})),j.current=setTimeout(()=>{if(S)return;j.current=void 0,J((q6)=>{if(!q6.replBridgeError)return q6;return{...q6,replBridgeEnabled:!1,replBridgeError:void 0}})},Ez7);break}},F=function(c){let K6=c.response?.request_id;if(!K6)return;let t=g.get(K6);if(!t){N(`[bridge:repl] No handler for control_response request_id=${K6}`);return}g.delete(K6);let q6=c.response;if(q6.subtype==="success"&&q6.response&&zQK(q6.response))t(q6.response)};if(A.current)N("[bridge:repl] Hook: waiting for previous teardown to complete before re-init"),await A.current,A.current=void 0,N("[bridge:repl] Hook: previous teardown complete, proceeding with re-init");if(S)return;let{initReplBridge:x}=await Promise.resolve().then(() => (Vz7(),kz7)),{shouldShowAppUpgradeMessage:I}=await Promise.resolve().then(() => (hq8(),TpK)),B=!1;async function p(c){try{let K6=tQ8(c);if(!K6)return;let{uuid:t}=K6,{resolveAndPrepend:q6}=await Promise.resolve().then(() => (yz7(),RQK)),e=K6.content,i=await q6(c,e),$6=typeof i==="string"?i.slice(0,80):`[${i.length} content blocks]`;N(`[bridge:repl] Injecting inbound user message: ${$6}${t?` uuid=${t}`:""}`),jM({value:i,mode:"prompt",uuid:t,skipSlashCommands:!0,bridgeOrigin:!0})}catch(K6){N(`[bridge:repl] handleInboundMessage failed: ${K6}`,{level:"error"})}}let g=new Map,U=await x({outboundOnly:V,tags:V?["ccr-mirror"]:void 0,onInboundMessage:p,onPermissionResponse:F,onInterrupt(){_.current?.abort()},onSetModel(c){let K6=c==="default"?null:c??null;YP(K6),J((t)=>{if(t.mainLoopModelForSession===K6)return t;return{...t,mainLoopModelForSession:K6}})},onSetMaxThinkingTokens(c){let K6=c!==null;J((t)=>{if(t.thinkingEnabled===K6)return t;return{...t,thinkingEnabled:K6}})},onSetPermissionMode(c){if(c==="bypassPermissions"){if(na())return{ok:!1,error:"Cannot set permission mode to bypassPermissions because it is disabled by settings or configuration"};if(!W.getState().toolPermissionContext.isBypassPermissionsModeAvailable)return{ok:!1,error:"Cannot set permission mode to bypassPermissions because the session was not launched with --dangerously-skip-permissions"}}if(c==="auto"&&!Xy()){let K6=la();return{ok:!1,error:K6?`Cannot set permission mode to auto: ${A56(K6)}`:"Cannot set permission mode to auto"}}return J((K6)=>{let t=K6.toolPermissionContext.mode;if(t===c)return K6;let q6=ca(t,c,K6.toolPermissionContext);return{...K6,toolPermissionContext:{...q6,mode:c}}}),setImmediate(()=>{EE6()?.((K6)=>{return K6.forEach((t)=>{t.recheckPermission()}),K6})}),{ok:!0}},onStateChange:C,initialMessages:q.length>0?q:void 0,getMessages:()=>P.current,previouslyFlushedUUIDs:w.current,initialName:T,perpetual:B});if(S){if(N(`[bridge:repl] Hook: init cancelled during flight, tearing down${U?` env=${U.environmentId}`:""}`),U)U.teardown();return}if(!U){H.current++,N(`[bridge:repl] Init returned null (precondition or session creation failed); consecutive failures: ${H.current}`),clearTimeout(j.current),J((c)=>({...c,replBridgeError:c.replBridgeError??"check debug logs for details"})),j.current=setTimeout(()=>{if(S)return;j.current=void 0,J((c)=>{if(!c.replBridgeError)return c;return{...c,replBridgeEnabled:!1,replBridgeError:void 0}})},Ez7);return}if($.current=U,w67(U),H.current=0,O.current=R,V)J((c)=>{if(c.replBridgeConnected&&c.replBridgeSessionId===U.bridgeSessionId)return c;return{...c,replBridgeConnected:!0,replBridgeSessionId:U.bridgeSessionId,replBridgeSessionUrl:void 0,replBridgeConnectUrl:void 0,replBridgeError:void 0}}),N(`[bridge:repl] Mirror initialized, session=${U.bridgeSessionId}`);else{let c={sendRequest(i,$6,M6,j6,G6,w6,o){U.sendControlRequest({type:"control_request",request_id:i,request:{subtype:"can_use_tool",tool_name:$6,input:M6,tool_use_id:j6,description:G6,...w6?{permission_suggestions:w6}:{},...o?{blocked_path:o}:{}}})},sendResponse(i,$6){let M6={...$6};U.sendControlResponse({type:"control_response",response:{subtype:"success",request_id:i,response:M6}})},cancelRequest(i){U.sendControlCancelRequest(i)},onResponse(i,$6){return g.set(i,$6),()=>{g.delete(i)}}};J((i)=>({...i,replBridgePermissionCallbacks:c}));let K6=MM(U.bridgeSessionId,U.sessionIngressUrl),q6=U.environmentId!==""?U46(U.environmentId,U.sessionIngressUrl):void 0;J((i)=>{if(i.replBridgeConnected&&i.replBridgeSessionUrl===K6)return i;return{...i,replBridgeConnected:!0,replBridgeSessionUrl:K6,replBridgeConnectUrl:q6??i.replBridgeConnectUrl,replBridgeEnvironmentId:U.environmentId,replBridgeSessionId:U.bridgeSessionId,replBridgeError:void 0}});let e=!B?await I().catch(()=>!1):!1;if(S)return;K((i)=>[...i,a0K(K6,e?"Please upgrade to the latest version of the Claude mobile app to see your Remote Control sessions.":void 0)]),N(`[bridge:repl] Hook initialized, session=${U.bridgeSessionId}`)}}catch(x){if(S)return;H.current++;let I=d6(x);if(N(`[bridge:repl] Init failed: ${I}; consecutive failures: ${H.current}`),clearTimeout(j.current),E(I),J((B)=>({...B,replBridgeError:I})),j.current=setTimeout(()=>{if(S)return;j.current=void 0,J((B)=>{if(!B.replBridgeError)return B;return{...B,replBridgeEnabled:!1,replBridgeError:void 0}})},Ez7),!V)K((B)=>[...B,fw(`Remote Control failed to connect: ${I}`,"warning")])}})(),()=>{if(S=!0,clearTimeout(j.current),j.current=void 0,$.current)N(`[bridge:repl] Hook cleanup: starting teardown for env=${$.current.environmentId} session=${$.current.bridgeSessionId}`),A.current=$.current.teardown(),$.current=null,w67(null);J((x)=>{if(!x.replBridgeConnected&&!x.replBridgeSessionActive&&!x.replBridgeError)return x;return{...x,replBridgeConnected:!1,replBridgeSessionActive:!1,replBridgeReconnecting:!1,replBridgeConnectUrl:void 0,replBridgeSessionUrl:void 0,replBridgeEnvironmentId:void 0,replBridgeSessionId:void 0,replBridgeError:void 0,replBridgePermissionCallbacks:void 0}}),O.current=0}}},[f,Z,J,K,D]),rX.useEffect(()=>{{if(!G)return;let V=$.current;if(!V)return;if(O.current>q.length)N(`[bridge:repl] Compaction detected: lastWrittenIndex=${O.current} > messages.length=${q.length}, clamping`);let E=Math.min(O.current,q.length),S=[];for(let R=E;R<q.length;R++){let x=q[R];if(x&&(x.type==="user"||x.type==="assistant"||x.type==="system"&&x.subtype==="local_command"))S.push(x)}if(O.current=q.length,S.length>0)V.writeMessages(S)}},[q,G]),{sendBridgeResult:rX.useCallback(()=>{$.current?.sendResult()},[])}}var rX,Ez7=1e4,cIY=3;var SQK=y(()=>{v8();YQK();Q46();Mz7();j67();yA();h$();s6();o1();C7();I7();_8();y8();p2();Pz7();i1();fX();rX=O6(D6(),1)});var IQK={};T8(IQK,{selectableUserMessagesFilter:()=>xJ6,messagesAfterAreOnlySynthetic:()=>Jd8,MessageSelector:()=>hz7});import{randomUUID as lIY}from"crypto";import*as AC6 from"path";function bQK(q){return q.type==="text"}function Rz7(q){return q==="summarize"||q==="summarize_up_to"}function hz7({messages:q,onPreRestore:K,onRestoreMessage:_,onRestoreCode:z,onSummarize:Y,onClose:$,preselectedMessage:A}){let O=P8((s)=>s.fileHistory),[w,j]=s2.useState(void 0),H=e$(),J=s2.useMemo(lIY,[]),M=s2.useMemo(()=>[...q.filter(xJ6),{...U8({content:""}),uuid:J}],[q,J]),[X,P]=s2.useState(M.length-1),W=Math.max(0,Math.min(X-Math.floor(Lz7/2),M.length-Lz7)),D=M.length>1,[f,G]=s2.useState(A),[Z,T]=s2.useState(void 0);s2.useEffect(()=>{if(!A||!H)return;let s=!1;return $68(O,A.uuid).then((a)=>{if(!s)T(a)}),()=>{s=!0}},[A,H,O]);let[v,V]=s2.useState(!1),[E,S]=s2.useState(null),[R,x]=s2.useState("both"),[I,B]=s2.useState(""),[p,C]=s2.useState("");function g(s){let a=s?[{value:"both",label:"Restore code and conversation"},{value:"conversation",label:"Restore conversation"},{value:"code",label:"Restore code"}]:[{value:"conversation",label:"Restore conversation"}],n={type:"input",placeholder:"add context (optional)",initialValue:"",allowEmptySubmitToCancel:!0,showLabelWithValue:!0,labelValueSeparator:": "};return a.push({value:"summarize",label:"Summarize from here",...n,onChange:B}),a.push({value:"nevermind",label:"Never mind"}),a}s2.useEffect(()=>{d("tengu_message_selector_opened",{})},[]);async function F(s){K(),V(!0);try{await _(s),V(!1),$()}catch(a){H6(a),V(!1),j(`Failed to restore the conversation:
7972${a}`)}}async function U(s){let a=q.indexOf(s),n=q.length-1-a;if(d("tengu_message_selector_selected",{index_from_end:n,message_type:s.type,is_current_prompt:!1}),!q.includes(s)){$();return}if(!H){await F(s);return}let l=await $68(O,s.uuid);G(s),T(l)}async function c(s){if(d("tengu_message_selector_restore_option_selected",{option:s}),!f){j("Message not found.");return}if(s==="nevermind"){if(A)$();else G(void 0);return}if(Rz7(s)){K(),V(!0),S(s),j(void 0);try{let l=s==="summarize_up_to"?"up_to":"from",A6=(l==="up_to"?p:I).trim()||void 0;await Y(f,A6,l),V(!1),S(null),G(void 0),$()}catch(l){H6(l),V(!1),S(null),G(void 0),j(`Failed to summarize:
7973${l}`)}return}K(),V(!0),j(void 0);let a=null,n=null;if(s==="code"||s==="both")try{await z(f)}catch(l){a=l,H6(a)}if(s==="conversation"||s==="both")try{await _(f)}catch(l){n=l,H6(n)}if(V(!1),G(void 0),n&&a)j(`Failed to restore the conversation and code:

Callers 2

j48Function · 0.95
constructorMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected