@sourcegraph/amp 0.0.1780456213-g47360c → 0.0.1780478921-g021c3e

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.
Files changed (2) hide show
  1. package/dist/main.js +11 -11
  2. package/package.json +2 -2
package/dist/main.js CHANGED
@@ -2647,7 +2647,7 @@ function y4(A){return $yQ(A,tB0(A))}function b4(A,Q){if(Q.length<cY4){let $=DyQ(
2647
2647
  //! Licensed under the MIT License (https://mit-license.org/)
2648
2648
  function CQ({initialBufferLength:A=1024,maxBufferLength:Q=33554432}){if(J7)d3(LE(A),AZ),d3(LE(Q),AZ),d3(A<=Q,"initialBufferLength must be lower than or equal to maxBufferLength");return{initialBufferLength:A,maxBufferLength:Q}}var NZ4=M4(Vc(),1);var RZ4=M4(Vc(),1);var $Z4="/connect",YyQ="/websocket",BZ4="/websocket/";var EZ4="x-rivet-encoding",Af0="x-rivet-conn-params";var ZyQ="x-rivet-token",FyQ="x-rivet-target",XyQ="x-rivet-actor";var IyQ="x-rivet-skip-ready-wait",GyQ="rivet",VyQ="rivet_target.",KyQ="rivet_actor.",zyQ="rivet_encoding.",WyQ="rivet_conn_params.",CyQ="rivet_token.",HyQ="rivet_skip_ready_wait",NyQ="rivet_test_ack_hook.";var DZ4=class extends Error{};var uc=class extends DZ4{constructor(A,Q){super(`HTTP request error: ${A}`,{cause:Q==null?void 0:Q.cause})}},A30=class extends DZ4{constructor(){super("Attempting to interact with a disposed actor connection.")}};function ok0(A,Q){return A==="guard"&&(Q==="actor_ready_timeout"||Q==="actor_runner_failed")}function qyQ(A,Q,$,B){return new mQ(A,Q,`Actor failed to start (${$}): ${JSON.stringify(B)}`,{metadata:{actorId:$,details:B}})}function uyQ(A,Q){return new mQ("rivetkit",ed,A,{cause:Q==null?void 0:Q.cause})}var sD=CQ({});function zP(A){return WK(A)}function WP(A,Q){CK(A,Q)}function wyQ(A){return{actorId:y4(A),connectionId:y4(A),connectionToken:y4(A)}}function MyQ(A,Q){b4(A,Q.actorId),b4(A,Q.connectionId),b4(A,Q.connectionToken)}function JZ4(A){return u$(A)?zP(A):null}function UZ4(A,Q){if(w$(A,Q!=null),Q!=null)WP(A,Q)}function OyQ(A){return u$(A)?w5(A):null}function LyQ(A,Q){if(w$(A,Q!=null),Q!=null)M5(A,Q)}function jyQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:JZ4(A),actionId:OyQ(A)}}function RyQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),UZ4(A,Q.metadata),LyQ(A,Q.actionId)}function PyQ(A){return{id:w5(A),output:zP(A)}}function vyQ(A,Q){M5(A,Q.id),WP(A,Q.output)}function TyQ(A){return{name:y4(A),args:zP(A)}}function _yQ(A,Q){b4(A,Q.name),WP(A,Q.args)}function SyQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"Init",val:wyQ(A)};case 1:return{tag:"Error",val:jyQ(A)};case 2:return{tag:"ActionResponse",val:PyQ(A)};case 3:return{tag:"Event",val:TyQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function kyQ(A,Q){switch(Q.tag){case"Init":{yQ(A,0),MyQ(A,Q.val);break}case"Error":{yQ(A,1),RyQ(A,Q.val);break}case"ActionResponse":{yQ(A,2),vyQ(A,Q.val);break}case"Event":{yQ(A,3),_yQ(A,Q.val);break}}}function fyQ(A){return{body:SyQ(A)}}function xyQ(A,Q){kyQ(A,Q.body)}function yyQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return xyQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function byQ(A){let Q=new P4(A,sD),$=fyQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function hyQ(A){return{id:w5(A),name:y4(A),args:zP(A)}}function gyQ(A,Q){M5(A,Q.id),b4(A,Q.name),WP(A,Q.args)}function myQ(A){return{eventName:y4(A),subscribe:u$(A)}}function dyQ(A,Q){b4(A,Q.eventName),w$(A,Q.subscribe)}function cyQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"ActionRequest",val:hyQ(A)};case 1:return{tag:"SubscriptionRequest",val:myQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function pyQ(A,Q){switch(Q.tag){case"ActionRequest":{yQ(A,0),gyQ(A,Q.val);break}case"SubscriptionRequest":{yQ(A,1),dyQ(A,Q.val);break}}}function lyQ(A){return{body:cyQ(A)}}function iyQ(A,Q){pyQ(A,Q.body)}function nyQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return iyQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function ayQ(A){let Q=new P4(A,sD),$=lyQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function oyQ(A){return{args:zP(A)}}function ryQ(A,Q){WP(A,Q.args)}function syQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return ryQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function tyQ(A){let Q=new P4(A,sD),$=oyQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function eyQ(A){return{output:zP(A)}}function AbQ(A,Q){WP(A,Q.output)}function QbQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return AbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function $bQ(A){let Q=new P4(A,sD),$=eyQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function BbQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:JZ4(A)}}function EbQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),UZ4(A,Q.metadata)}function DbQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return EbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function JbQ(A){let Q=new P4(A,sD),$=BbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function UbQ(A){return{actorId:y4(A)}}function YbQ(A,Q){b4(A,Q.actorId)}function ZbQ(A,Q){let $=Q!=null?CQ(Q):sD,B=new P4(new Uint8Array($.initialBufferLength),$);return YbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function FbQ(A){let Q=new P4(A,sD),$=UbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}var tD=CQ({});function CP(A){return WK(A)}function HP(A,Q){CK(A,Q)}function XbQ(A){return{actorId:y4(A),connectionId:y4(A)}}function IbQ(A,Q){b4(A,Q.actorId),b4(A,Q.connectionId)}function YZ4(A){return u$(A)?CP(A):null}function ZZ4(A,Q){if(w$(A,Q!=null),Q!=null)HP(A,Q)}function GbQ(A){return u$(A)?w5(A):null}function VbQ(A,Q){if(w$(A,Q!=null),Q!=null)M5(A,Q)}function KbQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:YZ4(A),actionId:GbQ(A)}}function zbQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),ZZ4(A,Q.metadata),VbQ(A,Q.actionId)}function WbQ(A){return{id:w5(A),output:CP(A)}}function CbQ(A,Q){M5(A,Q.id),HP(A,Q.output)}function HbQ(A){return{name:y4(A),args:CP(A)}}function NbQ(A,Q){b4(A,Q.name),HP(A,Q.args)}function qbQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"Init",val:XbQ(A)};case 1:return{tag:"Error",val:KbQ(A)};case 2:return{tag:"ActionResponse",val:WbQ(A)};case 3:return{tag:"Event",val:HbQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function ubQ(A,Q){switch(Q.tag){case"Init":{yQ(A,0),IbQ(A,Q.val);break}case"Error":{yQ(A,1),zbQ(A,Q.val);break}case"ActionResponse":{yQ(A,2),CbQ(A,Q.val);break}case"Event":{yQ(A,3),NbQ(A,Q.val);break}}}function wbQ(A){return{body:qbQ(A)}}function MbQ(A,Q){ubQ(A,Q.body)}function ObQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return MbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function LbQ(A){let Q=new P4(A,tD),$=wbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function jbQ(A){return{id:w5(A),name:y4(A),args:CP(A)}}function RbQ(A,Q){M5(A,Q.id),b4(A,Q.name),HP(A,Q.args)}function PbQ(A){return{eventName:y4(A),subscribe:u$(A)}}function vbQ(A,Q){b4(A,Q.eventName),w$(A,Q.subscribe)}function TbQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"ActionRequest",val:jbQ(A)};case 1:return{tag:"SubscriptionRequest",val:PbQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function _bQ(A,Q){switch(Q.tag){case"ActionRequest":{yQ(A,0),RbQ(A,Q.val);break}case"SubscriptionRequest":{yQ(A,1),vbQ(A,Q.val);break}}}function SbQ(A){return{body:TbQ(A)}}function kbQ(A,Q){_bQ(A,Q.body)}function fbQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return kbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function xbQ(A){let Q=new P4(A,tD),$=SbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function ybQ(A){return{args:CP(A)}}function bbQ(A,Q){HP(A,Q.args)}function hbQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return bbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function gbQ(A){let Q=new P4(A,tD),$=ybQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function mbQ(A){return{output:CP(A)}}function dbQ(A,Q){HP(A,Q.output)}function cbQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return dbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function pbQ(A){let Q=new P4(A,tD),$=mbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function lbQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:YZ4(A)}}function ibQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),ZZ4(A,Q.metadata)}function nbQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return ibQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function abQ(A){let Q=new P4(A,tD),$=lbQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function obQ(A){return{actorId:y4(A)}}function rbQ(A,Q){b4(A,Q.actorId)}function sbQ(A,Q){let $=Q!=null?CQ(Q):tD,B=new P4(new Uint8Array($.initialBufferLength),$);return rbQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function tbQ(A){let Q=new P4(A,tD),$=obQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}var U7=CQ({});function dN(A){return WK(A)}function cN(A,Q){CK(A,Q)}function ebQ(A){return{actorId:y4(A),connectionId:y4(A)}}function AhQ(A,Q){b4(A,Q.actorId),b4(A,Q.connectionId)}function Qf0(A){return u$(A)?dN(A):null}function $f0(A,Q){if(w$(A,Q!=null),Q!=null)cN(A,Q)}function QhQ(A){return u$(A)?w5(A):null}function $hQ(A,Q){if(w$(A,Q!=null),Q!=null)M5(A,Q)}function BhQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:Qf0(A),actionId:QhQ(A)}}function EhQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),$f0(A,Q.metadata),$hQ(A,Q.actionId)}function DhQ(A){return{id:w5(A),output:dN(A)}}function JhQ(A,Q){M5(A,Q.id),cN(A,Q.output)}function UhQ(A){return{name:y4(A),args:dN(A)}}function YhQ(A,Q){b4(A,Q.name),cN(A,Q.args)}function ZhQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"Init",val:ebQ(A)};case 1:return{tag:"Error",val:BhQ(A)};case 2:return{tag:"ActionResponse",val:DhQ(A)};case 3:return{tag:"Event",val:UhQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function FhQ(A,Q){switch(Q.tag){case"Init":{yQ(A,0),AhQ(A,Q.val);break}case"Error":{yQ(A,1),EhQ(A,Q.val);break}case"ActionResponse":{yQ(A,2),JhQ(A,Q.val);break}case"Event":{yQ(A,3),YhQ(A,Q.val);break}}}function XhQ(A){return{body:ZhQ(A)}}function IhQ(A,Q){FhQ(A,Q.body)}function GhQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return IhQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function VhQ(A){let Q=new P4(A,U7),$=XhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function KhQ(A){return{id:w5(A),name:y4(A),args:dN(A)}}function zhQ(A,Q){M5(A,Q.id),b4(A,Q.name),cN(A,Q.args)}function WhQ(A){return{eventName:y4(A),subscribe:u$(A)}}function ChQ(A,Q){b4(A,Q.eventName),w$(A,Q.subscribe)}function HhQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"ActionRequest",val:KhQ(A)};case 1:return{tag:"SubscriptionRequest",val:WhQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function NhQ(A,Q){switch(Q.tag){case"ActionRequest":{yQ(A,0),zhQ(A,Q.val);break}case"SubscriptionRequest":{yQ(A,1),ChQ(A,Q.val);break}}}function qhQ(A){return{body:HhQ(A)}}function uhQ(A,Q){NhQ(A,Q.body)}function whQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return uhQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function MhQ(A){let Q=new P4(A,U7),$=qhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function OhQ(A){return{args:dN(A)}}function LhQ(A,Q){cN(A,Q.args)}function jhQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return LhQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function RhQ(A){let Q=new P4(A,U7),$=OhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function PhQ(A){return{output:dN(A)}}function vhQ(A,Q){cN(A,Q.output)}function ThQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return vhQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function _hQ(A){let Q=new P4(A,U7),$=PhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function ShQ(A){return u$(A)?y4(A):null}function khQ(A,Q){if(w$(A,Q!=null),Q!=null)b4(A,Q)}function fhQ(A){return u$(A)?u$(A):null}function xhQ(A,Q){if(w$(A,Q!=null),Q!=null)w$(A,Q)}function yhQ(A){return u$(A)?rB0(A):null}function bhQ(A,Q){if(w$(A,Q!=null),Q!=null)sB0(A,Q)}function hhQ(A){return{body:dN(A),name:ShQ(A),wait:fhQ(A),timeout:yhQ(A)}}function ghQ(A,Q){cN(A,Q.body),khQ(A,Q.name),xhQ(A,Q.wait),bhQ(A,Q.timeout)}function mhQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return ghQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function dhQ(A){let Q=new P4(A,U7),$=hhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function chQ(A){return{status:y4(A),response:Qf0(A)}}function phQ(A,Q){b4(A,Q.status),$f0(A,Q.response)}function lhQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return phQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function ihQ(A){let Q=new P4(A,U7),$=chQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function nhQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:Qf0(A)}}function ahQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),$f0(A,Q.metadata)}function ohQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return ahQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function rhQ(A){let Q=new P4(A,U7),$=nhQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function shQ(A){return{actorId:y4(A)}}function thQ(A,Q){b4(A,Q.actorId)}function ehQ(A,Q){let $=Q!=null?CQ(Q):U7,B=new P4(new Uint8Array($.initialBufferLength),$);return thQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function AgQ(A){let Q=new P4(A,U7),$=shQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}var Y7=CQ({});function pN(A){return WK(A)}function lN(A,Q){CK(A,Q)}function FZ4(A){return u$(A)?y4(A):null}function XZ4(A,Q){if(w$(A,Q!=null),Q!=null)b4(A,Q)}function QgQ(A){return{actorId:y4(A),generation:w5(A),key:FZ4(A)}}function $gQ(A,Q){b4(A,Q.actorId),M5(A,Q.generation),XZ4(A,Q.key)}function BgQ(A){return{actorId:y4(A),connectionId:y4(A)}}function EgQ(A,Q){b4(A,Q.actorId),b4(A,Q.connectionId)}function Bf0(A){return u$(A)?pN(A):null}function Ef0(A,Q){if(w$(A,Q!=null),Q!=null)lN(A,Q)}function DgQ(A){return u$(A)?w5(A):null}function JgQ(A,Q){if(w$(A,Q!=null),Q!=null)M5(A,Q)}function IZ4(A){return u$(A)?QgQ(A):null}function GZ4(A,Q){if(w$(A,Q!=null),Q!=null)$gQ(A,Q)}function UgQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:Bf0(A),actionId:DgQ(A),actor:IZ4(A)}}function YgQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),Ef0(A,Q.metadata),JgQ(A,Q.actionId),GZ4(A,Q.actor)}function ZgQ(A){return{id:w5(A),output:pN(A)}}function FgQ(A,Q){M5(A,Q.id),lN(A,Q.output)}function XgQ(A){return{name:y4(A),args:pN(A)}}function IgQ(A,Q){b4(A,Q.name),lN(A,Q.args)}function GgQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"Init",val:BgQ(A)};case 1:return{tag:"Error",val:UgQ(A)};case 2:return{tag:"ActionResponse",val:ZgQ(A)};case 3:return{tag:"Event",val:XgQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function VgQ(A,Q){switch(Q.tag){case"Init":{yQ(A,0),EgQ(A,Q.val);break}case"Error":{yQ(A,1),YgQ(A,Q.val);break}case"ActionResponse":{yQ(A,2),FgQ(A,Q.val);break}case"Event":{yQ(A,3),IgQ(A,Q.val);break}}}function KgQ(A){return{body:GgQ(A)}}function zgQ(A,Q){VgQ(A,Q.body)}function WgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return zgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function CgQ(A){let Q=new P4(A,Y7),$=KgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function HgQ(A){return{id:w5(A),name:y4(A),args:pN(A)}}function NgQ(A,Q){M5(A,Q.id),b4(A,Q.name),lN(A,Q.args)}function qgQ(A){return{eventName:y4(A),subscribe:u$(A)}}function ugQ(A,Q){b4(A,Q.eventName),w$(A,Q.subscribe)}function wgQ(A){let Q=A.offset;switch(z3(A)){case 0:return{tag:"ActionRequest",val:HgQ(A)};case 1:return{tag:"SubscriptionRequest",val:qgQ(A)};default:throw A.offset=Q,new t4(Q,"invalid tag")}}function MgQ(A,Q){switch(Q.tag){case"ActionRequest":{yQ(A,0),NgQ(A,Q.val);break}case"SubscriptionRequest":{yQ(A,1),ugQ(A,Q.val);break}}}function OgQ(A){return{body:wgQ(A)}}function LgQ(A,Q){MgQ(A,Q.body)}function jgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return LgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function RgQ(A){let Q=new P4(A,Y7),$=OgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function PgQ(A){return{args:pN(A)}}function vgQ(A,Q){lN(A,Q.args)}function TgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return vgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function _gQ(A){let Q=new P4(A,Y7),$=PgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function SgQ(A){return{output:pN(A)}}function kgQ(A,Q){lN(A,Q.output)}function fgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return kgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function xgQ(A){let Q=new P4(A,Y7),$=SgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function ygQ(A){return u$(A)?u$(A):null}function bgQ(A,Q){if(w$(A,Q!=null),Q!=null)w$(A,Q)}function hgQ(A){return u$(A)?rB0(A):null}function ggQ(A,Q){if(w$(A,Q!=null),Q!=null)sB0(A,Q)}function mgQ(A){return{body:pN(A),name:FZ4(A),wait:ygQ(A),timeout:hgQ(A)}}function dgQ(A,Q){lN(A,Q.body),XZ4(A,Q.name),bgQ(A,Q.wait),ggQ(A,Q.timeout)}function cgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return dgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function pgQ(A){let Q=new P4(A,Y7),$=mgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function lgQ(A){return{status:y4(A),response:Bf0(A)}}function igQ(A,Q){b4(A,Q.status),Ef0(A,Q.response)}function ngQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return igQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function agQ(A){let Q=new P4(A,Y7),$=lgQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function ogQ(A){return{group:y4(A),code:y4(A),message:y4(A),metadata:Bf0(A),actor:IZ4(A)}}function rgQ(A,Q){b4(A,Q.group),b4(A,Q.code),b4(A,Q.message),Ef0(A,Q.metadata),GZ4(A,Q.actor)}function sgQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return rgQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function tgQ(A){let Q=new P4(A,Y7),$=ogQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}function egQ(A){return{actorId:y4(A)}}function AmQ(A,Q){b4(A,Q.actorId)}function QmQ(A,Q){let $=Q!=null?CQ(Q):Y7,B=new P4(new Uint8Array($.initialBufferLength),$);return AmQ(B,A),new Uint8Array(B.view.buffer,B.view.byteOffset,B.offset)}function $mQ(A){let Q=new P4(A,Y7),$=egQ(Q);if(Q.offset<Q.view.byteLength)throw new t4(Q.offset,"remaining bytes");return $}var wc=4,BmQ=(A)=>{if(A.body.tag==="Init"){let{actorId:Q,connectionId:$}=A.body.val;return{body:{tag:"Init",val:{actorId:Q,connectionId:$}}}}return A},EmQ=(A)=>{if(A.body.tag==="Init"){let{actorId:Q,connectionId:$}=A.body.val;return{body:{tag:"Init",val:{actorId:Q,connectionId:$,connectionToken:""}}}}return A},DmQ=(A)=>{return A},JmQ=(A)=>{if(A.body.tag==="Error")return{body:{tag:"Error",val:{...A.body.val,actor:null}}};return A},UmQ=(A)=>{if(A.body.tag==="Error"){let{actor:Q,...$}=A.body.val;return{body:{tag:"Error",val:$}}}return A},YmQ=(A)=>{return A},ZmQ=(A)=>{return A},FmQ=(A)=>{return A},XmQ=(A)=>{return A},ImQ=(A)=>{return A},GmQ=(A)=>{return A},VmQ=(A)=>{return A},KmQ=(A)=>({...A,actor:null}),zmQ=(A)=>{let{actor:Q,...$}=A;return $},WmQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return ayQ(A);case 2:return xbQ(A);case 3:return MhQ(A);case 4:return RgQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return nyQ(A);case 2:return fbQ(A);case 3:return whQ(A);case 4:return jgQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[ZmQ,FmQ,XmQ],serializeConverters:()=>[ImQ,GmQ,VmQ]}),CmQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return byQ(A);case 2:return LbQ(A);case 3:return VhQ(A);case 4:return CgQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return yyQ(A);case 2:return ObQ(A);case 3:return GhQ(A);case 4:return WgQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[BmQ,DmQ,JmQ],serializeConverters:()=>[UmQ,YmQ,EmQ]}),HmQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return tyQ(A);case 2:return gbQ(A);case 3:return RhQ(A);case 4:return _gQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return syQ(A);case 2:return hbQ(A);case 3:return jhQ(A);case 4:return TgQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[],serializeConverters:()=>[]}),NmQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return $bQ(A);case 2:return pbQ(A);case 3:return _hQ(A);case 4:return xgQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return QbQ(A);case 2:return cbQ(A);case 3:return ThQ(A);case 4:return fgQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[],serializeConverters:()=>[]}),qmQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 3:return dhQ(A);case 4:return pgQ(A);default:throw Error(`HttpQueueSendRequest only exists in version 3+, got version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 3:return mhQ(A);case 4:return cgQ(A);default:throw Error(`HttpQueueSendRequest only exists in version 3+, got version ${Q}`)}},deserializeConverters:()=>[],serializeConverters:()=>[]}),umQ=MX({deserializeVersion:(A,Q)=>{switch(Q){case 3:return ihQ(A);case 4:return agQ(A);default:throw Error(`HttpQueueSendResponse only exists in version 3+, got version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 3:return lhQ(A);case 4:return ngQ(A);default:throw Error(`HttpQueueSendResponse only exists in version 3+, got version ${Q}`)}},deserializeConverters:()=>[],serializeConverters:()=>[]}),VZ4=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return JbQ(A);case 2:return abQ(A);case 3:return rhQ(A);case 4:return tgQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return DbQ(A);case 2:return nbQ(A);case 3:return ohQ(A);case 4:return sgQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[(A)=>A,(A)=>A,KmQ],serializeConverters:()=>[zmQ,(A)=>A,(A)=>A]}),cj$=MX({deserializeVersion:(A,Q)=>{switch(Q){case 1:return FbQ(A);case 2:return tbQ(A);case 3:return AgQ(A);case 4:return $mQ(A);default:throw Error(`Unknown version ${Q}`)}},serializeVersion:(A,Q)=>{switch(Q){case 1:return ZbQ(A);case 2:return sbQ(A);case 3:return ehQ(A);case 4:return QmQ(A);default:throw Error(`Unknown version ${Q}`)}},deserializeConverters:()=>[],serializeConverters:()=>[]}),Df0=j.bigint(),wmQ=Df0.nullable(),KZ4=j.object({actorId:j.string(),generation:j.union([j.number(),j.bigint()]),key:j.string().optional()}),MmQ=j.object({actorId:j.string(),connectionId:j.string()}),OmQ=j.object({group:j.string(),code:j.string(),message:j.string(),metadata:j.unknown().optional(),actionId:wmQ,actor:KZ4.optional()}),LmQ=j.object({id:Df0,output:j.unknown()}),jmQ=j.object({name:j.string(),args:j.unknown()}),RmQ=j.discriminatedUnion("tag",[j.object({tag:j.literal("Init"),val:MmQ}),j.object({tag:j.literal("Error"),val:OmQ}),j.object({tag:j.literal("ActionResponse"),val:LmQ}),j.object({tag:j.literal("Event"),val:jmQ})]),PmQ=j.object({body:RmQ}),vmQ=j.object({id:Df0,name:j.string(),args:j.unknown()}),TmQ=j.object({eventName:j.string(),subscribe:j.boolean()}),_mQ=j.discriminatedUnion("tag",[j.object({tag:j.literal("ActionRequest"),val:vmQ}),j.object({tag:j.literal("SubscriptionRequest"),val:TmQ})]),SmQ=j.object({body:_mQ}),kmQ=j.object({args:j.unknown()}),fmQ=j.object({output:j.unknown()}),xmQ=j.object({body:j.unknown(),name:j.string().optional(),wait:j.boolean().optional(),timeout:j.number().optional()}),ymQ=j.object({status:j.enum(["completed","timedOut"]),response:j.unknown().optional()}),zZ4=j.object({group:j.string(),code:j.string(),message:j.string(),metadata:j.unknown().optional(),actor:KZ4.optional()}),lj$=j.null(),ij$=j.object({actorId:j.string()});function VP(A={},Q){return{skipReadyWait:(Q==null?void 0:Q.skipReadyWait)??A.skipReadyWait??!1}}function WZ4(A){if("getForId"in A)return A.getForId.name;if("getForKey"in A)return A.getForKey.name;if("getOrCreateForKey"in A)return A.getOrCreateForKey.name;if("create"in A)return A.create.name;throw GB0("Invalid query format")}function HK(A){return"getForKey"in A||"getOrCreateForKey"in A}function mN(A){if("getForId"in A)return{directId:A.getForId.actorId};if("create"in A)throw GB0("create queries cannot be used as gateway targets. Resolve to an actor ID first.");return A}function sk0(A,Q){return A==="actor"&&(Q==="not_found"||Q==="starting"||Q==="stopping"||Q==="not_configured"||Q==="dropped_reply"||Q.startsWith("destroyed_"))}async function tk0(A,Q,$,B,E){let D=WZ4(B);try{let J=await E.getForId({name:D,actorId:$});if(J==null?void 0:J.error)return z4().info({msg:"found actor scheduling error",actorId:$,error:J.error}),qyQ(A,Q,$,J.error)}catch(J){z4().warn({msg:"failed to fetch actor details for scheduling error check",actorId:$,error:V3(J)})}return null}function*bmQ(A,Q=8){let $=A,B=0;while($!==void 0&&$!==null&&B<Q){if(yield $,typeof $==="object"&&"cause"in $&&$.cause!==$){$=$.cause,B+=1;continue}break}}function NK(A,Q,$,B){return{kind:A,source:Q,group:B==null?void 0:B.group,code:B==null?void 0:B.code,message:$,legacy:(B==null?void 0:B.legacy)??!1}}function hmQ(A){if(A.group==="actor"&&A.code==="stopping"&&A.message.includes("database accessed after actor stopped"))return;if(A.group==="actor"&&A.code==="restarting")return NK("request_retry","actor_error",A.message,{group:A.group,code:A.code});if(A.group==="guard"&&gmQ(A.code))return NK("request_retry","actor_error",A.message,{group:A.group,code:A.code});if(A.group==="actor"&&A.code==="internal_error"&&A.message==="Actor is stopping")return NK("request_retry","actor_error",A.message,{group:A.group,code:A.code,legacy:!0});if(A.group==="actor"&&A.code==="stopping"&&A.message==="Actor stopping: Cannot accept new connections while actor is stopping")return NK("request_retry","actor_error",A.message,{group:A.group,code:A.code,legacy:!0});if(A.group==="actor"&&A.code==="stopped")return NK("reconnect_only","actor_error",A.message,{group:A.group,code:A.code,legacy:!0});if(A.group==="ws"&&A.code==="going_away")return NK("reconnect_only","actor_error",A.message,{group:A.group,code:A.code,legacy:!0});return}function gmQ(A){return A==="service_unavailable"||A==="actor_stopped_while_waiting"||A==="tunnel_request_aborted"||A==="tunnel_message_timeout"||A==="tunnel_response_closed"||A==="gateway_response_start_timeout"}function mmQ(A){if(A.message.includes("database accessed after actor stopped"))return;if(/^Actor [A-Za-z0-9-]+ stopped$/.test(A.message))return NK("request_retry","transport_error",A.message,{legacy:!0});if(A.message==="WebSocket connection closed during shutdown"||A.message==="envoy shut down"||A.message==="envoy shutting down")return NK("reconnect_only","transport_error",A.message,{legacy:!0});return}function CZ4(A){for(let Q of bmQ(A)){if(Q instanceof mQ){let $=hmQ(Q);if($)return $;continue}if(Q instanceof uc||Q instanceof Error){let $=mmQ(Q);if($)return $}}return}function dmQ(A){var Q;return((Q=CZ4(A))==null?void 0:Q.kind)==="request_retry"}function cmQ(A){let Q=CZ4(A);return(Q==null?void 0:Q.kind)==="reconnect_only"||(Q==null?void 0:Q.kind)==="request_retry"}function HZ4(A){if(A==null?void 0:A.aborted)throw A.reason??Error("Operation aborted")}async function pmQ(A,Q){HZ4(Q),await new Promise(($,B)=>{let E=setTimeout(()=>{J(),$()},A),D=()=>{clearTimeout(E),J(),B((Q==null?void 0:Q.reason)??Error("Operation aborted"))},J=()=>{Q==null||Q.removeEventListener("abort",D)};Q==null||Q.addEventListener("abort",D,{once:!0})})}async function lmQ(A,Q){let $=(Q==null?void 0:Q.maxAttempts)??5,B=(Q==null?void 0:Q.initialDelayMs)??25,E=(Q==null?void 0:Q.maxDelayMs)??200,D;for(let J=0;J<$;J+=1){HZ4(Q==null?void 0:Q.signal);try{return await A()}catch(U){if(!dmQ(U))throw U;if(D=U,J===$-1)break;let Y=Math.min(B*2**J,E);await pmQ(Y,Q==null?void 0:Q.signal)}}throw D}function imQ(A){let[Q,$]=A.split("#"),[B,E]=Q.split(".");if(!B||!E){z4().warn({msg:"failed to parse close reason",reason:A});return}return{group:B,code:E,rayId:$}}function nmQ(A){if(A instanceof Blob)return A.size;if(A instanceof ArrayBuffer)return A.byteLength;if(A instanceof Uint8Array)return A.byteLength;if(typeof A==="string")return A.length;_N(A)}async function Jf0(A){var Q,$,B;z4().debug({msg:"sending http request",url:A.url,encoding:A.encoding});let E,D;if(A.method==="POST"||A.method==="PUT")NZ4.default(A.body!==void 0,"missing body"),E=fY4(A.encoding),D=yk0(A.encoding,A.body,A.requestVersionedDataHandler,A.requestVersion,A.requestZodSchema,A.requestToJson,A.requestToBare);let J;try{J=await(A.customFetch??fetch)(new globalThis.Request(A.url,{method:A.method,headers:{...A.headers,...E?{"Content-Type":E}:{},"User-Agent":uU4()},body:D,credentials:"include",signal:A.signal}))}catch(U){throw new uc(`Request failed: ${U}`,{cause:U})}if(!J.ok){let U=await J.arrayBuffer(),Y=J.headers.get("content-type"),Z=J.headers.get("x-rivet-ray-id"),F=(Y==null?void 0:Y.includes("application/json"))?"json":A.encoding;try{let X=zc(F,new Uint8Array(U),VZ4,zZ4,(I)=>({...I,actor:I.actor?{...I.actor,generation:Number(I.actor.generation)}:void 0}),(I)=>({group:I.group,code:I.code,message:I.message,metadata:I.metadata?wX(new Uint8Array(I.metadata)):void 0,actor:I.actor?{actorId:I.actor.actorId,generation:Number(I.actor.generation),key:I.actor.key??void 0}:void 0}));throw z4().warn({msg:"http error response",group:X.group,code:X.code,message:X.message,metadata:X.metadata,actorId:(Q=X.actor)==null?void 0:Q.actorId,generation:($=X.actor)==null?void 0:$.generation,actorKey:(B=X.actor)==null?void 0:B.key}),new mQ(X.group,X.code,X.message,{metadata:X.metadata,actor:X.actor})}catch(X){if(X instanceof mQ)throw X;let I=new TextDecoder("utf-8",{fatal:!1}).decode(U);if(Z)throw new uc(`${J.statusText} (${J.status}) (Ray ID: ${Z}):
2649
2649
  ${I}`);else throw new uc(`${J.statusText} (${J.status}):
2650
- ${I}`)}}if(A.skipParseResponse)return;try{let U=new Uint8Array(await J.arrayBuffer());return zc(A.encoding,U,A.responseVersionedDataHandler,A.responseZodSchema,A.responseFromJson,A.responseFromBare)}catch(U){throw new uc(`Failed to parse response: ${U}`,{cause:U})}}function qZ4(A){async function Q($,B,E){let D=(E==null?void 0:E.wait)??!1,J=E==null?void 0:E.timeout,U=await Jf0({url:`http://actor/queue/${encodeURIComponent($)}`,method:"POST",headers:{[EZ4]:A.encoding,...A.params!==void 0?{[Af0]:JSON.stringify(A.params)}:{}},body:{body:B,wait:D,timeout:J},encoding:A.encoding,customFetch:A.customFetch,signal:E==null?void 0:E.signal,requestVersion:wc,requestVersionedDataHandler:qmQ,responseVersion:wc,responseVersionedDataHandler:umQ,requestZodSchema:xmQ,responseZodSchema:ymQ,requestToJson:(Y)=>({...Y,name:$}),requestToBare:(Y)=>({name:Y.name??$,body:yB0(bN(Y.body)),wait:Y.wait??!1,timeout:Y.timeout!==void 0?BigInt(Y.timeout):null}),responseFromJson:(Y)=>{if(Y.response===void 0)return{status:Y.status};return{status:Y.status,response:Y.response}},responseFromBare:(Y)=>{if(Y.response===null||Y.response===void 0)return{status:Y.status};return{status:Y.status,response:wX(new Uint8Array(Y.response))}}});if(D)return U;return}return{send:Q}}async function amQ(A,Q,$,B,E,D={}){let J,U=E||{};if(typeof B==="string")J=B;else if(B instanceof URL)J=B.pathname+B.search;else if(B instanceof Request){let Y=new URL(B.url);J=Y.pathname+Y.search;let Z=new Headers(B.headers),F=new Headers((E==null?void 0:E.headers)||{}),X=new Headers(Z);if(F.forEach((I,G)=>{X.set(G,I)}),U={method:B.method,body:B.body,mode:B.mode,credentials:B.credentials,redirect:B.redirect,referrer:B.referrer,referrerPolicy:B.referrerPolicy,integrity:B.integrity,keepalive:B.keepalive,signal:B.signal,...U,headers:X},U.body)U.duplex="half"}else throw TypeError("Invalid input type for fetch");try{z4().debug("directId"in Q?{msg:"sending raw http request to actor",actorId:Q.directId}:{msg:"sending raw http request with actor query",query:Q});let Y=J.startsWith("/")?J.slice(1):J,Z=new URL(`http://actor/request/${Y}`),F=new Headers(U.headers);if($)F.set(Af0,JSON.stringify($));let X=new Request(Z,{...U,headers:F});return A.sendRequest(Q,X,D)}catch(Y){let{group:Z,code:F,message:X,metadata:I,actor:G}=Bc(Y,!0);throw new mQ(Z,F,X,{metadata:I,actor:G})}}async function omQ(A,Q,$,B,E,D={}){let U="",Y="";if(B){let X=B.indexOf("?");if(X!==-1)U=B.substring(0,X),Y=B.substring(X);else U=B;if(U.startsWith("/"))U=U.slice(1)}let Z=`${BZ4}${U}${Y}`;return z4().debug({msg:"opening websocket",target:Q,encoding:"bare",path:Z}),await A.openWebSocket(Z,Q,"bare",$,D)}async function uZ4(A,Q){if("directId"in Q)return Q.directId;if("getForId"in Q)return Q.getForId.actorId;if("getForKey"in Q){let $=await A.getWithKey({name:Q.getForKey.name,key:Q.getForKey.key});if(!$)throw ZJ4(`${Q.getForKey.name}:${JSON.stringify(Q.getForKey.key)}`);return $.actorId}if("getOrCreateForKey"in Q)return(await A.getOrCreateWithKey({name:Q.getOrCreateForKey.name,key:Q.getOrCreateForKey.key,input:Q.getOrCreateForKey.input,region:Q.getOrCreateForKey.region})).actorId;if("create"in Q)return(await A.createActor({name:Q.create.name,key:Q.create.key,input:Q.create.input,region:Q.create.region})).actorId;throw GB0("Invalid query format")}var rmQ=class{#A;#Q;#$;#B;#D;#E;#U;#J;#Y;#Z=new xY4;constructor(A,Q,$,B,E,D,J={}){this.#A=A,this.#Q=Q,this.#$=E,this.#B=D,this.#D=J,this.#E=$,this.#U=B}async#X(){if(this.#U)return await this.#U();return this.#E}send(A,Q,$){return this.#I(A,Q,$)}async#I(A,Q,$){return await this.#Z.run(async()=>{let B=this.#W(),E=!1;for(let D=0;D<B;D++){let J;try{let U=VP(this.#D),Y=await this.#q(E,U);return J="directId"in Y?Y.directId:void 0,await qZ4({encoding:this.#$,params:this.#E,customFetch:async(Z)=>{return await this.#Q.sendRequest(Y,Z,U)}}).send(A,Q,$)}catch(U){let{group:Y,code:Z,message:F,metadata:X,actor:I}=Bc(U,!0);if(this.#V(Y,Z,X,D,B)){await this.#G();continue}if(await this.#u(Y,Z,J,D,B)){E=!0,await this.#G();continue}if(this.#z(Y,Z,D,B)){this.#F(),E=!0,await this.#G();continue}if(this.#C(Y,Z)&&D<B-1){if(E=Z==="starting"||Z==="stopping"||Z.startsWith("destroyed_"),E)await this.#G();continue}throw new mQ(Y,Z,F,{metadata:X,actor:I})}}throw Error("unreachable queue retry state")})}async action(A){if(typeof A==="string"||typeof A!=="object"||A===null||!("name"in A))throw Error(`Invalid action call: expected an options object { name, args }, got ${typeof A}. Use handle.actionName(...args) for the shorthand API.`);let Q=async()=>await this.#K(A);if(A.name==="destroy")return await Q();return await lmQ(Q,{signal:A.signal})}async#K(A){let Q=this.#W(),$=!1,B=VP(this.#D,A);for(let E=0;E<Q;E++){let D;try{let J=await this.#q($,B);D="directId"in J?J.directId:void 0,z4().debug(D?{msg:"using direct actor gateway target",actorId:D}:{msg:"using query gateway target for action",query:this.#B}),z4().debug({msg:"handling action",name:A.name,encoding:this.#$});let U=await Jf0({url:`http://actor/action/${encodeURIComponent(A.name)}`,method:"POST",headers:{[EZ4]:this.#$,...this.#E!==void 0?{[Af0]:JSON.stringify(this.#E)}:{}},body:A.args,encoding:this.#$,customFetch:async(Y)=>await this.#Q.sendRequest(J,Y,B),signal:A==null?void 0:A.signal,requestVersion:wc,requestVersionedDataHandler:HmQ,responseVersion:wc,responseVersionedDataHandler:NmQ,requestZodSchema:kmQ,responseZodSchema:fmQ,requestToJson:(Y)=>({args:Y}),requestToBare:(Y)=>({args:yB0(bN(Y))}),responseFromJson:(Y)=>Y.output,responseFromBare:(Y)=>wX(new Uint8Array(Y.output))});if(A.name==="destroy"&&D)await this.#H(D);return U}catch(J){let{group:U,code:Y,message:Z,metadata:F,actor:X}=Bc(J,!0);if(await this.#u(U,Y,D,E,Q)){$=!0,await this.#G();continue}if(A.name!=="destroy"&&this.#z(U,Y,E,Q)){this.#F(),$=!0,await this.#G();continue}if(U==="actor"&&Y==="destroyed_while_waiting_for_ready"&&"getForId"in this.#B)throw new mQ("actor","not_found","The actor does not exist or was destroyed.",{metadata:F,actor:X});if(this.#C(U,Y)&&E<Q-1){if(U==="actor"&&(Y==="starting"||Y==="stopping"))$=!0,await new Promise((G)=>setTimeout(G,100));continue}throw new mQ(U,Y,Z,{metadata:F,actor:X})}}throw Error("unreachable action retry state")}async#H(A){let Q=WZ4(this.#B),$=Date.now()+1000;while(Date.now()<$){if(!await this.#Q.getForId({name:Q,actorId:A}))return;await new Promise((E)=>setTimeout(E,25))}}async#G(){await new Promise((A)=>setTimeout(A,100))}#W(){if(!HK(this.#B))return 1;return"getOrCreateForKey"in this.#B?60:24}#z(A,Q,$,B){if(!HK(this.#B)||$>=B-1||A!=="actor")return!1;return Q==="not_found"||Q==="starting"||Q==="stopping"||Q==="not_configured"||Q==="dropped_reply"||Q==="destroying"||Q.startsWith("destroyed_")}#V(A,Q,$,B,E){if(!HK(this.#B)||B>=E-1||A!=="actor"||Q!=="overloaded"||$===null||typeof $!=="object")return!1;let D=$;return D.channel==="dispatch_inbox"&&D.operation==="dispatch_queue_send"}#F(){this.#J=void 0,this.#Y=void 0}async#u(A,Q,$,B,E){if(!HK(this.#B)||!ok0(A,Q)||B>=E-1)return!1;if($){let D=await tk0(A,Q,$,this.#B,this.#Q);if(D)throw D}return this.#F(),!0}#C(A,Q){if(!HK(this.#B)||!sk0(A,Q))return!1;return this.#F(),!0}async#M(A){if("getForId"in this.#B)return mN(this.#B);if(A)return mN(this.#B);if(this.#J)return{directId:this.#J};if(!this.#Y)this.#Y=uZ4(this.#Q,this.#B).then((Q)=>{return this.#J=Q,Q});try{return{directId:await this.#Y}}finally{this.#Y=void 0}}async#q(A,Q){if(Q.skipReadyWait)return mN(this.#B);return await this.#M(A)}connect(A,Q={}){z4().debug({msg:"establishing connection from handle",query:this.#B});let $=A===void 0?this.#E:A,B=A===void 0?this.#U:void 0,E=new tmQ(this.#A,this.#Q,$,B,this.#$,this.#B,VP(this.#D,Q));return this.#A[wZ4](E)}fetch(A,Q){return this.#w(A,Q)}async#w(A,Q){let $=this.#W(),B=!1,{skipReadyWait:E,...D}=Q??{},J=VP(this.#D,{skipReadyWait:E});for(let U=0;U<$;U++){let Y;try{let Z=await this.#q(B,J);Y="directId"in Z?Z.directId:void 0;let F=await amQ(this.#Q,Z,this.#E,A,D,J),X=await this.#N(F,Y,U,$);if(X){if(B=X.useQueryTarget,X.waitForRetryWindow)await this.#G();continue}return F}catch(Z){let{group:F,code:X,message:I,metadata:G,actor:V}=Bc(Z,!0);if(await this.#u(F,X,Y,U,$)){B=!0,await this.#G();continue}if(this.#z(F,X,U,$)){this.#F(),B=!0,await this.#G();continue}if(this.#C(F,X)&&U<$-1){if(B=X==="starting"||X==="stopping"||X.startsWith("destroyed_"),B)await this.#G();continue}throw new mQ(F,X,I,{metadata:G,actor:V})}}throw Error("unreachable fetch retry state")}async#N(A,Q,$,B){if(A.ok||!HK(this.#B))return null;let E=await this.#O(A);if(!E)return null;let{group:D,code:J}=E;if(await this.#u(D,J,Q,$,B))return{useQueryTarget:!0,waitForRetryWindow:!0};if(this.#z(D,J,$,B))return this.#F(),{useQueryTarget:!0,waitForRetryWindow:!0};if(this.#C(D,J)&&$<B-1){let Y=J==="starting"||J==="stopping"||J.startsWith("destroyed_");return{useQueryTarget:Y,waitForRetryWindow:Y}}return null}async#O(A){if(A.ok)return null;let Q=A.headers.get("content-type"),$=(Q==null?void 0:Q.includes("application/json"))?"json":this.#$;try{return zc($,new Uint8Array(await A.clone().arrayBuffer()),VZ4,zZ4,(B)=>({...B,actor:B.actor?{...B.actor,generation:Number(B.actor.generation)}:void 0}),(B)=>({group:B.group,code:B.code,message:B.message,metadata:B.metadata?wX(new Uint8Array(B.metadata)):void 0,actor:B.actor?{actorId:B.actor.actorId,generation:Number(B.actor.generation),key:B.actor.key??void 0}:void 0}))}catch{return null}}async webSocket(A,Q,$={}){let B=await this.#X(),E=VP(this.#D,$),D=await this.#q(!1,E);return await omQ(this.#Q,D,B,A,Q,E)}async resolve(){if("getForId"in this.#B)return this.#B.getForId.actorId;let A=await this.#M(!1);if("directId"in A)return A.directId;throw Error("dynamic actor resolution did not produce a direct actor id")}async getGatewayUrl(){return await this.#Q.buildGatewayUrl(mN(this.#B),this.#D)}async reload(){let A=mN(this.#B),Q=new Request("http://actor/dynamic/reload",{method:"PUT"}),$=await this.#Q.sendRequest(A,Q);if(!$.ok){let B=await $.text().catch(()=>"");throw new mQ("actor","reload_failed",`reload failed with status ${$.status}: ${B}`,{})}}},Q30=Symbol("actorConns"),wZ4=Symbol("createActorConnProxy"),smQ=class{#A=!1;[Q30]=new Set;#Q;#$;#B;constructor(A,Q,$={}){this.#Q=A,this.#$=Q??"bare",this.#B=$}getForId(A,Q,$){z4().debug({msg:"get handle to actor with id",name:A,actorId:Q,params:$==null?void 0:$.params});let B={getForId:{name:A,actorId:Q}},E=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,B);return Nc(E)}get(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[];z4().debug({msg:"get handle to actor",name:A,key:B,parameters:$==null?void 0:$.params});let E={getForKey:{name:A,key:B}},D=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,E);return Nc(D)}getOrCreate(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[];z4().debug({msg:"get or create handle to actor",name:A,key:B,parameters:$==null?void 0:$.params,createInRegion:$==null?void 0:$.createInRegion});let E={getOrCreateForKey:{name:A,key:B,input:$==null?void 0:$.createWithInput,region:$==null?void 0:$.createInRegion}},D=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,E);return Nc(D)}async create(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[],E={create:{...$,name:A,key:B}};z4().debug({msg:"create actor handle",name:A,key:B,parameters:$==null?void 0:$.params,create:E.create});let D=await uZ4(this.#Q,E);z4().debug({msg:"created actor with ID",name:A,key:B,actorId:D});let J={getForId:{name:A,actorId:D}},U=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,J);return Nc(U)}#D(A,Q,$){return new rmQ(this,this.#Q,A,Q,this.#$,$,this.#B)}[wZ4](A){return this[Q30].add(A),A[OZ4](),Nc(A)}async dispose(){if(this.#A){z4().warn({msg:"client already disconnected"});return}this.#A=!0,z4().debug({msg:"disposing client"});let A=[];for(let Q of this[Q30].values())A.push(Q.dispose());await Promise.all(A)}};function MZ4(A,Q={}){let $=new smQ(A,Q.encoding,Q.gateway);return new Proxy($,{get:(B,E,D)=>{if(typeof E==="symbol"||E in B){let J=Reflect.get(B,E,D);if(typeof J==="function")return J.bind(B);return J}if(typeof E==="string")return{get:(J,U)=>{return B.get(E,J,U)},getOrCreate:(J,U)=>{return B.getOrCreate(E,J,U)},getForId:(J,U)=>{return B.getForId(E,J,U)},create:async(J,U={})=>{return await B.create(E,J,U)}};return}})}function Nc(A){let Q=new Map;return new Proxy(A,{get($,B,E){if(typeof B==="symbol")return Reflect.get($,B,E);if(B==="constructor"||B in $){let D=Reflect.get($,B,$);if(typeof D==="function")return D.bind($);return D}if(typeof B==="string"){if(B==="then")return;let D=Q.get(B);if(!D)D=(...J)=>$.action({name:B,args:J}),Q.set(B,D);return D}},has($,B){if(typeof B==="string")return!0;return Reflect.has($,B)},getPrototypeOf($){return Reflect.getPrototypeOf($)},ownKeys($){return Reflect.ownKeys($)},getOwnPropertyDescriptor($,B){let E=Reflect.getOwnPropertyDescriptor($,B);if(E)return E;if(typeof B==="string")return{configurable:!0,enumerable:!1,writable:!1,value:(...D)=>$.action({name:B,args:D})};return}})}var ik0=65536,OZ4=Symbol("connect"),tmQ=class{#A=!1;#Q=new AbortController;#$="idle";#B;#D;#E=[];#U=new Map;#J=new Map;#Y=new Set;#Z=new Set;#X=!1;#I=new Set;#K=new Set;#H=0;#G;#W;#z;#V;#F;#u;#C;#M;#q;#w;#N;#O;constructor(A,Q,$,B,E,D,J={}){if(this.#u=A,this.#C=Q,this.#M=$,this.#q=B,this.#w=E,this.#N=D,this.#O=VP(J),"getForId"in D)this.#B=D.getForId.actorId;this.#W=UP((U)=>z4().warn({msg:"unhandled ready promise rejection",reason:U})),this.#G=qZ4({encoding:this.#w,params:this.#M,customFetch:async(U)=>{return await this.#C.sendRequest(mN(this.#N),U,this.#O)}}),this.#z=setInterval(()=>60000)}#P(){this.#B=void 0,this.#D=void 0}#v(A,Q){if(!HK(this.#N)||!sk0(A,Q))return!1;return this.#P(),!0}#T(A,Q){return HK(this.#N)&&sk0(A,Q)&&this.#V!==void 0&&this.#$!=="connected"}send(A,Q,$){return this.#h(A,Q,$)}async#h(A,Q,$){return await this.#G.send(A,Q,$)}async action(A){if(typeof A==="string"||typeof A!=="object"||A===null||!("name"in A))throw Error(`Invalid action call: expected an options object { name, args }, got ${typeof A}. Use conn.actionName(...args) for the shorthand API.`);z4().debug({msg:"action",name:A.name,args:A.args});let Q=this.#H;this.#H+=1;let{promise:$,resolve:B,reject:E}=UP((U)=>z4().warn({msg:"unhandled action promise rejection",reason:U}));this.#U.set(Q,{name:A.name,resolve:B,reject:E}),z4().debug({msg:"added action to in-flight map",actionId:Q,actionName:A.name,inFlightCount:this.#U.size}),this.#S({body:{tag:"ActionRequest",val:{id:BigInt(Q),name:A.name,args:A.args}}});let{id:D,output:J}=await $;if(D!==BigInt(Q))throw Error(`Request ID ${Q} does not match response ID ${D}`);return J}[OZ4](){this.#f()}#L(A){let Q=this.#$;if(Q===A)return;this.#$=A;for(let $ of[...this.#K])try{$(A)}catch(B){z4().error({msg:"error in status change handler",error:V3(B)})}if(A==="connected"){this.#W.resolve(void 0);for(let $ of[...this.#Z])try{$()}catch(B){z4().error({msg:"error in open handler",error:V3(B)})}}if((A==="disconnected"||A==="idle")&&Q==="connected")for(let $ of[...this.#I])try{$()}catch(B){z4().error({msg:"error in close handler",error:V3(B)})}}#f(){this.#L("connecting"),Cc(this.#g.bind(this),{forever:!0,minTimeout:250,maxTimeout:30000,onFailedAttempt:(A)=>{z4().warn({msg:"failed to reconnect",attempt:A.attemptNumber,error:V3(A)})},signal:this.#Q.signal}).catch((A)=>{if(A instanceof Wc||A.name==="AbortError"||!this.#x(A))z4().info({msg:"connection retry aborted"});else z4().error({msg:"unexpected error in connection retry",error:V3(A)})})}async#g(){try{if(this.#V)throw Error("#onOpenPromise already defined");this.#V=UP((A)=>z4().warn({msg:"unhandled open promise rejection",reason:A})),await this.#d(),await this.#V.promise}catch(A){if(this.#x(A))throw A;let Q=A instanceof mQ?A:new mQ("client","connection_open_failed",`Failed to open connection: ${V3(A)}`,{error:V3(A)});throw this.#y(),this.#j(Q,!1),this.#R(Q),this.#L("idle"),new Wc(A instanceof Error?A:Error(V3(A)))}finally{this.#V=void 0}}#x(A){if(A instanceof A30)return!1;if(A instanceof mQ&&this.#T(A.group,A.code))return!0;if(A instanceof mQ&&A.group==="client"&&A.code==="get_params_failed")return!0;return cmQ(A)}#y(){if(this.#E.length===0)return;z4().debug({msg:"clearing queued connection messages",queueLength:this.#E.length}),this.#E=[]}async#m(){if(!this.#q)return this.#M;try{return await this.#q()}catch(A){let Q=V3(A),$=new mQ("client","get_params_failed",`Failed to resolve connection params: ${Q}`,{error:Q});throw this.#y(),this.#j($,!1),this.#R($),$}}async#d(){let A=await this.#m(),Q=mN(this.#N),$=await this.#C.openWebSocket($Z4,Q,this.#w,A,this.#O);rk0.default($,"websocket should have been created"),z4().debug({msg:"opened websocket",connId:this.#D,readyState:$.readyState,messageQueueLength:this.#E.length}),this.#F=$,$.addEventListener("open",()=>{z4().debug({msg:"client websocket open",connId:this.#D})}),$.addEventListener("message",async(B)=>{try{await this.#p(B.data)}catch(E){z4().error({msg:"error in websocket message handler",error:V3(E)})}}),$.addEventListener("close",async(B)=>{try{await this.#l(B)}catch(E){z4().error({msg:"error in websocket close handler",error:V3(E)})}}),$.addEventListener("error",()=>{try{this.#i()}catch(B){z4().error({msg:"error in websocket error handler",error:V3(B)})}})}#c(){if(this.#A){if(z4().debug({msg:"handleOnOpen called after dispose, closing websocket"}),this.#F)this.#F.close(1000,"Disposed"),this.#F=void 0;return}if(this.#$==="connected"||this.#X)return;this.#X=!0,queueMicrotask(()=>{if(this.#X=!1,this.#A){if(z4().debug({msg:"handleOnOpen scheduled after dispose, closing websocket"}),this.#F)this.#F.close(1000,"Disposed"),this.#F=void 0;return}if(z4().debug({msg:"socket open",messageQueueLength:this.#E.length,connId:this.#D}),this.#L("connected"),this.#V)this.#V.resolve(void 0);else z4().warn({msg:"#onOpenPromise is undefined"});for(let Q of this.#J.keys())this.#k(Q,!0);let A=this.#E;this.#E=[],z4().debug({msg:"flushing message queue",queueLength:A.length});for(let Q of A)this.#S(Q)})}async#p(A){var Q;z4().trace({msg:"received message",dataType:typeof A,isBlob:A instanceof Blob,isArrayBuffer:A instanceof ArrayBuffer});let $=await this.#a(A);if(z4().trace(KU4()?{msg:"parsed message",message:xk0($).substring(0,100)+"..."}:{msg:"parsed message"}),$.body.tag==="Init")this.#B=$.body.val.actorId,this.#D=$.body.val.connectionId,z4().trace({msg:"received init message",actorId:this.#B,connId:this.#D}),this.#c();else if($.body.tag==="Error"){let{group:B,code:E,message:D,metadata:J,actionId:U,actor:Y}=$.body.val;if(U!==null){let Z=this.#_(Number(U));this.#v(B,E),z4().warn({msg:"action error",actionId:U,actionName:Z==null?void 0:Z.name,group:B,code:E,message:D,metadata:J,actorId:Y==null?void 0:Y.actorId,generation:Y==null?void 0:Y.generation,actorKey:Y==null?void 0:Y.key}),Z.reject(new mQ(B,E,D,{metadata:J,actor:Y}))}else{if(z4().warn({msg:"connection error",group:B,code:E,message:D,metadata:J,actorId:Y==null?void 0:Y.actorId,generation:Y==null?void 0:Y.generation,actorKey:Y==null?void 0:Y.key}),this.#T(B,E)){this.#P(),(Q=this.#V)==null||Q.reject(new mQ(B,E,D,{metadata:J,actor:Y}));return}let Z=new mQ(B,E,D,{metadata:J,actor:Y});if(ok0(B,E)&&this.#B){let F=await tk0(B,E,this.#B,this.#N,this.#C);if(F)Z=F}if(this.#V)this.#V.reject(Z);this.#v(B,E);for(let[F,X]of this.#U.entries())X.reject(Z),this.#U.delete(F);this.#R(Z)}}else if($.body.tag==="ActionResponse"){let{id:B}=$.body.val;z4().debug({msg:"received action response",actionId:Number(B),inFlightCount:this.#U.size,inFlightIds:Array.from(this.#U.keys())});let E=this.#_(Number(B));z4().trace({msg:"resolving action promise",actionId:B,actionName:E==null?void 0:E.name}),E.resolve($.body.val)}else if($.body.tag==="Event")z4().trace({msg:"received event",name:$.body.val.name}),this.#n($.body.val);else _N($.body)}async#l(A){var Q;let $=A,B=$.wasClean,E=this.#$==="connected";if(z4().info({msg:"socket closed",code:$.code,reason:$.reason,wasClean:B,disposed:this.#A,connId:this.#D}),this.#F=void 0,this.#A)this.#j(new A30,!0);else{this.#L("disconnected");let D,J=$.reason||"",U=imQ(J);if(U){let{group:Y,code:Z}=U;if(this.#T(Y,Z)){this.#P(),(Q=this.#V)==null||Q.reject(new mQ(Y,Z,`Connection closed: ${J}`,void 0));return}if(ok0(Y,Z)&&this.#B){let F=await tk0(Y,Z,this.#B,this.#N,this.#C);if(F)D=F;else D=new mQ(Y,Z,`Connection closed: ${J}`,void 0)}else D=new mQ(Y,Z,`Connection closed: ${J}`,void 0);this.#v(Y,Z)}else D=Error(`${B?"Connection closed":"Connection lost"} (code: ${$.code}, reason: ${J})`);if(this.#j(D,!1),D instanceof mQ)this.#R(D);if(E)z4().debug({msg:"triggering reconnect",connId:this.#D}),this.#f()}}#j(A,Q){if(this.#V){if(Q)this.#V.promise.catch(()=>{});this.#V.reject(A)}for(let $ of this.#U.values())$.reject(A);this.#U.clear()}#i(){if(this.#A)return;z4().warn("socket error")}#_(A){let Q=this.#U.get(A);if(!Q)throw z4().error({msg:"action not found in in-flight map",lookupId:A,inFlightCount:this.#U.size,inFlightIds:Array.from(this.#U.keys()),inFlightActions:Array.from(this.#U.entries()).map(([$,B])=>({id:$,name:B.name}))}),uyQ(`No in flight response for ${A}`);return this.#U.delete(A),z4().debug({msg:"removed action from in-flight map",actionId:A,actionName:Q.name,inFlightCount:this.#U.size}),Q}#n(A){let{name:Q,args:$}=A,B=this.#J.get(Q);if(!B)return;for(let E of[...B])if(E.callback(...$),E.once)B.delete(E);if(B.size===0)this.#J.delete(Q)}#R(A){for(let Q of[...this.#Y])try{Q(A)}catch($){z4().error({msg:"error in connection error handler",error:V3($)})}}#b(A,Q,$){let B={callback:Q,once:$},E=this.#J.get(A);if(E===void 0)E=new Set,this.#J.set(A,E),this.#k(A,!0);return E.add(B),()=>{let D=this.#J.get(A);if(D){if(D.delete(B),D.size===0)this.#J.delete(A),this.#k(A,!1)}}}on(A,Q){return this.#b(A,Q,!1)}once(A,Q){return this.#b(A,Q,!0)}onError(A){return this.#Y.add(A),()=>{this.#Y.delete(A)}}get connStatus(){return this.#$}get isConnected(){return this.#$==="connected"}get ready(){return this.#W.promise}onOpen(A){if(this.#Z.add(A),this.#$==="connected")queueMicrotask(()=>{if(!this.#Z.has(A))return;try{A()}catch(Q){z4().error({msg:"error in open handler",error:V3(Q)})}});return()=>{this.#Z.delete(A)}}onClose(A){return this.#I.add(A),()=>{this.#I.delete(A)}}onStatusChange(A){return this.#K.add(A),()=>{this.#K.delete(A)}}#S(A,Q){var $,B;if(this.#A)if(Q==null?void 0:Q.ephemeral)return;else throw new A30;let E=!1;if(this.#F){let D=this.#F.readyState;if(z4().debug({msg:"websocket send attempt",readyState:D,readyStateString:D===0?"CONNECTING":D===1?"OPEN":D===2?"CLOSING":"CLOSED",connId:this.#D,messageType:A.body.tag,actionName:($=A.body.val)==null?void 0:$.name}),this.#$!=="connected")z4().debug({msg:"websocket init pending, queueing message",connStatus:this.#$,messageType:A.body.tag}),E=!0;else if(D===1)try{let J=yk0(this.#w,A,WmQ,wc,SmQ,(Y)=>Y,(Y)=>{if(Y.body.tag==="ActionRequest")return{body:{tag:"ActionRequest",val:{id:Y.body.val.id,name:Y.body.val.name,args:yB0(bN(Y.body.val.args))}}};else return Y}),U=nmQ(J);if(U>ik0&&A.body.tag==="ActionRequest"){let Y=Number(A.body.val.id),Z=this.#_(Y),F=new mQ("message","incoming_too_long","Incoming message too long",{maxSize:ik0,actualSize:U});z4().warn({msg:"rejecting oversized connection action request",actionId:Y,actionName:Z.name,actualSize:U,maxSize:ik0}),Z.reject(F),this.#R(F);return}this.#F.send(J),z4().trace({msg:"sent websocket message",len:U})}catch(J){z4().warn({msg:"failed to send message, added to queue",error:J,connId:this.#D}),E=!0}else z4().debug({msg:"websocket not open, queueing message",readyState:D}),E=!0}else z4().debug({msg:"no websocket, queueing message"}),E=!0;if(!(Q==null?void 0:Q.ephemeral)&&E)this.#E.push(A),z4().debug({msg:"queued connection message",queueLength:this.#E.length,connId:this.#D,messageType:A.body.tag,actionName:(B=A.body.val)==null?void 0:B.name})}async#a(A){rk0.default(this.#F,"websocket must be defined");let Q=await TY4(A);return zc(this.#w,Q,CmQ,PmQ,($)=>{if($.body.tag!=="Error"||!$.body.val.actor)return $;return{body:{tag:"Error",val:{...$.body.val,actor:{...$.body.val.actor,generation:Number($.body.val.actor.generation)}}}}},($)=>{if($.body.tag==="Error")return{body:{tag:"Error",val:{group:$.body.val.group,code:$.body.val.code,message:$.body.val.message,metadata:$.body.val.metadata?wX(new Uint8Array($.body.val.metadata)):null,actionId:$.body.val.actionId,actor:$.body.val.actor?{actorId:$.body.val.actor.actorId,generation:Number($.body.val.actor.generation),key:$.body.val.actor.key??void 0}:void 0}}};else if($.body.tag==="ActionResponse")return{body:{tag:"ActionResponse",val:{id:$.body.val.id,output:wX(new Uint8Array($.body.val.output))}}};else if($.body.tag==="Event")return{body:{tag:"Event",val:{name:$.body.val.name,args:wX(new Uint8Array($.body.val.args))}}};else return $})}get actorId(){return this.#B}get connId(){return this.#D}get connectionId(){return this.#D}async dispose(){if(this.#A){z4().warn({msg:"connection already disconnected"});return}if(this.#A=!0,z4().debug({msg:"disposing actor conn"}),this.#L("idle"),clearInterval(this.#z),this.#Q.abort(),this.#u[Q30].delete(this),this.#F){let A=this.#F;if(A.readyState!==2&&A.readyState!==3){let{promise:Q,resolve:$}=UP((B)=>z4().warn({msg:"unhandled websocket close promise rejection",reason:B}));A.addEventListener("close",()=>$(void 0)),A.close(1000,"Disposed"),await Q}}else this.#j(new A30,!0);this.#F=void 0}#k(A,Q){this.#S({body:{tag:"SubscriptionRequest",val:{eventName:A,subscribe:Q}}},{ephemeral:!0})}};function emQ(A,Q){let{endpoint:$,path:B=["endpoint"],namespace:E,token:D}=Q,J;try{J=new URL($)}catch{A.addIssue({code:"custom",message:`invalid URL: ${$}`,path:B});return}if(J.search){A.addIssue({code:"custom",message:"endpoint cannot contain a query string",path:B});return}if(J.hash){A.addIssue({code:"custom",message:"endpoint cannot contain a fragment",path:B});return}let U=J.username?decodeURIComponent(J.username):void 0,Y=J.password?decodeURIComponent(J.password):void 0;if(Y&&!U){A.addIssue({code:"custom",message:"endpoint cannot have a token without a namespace",path:B});return}if(U&&E)A.addIssue({code:"custom",message:"cannot specify namespace both in endpoint URL and as a separate config option",path:["namespace"]});if(Y&&D)A.addIssue({code:"custom",message:"cannot specify token both in endpoint URL and as a separate config option",path:["token"]});return J.username="",J.password="",{endpoint:J.toString(),namespace:U,token:Y}}var nY4="http://localhost:6420",LZ4=4096,aY4=!1,AdQ=g7.object({endpoint:g7.string().optional().transform((A)=>{let Q=A??FU4()??XU4();if(!Q&&!aY4)aY4=!0,console.warn(`[rivetkit] No endpoint provided to client. Defaulting to ${nY4}. Starting in 2.2.0, an explicit endpoint will be required. Pass an endpoint to createClient() or createRivetKit(), or set the RIVET_ENDPOINT environment variable.`);return Q??nY4}),token:g7.string().optional().transform((A)=>A??IU4()),namespace:g7.string().optional().transform((A)=>A??GU4()),poolName:g7.string().default(()=>VU4()??"default"),encoding:vY4.default("bare"),headers:g7.record(g7.string(),g7.string()).optional().default(()=>({})),gateway:g7.object({skipReadyWait:g7.boolean().optional().default(!1)}).optional().default(()=>({skipReadyWait:!1})),getUpgradeWebSocket:g7.custom().optional(),disableMetadataLookup:g7.boolean().optional().default(!1),maxInputSize:g7.number().int().positive().default(LZ4),devtools:g7.boolean().default(()=>{var A,Q;return typeof window<"u"&&(((A=window==null?void 0:window.location)==null?void 0:A.hostname)==="127.0.0.1"||((Q=window.location)==null?void 0:Q.hostname)==="localhost")})}),jZ4=AdQ.transform((A,Q)=>QdQ(A,Q));function QdQ(A,Q){let $=emQ(Q,{endpoint:A.endpoint,path:["endpoint"],namespace:A.namespace,token:A.token});return{...A,endpoint:$==null?void 0:$.endpoint,namespace:($==null?void 0:$.namespace)??A.namespace??"default",token:($==null?void 0:$.token)??A.token}}function A6(){return GK("engine-client")}function $30(A){return A.endpoint??"http://127.0.0.1:6420"}async function qK(A,Q,$,B){let E=$30(A),D=YP(E,$,{namespace:A.namespace});A6().debug({msg:"making api call",method:Q,url:D});let J={...A.headers};if(A.token)J.Authorization=`Bearer ${A.token}`;return await Jf0({method:Q,url:D,headers:J,body:B,encoding:"json",skipParseResponse:!1,requestVersionedDataHandler:void 0,requestVersion:void 0,responseVersionedDataHandler:void 0,responseVersion:void 0,requestZodSchema:j.any(),responseZodSchema:j.any(),requestToJson:(U)=>U,requestToBare:(U)=>U,responseFromJson:(U)=>U,responseFromBare:(U)=>U})}async function $dQ(A,Q,$){return qK(A,"GET",`/actors?actor_ids=${encodeURIComponent($)}`)}async function BdQ(A,Q,$){let B=IB0($);return qK(A,"GET",`/actors?name=${encodeURIComponent(Q)}&key=${encodeURIComponent(B)}`)}async function EdQ(A,Q){return qK(A,"GET",`/actors?name=${encodeURIComponent(Q)}`)}async function DdQ(A,Q){return qK(A,"PUT","/actors",Q)}async function JdQ(A,Q){return qK(A,"POST","/actors",Q)}async function UdQ(A,Q){return qK(A,"DELETE",`/actors/${encodeURIComponent(Q)}`)}async function YdQ(A){return qK(A,"GET","/metadata")}async function ZdQ(A,Q,$){return qK(A,"GET",`/actors/${encodeURIComponent(Q)}/kv/keys/${encodeURIComponent($)}`)}function KP(A={}){return A.skipReadyWait===!0}async function oY4(A,Q,$,B={}){let E=null,D=XdQ(A,$,B);if($.method!=="GET"&&$.method!=="HEAD"){if($.bodyUsed)throw Error("Request body has already been consumed");let U=await $.arrayBuffer();if(U.byteLength!==0)E=U,D.delete("transfer-encoding"),D.set("content-length",String(E.byteLength))}let J=new Request(Q,{method:$.method,headers:D,body:E,signal:$.signal});return FdQ(await fetch(J))}function FdQ(A){return new Response(A.body,A)}function XdQ(A,Q,$){let B=new Headers;Q.headers.forEach((E,D)=>{B.set(D,E)});for(let[E,D]of Object.entries(A.headers))B.set(E,D);if(A.token)B.set(ZyQ,A.token);if($.directActorId!==void 0)B.set(FyQ,"actor"),B.set(XyQ,$.directActorId);if(KP($))B.set(IyQ,"1");return B}var rY4=new Map;function IdQ(A,Q,$){if(!$)return;let B=A;B.__rivetGetHibernatableAckState=Q.getState,B.__rivetWaitForHibernatableAck=Q.waitForAck}function GdQ(A,Q,$){if(!$)return;IdQ(A,{getState:()=>{let B=rY4.get(Q);if(!B)throw Error(`remote hibernatable websocket ack hooks are unavailable for token ${Q}`);return B.getState()},waitForAck:async(B)=>{let E=rY4.get(Q);if(!E)throw Error(`remote hibernatable websocket ack hooks are unavailable for token ${Q}`);await E.waitForAck(B)}},$)}var VdQ=class{CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;#A;#Q=new Map;#$=[];#B=null;#D=null;#E=null;#U=null;constructor(A){this.#A=A;for(let Q of["open","message","close","error"])this.#A.addEventListener(Q,($)=>{this.#J(Q,$)})}get readyState(){return this.#A.readyState}get binaryType(){return this.#A.binaryType}set binaryType(A){this.#A.binaryType=A}get bufferedAmount(){return this.#A.bufferedAmount}get extensions(){return this.#A.extensions}get protocol(){return this.#A.protocol}get url(){return this.#A.url}get onopen(){return this.#B}set onopen(A){this.#B=A,this.#Y()}get onclose(){return this.#D}set onclose(A){this.#D=A,this.#Y()}get onerror(){return this.#E}set onerror(A){this.#E=A,this.#Y()}get onmessage(){return this.#U}set onmessage(A){this.#U=A,this.#Y()}send(A){this.#A.send(A)}close(A,Q){this.#A.close(A,Q)}addEventListener(A,Q){let $=this.#Q.get(A)??new Set;$.add(Q),this.#Q.set(A,$),this.#Y()}removeEventListener(A,Q){var $;($=this.#Q.get(A))==null||$.delete(Q)}dispatchEvent(A){return this.#X(A.type,A)}#J(A,Q){if(this.#Z(A)){this.#X(A,Q);return}this.#$.push({type:A,event:Q})}#Y(){if(this.#$.length===0)return;let A=this.#$;this.#$=[];for(let Q of A){if(this.#Z(Q.type)){this.#X(Q.type,Q.event);continue}this.#$.push(Q)}}#Z(A){var Q;let $=A==="open"?this.#B:A==="close"?this.#D:A==="error"?this.#E:A==="message"?this.#U:null;return Boolean($)||(((Q=this.#Q.get(A))==null?void 0:Q.size)??0)>0}#X(A,Q){let $=this.#Q.get(A);if($)for(let E of $)E(Q);let B=A==="open"?this.#B:A==="close"?this.#D:A==="error"?this.#E:A==="message"?this.#U:null;return B==null||B(Q),!0}};function sY4(A,Q,$,B=""){let E=$!==void 0?`@${encodeURIComponent($)}`:"",D=`/gateway/${encodeURIComponent(Q)}${E}${B}`;return YP(A,D)}function KdQ(A,Q,$,B,E="",D=LZ4,J=void 0,U,Y={}){if(Q.length===0)throw Error("actor query namespace must not be empty");let Z,F=new URLSearchParams;if(F.append("rvt-namespace",Q),"getForKey"in $){if(Z=$.getForKey.name,F.append("rvt-method","get"),tY4(F,$.getForKey.key),J!==void 0)throw Error("Actor query method=get does not support crashPolicy.");if(U!==void 0)throw Error("Actor query method=get does not support runnerName.")}else if("getOrCreateForKey"in $){if(Z=$.getOrCreateForKey.name,F.append("rvt-method","getOrCreate"),U===void 0)throw Error("Actor query method=getOrCreate requires runnerName.");if(F.append("rvt-runner",U),tY4(F,$.getOrCreateForKey.key),zdQ(F,$.getOrCreateForKey.input,D),$.getOrCreateForKey.region!==void 0)F.append("rvt-region",$.getOrCreateForKey.region);F.append("rvt-crash-policy",J??"sleep")}else throw Error("Actor query gateway URLs only support get and getOrCreate.");if(Z.length===0)throw Error("actor query name must not be empty");if(B!==void 0)F.append("rvt-token",B);if(KP(Y))F.append("rvt-skip-ready-wait","true");let X=F.toString(),I;if(E.endsWith("?")||E.endsWith("&"))I="";else if(E.includes("?"))I="&";else I="?";let G=`/gateway/${encodeURIComponent(Z)}${E}${I}${X}`;return YP(A,G)}function tY4(A,Q){if(Q.length>0)A.append("rvt-key",Q.join(","))}function zdQ(A,Q,$){if(Q===void 0)return;let B=bN(Q);if(B.byteLength>$)throw Error(`Actor query input exceeds maxInputSize (${B.byteLength} > ${$} bytes). Increase client maxInputSize to allow larger query payloads.`);A.append("rvt-input",WdQ(B))}function WdQ(A){return aB0(A).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function CdQ(A,Q,$,B,E={}){let D=await bk0(),J=typeof process<"u"&&process.env.VITEST?crypto.randomUUID():void 0;A6().debug({msg:"opening websocket to actor via guard",gatewayUrl:Q});let U=new D(Q,PZ4(A,$,B,J,E.directActorId?{target:"actor",actorId:E.directActorId}:void 0,E));U.binaryType="arraybuffer";let Y=new VdQ(U);if(J)GdQ(Y,J,!0);return Y}function PZ4(A,Q,$,B,E,D={}){let J=[];if(J.push(GyQ),J.push(`${zyQ}${Q}`),E){if(J.push(`${VyQ}${E.target}`),J.push(`${KyQ}${E.actorId}`),A.token)J.push(`${CyQ}${A.token}`)}if(KP(D))J.push(HyQ);if($)J.push(`${WyQ}${encodeURIComponent(JSON.stringify($))}`);if(B)J.push(`${NyQ}${encodeURIComponent(B)}`);return J}var eY4=new Map;async function HdQ(A){let Q=$30(A),$=eY4.get(Q);if($)return $;let B=Cc(async()=>{A6().debug({msg:"fetching metadata",endpoint:Q});let E=await YdQ(A);return A6().debug({msg:"received metadata",endpoint:Q,clientEndpoint:E.clientEndpoint}),E},{forever:!0,minTimeout:500,maxTimeout:15000,onFailedAttempt:(E)=>{if(E.attemptNumber>1)A6().warn({msg:"failed to fetch metadata, retrying",endpoint:Q,attempt:E.attemptNumber,error:V3(E)})}});return eY4.set(Q,B),B}async function NdQ(A,Q,$){let B=await bk0(),E={};return{onOpen:async(D,J)=>{if(A6().debug({msg:"client websocket connected",targetUrl:Q}),J.readyState!==1){A6().warn({msg:"client websocket not open on connection",targetUrl:Q,readyState:J.readyState});return}let U=new B(Q,$);E.targetWs=U,E.connectPromise=new Promise((Y,Z)=>{U.addEventListener("open",()=>{if(A6().debug({msg:"target websocket connected",targetUrl:Q}),J.readyState!==1){A6().warn({msg:"client websocket closed before target connected",targetUrl:Q,clientReadyState:J.readyState}),U.close(1001,"Client disconnected"),Z(Error("Client disconnected"));return}Y()}),U.addEventListener("error",(F)=>{A6().warn({msg:"target websocket error during connection",targetUrl:Q}),Z(F)})}),E.targetWs.addEventListener("message",(Y)=>{if(typeof Y.data==="string"||Y.data instanceof ArrayBuffer)J.send(Y.data);else if(Y.data instanceof Blob)Y.data.arrayBuffer().then((Z)=>{J.send(Z)})}),E.targetWs.addEventListener("close",(Y)=>{A6().debug({msg:"target websocket closed",targetUrl:Q,code:Y.code,reason:Y.reason}),nk0(J,Y.code,Y.reason)}),E.targetWs.addEventListener("error",(Y)=>{A6().error({msg:"target websocket error",targetUrl:Q,error:V3(Y)}),nk0(J,1011,"Target WebSocket error")})},onMessage:async(D,J)=>{if(!E.targetWs||!E.connectPromise){A6().error({msg:"websocket state not initialized",targetUrl:Q});return}try{if(await E.connectPromise,E.targetWs.readyState===B.OPEN)E.targetWs.send(D.data);else A6().warn({msg:"target websocket not open",targetUrl:Q,readyState:E.targetWs.readyState})}catch(U){A6().error({msg:"failed to connect to target websocket",targetUrl:Q,error:U}),nk0(J,1011,"Failed to connect to target")}},onClose:(D,J)=>{if(A6().debug({msg:"client websocket closed",targetUrl:Q,code:D.code,reason:D.reason,wasClean:D.wasClean}),E.targetWs){if(E.targetWs.readyState===B.OPEN||E.targetWs.readyState===B.CONNECTING)E.targetWs.close(1000,D.reason||"Client disconnected")}},onError:(D,J)=>{if(A6().error({msg:"client websocket error",targetUrl:Q,event:D}),E.targetWs){if(E.targetWs.readyState===B.OPEN)E.targetWs.close(1011,"Client WebSocket error");else if(E.targetWs.readyState===B.CONNECTING)E.targetWs.close()}}}}function nk0(A,Q,$){if(A.readyState===1)A.close(Q,$);else if("close"in A&&A.readyState===WebSocket.OPEN)A.close(Q,$)}var vZ4=class{#A;#Q;constructor(A){if(zU4()==="phase-production-build")A6().info("detected next.js build phase, disabling health check"),A.disableMetadataLookup=!0;if(this.#A={...A},!A.disableMetadataLookup)this.#Q=HdQ(this.#A).then((Q)=>{if(Q.clientEndpoint){if(this.#A.endpoint=Q.clientEndpoint,Q.clientNamespace)this.#A.namespace=Q.clientNamespace;if(Q.clientToken)this.#A.token=Q.clientToken;A6().info({msg:"overriding client endpoint",endpoint:Q.clientEndpoint,namespace:Q.clientNamespace,token:Q.clientToken})}A6().info({msg:"connected to rivetkit runtime",runtime:Q.runtime,version:Q.version,envoy:Q.envoy})})}async getForId({name:A,actorId:Q}){await this.#Q;let B=(await $dQ(this.#A,A,Q)).actors[0];if(!B)return;if(B.name!==A){A6().debug({msg:"actor name mismatch from api",actorId:Q,apiName:B.name,requestedName:A});return}return qc(B)}async getWithKey({name:A,key:Q}){await this.#Q,A6().debug({msg:"getWithKey: searching for actor",name:A,key:Q});try{let B=(await BdQ(this.#A,A,Q)).actors[0];if(!B)return;return A6().debug({msg:"getWithKey: found actor via api",actorId:B.actor_id,name:A,key:Q}),qc(B)}catch($){if($ instanceof mQ&&$.group==="actor"&&$.code==="not_found")return;throw $}}async getOrCreateWithKey(A){await this.#Q;let{name:Q,key:$,input:B,region:E,crashPolicy:D}=A;A6().info({msg:"getOrCreateWithKey: getting or creating actor via engine api",name:Q,key:$});let{actor:J,created:U}=await DdQ(this.#A,{datacenter:E,name:Q,key:IB0($),runner_name_selector:this.#A.poolName,input:B?aB0(bN(B)):void 0,crash_policy:D??"sleep"});return A6().info({msg:"getOrCreateWithKey: actor ready",actorId:J.actor_id,name:Q,key:$,created:U}),qc(J)}async createActor({name:A,key:Q,input:$,region:B,crashPolicy:E}){await this.#Q,A6().info({msg:"creating actor via engine api",name:A,key:Q});let D=await JdQ(this.#A,{datacenter:B,name:A,runner_name_selector:this.#A.poolName,key:IB0(Q),input:$?aB0(bN($)):void 0,crash_policy:E??"sleep"});return A6().info({msg:"actor created",actorId:D.actor.actor_id,name:A,key:Q}),qc(D.actor)}async listActors({name:A}){return await this.#Q,A6().debug({msg:"listing actors via engine api",name:A}),(await EdQ(this.#A,A)).actors.map(qc)}async destroyActor(A){await this.#Q,A6().info({msg:"destroying actor via engine api",actorId:A}),await UdQ(this.#A,A),A6().info({msg:"actor destroyed",actorId:A})}async sendRequest(A,Q,$={}){await this.#Q;let B=QZ4(Q),E=this.#$(A,B,$),D={...$,directActorId:KP($)?ak0(A):void 0};return oY4(this.#A,E,Q,D)}async openWebSocket(A,Q,$,B,E={}){await this.#Q;let D=this.#$(Q,A,E);return CdQ(this.#A,D,$,B,{...E,directActorId:KP(E)?ak0(Q):void 0})}async buildGatewayUrl(A,Q={}){return await this.#Q,this.#$(A,"",Q)}async proxyRequest(A,Q,$){await this.#Q;let B=this.#$({directId:$},QZ4(Q));return oY4(this.#A,B,Q)}async proxyWebSocket(A,Q,$,B,E){var D,J;await this.#Q;let U=(J=(D=this.#A).getUpgradeWebSocket)==null?void 0:J.call(D);RZ4.default(U,"missing getUpgradeWebSocket");let Y=$30(this.#A),Z=YP(Y,Q),F=Z.replace("http://","ws://");A6().debug({msg:"forwarding websocket to actor via guard",actorId:$,path:Q,guardUrl:Z});let X=PZ4(this.#A,B,E,void 0,{target:"actor",actorId:$}),I=await NdQ(A,F,X);return await U(()=>I)(A,WU4())}async kvGet(A,Q){return await this.#Q,A6().debug({msg:"getting kv value via engine api",key:Q}),(await ZdQ(this.#A,A,new TextDecoder("utf8").decode(Q))).value}async kvBatchGet(A,Q){throw Error("kvBatchGet not supported on remote engine client")}async kvBatchPut(A,Q){throw Error("kvBatchPut not supported on remote engine client")}async kvBatchDelete(A,Q){throw Error("kvBatchDelete not supported on remote engine client")}async kvDeleteRange(A,Q,$){throw Error("kvDeleteRange not supported on remote engine client")}displayInformation(){return{properties:{}}}setGetUpgradeWebSocket(A){this.#A.getUpgradeWebSocket=A}#$(A,Q,$={}){let B=$30(this.#A);if(KP($)&&ak0(A)&&qdQ(Q))return YP(B,Q);if("directId"in A)return sY4(B,A.directId,this.#A.token,Q);if("getForId"in A)return sY4(B,A.getForId.actorId,this.#A.token,Q);if("getForKey"in A||"getOrCreateForKey"in A)return KdQ(B,this.#A.namespace,A,this.#A.token,Q,this.#A.maxInputSize,void 0,"getOrCreateForKey"in A?this.#A.poolName:void 0,$);if("create"in A)throw Error("Gateway URLs only support direct actor IDs, get, and getOrCreate targets.");throw Error("unreachable: unknown gateway target type")}};function qdQ(A){return udQ(A)||AZ4(A,$Z4)||AZ4(A,YyQ)||A.startsWith(BZ4)}function AZ4(A,Q){return A===Q||A.startsWith(`${Q}?`)}function udQ(A){let Q=A.slice(8);return A.startsWith("/request")&&(Q.length===0||Q.startsWith("/")||Q.startsWith("?"))}function ak0(A){if("directId"in A)return A.directId;if("getForId"in A)return A.getForId.actorId;return}function QZ4(A){let Q=new URL(A.url);return`${Q.pathname}${Q.search}`}function qc(A){return{actorId:A.actor_id,name:A.name,key:JJ4(A.key),createTs:A.create_ts,startTs:A.start_ts??null,connectableTs:A.connectable_ts??null,sleepTs:A.sleep_ts??null,destroyTs:A.destroy_ts??null,error:A.error??void 0}}function wdQ(){return GK("devtools")}var MdQ=(A=Ek0)=>`https://releases.rivet.dev/rivet/latest/devtools/mod.js?v=${A}`,TZ4="rivetkit-devtools-script";function OdQ(A){if(!window){wdQ().warn("devtools not available outside browser environment");return}if(!document.getElementById(TZ4)){let Q=document.createElement("script");Q.id=TZ4,Q.src=MdQ(),Q.async=!0,document.head.appendChild(Q)}window.__rivetkit=window.__rivetkit||[],window.__rivetkit.push(A)}function Uf0(A){let Q=A===void 0?{}:typeof A==="string"?{endpoint:A}:A,$=jZ4.parse(Q),B=new vZ4($);if($.devtools)OdQ($);return MZ4(B,$)}function Z7(A){return Uf0(LdQ(A))}var NP=65536;function LdQ(A){let Q=RdQ()??jdQ(A);if(A===void 0)return Q?{poolName:Q,maxInputSize:NP,devtools:!1}:{maxInputSize:NP,devtools:!1};if(typeof A==="string")return Q?{endpoint:A,poolName:Q,maxInputSize:NP,devtools:!1}:{endpoint:A,maxInputSize:NP,devtools:!1};return Q?{...A,poolName:Q,maxInputSize:NP,devtools:!1}:{...A,maxInputSize:NP,devtools:!1}}function jdQ(A){if(A===void 0||typeof A==="string")return;let Q=A.poolName?.trim();return Q&&Q.length>0?Q:void 0}function RdQ(){if(typeof process>"u")return;let A=process.env.RIVET_POOL?.trim();return A&&A.length>0?A:void 0}class Mc extends Error{constructor(A){super(A);this.name="ThreadClientError"}}class dQ extends Mc{cause;constructor(A,Q){super(A);this.cause=Q;this.name="NetworkError"}}class oB extends Mc{cause;constructor(A,Q){super(A);this.cause=Q;this.name="ThreadClientConnectionError"}}class Oc extends Mc{code;payload;constructor(A,Q,$){super(A);this.code=Q;this.payload=$;this.name="ExecutorHandshakeRejectedError"}}function Lc(A){return A instanceof Oc&&A.code==="EXECUTOR_ALREADY_CONNECTED"}a0();a0();function _Z4(A){if(!A._regex)try{A._regex=new RegExp(A.pattern,A.caseInsensitive?"gi":"g")}catch(Q){S.warn("Error compiling regex",{pattern:A.id,error:Q}),A._regex=/$^/}return A._regex}var SZ4=[{id:"sourcegraph-access-token-v3",category:"sourcegraph",title:"Sourcegraph Access Token (v3)",pattern:String.raw`(sgp_(?:[a-fA-F0-9]{16}|local)_[a-fA-F0-9]{40})`,keywords:["sgp_"]},{id:"sourcegraph-access-token-v2",category:"sourcegraph",title:"Sourcegraph Access Token (v2, deprecated)",pattern:String.raw`(sgp_[a-fA-F0-9]{40})`,keywords:["sgp_"]},{id:"sourcegraph-dotcom-user-gateway",category:"sourcegraph",title:"Sourcegraph Dotcom User Gateway Access Token",pattern:String.raw`(sgd_[a-fA-F0-9]{64})`,keywords:["sgd_"]},{id:"sourcegraph-license-key",category:"sourcegraph",title:"Sourcegraph License Key Token",pattern:String.raw`(slk_[a-fA-F0-9]{64})`,keywords:["slk_"]},{id:"sourcegraph-enterprise-subscription",category:"sourcegraph",title:"Sourcegraph Enterprise subscription Token",pattern:String.raw`(sgs_[a-fA-F0-9]{64})`,keywords:["sgs_"]},{id:"sourcegraph-amp",category:"sourcegraph",title:"Sourcegraph Amp Access Token",pattern:String.raw`(sgamp_user_[A-Z0-9]{26}_[a-f0-9]{64})`,keywords:["sgamp_user_"]},{id:"sourcegraph-amp-auth-bypass",category:"sourcegraph",title:"Sourcegraph Amp Auth Bypass Token",pattern:String.raw`(sgamp_user_auth-bypass_[a-zA-Z0-9_-]+)`,keywords:["sgamp_user_auth-bypass_"]},{id:"sourcegraph-workspace-token",category:"sourcegraph",title:"Sourcegraph Workspace Access Token",pattern:String.raw`(sgp_ws[a-fA-F0-9]{32}_[a-fA-F0-9]{40})`,keywords:["sgp_ws"]},{id:"github-pat",category:"github",title:"GitHub Personal Access Token",pattern:String.raw`(ghp_[0-9a-zA-Z]{36})`,keywords:["ghp_"]},{id:"github-oauth",category:"github",title:"GitHub OAuth Access Token",pattern:String.raw`(gho_[0-9a-zA-Z]{36})`,keywords:["gho_"]},{id:"github-app-token",category:"github",title:"GitHub App Token",pattern:String.raw`((ghu|ghs)_[0-9a-zA-Z]{36})`,keywords:["ghu_","ghs_"]},{id:"github-refresh-token",category:"github",title:"GitHub Refresh Token",pattern:String.raw`(ghr_[0-9a-zA-Z]{76})`,keywords:["ghr_"]},{id:"github-fine-grained-pat",category:"github",title:"GitHub Fine-grained personal access tokens",pattern:String.raw`(github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59})`,keywords:["github_pat_"]},{id:"gitlab-pat",category:"gitlab",title:"GitLab Personal Access Token",pattern:String.raw`(glpat-[0-9a-zA-Z_-]{20})`,keywords:["glpat-"]},{id:"bitbucket-pat",category:"bitbucket",title:"Bitbucket Personal Access Token",pattern:String.raw`(bbpat-[A-Za-z0-9]{20,200})`,keywords:["bbpat-"]},{id:"bitbucket-repo-access-token",category:"bitbucket",title:"Bitbucket Repository Access Token",pattern:String.raw`(bbrat-[A-Za-z0-9]{20,200})`,keywords:["bbrat-"]},{id:"bitbucket-dc-http-token",category:"bitbucket",title:"Bitbucket DC/Server HTTP Access Token",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}bitbucket[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([A-Za-z0-9+/]{40,80}={0,2})['"]`,keywords:["bitbucket"]},{id:"aws-access-key-id",category:"aws",title:"AWS Access Key ID",pattern:String.raw`((A3T[A-Z0-9]|AKIA|ASIA)[A-Z0-9]{16})`,keywords:["A3T","AKIA","ASIA"]},{id:"hugging-face-access-token",category:"huggingface",title:"Hugging Face Access Token",pattern:String.raw`(hf_[A-Za-z0-9]{34,40})`,keywords:["hf_"]},{id:"private-key",category:"asymmetric-private-key",title:"Asymmetric Private Key",pattern:String.raw`-----\s*?BEGIN[ A-Z0-9_-]*?PRIVATE KEY(?: BLOCK)?\s*?-----\s*([A-Za-z0-9=+/\s]+)\s*-----\s*?END[ A-Z0-9_-]*? PRIVATE KEY(?: BLOCK)?\s*?-----`,keywords:["-----"],caseInsensitive:!0},{id:"shopify-token",category:"shopify",title:"Shopify token",pattern:String.raw`(shp(ss|at|ca|pa)_[a-fA-F0-9]{32})`,keywords:["shpss_","shpat_","shpca_","shppa_"]},{id:"slack-access-token",category:"slack",title:"Slack token",pattern:String.raw`((xox[baoprs]-|xapp-|xwfp-)([0-9a-zA-Z-]{10,100}))`,keywords:["xoxb-","xoxa-","xoxp-","xoxr-","xoxs-","xoxo-","xapp-","xwfp-"]},{id:"slack-config-refresh-token",category:"slack",title:"Slack config refresh token",pattern:String.raw`(xoxe-\d-[a-zA-Z0-9]{146})`,caseInsensitive:!0,keywords:["xoxe-"]},{id:"slack-config-access-token",category:"slack",title:"Slack config access token",pattern:String.raw`(xoxe.xox[bp]-\d-[A-Z0-9]{163,166})`,caseInsensitive:!0,keywords:["xoxe.xoxb-","xoxe.xoxp-"]},{id:"slack-web-hook",category:"slack",title:"Slack Webhook",pattern:String.raw`(https:\/\/hooks\.slack\.com\/(services|triggers|workflows)\/[A-Za-z0-9+\/]{43,56})`,caseInsensitive:!0,keywords:["hooks.slack.com"]},{id:"stripe-secret-token",category:"stripe",title:"Stripe Secret Key",pattern:String.raw`(sk_(test|live)_[0-9a-z]{10,99})`,keywords:["sk_test_","sk_live_"],caseInsensitive:!0},{id:"supabase-service-key",category:"supabase",title:"Supabase Service Key",pattern:String.raw`(sbp_[a-fA-F0-9]{40})`,keywords:["sbp_"]},{id:"pypi-upload-token",category:"pypi",title:"PyPI upload token",pattern:String.raw`(pypi-AgEIcHlwaS5vcmc[A-Za-z0-9_-]{50,1000})`,keywords:["pypi-AgEIcHlwaS5vcmc"]},{id:"gcp-service-account",category:"google",title:"Google (GCP) Service-account",pattern:String.raw`("type": "service_account")`,keywords:['"type": "service_account"']},{id:"cloudflare-api-token",category:"unknown",title:"Cloudflare API Token",pattern:String.raw`\b(cfut_[A-Za-z0-9]{48})\b`,keywords:["cfut_"]},{id:"e2b-api-key",category:"unknown",title:"E2B API Key",pattern:String.raw`\b(e2b_[a-f0-9]{40})\b`,keywords:["e2b_"]},{id:"google-api-key",category:"google",title:"Google API Key",pattern:String.raw`\b(AIza[0-9A-Za-z_-]{35,40})\b`,keywords:["AIza"]},{id:"heroku-api-key",category:"heroku",title:"Heroku API Key",pattern:String.raw`(?:heroku[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](\d[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})['"]`,keywords:["heroku"],caseInsensitive:!0},{id:"twilio-api-key",category:"twilio",title:"Twilio API Key",pattern:String.raw`(SK[0-9a-fA-F]{32})`,keywords:["SK"]},{id:"age-secret-key",category:"age",title:"Age secret key",pattern:String.raw`(AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58})`,keywords:["AGE-SECRET-KEY-1"]},{id:"jwt-token",category:"jwt",title:"JWT token",pattern:String.raw`(ey[a-zA-Z0-9]{17,}\.ey[a-zA-Z0-9/\\_-]{17,}\.(?:[a-zA-Z0-9/\\_-]{10,}={0,2})?)`,keywords:[".eyJ"]},{id:"npm-access-token",category:"npm",title:"npm access token",pattern:String.raw`(npm_[a-z0-9]{36})`,keywords:["npm_"],caseInsensitive:!0},{id:"sendgrid-api-token",category:"sendgrid",title:"SendGrid API token",pattern:String.raw`(SG\.[a-z0-9_.-]{66})`,keywords:["SG."],caseInsensitive:!0},{id:"aws-secret-access-key",category:"aws",title:"AWS Secret Access Key",pattern:String.raw`(aws[_-]secret[_-]access[_-]key[_-][A-Za-z0-9/+=]{40})`,keywords:["key"],caseInsensitive:!0},{id:"dockerconfig-secret",category:"docker",title:"Dockerconfig secret exposed",pattern:String.raw`((\.dockerconfigjson|dockercfg):\s*\|*\s*((ey|ew)+[A-Za-z0-9/+=]+))`,keywords:["dockerc"],caseInsensitive:!0},{id:"linear-api-token",category:"linear",title:"Linear API token",pattern:String.raw`(lin_api_[a-z0-9]{40})`,keywords:["lin_api_"],caseInsensitive:!0},{id:"sendinblue-api-token",category:"sendinblue",title:"Sendinblue API token",pattern:String.raw`(xkeysib-[a-f0-9]{64}-[a-z0-9]{16})`,keywords:["xkeysib-"],caseInsensitive:!0},{id:"planetscale-api-token",category:"planetscale",title:"PlanetScale API token",pattern:String.raw`(pscale_tkn_[a-z0-9_.-]{43})`,keywords:["pscale_tkn_"],caseInsensitive:!0},{id:"doppler-api-token",category:"doppler",title:"Doppler API token",pattern:String.raw`(dp\.pt\.[a-z0-9]{43})`,keywords:["dp.pt."],caseInsensitive:!0},{id:"discord-api-token",category:"discord",title:"Discord API key",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{64})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"pulumi-api-token",category:"pulumi",title:"Pulumi API token",pattern:String.raw`(pul-[a-f0-9]{40})`,keywords:["pul-"]},{id:"postman-api-token",category:"postman",title:"Postman API token",pattern:String.raw`(PMAK-[a-f0-9]{24}-[a-f0-9]{34})`,keywords:["PMAK-"],caseInsensitive:!0},{id:"facebook-token",category:"facebook",title:"Facebook token",pattern:String.raw`(?:facebook[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["facebook"],caseInsensitive:!0},{id:"twitter-token",category:"twitter",title:"Twitter token",pattern:String.raw`(?:twitter[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{35,44})['"]`,keywords:["twitter"],caseInsensitive:!0},{id:"adobe-client-id",category:"adobe",title:"Adobe Client ID (Oauth Web)",pattern:String.raw`(?:adobe[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["adobe"],caseInsensitive:!0},{id:"adobe-client-secret",category:"adobe",title:"Adobe Client Secret",pattern:String.raw`(p8e-[a-z0-9]{32})`,keywords:["p8e-"],caseInsensitive:!0},{id:"alibaba-access-key-id",category:"alibaba",title:"Alibaba AccessKey ID",pattern:String.raw`((LTAI)[a-z0-9]{20})`,keywords:["LTAI"],caseInsensitive:!0},{id:"alibaba-secret-key",category:"alibaba",title:"Alibaba Secret Key",pattern:String.raw`(?:alibaba[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{30})['"]`,keywords:["alibaba"],caseInsensitive:!0},{id:"asana-client-id",category:"asana",title:"Asana Client ID",pattern:String.raw`(?:asana[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([0-9]{16})['"]`,keywords:["asana"],caseInsensitive:!0},{id:"asana-client-secret",category:"asana",title:"Asana Client Secret",pattern:String.raw`(?:asana[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{32})['"]`,keywords:["asana"],caseInsensitive:!0},{id:"atlassian-api-token",category:"atlassian",title:"Atlassian API token",pattern:String.raw`(?:atlassian[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{24})['"]`,keywords:["atlassian"],caseInsensitive:!0},{id:"beamer-api-token",category:"beamer",title:"Beamer API token",pattern:String.raw`(?:beamer[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](b_[a-z0-9=_-]{44})['"]`,keywords:["beamer"],caseInsensitive:!0},{id:"buildkite-agent-token",category:"buildkite",title:"Buildkite API Token V2",pattern:String.raw`(bkua_[a-fA-F0-9]{40})`,keywords:["bkua_"]},{id:"clojars-api-token",category:"clojars",title:"Clojars API token",pattern:String.raw`(CLOJARS_[a-z0-9]{60})`,keywords:["CLOJARS_"],caseInsensitive:!0},{id:"contentful-delivery-api-token",category:"contentful-delivery",title:"Contentful delivery API token",pattern:String.raw`(?:contentful[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{43})['"]`,keywords:["contentful"],caseInsensitive:!0},{id:"databricks-api-token",category:"databricks",title:"Databricks API token",pattern:String.raw`(dapi[a-h0-9]{32})`,keywords:["dapi"]},{id:"discord-client-id",category:"discord",title:"Discord client ID",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([0-9]{18})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"discord-client-secret",category:"discord",title:"Discord client secret",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{32})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"dropbox-api-secret",category:"dropbox",title:"Dropbox API secret/key",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{15})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"dropbox-short-lived-api-token",category:"dropbox",title:"Dropbox short lived API token",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](sl\.[a-z0-9=_-]{135})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"dropbox-long-lived-api-token",category:"dropbox",title:"Dropbox long lived API token",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9_=-]{43})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"duffel-api-token",category:"duffel",title:"Duffel API token",pattern:String.raw`(duffel_(test|live)_[a-z0-9_-]{43})`,keywords:["duffel_test_","duffel_live_"],caseInsensitive:!0},{id:"dynatrace-api-token",category:"dynatrace",title:"Dynatrace API token",pattern:String.raw`(dt0c01\.[a-z0-9]{24}\.[a-z0-9]{64})`,keywords:["dt0c01."],caseInsensitive:!0},{id:"easypost-api-token",category:"easypost",title:"EasyPost API token",pattern:String.raw`(EZ[AT]K[a-z0-9]{54})`,keywords:["EZAK","EZAT"],caseInsensitive:!0},{id:"fastly-api-token",category:"fastly",title:"Fastly API token",pattern:String.raw`(?:fastly[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{32})['"]`,keywords:["fastly"],caseInsensitive:!0},{id:"finicity-client-secret",category:"finicity",title:"Finicity client secret",pattern:String.raw`(?:finicity[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{20})['"]`,keywords:["finicity"],caseInsensitive:!0},{id:"finicity-api-token",category:"finicity",title:"Finicity API token",pattern:String.raw`(?:finicity[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["finicity"],caseInsensitive:!0},{id:"flutterwave-public-key",category:"flutterwave",title:"Flutterwave public/secret key",pattern:String.raw`(FLW(PUB|SEC)K_TEST-[a-h0-9]{32}-X)`,keywords:["FLWSECK_TEST-","FLWPUBK_TEST-"],caseInsensitive:!0},{id:"flutterwave-enc-key",category:"flutterwave",title:"Flutterwave encrypted key",pattern:String.raw`(FLWSECK_TEST[a-h0-9]{12})`,keywords:["FLWSECK_TEST"]},{id:"frameio-api-token",category:"frameio",title:"Frame.io API token",pattern:String.raw`(fio-u-[a-z0-9_=-]{64})`,keywords:["fio-u-"],caseInsensitive:!0},{id:"gocardless-api-token",category:"gocardless",title:"GoCardless API token",pattern:String.raw`(live_[a-z0-9_=-]{40})`,keywords:["live_"],caseInsensitive:!0},{id:"grafana-api-token",category:"grafana",title:"Grafana API token",pattern:String.raw`(eyJrIjoi[a-z0-9_=-]{72,92})`,keywords:["eyJrIjoi"],caseInsensitive:!0},{id:"hashicorp-tf-api-token",category:"hashicorp",title:"HashiCorp Terraform user/org API token",pattern:String.raw`([a-z0-9]{14}\.atlasv1\.[a-z0-9_=-]{60,70})`,keywords:["atlasv1."],caseInsensitive:!0},{id:"hubspot-api-token",category:"hubspot",title:"HubSpot API token",pattern:String.raw`(?:hubspot[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["hubspot"],caseInsensitive:!0},{id:"intercom-api-token",category:"intercom",title:"Intercom API token",pattern:String.raw`(?:intercom[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_]{60})['"]`,keywords:["intercom"],caseInsensitive:!0},{id:"intercom-client-secret",category:"intercom",title:"Intercom client secret/ID",pattern:String.raw`(?:intercom[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["intercom"],caseInsensitive:!0},{id:"ionic-api-token",category:"ionic",title:"Ionic API token",pattern:String.raw`(?:ionic[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](ion_[a-z0-9]{42})['"]`,keywords:["ionic"],caseInsensitive:!0},{id:"linear-client-secret",category:"linear",title:"Linear client secret/ID",pattern:String.raw`(?:linear[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["linear"],caseInsensitive:!0},{id:"lob-api-key",category:"lob",title:"Lob API Key",pattern:String.raw`(?:lob[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]((live|test)_[a-f0-9]{35})['"]`,keywords:["lob"],caseInsensitive:!0},{id:"mailchimp-api-key",category:"mailchimp",title:"Mailchimp API key",pattern:String.raw`(?:mailchimp[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32}-us20)['"]`,keywords:["mailchimp"],caseInsensitive:!0},{id:"mailgun-token",category:"mailgun",title:"Mailgun private API token",pattern:String.raw`(?:mailgun[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]((pub)?key-[a-f0-9]{32})['"]`,keywords:["mailgun"],caseInsensitive:!0},{id:"mailgun-signing-key",category:"mailgun",title:"Mailgun webhook signing key",pattern:String.raw`(?:mailgun[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{32}-[a-h0-9]{8}-[a-h0-9]{8})['"]`,keywords:["mailgun"],caseInsensitive:!0},{id:"mapbox-api-token",category:"mapbox",title:"Mapbox API token",pattern:String.raw`(pk\.[a-z0-9]{60}\.[a-z0-9]{22})`,keywords:["pk."],caseInsensitive:!0},{id:"messagebird-api-token",category:"messagebird",title:"MessageBird API token",pattern:String.raw`(?:messagebird[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{25})['"]`,keywords:["messagebird"],caseInsensitive:!0},{id:"messagebird-client-id",category:"messagebird",title:"MessageBird API client ID",pattern:String.raw`(?:messagebird[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["messagebird"],caseInsensitive:!0},{id:"new-relic-user-api-key",category:"newrelic",title:"New Relic user API Key",pattern:String.raw`(NRAK-[A-Z0-9]{27})`,keywords:["NRAK-"]},{id:"new-relic-user-api-id",category:"newrelic",title:"New Relic user API ID",pattern:String.raw`(?:newrelic[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([A-Z0-9]{64})['"]`,keywords:["newrelic"],caseInsensitive:!0},{id:"new-relic-browser-api-token",category:"newrelic",title:"New Relic ingest browser API token",pattern:String.raw`(NRJS-[a-f0-9]{19})`,keywords:["NRJS-"]},{id:"planetscale-password",category:"planetscale",title:"PlanetScale password",pattern:String.raw`(pscale_pw_[a-z0-9_.-]{43})`,keywords:["pscale_pw_"],caseInsensitive:!0},{id:"private-packagist-token",category:"private-packagist",title:"Private Packagist token",pattern:String.raw`(packagist_[ou][ru]t_[a-f0-9]{68})`,keywords:["packagist_uut_","packagist_ort_","packagist_out_"],caseInsensitive:!0},{id:"rubygems-api-token",category:"rubygems",title:"Rubygem API token",pattern:String.raw`(rubygems_[a-f0-9]{48})`,keywords:["rubygems_"]},{id:"shippo-api-token",category:"shippo",title:"Shippo API token",pattern:String.raw`(shippo_(live|test)_[a-f0-9]{40})`,keywords:["shippo_live_","shippo_test_"]},{id:"linkedin-client-secret",category:"linkedin",title:"LinkedIn Client secret",pattern:String.raw`(?:linkedin[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z]{16})['"]`,keywords:["linkedin"],caseInsensitive:!0},{id:"linkedin-client-id",category:"linkedin",title:"LinkedIn Client ID",pattern:String.raw`(?:linkedin[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{14})['"]`,keywords:["linkedin"],caseInsensitive:!0},{id:"twitch-api-token",category:"twitch",title:"Twitch API token",pattern:String.raw`(?:twitch[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{30})['"]`,keywords:["twitch"],caseInsensitive:!0},{id:"typeform-api-token",category:"typeform",title:"Typeform API token",pattern:String.raw`(?:typeform[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}(tfp_[a-z0-9_.=-]{59})`,keywords:["typeform"],caseInsensitive:!0},{id:"todoist-api-token",category:"todoist",title:"Todoist API token",pattern:String.raw`(?:todoist[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:)[\s'"]{0,3}([0-9a-f]{40})`,keywords:["todoist"],caseInsensitive:!0},{id:"openai-api-key",category:"openai",title:"OpenAI API Key",pattern:String.raw`(sk-[a-zA-Z0-9]{50})`,caseInsensitive:!1,keywords:["sk-"]},{id:"openai-api-key-project",category:"openai",title:"OpenAI Project-scoped API Key",pattern:String.raw`(sk-proj-[A-Za-z0-9]{24}-[A-Za-z0-9]{40,128})`,caseInsensitive:!0,keywords:["sk-proj-"]},{id:"openai-api-key-env",category:"openai",title:"OpenAI Environment-scoped API Key",pattern:String.raw`(sk-(?:live|test)-[A-Za-z0-9]{24}-[A-Za-z0-9]{40,128})`,caseInsensitive:!0,keywords:["sk-live-","sk-test-"]},{id:"anthropic-api-key",category:"anthropic",title:"Anthropic API Key",pattern:String.raw`(sk-ant-([a-zA-Z0-9]{1,10}-)?[a-zA-Z0-9_-]{32,128})`,caseInsensitive:!1,keywords:["sk-ant-"]},{id:"canva-token",category:"canva",title:"Canva Token",pattern:String.raw`\b(cnv[a-z0-9]{2}[A-Za-z0-9_=-]+[a-f0-9]{8})\b`,caseInsensitive:!1,keywords:["cnv"]},{id:"api-key",category:"unknown",title:"Unknown API Key",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}api[-_](?:key|token)(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["api-key","api_key","api-token","api_token"],caseInsensitive:!0},{id:"webhook-secret",category:"unknown",title:"Unknown Webhook Secret",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}webhook[-_]secret(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token|webhook))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["webhook-secret","webhook_secret"],caseInsensitive:!0},{id:"secret-value",category:"unknown",title:"Unknown API Key",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}[-_](?:secret)(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["secret"],caseInsensitive:!0},{id:"password",category:"unknown",title:"Unknown Password",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}password(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|string|password|12345|abcde|placeholder|fake|token|password|pass|pwd))[a-z0-9+/=_-]{6,128})['"]?(?=\s|$|[;,\]})'"])`,keywords:["password"],caseInsensitive:!0},{id:"sk-secret",category:"unknown",title:"Unknown SK Secret",pattern:String.raw`(?:^|['"\s])(sk(?:[-_][a-z0-9]{1,10})?[-_][a-z0-9]{10,99})(?:$|['"\s])`,caseInsensitive:!0,keywords:["sk-","sk_"]}];var PdQ=/[\uDB40][\uDC00-\uDC7F]/g;function vdQ(A){if(!A||typeof A!=="string")return A;let Q=A.replace(PdQ,"");if(Q.length!==A.length){let $=A.length-Q.length;S.info("Invisible Unicode tag characters removed during sanitization",{removedCount:$})}return Q}var TdQ=2000,_dQ=512000,B30=new Map;function Yf0(A){if(!A||typeof A!=="string")return A;let Q=B30.get(A);if(Q!==void 0)return Q;let $=vdQ(A);for(let B of SZ4){if(!B.keywords.some((D)=>B.caseInsensitive?$.toLowerCase().includes(D.toLowerCase()):$.includes(D)))continue;let E=_Z4(B);$=$.replace(E,(D,J)=>{return D.replace(J,`[REDACTED:${B.id}]`)})}if(A.length<=_dQ){if(B30.size>=TdQ)B30.clear();B30.set(A,$)}return $}function E30(A,Q){if(!A||typeof A==="number"||typeof A==="boolean")return A;if(typeof A==="string")return Q(A);if(Array.isArray(A))return A.map(($)=>{if(typeof $==="string")return Q($);else if($&&typeof $==="object")return E30($,Q);return $});if(A&&typeof A==="object"){if("type"in A&&(A.type==="base64"||A.type==="image")&&"data"in A)return{...A};if("isImage"in A&&A.isImage===!0&&"content"in A&&typeof A.content==="string"){let $={};for(let[B,E]of Object.entries(A))if(B==="content")$[B]=E;else $[B]=E30(E,Q);return $}}return Object.fromEntries(Object.entries(A).map(([$,B])=>[$,E30(B,Q)]))}function eD(A){return E30(A,Yf0)}xA();v7();function Zf0(A){let Q=A.replace(/-/g,"");if(Q.length!==32)throw Error(`Invalid UUID hex length: ${Q.length}`);let $=BigInt("0x"+Q),B="";while($>0n)B="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"[Number($%62n)]+B,$=$/62n;return B.padStart(22,"0")}IY();J4();HN0();v7();var Q6=j.string().min(1),uK=Q6.brand(),Xf0=j.string().regex(/^[0-9A-Za-z]{22}$/),SdQ=j.templateLiteral([j.string().regex(/^[0-9a-f]{8}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{12}$/)]),jc=j.templateLiteral(["T-",SdQ]),If0=j.enum(["fork","handoff","mention"]),Gf0=j.enum(["parent","child"]),kZ4=j.object({threadID:jc,type:If0,role:Gf0,messageIndex:j.number().int().nonnegative().optional(),blockIndex:j.number().int().nonnegative().optional(),createdAt:j.number().int().nonnegative(),comment:j.string().optional()}),j6=j.templateLiteral(["M-",Xf0]);function wK(){return`M-${Zf0(hO())}`}var o$=j.templateLiteral(["TU-",Xf0]);var fZ4=j.templateLiteral(["E-",Xf0]);function xZ4(){return`E-${Zf0(hO())}`}var kdQ=j.record(j.string(),j.unknown()),fdQ=j.looseObject({type:j.literal("object"),properties:j.record(j.string(),j.unknown()),required:j.array(j.string()).optional(),additionalProperties:j.union([j.boolean(),kdQ]).optional()}),xdQ=j.union([j.literal("builtin"),j.object({toolbox:Q6}).strict(),j.object({mcp:Q6,target:j.enum(["global","workspace","flag","default"]).optional()}).strict(),j.object({plugin:Q6}).strict(),j.object({remote:Q6}).strict()]),ydQ=j.object({serial:j.boolean().optional(),deferred:j.boolean().optional(),skillNames:j.array(Q6).optional()}),bdQ=j.object({type:j.literal("custom"),inputField:j.string().min(1),format:j.object({type:j.literal("grammar"),syntax:j.enum(["lark","regex"]),definition:j.string()}).strict().optional()}).strict(),D30=j.looseObject({name:Q6,description:j.string(),inputSchema:fdQ,source:xdQ,meta:ydQ.optional(),openAICustomToolConfig:bdQ.optional()}),gR$=j.object({id:Q6,category:Q6,title:Q6,description:j.string().optional(),pluginName:Q6}),MK=j.enum(["none","minimal","low","medium","high","xhigh","max"]),Vf0=j.enum(["anthropic","vertex"]),Kf0=j.enum(["standard","fast"]),hdQ=j.enum(["standard","fast"]),gdQ=j.string().min(1),zf0=j.enum(["none","minimal","low","medium","high","xhigh"]),Wf0=j.enum(["minimal","low","medium","high"]),J30=j.object({"agent.skipTitleGenerationIfMessageContains":j.array(j.string()).optional(),"anthropic.thinking.enabled":j.boolean().optional(),"anthropic.interleavedThinking.enabled":j.boolean().optional(),"anthropic.temperature":j.number().optional(),"anthropic.provider":Vf0.optional(),"anthropic.speed":hdQ.optional(),"openai.speed":Kf0.optional(),"painter.model":gdQ.optional(),"reasoning.effort":MK.optional(),"internal.compactionThresholdPercent":j.number().min(0).max(100).optional(),"internal.model":j.union([j.string(),j.record(j.string(),j.string())]).optional(),"internal.oracleReasoningEffort":zf0.optional(),"gemini.thinkingLevel":Wf0.optional(),"tools.disable":j.array(j.string()).optional(),"tools.enable":j.array(j.string()).optional()}),yZ4=j.object({workspaceId:j.string(),workingDirectory:j.string(),pid:j.number().int().positive().optional(),environment:j.object({os:j.enum(["darwin","linux","windows"]),hasDocker:j.boolean().optional(),hasBrowser:j.boolean().optional()}).strict(),tags:j.array(j.string())}).strict(),mdQ=j.enum(["ui.input","ui.confirm","ui.select"]),Cf0=j.discriminatedUnion("kind",[j.object({kind:j.literal("tool"),id:Q6}),j.object({kind:j.literal("command"),id:Q6})]),ddQ=j.discriminatedUnion("kind",[j.object({kind:j.literal("interactive")}),j.object({kind:j.literal("connection"),connectionId:Q6})]),cdQ=j.enum(["pending","responded","cancelled","expired","errored"]),U30=j.object({requestId:Q6,method:mdQ,params:j.unknown(),invocation:Cf0,target:ddQ,status:cdQ,response:j.unknown().optional(),error:j.string().optional(),createdAt:j.string(),updatedAt:j.string()}),bZ4=j.object({requests:j.array(U30)}),hZ4=j.object({request:U30}),gZ4=j.object({request:U30}),mZ4=j.object({requestId:Q6}),mR$=j.object({requestId:Q6,result:j.unknown().optional(),error:j.string().optional()}),dR$=j.object({status:j.enum(["accepted","already_settled","not_pending","not_allowed"]),state:U30.optional()}),dZ4=j.enum(["sandbox","local-client"]),Rc=j.any().and(j.object({status:j.string()})),cZ4=j.discriminatedUnion("type",[j.object({type:j.literal("delta"),blocks:j.array(j.unknown()).optional(),state:j.enum(["start","generating","tool_use","complete","error","aborted"])}),j.object({type:j.literal("snapshot"),value:j.unknown()})]),QZ=Q6,Hf0=30000,uP=eJ,pdQ=j.enum(["file","directory"]),ldQ=j.object({mtimeMs:j.number().nonnegative().optional()}),Pc=j.tuple([j.string(),pdQ,ldQ.nullish()]),idQ=j.enum(["INVALID_URI","EXECUTOR_NOT_CONNECTED","NOT_FOUND","NOT_DIRECTORY","IS_DIRECTORY","ACCESS_DENIED","INTERNAL_ERROR"]),OK=j.object({code:idQ,message:j.string()}),ndQ=j.object({ok:j.literal(!0),entries:j.array(Pc)}),adQ=j.object({ok:j.literal(!1),error:OK}),cR$=j.discriminatedUnion("ok",[ndQ,adQ]),odQ=j.object({ok:j.literal(!0),contentBase64:j.string()}),rdQ=j.object({ok:j.literal(!1),error:OK}),pR$=j.discriminatedUnion("ok",[odQ,rdQ]),wP=Q6,pZ4=30000,vc=j.object({code:j.enum(["EXECUTOR_NOT_CONNECTED","INVALID_ARGS","INTERNAL_ERROR"]),message:j.string()}),sdQ=j.object({ok:j.literal(!0),exitCode:j.number().int().nonnegative(),stdout:j.string(),stderr:j.string()}),tdQ=j.object({ok:j.literal(!1),error:vc}),lR$=j.discriminatedUnion("ok",[sdQ,tdQ]),Nf0=j.looseObject({uri:eJ,content:j.string().optional(),lineCount:j.int().optional(),hash:j.string().optional()}),edQ=j.enum(utA),lZ4=j.object({path:eJ,error:j.string(),hint:j.string().optional()}),iZ4=j.object({uri:eJ,hash:j.string(),lineCount:j.int().optional()}),nZ4=j.object({name:Q6,description:j.string(),baseDir:eJ,frontmatter:j.object({name:Q6,description:j.string()}).catchall(j.unknown()),files:j.array(j.string()).optional(),source:edQ.optional()}),AcQ=j.enum(["start","streaming","complete"]),MP=j.object({blockState:AcQ.optional()}),qf0=j.object({type:j.literal("text"),text:j.string(),hidden:j.boolean().optional()}).extend(MP.shape),aZ4=j.looseObject({type:j.literal("image"),source:j.discriminatedUnion("type",[j.object({type:j.literal("base64"),mediaType:j.literal(["image/jpeg","image/png","image/gif","image/webp"]),data:j.string()}),j.object({type:j.literal("url"),url:j.string()})]),sourcePath:j.string()}),Tc=j.array(j.discriminatedUnion("type",[qf0,aZ4])),qP=j.record(j.string(),j.unknown()),oZ4=j.object({type:j.literal("tool_use"),id:j.string().min(1),name:j.string().min(1),normalizedName:j.string().optional(),metadata:j.record(j.string(),j.unknown()).optional()}).extend(MP.shape),QcQ=j.object({type:j.literal("tool_use"),id:j.string().min(1),complete:j.literal(!1),inputPartialJSONDelta:j.object({json:j.string()})}),$cQ=oZ4.extend({complete:j.literal(!0),input:qP,normalizedInput:qP.optional()}),BcQ=oZ4.extend({complete:j.literal(!1),input:qP,inputIncomplete:qP,inputPartialJSON:j.object({json:j.string()}),normalizedInput:qP.optional()}),EcQ=j.object({accepted:j.boolean(),askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}),DcQ=j.object({type:j.literal("tool_result"),toolUseID:j.string().min(1),run:Rc,userInput:EcQ.optional()}),JcQ=j.object({type:j.literal("thinking"),thinking:j.string(),signature:j.string()}).extend(MP.shape),UcQ=j.object({type:j.literal("thinking"),thinking:j.string(),signature:j.string().optional()}).extend(MP.shape),YcQ=j.object({type:j.literal("redacted_thinking"),data:j.string()}).extend(MP.shape),ZcQ=j.object({type:j.literal("server_tool_use"),id:j.string().min(1),name:j.string().min(1),input:qP}).extend(MP.shape),FcQ=j.object({type:j.literal("manual_bash_invocation"),args:j.object({cmd:j.string(),args:j.array(j.string()).readonly().optional(),cwd:j.string().optional()}),toolRun:Rc,hidden:j.boolean().optional()}),uf0=j.object({sentAt:j.number().int().nonnegative().optional(),fromAggman:j.boolean().optional(),fromExecutorThreadID:jc.optional()}),XcQ=j.union([qf0,aZ4,DcQ]),rZ4=j.union([qf0,JcQ,YcQ,$cQ,BcQ,ZcQ]),_c=j.array(XcQ),wf0=j.array(rZ4),sZ4=j.array(j.union([rZ4,UcQ,QcQ])),Mf0=j.array(FcQ),Ff0=j.looseObject({line:j.number().int(),column:j.number().int()}),IcQ=j.looseObject({start:Ff0,end:Ff0}),GcQ=j.looseObject({name:j.string(),repositoryURL:j.string()}),VcQ=j.looseObject({currentURL:j.string(),availableProjects:j.array(GcQ).optional()}),Of0=j.looseObject({currentlyVisibleFiles:j.array(eJ),runningTerminalCommands:j.array(j.string()).optional(),activeEditor:j.any().optional(),cursorLocation:Ff0.optional(),cursorLocationLine:j.string().optional(),selectionRange:IcQ.optional(),aggmanContext:VcQ.optional()}),OX=j.custom((A)=>typeof A==="string"&&_$(A)!==void 0),KcQ=j.object({threadId:jc,role:j.literal("user"),content:_c,agentMode:OX.optional(),meta:uf0.optional(),userState:Of0.optional(),readAt:j.string().nullable().optional(),messageId:j6,createdAt:j.string().optional()}),Lf0=j.object({model:j.string().optional(),maxInputTokens:j.number(),inputTokens:j.number(),outputTokens:j.number(),cacheCreationInputTokens:j.number().nullable(),cacheReadInputTokens:j.number().nullable(),totalInputTokens:j.number(),thinkingBudget:j.number().optional(),timestamp:j.string().optional()}),jf0=j.union([j.object({type:j.literal("complete")}),j.object({type:j.literal("cancelled")})]),zcQ=j.object({threadId:jc,role:j.literal("assistant"),content:wf0,state:jf0.optional(),usage:Lf0.optional(),readAt:j.string().nullable().optional(),messageId:j6,createdAt:j.string().optional()}),WcQ=j.object({threadId:jc,role:j.literal("info"),content:Mf0,messageId:j6,createdAt:j.string().optional()}),Rf0=j.discriminatedUnion("role",[KcQ,zcQ,WcQ]),Sc=j.object({workspaceRoot:eJ.optional(),workingDirectory:eJ.optional(),rootDirectoryListing:j.string().nullable().optional(),trees:j.array(j.any()).optional(),platform:j.any().optional(),tags:j.array(j.string()).optional(),git:j.object({branch:j.string().optional()}).optional(),updatedAt:j.string().optional()}),CcQ=j.object({added:j.number().int().nonnegative(),deleted:j.number().int().nonnegative(),changed:j.number().int().nonnegative()}),Pf0=j.enum(["added","modified","deleted","renamed","copied","type_changed","unmerged","untracked"]),HcQ=j.object({path:j.string(),previousPath:j.string().optional(),changeType:Pf0,created:j.boolean(),hasStagedChanges:j.boolean().optional(),hasUnstagedChanges:j.boolean().optional(),diffToken:j.string().optional(),diff:j.string(),fullFileDiff:j.string().optional(),oldContent:j.string().optional(),newContent:j.string().optional(),diffStat:CcQ}),NcQ=j.object({hash:j.string(),shortHash:j.string(),subject:j.string(),message:j.string().optional(),metadata:j.object({isMergeBase:j.boolean()}).optional()}),iR$=j.object({provider:j.literal("git"),capturedAt:j.number(),available:j.boolean(),repositoryRoot:j.string().nullable(),repositoryName:j.string().nullable(),branch:j.string().nullable(),head:j.string().nullable(),baseRef:j.string().nullable().optional(),baseRefHead:j.string().nullable().optional(),aheadCount:j.number().int().nonnegative().optional(),behindCount:j.number().int().nonnegative().optional(),aheadCommits:j.array(NcQ).optional(),diffHash:j.string().optional(),files:j.array(HcQ),unavailableReason:j.string().optional(),unchanged:j.boolean().optional()}),vf0=j.enum(["thread","subagent"]),Tf0=j.enum(["user","built-in"]),Y30=j.object({id:j.string(),toolCallId:o$,toolName:j.string(),args:j.record(j.string(),j.unknown()),reason:j.string().optional(),toAllow:j.array(j.string()).optional(),context:vf0,subagentToolName:j.string().optional(),parentToolCallId:o$.optional(),timestamp:j.number(),matchedRule:j.object({tool:j.string(),action:j.string(),matches:j.record(j.string(),j.unknown()).optional()}).optional(),ruleSource:Tf0.optional()}),qcQ=j.object({type:j.literal("request"),id:Q6,method:Q6,params:j.unknown()}),ucQ=j.object({type:j.literal("response"),id:Q6,result:j.unknown().optional(),error:j.string().optional()}),wcQ=j.object({type:j.literal("event"),event:Q6,data:j.unknown(),span:j.string().optional()}),Z30=j.discriminatedUnion("type",[qcQ,ucQ,wcQ]);var McQ=j.object({type:j.literal("executor_connect"),clientId:uK,handshakeSeq:j.number().int().nonnegative().optional(),capabilities:yZ4,executorType:dZ4.optional()}),OcQ=j.object({type:j.literal("client_update_thread_settings"),settings:J30}),LcQ=j.object({type:j.literal("executor_tools_register"),tools:j.array(D30)}),jcQ=j.object({type:j.literal("executor_tools_unregister"),toolNames:j.array(Q6)}),RcQ=j.object({type:j.literal("executor_tools_bootstrap_complete"),ok:j.boolean(),error:j.string().optional()}),PcQ=j.object({type:j.literal("executor_tool_lease_ack"),toolCallId:o$}),_f0=j.object({type:j.literal("tool_progress"),toolCallId:o$,progress:j.union([cZ4,j.unknown()]).optional(),parentToolCallId:o$.optional()}),vcQ=j.object({type:j.literal("executor_tool_result"),toolCallId:o$,run:Rc,workspaceChanged:j.boolean().optional()}),TcQ=j.object({type:j.literal("executor_guidance_snapshot"),snapshotId:Q6,files:j.array(Nf0),isLast:j.boolean(),userConfigDir:j.any().optional()}),_cQ=j.object({type:j.literal("executor_guidance_discovery"),toolCallId:o$,files:j.array(Nf0),isLast:j.boolean()}),ScQ=j.object({type:j.literal("executor_skill_snapshot"),snapshotId:Q6,skills:j.array(nZ4),isLast:j.boolean(),errors:j.array(lZ4).optional()}),kcQ=j.object({type:j.literal("executor_environment_snapshot"),environment:Sc}),fcQ=j.object({type:j.literal("executor_environment_update"),environment:Sc}),xcQ=j.object({type:j.literal("executor_tool_approval_request"),approval:Y30}),ycQ=j.object({type:j.literal("executor_plugin_message"),message:Z30,invocation:Cf0.optional()}),bcQ=j.object({type:j.literal("client_append_user_msg"),content:Tc,userState:Of0.optional(),agentMode:OX.optional(),reasoningEffort:MK.optional(),messageId:j6,steer:j.boolean().optional()}),hcQ=j.object({type:j.literal("client_remove_queued_msg"),queuedMessageId:j6}),gcQ=j.object({type:j.literal("client_steer_queued_msg"),queuedMessageId:j6}),mcQ=j.object({type:j.literal("client_edit_message"),messageId:j6,editId:fZ4,content:Tc,agentMode:OX.optional(),reasoningEffort:MK.optional()}),dcQ=j.object({type:j.literal("client_mark_message_read"),messageId:j6}),ccQ=j.object({type:j.literal("client_mark_message_unread"),messageId:j6}),pcQ=j.object({type:j.literal("client_set_thread_title"),title:j.string().trim().min(1).max(256)}),lcQ=j.object({auth:j.string().min(1),p256dh:j.string().min(1)}),icQ=j.object({endpoint:j.string().url(),keys:lcQ}),ncQ=j.object({type:j.literal("client_upsert_notification_subscription"),subscription:icQ,threadURL:j.string().min(1)}),acQ=j.object({type:j.literal("client_filesystem_read_directory"),requestId:QZ,uri:uP}),ocQ=j.object({type:j.literal("client_filesystem_read_file"),requestId:QZ,uri:uP}),Sf0=j.object({type:j.literal("client_git_command"),requestId:wP,operation:j.discriminatedUnion("type",[j.object({type:j.literal("repository_root")}),j.object({type:j.literal("head")}),j.object({type:j.literal("branch")}),j.object({type:j.literal("status")}),j.object({type:j.literal("status_snapshot")}),j.object({type:j.literal("comparison_base_ref")}),j.object({type:j.literal("comparison_base_head")}),j.object({type:j.literal("ahead_count")}),j.object({type:j.literal("behind_count")}),j.object({type:j.literal("ahead_commits")}),j.object({type:j.literal("diff_range_snapshot"),baseHash:j.string().regex(/^[0-9a-fA-F]{7,64}$/),headHash:j.string().regex(/^[0-9a-fA-F]{7,64}$/).optional()}),j.object({type:j.literal("file_diff"),path:j.string().min(1),changeType:Pf0,full:j.boolean()})])}),rcQ=j.object({type:j.literal("executor_filesystem_read_directory_result"),requestId:QZ,ok:j.boolean(),entries:j.array(Pc).optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(!A.entries)Q.addIssue({code:j.ZodIssueCode.custom,message:"entries is required when ok is true"});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"});if(A.entries)Q.addIssue({code:j.ZodIssueCode.custom,message:"entries must not be present when ok is false"})}),scQ=j.object({type:j.literal("executor_filesystem_read_file_result"),requestId:QZ,ok:j.boolean(),contentBase64:j.string().optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(A.contentBase64===void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:"contentBase64 is required when ok is true"});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"});if(A.contentBase64!==void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:"contentBase64 must not be present when ok is false"})}),tcQ=j.object({type:j.literal("executor_git_command_result"),requestId:wP,ok:j.boolean(),exitCode:j.number().int().nonnegative().optional(),stdout:j.string().optional(),stderr:j.string().optional(),error:vc.optional()}).superRefine((A,Q)=>{if(A.ok){for(let $ of["exitCode","stdout","stderr"])if(A[$]===void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:`${$} is required when ok is true`});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"})}),ecQ=j.object({type:j.literal("client_resume"),version:j.number()}),ApQ=j.object({type:j.literal("client_retry")}),QpQ=j.object({type:j.literal("client_dismiss_active_error"),seq:j.number().optional()}),$pQ=j.object({type:j.literal("client_cancel")}),BpQ=j.object({type:j.literal("client_append_manual_bash_invocation"),args:j.object({cmd:j.string().trim().min(1,"cmd must contain at least one non-whitespace character"),args:j.array(j.string()).optional(),cwd:j.string().optional()}),run:Rc,hidden:j.boolean().optional()}),EpQ=j.object({type:j.literal("client_tool_approval_response"),toolCallId:o$,accepted:j.boolean(),input:j.object({askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}).optional()}),DpQ=j.union([j.object({name:j.string(),type:j.literal("git").optional(),url:j.string()}),j.object({repositoryName:j.string().min(1).describe("Repository name. Must be a single path component."),name:j.string(),namespace:j.string(),type:j.literal("repository")})]),JpQ=j.object({type:j.literal("client_spawn_executor"),requestId:j.string().optional(),repositoryURL:j.string().optional(),projectID:j.uuid().optional(),additionalRepositories:j.array(DpQ).optional()}),tZ4=j.discriminatedUnion("type",[McQ,OcQ,LcQ,jcQ,RcQ,PcQ,_f0,vcQ,TcQ,_cQ,ScQ,kcQ,fcQ,xcQ,ycQ,bcQ,hcQ,gcQ,mcQ,dcQ,ccQ,pcQ,ncQ,acQ,ocQ,Sf0,rcQ,scQ,tcQ,ecQ,ApQ,QpQ,$pQ,BpQ,EpQ,JpQ]);v7();var kc=(A)=>j.codec(j.string(),A,{decode:(Q,$)=>{try{return JSON.parse(Q)}catch(B){return $.issues.push({code:"invalid_format",format:"json",input:Q,message:B.message}),j.NEVER}},encode:(Q)=>JSON.stringify(Q)});v7();v7();var LX="2.0";var kf0=j.union([j.string(),j.number(),j.null()]),UpQ=j.looseObject({code:j.number(),message:j.string(),data:j.unknown().optional()}),YpQ=j.object({jsonrpc:j.literal(LX),id:kf0,method:j.string().min(1),params:j.unknown().optional()}),ZpQ=j.object({jsonrpc:j.literal(LX),method:j.string().min(1),params:j.unknown().optional(),id:j.undefined().optional()}),FpQ=j.object({jsonrpc:j.literal(LX),id:kf0,error:UpQ}),XpQ=j.object({jsonrpc:j.literal(LX),id:kf0,result:j.unknown().optional()}),ff0=j.union([FpQ,XpQ]),eZ4=j.union([YpQ,ZpQ,ff0]);v7();var xc=["idle","working","streaming","tool_use","running_tools","awaiting_approval","error"],QP$=new Set(xc);var IpQ=["working","streaming","tool_use","running_tools"],GpQ=new Set(IpQ);function c3(A){if(typeof A!=="string")return!1;return GpQ.has(A)}var VpQ=["ui.input","ui.confirm","ui.select"],KpQ=new Set(VpQ);function F30(A){return KpQ.has(A)}function X30(A){if(typeof A!=="object"||A===null)return!1;let Q=A;return Q.type==="tool_use"&&typeof Q.id==="string"&&Q.complete===!1&&typeof Q.inputPartialJSONDelta?.json==="string"}function fc(A){return typeof A==="object"&&A!==null}function zpQ(A){return fc(A)&&A.type==="text"&&typeof A.text==="string"}function xf0(A){if(!A)return;let Q=A.filter(zpQ).map(($)=>$.text).join("");return Q.length>0?Q:void 0}function yf0(A){if(typeof A==="string")return A;if(Array.isArray(A))return xf0(A);if(!fc(A))return;for(let Q of["output","displayMessage","message","reason"]){let $=A[Q];if(typeof $==="string")return $}for(let Q of["result","error","value"])if(Q in A){let $=yf0(A[Q]);if($!==void 0)return $}return}function AF4(A,Q){if(typeof A==="string")return A+Q;if(Array.isArray(A)){if(!A.every(($)=>fc($)&&typeof $.type==="string"))return;return[...A,{type:"text",text:Q}]}if(!fc(A))return;for(let $ of["output","displayMessage","message","reason"]){let B=A[$];if(typeof B==="string")return{...A,[$]:B+Q}}if("value"in A){let $=AF4(A.value,Q);if($!==void 0)return{...A,value:$}}return}function WpQ(A){return fc(A)&&typeof A.status==="string"}function CpQ(A,Q){return{type:"delta",...A?{blocks:[{type:"text",text:A}]}:{},state:Q}}function HpQ(A){if(!A)return;if(A.type==="snapshot")return yf0(A.value);return xf0(A.blocks)}function OP(A,Q){if(A&&typeof A==="object"&&"type"in A){let B=A;if(B.type==="delta"||B.type==="snapshot")return B}if(Q==="snapshot")return{type:"snapshot",value:A};let $=typeof A==="string"?A:A!==void 0?JSON.stringify(A):"";return{type:"delta",blocks:$?[{type:"text",text:$}]:void 0,state:"generating"}}function QF4(A,Q){if(Q.type!=="snapshot"||WpQ(Q.value))return Q;let $=HpQ(A),B=yf0(Q.value);if($===void 0||B===void 0)return Q;if(!B.startsWith($))return Q;return CpQ(B.slice($.length),"generating")}function I30(A,Q){let $=A===void 0?void 0:OP(A,"snapshot"),B=OP(Q,"snapshot");if(B.type==="snapshot")return B;if(!$)return B;let E=xf0(B.blocks);if(E===void 0)return $;if($.type==="snapshot"){let J=AF4($.value,E);if(J!==void 0)return{type:"snapshot",value:J}}return{type:"delta",blocks:[...$.type==="delta"?$.blocks??[]:Array.isArray($.value)?$.value:[],...B.blocks??[]],state:B.state}}var NpQ=j.enum(xc),bf0=j.enum(["start","generating","tool_use","complete","error","aborted"]),qpQ=j.object({message:j.string(),code:j.string().optional(),stack:j.string().optional(),retryAt:j.number().optional(),attempt:j.number().optional()}),upQ=j.object({userId:j.string(),name:j.string(),avatarURL:j.string().optional()}),hf0=j.enum(["starting","running","failed"]),gf0=j.enum(["missing","allocating_environment","configuring_workspace","starting_headless","headless_ready","paused","failed"]),mf0=j.enum(["pending","ready","failed"]),wpQ=mf0.nullable(),df0=j.enum(["allocating_environment","configuring_workspace","starting_headless"]),MpQ=df0.nullable(),cf0=j.enum(["idle","creating","recovering"]),pf0=j.enum(["unknown","running","paused","missing"]),lf0=j.enum(["spawn_requested","spawn_rejected","environment_recovering","waiting_for_executor_connect","executor_connected","executor_disconnected","connect_timeout","executor_connect_rejected","spawn_failed","restart_failed","environment_missing"]),if0=j.enum(["ACCESS_DENIED","ACTOR_STOPPING","CONNECTION_ERROR","MAX_RECONNECT_EXCEEDED","MESSAGE_ERROR","LOOP_RUNNING","NO_THREAD_ID","NO_ERROR","INVALID_MESSAGE","PARSE_ERROR","UNKNOWN_TYPE","INTERNAL_ERROR"]),nf0=j.enum(["executor_disconnected","reassigned","user_canceled"]),af0=j.enum(["NOT_CONNECTED","EXECUTOR_ALREADY_CONNECTED","ACCESS_DENIED","INVALID_MESSAGE","TOOL_NOT_FOUND","LEASE_NOT_FOUND","DUPLICATE_TOOL","INTERNAL_ERROR"]),OpQ=j.object({environmentId:j.string().nullable().optional(),stage:gf0.optional(),setupState:wpQ.optional(),setupPhase:MpQ.optional(),operation:cf0.optional(),providerState:pf0.optional(),restartAttempts:j.number().optional()}),LpQ=j.object({reasonCode:lf0.optional(),executionEnvironment:OpQ.optional()}),jpQ=j.object({cutMessageId:j6,createdAt:j.string()}),$F4=j.object({steer:j.boolean(),queuedMessage:j.object({role:j.literal("user"),messageId:j6,content:Tc,userState:j.any().optional(),meta:uf0.optional(),createdAt:j.string().optional()})}),RpQ=j.object({type:j.literal("agent_state"),state:NpQ,messageId:j6.optional(),agentMode:OX.optional(),reasoningEffort:MK.optional()}),PpQ=j.object({type:j.literal("inference_tools"),messageId:j6,agentMode:OX,tools:j.array(Q6),parentToolCallId:o$.optional()}),vpQ=j.object({type:j.literal("thread_settings"),settings:J30}),TpQ=j.object({type:j.literal("error"),message:j.string(),code:if0.optional()}),_pQ=j.object({type:j.literal("error_set"),seq:j.number(),error:qpQ}),SpQ=j.object({type:j.literal("error_cleared"),seq:j.number()}),kpQ=j.object({type:j.literal("cancelled"),seq:j.number(),messageId:j6.optional()}),fpQ=j.object({type:j.literal("retry_scheduled"),retryAt:j.number(),attempt:j.number(),maxAttempts:j.number(),reason:j.string()}),xpQ=j.object({type:j.literal("retry_started")}),ypQ=j.object({type:j.literal("retry_cancelled")}),bpQ=j.object({type:j.literal("executor_connected"),executorId:uK,registeredToolCount:j.number(),guidanceInventory:j.array(iZ4),resumeBootstrap:j.boolean().optional(),rejectedTools:j.array(j.object({name:j.string(),reason:j.string()})).optional()}),hpQ=j.object({type:j.literal("tool_lease"),toolCallId:o$,toolName:j.string(),args:j.unknown(),messageId:j6,parentToolCallId:o$.optional()}),gpQ=j.object({type:j.literal("executor_filesystem_read_directory"),requestId:QZ,uri:uP}),mpQ=j.object({type:j.literal("executor_filesystem_read_file"),requestId:QZ,uri:uP}),dpQ=j.object({type:j.literal("executor_git_command"),requestId:wP,args:j.array(j.string()).nonempty(),maxOutputBytes:j.number().int().positive().optional(),operation:Sf0.shape.operation.optional()}),cpQ=j.object({type:j.literal("client_filesystem_read_directory_result"),requestId:QZ,ok:j.boolean(),entries:j.array(Pc).optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(!A.entries)Q.addIssue({code:"custom",message:"entries is required when ok is true"});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"});if(A.entries)Q.addIssue({code:"custom",message:"entries must not be present when ok is false"})}),ppQ=j.object({type:j.literal("client_filesystem_read_file_result"),requestId:QZ,ok:j.boolean(),contentBase64:j.string().optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(A.contentBase64===void 0)Q.addIssue({code:"custom",message:"contentBase64 is required when ok is true"});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"});if(A.contentBase64!==void 0)Q.addIssue({code:"custom",message:"contentBase64 must not be present when ok is false"})}),lpQ=j.object({type:j.literal("client_git_command_result"),requestId:wP,ok:j.boolean(),exitCode:j.number().int().nonnegative().optional(),stdout:j.string().optional(),stderr:j.string().optional(),error:vc.optional()}).superRefine((A,Q)=>{if(A.ok){for(let $ of["exitCode","stdout","stderr"])if(A[$]===void 0)Q.addIssue({code:"custom",message:`${$} is required when ok is true`});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"})}),ipQ=j.object({type:j.literal("tool_approval_queue"),approvals:j.array(Y30)}),npQ=j.object({type:j.literal("executor_tool_lease_revoked"),toolCallId:o$,reason:nf0}),apQ=j.object({type:j.literal("executor_tool_result_ack"),toolCallId:o$}),opQ=j.object({type:j.literal("plugin_message"),message:Z30}),rpQ=j.object({type:j.literal("executor_tool_approval_response"),toolCallId:o$,accepted:j.boolean(),input:j.object({askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}).optional()}),spQ=j.object({type:j.literal("executor_error"),message:j.string(),toolCallId:o$.optional(),code:af0,existingExecutorPid:j.number().int().positive().optional()}),tpQ=j.object({type:j.literal("delta"),messageId:j6,role:j.literal("assistant"),blocks:sZ4.optional(),blockIndex:j.number().int().nonnegative().optional(),state:bf0,usage:Lf0.optional(),parentToolCallId:o$.optional()}),epQ=j.object({type:j.literal("delta"),messageId:j6,role:j.literal("user"),blocks:_c.optional(),state:j.literal("complete"),parentToolCallId:o$.optional()}),AlQ=j.discriminatedUnion("role",[tpQ,epQ]),QlQ=j.object({type:j.literal("queued_messages"),messages:j.array($F4)}),$lQ=j.object({type:j.literal("queued_message_added"),message:$F4,seq:j.number()}),BlQ=j.object({type:j.literal("queued_message_removed"),queuedMessageId:j6,seq:j.number()}),ElQ=j.object({type:j.literal("queued_message_dequeued"),queuedMessageId:j6,seq:j.number()}),DlQ=j.object({type:j.literal("message_added"),message:Rf0,seq:j.number(),parentToolUseId:o$.optional()}),JlQ=j.object({type:j.literal("message_updated"),message:Rf0,seq:j.number()}),UlQ=j.object({type:j.literal("edit_rejected"),editId:j.string(),message:j.string()}),YlQ=j.object({type:j.literal("thread_truncated"),seq:j.number(),truncateFromMessage:j6}),ZlQ=j.object({type:j.literal("observers"),count:j.number(),observers:j.array(upQ),hasExecutor:j.boolean().optional()}),FlQ=j.object({type:j.literal("executor_status"),spawnId:j.string().optional(),status:hf0,message:j.string().optional(),executorId:j.string().optional(),details:LpQ.optional()}),XlQ=j.object({type:j.literal("environment_update"),environment:Sc}),IlQ=j.object({type:j.literal("executor_workspace_maybe_changed"),toolCallId:o$,toolName:Q6}),GlQ=j.object({type:j.literal("thread_title"),title:j.string().nullable()}),VlQ=j.object({type:j.literal("thread_status"),status:j.union([j.literal("merging"),j.literal("merged"),j.null()])}),KlQ=j.object({type:j.literal("thread_relationships"),seq:j.number(),relationships:j.array(kZ4)}),zlQ=j.object({type:j.literal("compaction_started")}),WlQ=j.object({type:j.literal("compaction_complete"),cutMessageId:j6.optional()}),ClQ=j.object({type:j.literal("compaction_records"),records:j.array(jpQ)}),iN=j.discriminatedUnion("type",[RpQ,PpQ,vpQ,TpQ,_pQ,SpQ,kpQ,fpQ,xpQ,ypQ,bpQ,hpQ,gpQ,mpQ,dpQ,cpQ,ppQ,lpQ,ipQ,npQ,apQ,opQ,rpQ,_f0,spQ,AlQ,YlQ,QlQ,$lQ,BlQ,ElQ,DlQ,JlQ,UlQ,ZlQ,FlQ,XlQ,IlQ,GlQ,VlQ,KlQ,zlQ,WlQ,ClQ]);var BF4=kc(tZ4),of0=kc(eZ4),HlQ=j.union([iN,j.array(iN)]),EF4=kc(iN),GP$=kc(HlQ);J4();function DF4(A,Q={}){let B=(Q.mode??"lenient")==="strict";if(!Array.isArray(A))return B?null:[];let E=[];for(let D of A){if(typeof D!=="object"||D===null){if(B)return null;continue}let J=D;if(typeof J.uri!=="string"||J.uri.length===0){if(B)return null;continue}let U;try{U=$4(m0.parse(J.uri))}catch{if(B)return null;continue}let Y={uri:U};if(typeof J.content==="string")Y.content=J.content;if(typeof J.lineCount==="number"&&Number.isFinite(J.lineCount))Y.lineCount=J.lineCount;if(typeof J.hash==="string")Y.hash=J.hash;E.push(Y)}return E}function rf0(A){let Q=Number.isFinite(A)?A:0;function $(E=Q){if(Number.isFinite(E))Q=E;return Q}function B(E){if(!Number.isFinite(E)||E<1)return Q;return Q=Math.max(Q,E),Q}return{getVersion:()=>Q,reset:$,advanceFromSeq:B}}var NlQ=MB(bf0.options),qlQ=MB(xc),ulQ=MB(if0.options),wlQ=MB(af0.options),MlQ=MB(hf0.options),OlQ=MB(gf0.options),LlQ=MB(mf0.options),jlQ=MB(df0.options),RlQ=MB(cf0.options),PlQ=MB(pf0.options),vlQ=MB(lf0.options),TlQ=MB(nf0.options),_lQ=MB(If0.options),SlQ=MB(Gf0.options),klQ=MB(vf0.options),flQ=MB(Tf0.options),xlQ=MB(Vf0.options),ylQ=MB(Kf0.options),YF4=MB(MK.options),blQ=MB(zf0.options),hlQ=MB(Wf0.options);function MB(A){return new Set(A)}function jX(A){return typeof A==="object"&&A!==null&&!Array.isArray(A)}function e7(A,Q){return typeof A==="string"&&Q.has(A)}function glQ(A){return typeof A==="number"&&Number.isInteger(A)&&A>=0}function JF4(A){let Q;try{Q=JSON.stringify(A)}catch{return null}let $=EF4.safeDecode(Q);return $.success?$.data:null}function ZF4(A){let Q;try{Q=JSON.parse(A)}catch{return[]}let $=Array.isArray(Q)?Q:[Q],B=[];for(let E of $){let D=mlQ(E);if(D)B.push(D)}return B}function mlQ(A){let Q=JF4(A);if(Q)return Q;if(!jX(A)||typeof A.type!=="string")return null;let $=dlQ(A);return $?JF4($):null}function dlQ(A){switch(A.type){case"agent_state":return clQ(A);case"thread_settings":return plQ(A);case"error":return ilQ(A);case"executor_tool_lease_revoked":return alQ(A);case"tool_approval_queue":return YiQ(A);case"executor_error":return nlQ(A);case"delta":return olQ(A);case"queued_messages":return rlQ(A);case"queued_message_added":return slQ(A);case"message_added":case"message_updated":return tlQ(A);case"executor_status":return DiQ(A);case"thread_relationships":return FiQ(A);default:return null}}function clQ(A){let Q={...A};if(!e7(Q.state,qlQ))Q.state="working";if(Q.agentMode!==void 0&&!OX.safeParse(Q.agentMode).success)delete Q.agentMode;if(Q.reasoningEffort!==void 0&&!e7(Q.reasoningEffort,YF4))delete Q.reasoningEffort;return Q}function plQ(A){if(!jX(A.settings))return A;return{...A,settings:llQ(A.settings)}}function llQ(A){let Q={...A};if(yc(Q,"anthropic.provider",xlQ),yc(Q,"openai.speed",ylQ),yc(Q,"reasoning.effort",YF4),yc(Q,"internal.oracleReasoningEffort",blQ),yc(Q,"gemini.thinkingLevel",hlQ),Q["internal.compactionThresholdPercent"]!==void 0&&(typeof Q["internal.compactionThresholdPercent"]!=="number"||Q["internal.compactionThresholdPercent"]<0||Q["internal.compactionThresholdPercent"]>100))delete Q["internal.compactionThresholdPercent"];return Q}function yc(A,Q,$){if(A[Q]!==void 0&&!e7(A[Q],$))delete A[Q]}function ilQ(A){let Q={...A};if(Q.code!==void 0&&!e7(Q.code,ulQ))delete Q.code;return Q}function nlQ(A){let Q={...A};if(!e7(Q.code,wlQ))Q.code="INTERNAL_ERROR";return Q}function alQ(A){let Q={...A};if(!e7(Q.reason,TlQ))Q.reason="reassigned";return Q}function olQ(A){if(A.role!=="assistant"&&A.role!=="user")return null;let Q={...A};if(A.role==="assistant"){if(!e7(Q.state,NlQ))Q.state="generating";if(Array.isArray(Q.blocks)){if(Q.blocks=BiQ(Q.blocks),!glQ(Q.blockIndex))Q.blockIndex=0}else if(Q.blocks!==void 0)delete Q.blocks,delete Q.blockIndex;return Q}if(Q.state="complete",Array.isArray(Q.blocks))Q.blocks=tf0(Q.blocks,"user");else if(Q.blocks!==void 0)delete Q.blocks;return delete Q.blockIndex,Q}function rlQ(A){if(!Array.isArray(A.messages))return A;return{...A,messages:A.messages.map(FF4).filter((Q)=>Q!==null)}}function slQ(A){let Q=FF4(A.message);return Q?{...A,message:Q}:null}function FF4(A){if(!jX(A)||!jX(A.queuedMessage))return null;let Q=XF4(A.queuedMessage);return Q?{...A,queuedMessage:Q}:null}function tlQ(A){let Q=elQ(A.message);return Q?{...A,message:Q}:null}function elQ(A){if(!jX(A))return null;if(A.role==="user")return XF4(A);if(A.role==="assistant")return AiQ(A);if(A.role==="info")return QiQ(A);return null}function XF4(A){if(A.role!=="user"||!Array.isArray(A.content))return null;return{...A,content:tf0(A.content,"user")}}function AiQ(A){if(A.role!=="assistant"||!Array.isArray(A.content))return null;let Q={...A,content:tf0(A.content,"assistant")};if(Q.state!==void 0&&!$iQ(Q.state))delete Q.state;return Q}function QiQ(A){if(A.role!=="info"||!Array.isArray(A.content))return null;return{...A,content:EiQ(A.content)}}function $iQ(A){return jf0.safeParse(A).success}function tf0(A,Q){let $=[];for(let B of A){let E=IF4(B,Q);if(E)$.push(E)}return $}function BiQ(A){return A.map((Q)=>IF4(Q,"assistant")??{type:"text",text:"",hidden:!0})}function IF4(A,Q){let B=(Q==="assistant"?wf0:_c).safeParse([A]);return B.success?B.data[0]??null:null}function EiQ(A){let Q=[];for(let $ of A){let B=Mf0.safeParse([$]);if(B.success&&B.data[0])Q.push(B.data[0])}return Q}function DiQ(A){let Q={...A};if(!e7(Q.status,MlQ))Q.status="starting";if(Q.details!==void 0){let $=JiQ(Q.details);if($)Q.details=$;else delete Q.details}return Q}function JiQ(A){if(!jX(A))return null;let Q={...A};if(Q.reasonCode!==void 0&&!e7(Q.reasonCode,vlQ))delete Q.reasonCode;if(Q.executionEnvironment!==void 0){let $=UiQ(Q.executionEnvironment);if($)Q.executionEnvironment=$;else delete Q.executionEnvironment}return Q}function UiQ(A){if(!jX(A))return null;let Q={...A};return UF4(Q,"setupState",LlQ),UF4(Q,"setupPhase",jlQ),sf0(Q,"stage",OlQ),sf0(Q,"operation",RlQ),sf0(Q,"providerState",PlQ),Q}function sf0(A,Q,$){if(A[Q]!==void 0&&!e7(A[Q],$))delete A[Q]}function UF4(A,Q,$){if(A[Q]!==void 0&&A[Q]!==null&&!e7(A[Q],$))delete A[Q]}function YiQ(A){if(!Array.isArray(A.approvals))return A;return{...A,approvals:A.approvals.map(ZiQ).filter((Q)=>Q!==null)}}function ZiQ(A){if(!jX(A))return null;let Q={...A};if(!e7(Q.context,klQ))Q.context="thread";if(Q.ruleSource!==void 0&&!e7(Q.ruleSource,flQ))delete Q.ruleSource;return Q}function FiQ(A){if(!Array.isArray(A.relationships))return A;return{...A,relationships:A.relationships.filter(XiQ)}}function XiQ(A){return jX(A)&&e7(A.type,_lQ)&&e7(A.role,SlQ)}var bc=Number.MAX_SAFE_INTEGER;class ef0{callbacks;agentLoopState=null;pending=new Map;constructor(A){this.callbacks=A}setAgentLoopState(A){this.agentLoopState=A}emitOptimisticUserMessage(A){if(this.pending.has(A.messageId))return;let Q=this.nextEventType();this.pending.set(A.messageId,Q),this.dispatchOptimistic(Q,A)}reconcileMessageAdded(A){let Q=A.message.messageId;if(this.pending.get(Q)==="queued_message_added")this.emitQueuedMessages({type:"queued_message_dequeued",queuedMessageId:Q,seq:bc});this.pending.delete(Q),this.emitMessageAdded(A)}reconcileQueuedMessageAdded(A){let Q=A.message.queuedMessage.messageId,$=this.pending.get(Q);if($==="queued_message_added")return;if($==="message_added")this.pending.set(Q,"queued_message_added"),this.emitMessageRemoved(Q);this.emitQueuedMessages(A)}reconcileQueuedMessagesSnapshot(A){let Q=new Set;for(let $ of A.messages)Q.add($.queuedMessage.messageId);for(let $ of Q)if(this.pending.get($)==="message_added")this.pending.set($,"queued_message_added"),this.emitMessageRemoved($);for(let[$,B]of this.pending)if(B==="queued_message_added"&&!Q.has($))return;this.emitQueuedMessages(A)}reconcileQueuedMessageRemoved(A){this.pending.delete(A.queuedMessageId),this.emitQueuedMessages(A)}reset(){this.agentLoopState=null,this.pending.clear()}nextEventType(){if(this.pending.size>0)return"queued_message_added";if(this.agentLoopState===null||this.agentLoopState==="idle")return"message_added";return"queued_message_added"}dispatchOptimistic(A,Q){if(A==="message_added"){this.emitMessageAdded({type:"message_added",message:{role:"user",messageId:Q.messageId,content:Q.content,agentMode:Q.agentMode,threadId:this.callbacks.getThreadID()??"T-00000000-0000-0000-0000-000000000000"},seq:bc});return}this.emitQueuedMessages({type:"queued_message_added",message:{steer:!1,queuedMessage:{role:"user",messageId:Q.messageId,content:Q.content,userState:Q.userState}},seq:bc})}emitMessageAdded(A){this.callbacks.observerCallbacks((Q)=>{Q.onMessageAdded?.(A)})}emitMessageRemoved(A){this.callbacks.observerCallbacks((Q)=>{Q.onMessageRemoved?.(A)})}emitQueuedMessages(A){this.callbacks.observerCallbacks((Q)=>{Q.onQueuedMessages?.(A)})}}class Ax0{options;queue=[];active=null;retryTimer=null;constructor(A){this.options=A}send(A){this.queue.push({message:A,sent:!1}),this.pump()}retry(){this.clearRetryTimer(),this.pump({forceActiveRetry:!0})}handleServerMessage(A){if(!this.active||!this.active.sent||this.active.message.type!=="client_append_user_msg")return;if(!GiQ(this.active.message,A))return;let Q=this.active.message.messageId;this.clearRetryTimer(),this.active=null,this.options.onAckedUserMessage?.(Q),this.pump()}reset(){this.clearRetryTimer(),this.queue.length=0,this.active=null}pump(A){if(this.active){if(!this.active.sent||A?.forceActiveRetry)this.tryActive();return}let Q=this.queue.shift();if(!Q)return;this.active=Q,this.tryActive()}tryActive(){let A=this.active;if(!A||A.sent&&A.message.type!=="client_append_user_msg")return;if(!this.options.trySend(A.message)){this.scheduleRetry();return}if(A.sent=!0,A.message.type!=="client_append_user_msg"){this.clearRetryTimer(),this.active=null,this.pump();return}this.scheduleRetry()}scheduleRetry(){if(this.retryTimer!==null)return;this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.pump({forceActiveRetry:!0})},1000),IiQ(this.retryTimer)}clearRetryTimer(){if(this.retryTimer===null)return;clearTimeout(this.retryTimer),this.retryTimer=null}}function IiQ(A){if(typeof A!=="object"||A===null||!("unref"in A))return;let Q=A.unref;if(typeof Q==="function")Q.call(A)}function GiQ(A,Q){switch(Q.type){case"message_added":return Q.message.messageId===A.messageId;case"queued_message_added":return Q.message.queuedMessage.messageId===A.messageId;case"queued_messages":return ViQ(Q.messages,A.messageId);default:return!1}}function ViQ(A,Q){return A.some(($)=>$.queuedMessage.messageId===Q)}a0();xA();var KiQ=1000,ziQ=30000,WiQ=124,CiQ=30000,HiQ=15000,NiQ=1000,qiQ=200,GF4="Connection timed out. Retrying...",G30="Connection attempt superseded",uiQ=30000,VF4=["online","focus","pageshow","keydown","pointerdown"],KF4=["visibilitychange"];function $x0(){return globalThis}function WF4(A){if(!A||typeof A!=="object")return null;let Q=A;if(typeof Q.addEventListener!=="function"||typeof Q.removeEventListener!=="function")return null;return Q}function zF4(){return WF4($x0().window)}function Qx0(){let A=$x0().document;if(!WF4(A))return null;return A}function wiQ(){let A=$x0().navigator;if(!A||typeof A!=="object")return null;return A}function MiQ(A){if(!A)return"none";let Q=[A.type];if(A.code!==void 0)Q.push(`code=${A.code}`);if(A.reason!==void 0)Q.push(`reason=${A.reason}`);if(A.error!==void 0)Q.push(`error=${A.error}`);return Q.join(" ")}class Bx0{ws=null;transportInfo={state:"disconnected"};reconnectCause=null;reconnectAttempts=0;reconnectAttempt=null;nextRetryAt=null;reconnectTimeoutID=null;reconnectResetTimeoutID=null;pingIntervalID=null;latencyTimeoutIDs=new Set;connectPromise=null;connectGeneration=0;pendingConnectSockets=new Set;disposed=!1;lastServerFrameAt=Date.now();intentionallyClosedSockets=new WeakSet;reconnectActivityCleanup=null;lifecycleEventID=0;lifecycleEvents=[];transportSubject=new K4({state:"disconnected"});lifecycleEventSubject=new K4([]);config;threadIDSubject=new K4(null);_currentThreadID=null;log=S;get currentThreadID(){return this._currentThreadID}get threadActorTransport(){return this.config.threadActorTransport}set currentThreadID(A){if(A!==null&&A!==this._currentThreadID)this._currentThreadID=A,this.log=S.with({threadId:A}),this.threadIDSubject.next(A);else this._currentThreadID=A}constructor(A){this.config={threadId:A.threadId,webSocketProvider:A.webSocketProvider,reconnectDelayMs:A.reconnectDelayMs??KiQ,maxReconnectDelayMs:A.maxReconnectDelayMs??ziQ,maxReconnectAttempts:A.maxReconnectAttempts??WiQ,pingIntervalMs:A.pingIntervalMs??CiQ,connectTimeoutMs:A.connectTimeoutMs??HiQ,threadActorTransport:A.threadActorTransport??"json-rpc",webSocketLatencyMs:A.webSocketLatencyMs??(()=>0),onWebSocketTraffic:A.onWebSocketTraffic??(()=>{return})},this.currentThreadID=A.threadId??null,this.recordLifecycleEvent("transport_initialized",`threadId=${this.currentThreadID??"none"}`)}getThreadId(){return this.currentThreadID}transportChanges(){return this.transportSubject}getTransportInfo(){return{...this.transportInfo}}waitForConnected(A){if(this.transportInfo.state==="connected")return Promise.resolve(!0);if(this.disposed||A<=0)return Promise.resolve(!1);return new Promise((Q)=>{let $=!1,B=null,E=null,D=(J)=>{if($)return;if($=!0,B)clearTimeout(B),B=null;E?.unsubscribe(),E=null,Q(J)};B=setTimeout(()=>{D(!1)},A),E=this.transportSubject.subscribe({next:(J)=>{if(J.state==="connected")D(!0)},error:()=>{D(!1)},complete:()=>{D(!1)}})})}connectionLifecycleChanges(){return this.lifecycleEventSubject}getConnectionLifecycleEvents(){return[...this.lifecycleEvents]}async connect(){return this.connectInternal({fromReconnect:!1})}recordLifecycleEvent(A,Q){let $={id:++this.lifecycleEventID,at:Date.now(),type:A,...Q?{details:Q}:{}},B=qiQ,E=this.lifecycleEvents.slice(-(B-1));this.lifecycleEvents=[...E,$],this.lifecycleEventSubject.next([...this.lifecycleEvents])}async connectInternal(A){if(this.connectPromise)return this.connectPromise;let Q=this.connectGeneration,$=this.connectInternalOnce(A,Q);this.connectPromise=$;try{return await $}finally{if(this.connectPromise===$)this.connectPromise=null}}async connectInternalOnce(A,Q){if(this.disposed)throw new dQ("Transport is disposed");if(this.ws)return;this.recordLifecycleEvent("connect_requested",A.fromReconnect?`mode=reconnect attempt=${this.reconnectAttempts}`:"mode=initial"),this.updateConnectionState("connecting");try{let{webSocket:$,threadId:B}=await this.openWebSocketProviderWithTimeout();this.throwIfConnectAttemptSuperseded(Q,$);try{$.binaryType="arraybuffer"}catch{}this.pendingConnectSockets.add($);try{await this.waitForOpen($)}finally{this.pendingConnectSockets.delete($)}this.throwIfConnectAttemptSuperseded(Q,$),this.currentThreadID=B,this.ws=$,this.lastServerFrameAt=Date.now(),this.setupWebSocketHandlers($),this.stopWaitingForReconnectActivity(),this.scheduleReconnectAttemptsReset(),this.reconnectCause=null,this.updateConnectionState("connected"),this.recordLifecycleEvent("connect_succeeded",`threadId=${this.currentThreadID??"none"} attempt=${this.reconnectAttempts}`)}catch($){if(!this.isConnectAttemptCurrent(Q))throw this.recordLifecycleEvent("connect_superseded",A.fromReconnect?"mode=reconnect":"mode=initial"),new dQ(G30,$);let B=$ instanceof Error?$.message:String($),E=$ instanceof dQ&&$.cause instanceof Error?$.cause.message:null,D=`mode=${A.fromReconnect?"reconnect":"initial"} error=${B}`;if(this.recordLifecycleEvent("connect_failed",E?`${D} cause=${E}`:D),!A.fromReconnect&&!this.disposed)this.reconnectCause={type:"connect_failed",at:Date.now(),error:B},this.scheduleReconnect();throw $}}disconnect(){this.recordLifecycleEvent("disconnect_requested"),this.cancelReconnect(),this.invalidateConnectAttempts(),this.reconnectCause=null,this.detachCurrentSocket({closeCode:1000,closeReason:"Client disconnect",cancelReconnectAttemptsReset:!1,markIntentional:!0}),this.updateConnectionState("disconnected")}forceReconnect(A){if(this.disposed)return;if(!this.ws&&this.transportInfo.state!=="connected")return;this.recordLifecycleEvent("force_reconnect_requested",`reason=${A}`),this.invalidateConnectAttempts(),this.reconnectCause={type:"error",at:Date.now(),error:A},this.detachCurrentSocket({closeCode:4000,closeReason:A,cancelReconnectAttemptsReset:!0,markIntentional:!1}),this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}detachCurrentSocket(A){let Q=this.ws;if(this.ws=null,this.clearWebSocketLatencyTimeouts(),this.stopPingInterval(),A.cancelReconnectAttemptsReset)this.cancelReconnectAttemptsReset();if(!Q)return;if(A.markIntentional)this.intentionallyClosedSockets.add(Q);if(A.closeCode!==null&&(Q.readyState===WebSocket.OPEN||Q.readyState===WebSocket.CONNECTING))try{Q.close(A.closeCode,A.closeReason)}catch{}}invalidateConnectAttempts(){this.connectGeneration++,this.connectPromise=null;for(let A of this.pendingConnectSockets)this.closeSocketDuringConnect(A,4000,G30);this.pendingConnectSockets.clear()}isConnectAttemptCurrent(A){return!this.disposed&&A===this.connectGeneration}throwIfConnectAttemptSuperseded(A,Q){if(this.isConnectAttemptCurrent(A))return;throw this.closeSocketDuringConnect(Q,4000,G30),new dQ(G30)}retryConnect(A){if(this.disposed)return;if(this.recordLifecycleEvent("reconnect_attempts_reset",`reason=${A}`),this.reconnectAttempts=0,this.cancelReconnectAttemptsReset(),this.reconnectTimeoutID)return;this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}async disconnectAndWait(A){let Q=this.ws;if(!Q||Q.readyState!==WebSocket.OPEN)return this.disconnect(),{status:"not_connected"};let $=this.waitForSocketClose(Q,A?.waitForCloseTimeoutMs??NiQ);return this.disconnect(),$}dispose(){if(this.disposed)return;this.recordLifecycleEvent("disposed"),this.disposed=!0,this.disconnect(),this.transportSubject.complete(),this.lifecycleEventSubject.complete()}sendRaw(A){if(!this.hasOpenSocket())throw new dQ("WebSocket is not connected");let Q=this.ws;if(!Q)throw new dQ("WebSocket is not connected");this.runAfterWebSocketLatency(()=>{if(Q!==this.ws||Q.readyState!==WebSocket.OPEN)return;Q.send(A)}),this.startPingIntervalOnce()}hasOpenSocket(){return!!this.ws&&this.ws.readyState===WebSocket.OPEN}runAfterWebSocketLatency(A){let Q=this.config.webSocketLatencyMs();if(!Number.isFinite(Q)||Q<=0){A();return}let $=setTimeout(()=>{this.latencyTimeoutIDs.delete($),A()},Q);this.latencyTimeoutIDs.add($)}clearWebSocketLatencyTimeouts(){for(let A of this.latencyTimeoutIDs)clearTimeout(A);this.latencyTimeoutIDs.clear()}waitForSocketClose(A,Q){return new Promise(($)=>{let B=!1,E=null,D=(U)=>{if(B)return;if(B=!0,E)clearTimeout(E);A.removeEventListener("close",J),$(U)},J=(U)=>{let Y=U;D({status:Y.code===1000?"server_acknowledged":"timeout",...typeof Y.code==="number"?{closeCode:Y.code}:{},...typeof Y.reason==="string"?{closeReason:Y.reason}:{}})};if(E=setTimeout(()=>{D({status:"timeout"})},Q),A.addEventListener("close",J),A.readyState===WebSocket.CLOSED)D({status:"timeout"})})}async openWebSocketProviderWithTimeout(){let A=!1,Q=null,$=this.config.webSocketProvider();$.then((E)=>{if(A)this.closeSocketDuringConnect(E.webSocket,4000,"Connection attempt timed out")},()=>{return});let B=new Promise((E,D)=>{Q=setTimeout(()=>{A=!0,D(new dQ(GF4,Error(`WebSocket provider timed out after ${this.config.connectTimeoutMs}ms`)))},this.config.connectTimeoutMs)});try{return await Promise.race([$,B])}finally{if(Q)clearTimeout(Q)}}closeSocketDuringConnect(A,Q,$){try{if(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)A.close(Q,$)}catch{}}updateConnectionState(A){let Q={...this.transportInfo};if(this.transportInfo.state=A,A==="connected")this.reconnectCause=null,this.clearReconnectScheduleMetadata(),delete this.transportInfo.reconnectCause;else if(this.reconnectCause)this.transportInfo.reconnectCause=this.reconnectCause;else delete this.transportInfo.reconnectCause;if(this.reconnectAttempt===null)delete this.transportInfo.reconnectAttempt;else this.transportInfo.reconnectAttempt=this.reconnectAttempt;if(this.nextRetryAt===null)delete this.transportInfo.nextRetryAt;else this.transportInfo.nextRetryAt=this.nextRetryAt;let $={...this.transportInfo};this.transportSubject.next($),this.log.info("[thread-client] Transport connection state changed",{previousState:Q.state,nextState:$.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("state_changed",`state=${A} cause=${MiQ(this.reconnectCause)}`)}onRawMessage(A){}onWebSocketTraffic(A){this.config.onWebSocketTraffic(A)}onMaxReconnectExceeded(A){}async waitForOpen(A){if(A.readyState===WebSocket.OPEN)return;return new Promise((Q,$)=>{let B=setTimeout(()=>{E(),this.closeSocketDuringConnect(A,4000,"Connection attempt timed out"),$(new dQ(GF4,Error(`WebSocket connection timed out after ${this.config.connectTimeoutMs}ms`)))},this.config.connectTimeoutMs),E=()=>{clearTimeout(B),A.removeEventListener("open",D),A.removeEventListener("error",J),A.removeEventListener("close",U)},D=()=>{E(),Q()},J=(Y)=>{E();let Z="message"in Y?Y.message:("error"in Y)&&Y.error instanceof Error?Y.error.message:Y.type;$(new dQ(`WebSocket connection failed: ${Z}`))},U=(Y)=>{E(),$(new dQ(`WebSocket closed during connect: code=${Y.code} reason=${Y.reason||"none"}`))};if(A.addEventListener("open",D),A.addEventListener("error",J),A.addEventListener("close",U),A.readyState===WebSocket.OPEN)return D();if(A.readyState===WebSocket.CLOSED||A.readyState===WebSocket.CLOSING)return U({code:1006,reason:"Socket already closed before connect"})})}setupWebSocketHandlers(A){A.addEventListener("message",(Q)=>{let $=Q.data;this.runAfterWebSocketLatency(()=>this.handleWebSocketMessage(A,$))}),A.addEventListener("close",(Q)=>{this.handleClose(A,Q.code,Q.reason)}),A.addEventListener("error",()=>{this.handleError(A)})}handleWebSocketMessage(A,Q){if(A!==this.ws)return;if(this.lastServerFrameAt=Date.now(),this.startPingIntervalOnce(),this.onWebSocketTraffic(Q),typeof Q==="string"){if(Q==="pong")return;this.onRawMessage(Q)}else if(Q instanceof ArrayBuffer)this.onRawMessage(new TextDecoder().decode(Q))}handleClose(A,Q,$){let B=this.intentionallyClosedSockets.has(A);if(B)this.intentionallyClosedSockets.delete(A);if(this.log.info("[thread-client] Transport socket close observed",{code:Q,reason:$||void 0,intentional:B,isCurrentSocket:A===this.ws,stateBeforeClose:this.transportInfo.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("socket_closed",`code=${Q} reason=${$||"none"} intentional=${B}`),A!==this.ws)return;if(this.detachCurrentSocket({closeCode:null,closeReason:"",cancelReconnectAttemptsReset:!0,markIntentional:!1}),!this.disposed&&!B){let E=this.reconnectCause,D=E?.type==="ping_timeout"&&Q===4000&&!$?{...E,at:Date.now(),code:Q}:{type:"close",at:Date.now(),code:Q,...$?{reason:$}:{}};this.reconnectCause=D,this.scheduleReconnect()}else this.reconnectCause=null,this.updateConnectionState("disconnected")}handleError(A){if(A!==this.ws)return;if(this.recordLifecycleEvent("socket_error","error=WebSocket error event"),this.reconnectCause={type:"error",at:Date.now(),error:"WebSocket error event"},this.ws)this.ws.close()}scheduleReconnect(A){if(this.disposed||this.reconnectTimeoutID)return;if(this.reconnectAttempts>=this.config.maxReconnectAttempts){this.stopWaitingForReconnectActivity(),this.recordLifecycleEvent("reconnect_exhausted",`attempts=${this.reconnectAttempts} max=${this.config.maxReconnectAttempts}`),this.clearReconnectScheduleMetadata(),this.updateConnectionState("disconnected"),this.onMaxReconnectExceeded(this.config.maxReconnectAttempts);return}if(!A?.bypassActivityGate&&this.shouldWaitForReconnectActivity()){this.recordLifecycleEvent("reconnect_waiting_for_activity",`offline=${this.isBrowserOffline()} hidden=${this.isDocumentHidden()}`),this.updateConnectionState("reconnecting"),this.waitForReconnectActivity();return}this.stopWaitingForReconnectActivity(),this.updateConnectionState("reconnecting"),this.reconnectAttempts++;let Q=A?.immediate?0:this.getReconnectDelayMs();this.reconnectAttempt=this.reconnectAttempts,this.nextRetryAt=Date.now()+Q,this.updateConnectionState("reconnecting"),this.log.info("[thread-client] Scheduling transport reconnect",{attempt:this.reconnectAttempts,delayMs:Math.round(Q),immediate:A?.immediate===!0,bypassActivityGate:A?.bypassActivityGate===!0,state:this.transportInfo.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("reconnect_scheduled",`attempt=${this.reconnectAttempts} delayMs=${Math.round(Q)}`),this.reconnectTimeoutID=setTimeout(()=>{this.reconnectTimeoutID=null,this.nextRetryAt=null,this.updateConnectionState("connecting"),this.connectInternal({fromReconnect:!0}).catch(($)=>{if(this.reconnectCause={type:"connect_failed",at:Date.now(),error:$ instanceof Error?$.message:String($)},!this.disposed)this.scheduleReconnect()})},Q)}cancelReconnect(){if(this.reconnectTimeoutID)clearTimeout(this.reconnectTimeoutID),this.reconnectTimeoutID=null;this.stopWaitingForReconnectActivity(),this.cancelReconnectAttemptsReset(),this.reconnectAttempts=0,this.clearReconnectScheduleMetadata()}clearReconnectScheduleMetadata(){this.reconnectAttempt=null,this.nextRetryAt=null}getReconnectDelayMs(){let A=Math.min(this.config.reconnectDelayMs*2**(this.reconnectAttempts-1),this.config.maxReconnectDelayMs),Q=0.8+Math.random()*0.4;return A*Q}shouldWaitForReconnectActivity(){let A=zF4(),Q=Qx0();if(!A&&!Q)return!1;return this.isBrowserOffline()||this.isDocumentHidden()}isBrowserOffline(){let A=wiQ();if(typeof A?.onLine!=="boolean")return!1;return A.onLine===!1}isDocumentHidden(){let A=Qx0();if(!A)return!1;return A.visibilityState==="hidden"}waitForReconnectActivity(){if(this.reconnectActivityCleanup)return;let A=zF4(),Q=Qx0();if(!A&&!Q)return;let $=()=>{this.handleReconnectActivity()};for(let B of VF4)A?.addEventListener(B,$);for(let B of KF4)Q?.addEventListener(B,$);this.reconnectActivityCleanup=()=>{for(let B of VF4)A?.removeEventListener(B,$);for(let B of KF4)Q?.removeEventListener(B,$)}}stopWaitingForReconnectActivity(){this.reconnectActivityCleanup?.(),this.reconnectActivityCleanup=null}handleReconnectActivity(){if(this.disposed||this.ws){this.stopWaitingForReconnectActivity();return}if(this.shouldWaitForReconnectActivity())return;this.stopWaitingForReconnectActivity(),this.recordLifecycleEvent("reconnect_activity_detected"),this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}scheduleReconnectAttemptsReset(){this.cancelReconnectAttemptsReset(),this.reconnectResetTimeoutID=setTimeout(()=>{this.reconnectResetTimeoutID=null,this.reconnectAttempts=0},uiQ)}cancelReconnectAttemptsReset(){if(this.reconnectResetTimeoutID)clearTimeout(this.reconnectResetTimeoutID),this.reconnectResetTimeoutID=null}startPingIntervalOnce(){if(this.pingIntervalID)return;this.startPingInterval()}startPingInterval(){this.stopPingInterval();let A=Date.now();this.pingIntervalID=setInterval(()=>{let Q=Date.now(),$=Q-A;if(A=Q,$>this.config.pingIntervalMs*3){this.lastServerFrameAt=Q;return}if(this.hasOpenSocket()){let B=Q-this.lastServerFrameAt,E=this.config.pingIntervalMs*2;if(B>E){this.recordLifecycleEvent("ping_timeout",`elapsedMs=${B} thresholdMs=${E}`);let D=`No server frame received for ${B}ms (threshold ${E}ms)`,J={type:"ping_timeout",at:Q,code:4000,reason:"Pong timeout",error:D};this.reconnectAfterPingTimeout(J);return}try{this.ws?.send("ping")}catch{}}},this.config.pingIntervalMs)}stopPingInterval(){if(this.pingIntervalID)clearInterval(this.pingIntervalID),this.pingIntervalID=null}reconnectAfterPingTimeout(A){if(this.reconnectCause=A,this.detachCurrentSocket({closeCode:4000,closeReason:"Pong timeout",cancelReconnectAttemptsReset:!0,markIntentional:!1}),!this.disposed)this.scheduleReconnect({immediate:!0})}}function x2(A){return typeof A==="object"&&A!==null}function V30(A,Q){return Object.hasOwn(A,Q)}function $Q(A,Q){let $=A[Q];return typeof $==="string"?$:void 0}function K30(A,Q){let $=A[Q];return typeof $==="number"&&Number.isFinite($)?$:void 0}function nN(A,Q){let $=A[Q];return typeof $==="boolean"?$:void 0}function aN(A,Q){let $=A[Q];return x2($)?$:void 0}function AJ(A,Q){let $=A[Q];return Array.isArray($)?$:void 0}function H4(A,Q,$){if($!==void 0)A[Q]=$}function Ex0(A){return A?.map((Q)=>Q.type)}function Dx0(A){let Q=A?.flatMap(($)=>$.blockState?[$.blockState]:[]);return Q&&Q.length>0?Q:void 0}function OiQ(A){return A?.some((Q)=>HF4(Q.blockState))??!1}function HF4(A){return A==="start"||A==="complete"}function NF4(A){return A.flatMap((Q)=>{if(!x2(Q))return[];let $=$Q(Q,"type");return $?[$]:[]})}function qF4(A){let Q=A.flatMap(($)=>{if(!x2($))return[];let B=$Q($,"blockState");return B?[B]:[]});return Q.length>0?Q:void 0}function LiQ(A){return A?.some((Q)=>{if(!x2(Q))return!1;return HF4($Q(Q,"blockState"))})??!1}function jiQ(A,Q){if(!Array.isArray(Q))return;A.blockCount=Q.length,A.blockTypes=NF4(Q),H4(A,"blockStates",qF4(Q))}function z30(A,Q){let $={type:A};return H4($,"direction",Q.direction),H4($,"clientID",Q.clientID),H4($,"frameMessageCount",Q.frameMessageCount),H4($,"frameMessageIndex",Q.frameMessageIndex),H4($,"frameLength",Q.frameLength),$}function uF4(A,Q){H4(A,"seq",K30(Q,"seq")),H4(A,"messageId",$Q(Q,"messageId")),H4(A,"toolCallId",$Q(Q,"toolCallId")),H4(A,"parentToolCallId",$Q(Q,"parentToolCallId")),H4(A,"requestId",$Q(Q,"requestId")),H4(A,"queuedMessageId",$Q(Q,"queuedMessageId")),H4(A,"editId",$Q(Q,"editId")),H4(A,"threadId",$Q(Q,"threadId")),H4(A,"threadID",$Q(Q,"threadID"))}function RiQ(A,Q){uF4(A,Q)}function PiQ(A,Q){if(A.messageId=Q.messageId,A.role=Q.role,A.blockCount=Q.content.length,A.blockTypes=Ex0(Q.content),H4(A,"blockStates",Dx0(Q.content)),Q.role==="assistant")H4(A,"messageState",Q.state?.type),A.hasUsage=Q.usage!==void 0}function viQ(A,Q){if(A.subtype=`${Q.role}.${Q.state}`,A.role=Q.role,A.deltaState=Q.state,A.blockCount=Q.blocks?.length??0,H4(A,"blockTypes",Ex0(Q.blocks)),H4(A,"blockStates",Dx0(Q.blocks)),A.hasUsage=Q.role==="assistant"&&Q.usage!==void 0,Q.role==="assistant"&&Q.blockIndex!==void 0)A.blockIndex=Q.blockIndex}function wF4(A,Q){if(!x2(Q)){if(Q!==void 0)A.hasProgress=!0;return}let $=$Q(Q,"type"),B=$Q(Q,"state");if(H4(A,"progressType",$),H4(A,"progressState",B),$)A.subtype=B?`${$}.${B}`:$;let E=AJ(Q,"blocks");if(E)A.progressBlockCount=E.length,A.progressBlockTypes=NF4(E),H4(A,"progressBlockStates",qF4(E));if(V30(Q,"value"))A.hasProgressValue=!0}function MF4(A,Q){if(!x2(Q))return;let $=$Q(Q,"type");H4(A,"subtype",$),H4(A,"rpcType",$),H4(A,"rpcMethod",$Q(Q,"method"))}function CF4(A,Q){if(!x2(Q))return;H4(A,"runStatus",$Q(Q,"status")),A.hasRunProgress=V30(Q,"progress"),A.hasRunResult=V30(Q,"result"),A.hasRunError=V30(Q,"error")}function TiQ(A,Q){let $=AJ(Q,"files");if($)A.fileCount=$.length;H4(A,"fileCount",K30(Q,"fileCount"));let B=AJ(Q,"withContent");if(B)A.withContentCount=B.length;let E=AJ(Q,"contentOmitted");if(E)A.contentOmittedCount=E.length}function OF4(A,Q){H4(A,"ok",nN(Q,"ok"));let $=AJ(Q,"entries");if($)A.entryCount=$.length;let B=$Q(Q,"contentBase64");if(B!==void 0)A.contentBase64Length=B.length;let E=aN(Q,"error");H4(A,"errorCode",E?$Q(E,"code"):void 0)}function _iQ(A,Q){switch(A.type){case"executor_connect":{H4(A,"clientId",$Q(Q,"clientId")),H4(A,"executorType",$Q(Q,"executorType"));let $=aN(Q,"capabilities");if($)A.capabilityCount=Object.keys($).length;return}case"client_update_thread_settings":A.settingsCount=Object.keys(aN(Q,"settings")??{}).length;return;case"executor_tools_register":A.toolCount=AJ(Q,"tools")?.length??0;return;case"executor_tools_unregister":A.toolCount=AJ(Q,"toolNames")?.length??0;return;case"executor_tools_bootstrap_complete":H4(A,"ok",nN(Q,"ok")),A.hasError=$Q(Q,"error")!==void 0;return;case"tool_progress":wF4(A,Q.progress);return;case"executor_tool_result":CF4(A,Q.run);return;case"executor_guidance_snapshot":case"executor_guidance_discovery":TiQ(A,Q),H4(A,"snapshotId",$Q(Q,"snapshotId")),H4(A,"isLast",nN(Q,"isLast"));return;case"executor_skill_snapshot":H4(A,"snapshotId",$Q(Q,"snapshotId")),A.skillCount=AJ(Q,"skills")?.length??0,A.errorCount=AJ(Q,"errors")?.length??0,H4(A,"isLast",nN(Q,"isLast"));return;case"executor_environment_snapshot":case"executor_environment_update":A.hasEnvironment=x2(Q.environment);return;case"executor_artifact_upsert":{let $=aN(Q,"artifact");H4(A,"artifactKey",$&&$Q($,"key")),H4(A,"artifactDataType",$&&$Q($,"dataType"));return}case"executor_artifact_delete":H4(A,"artifactKey",$Q(Q,"key"));return;case"executor_plugin_message":MF4(A,Q.message);return;case"client_append_user_msg":case"client_edit_message":jiQ(A,Q.content),H4(A,"agentMode",$Q(Q,"agentMode")),H4(A,"reasoningEffort",$Q(Q,"reasoningEffort")),H4(A,"steer",nN(Q,"steer"));return;case"client_set_thread_title":H4(A,"titleLength",$Q(Q,"title")?.length);return;case"executor_filesystem_read_directory_result":case"executor_filesystem_read_file_result":OF4(A,Q);return;case"executor_git_command_result":{let $=aN(Q,"error");H4(A,"subtype",Q.ok?"ok":$&&$Q($,"code")),A.ok=Q.ok,H4(A,"errorCode",$&&$Q($,"code")),H4(A,"exitCode",Q.exitCode);return}case"client_resume":H4(A,"version",K30(Q,"version"));return;case"client_dismiss_active_error":H4(A,"seq",K30(Q,"seq"));return;case"client_append_manual_bash_invocation":A.argCount=AJ(aN(Q,"args")??{},"args")?.length??0,H4(A,"hidden",nN(Q,"hidden")),CF4(A,Q.run);return;case"client_tool_approval_response":H4(A,"accepted",nN(Q,"accepted")),A.hasInput=x2(Q.input);return;case"client_spawn_executor":A.additionalRepositoryCount=AJ(Q,"additionalRepositories")?.length??0,A.hasRepositoryURL=$Q(Q,"repositoryURL")!==void 0,A.hasProjectID=$Q(Q,"projectID")!==void 0;return;case"executor_tool_lease_ack":case"executor_tool_approval_request":case"client_remove_queued_msg":case"client_steer_queued_msg":case"client_mark_message_read":case"client_mark_message_unread":case"client_upsert_notification_subscription":case"client_filesystem_read_directory":case"client_filesystem_read_file":case"client_git_command":case"client_retry":case"client_cancel":return}}function SiQ(A,Q){switch(Q.type){case"agent_state":A.subtype=Q.state,H4(A,"agentMode",Q.agentMode),H4(A,"reasoningEffort",Q.reasoningEffort);return;case"inference_tools":H4(A,"agentMode",Q.agentMode),A.toolCount=Q.tools.length;return;case"error":H4(A,"subtype",Q.code);return;case"error_set":H4(A,"subtype",Q.error.code),H4(A,"retryAt",Q.error.retryAt),H4(A,"attempt",Q.error.attempt);return;case"retry_scheduled":A.attempt=Q.attempt,A.maxAttempts=Q.maxAttempts,A.retryAt=Q.retryAt;return;case"executor_connected":A.executorId=Q.executorId,A.registeredToolCount=Q.registeredToolCount,A.guidanceInventoryCount=Q.guidanceInventory.length,A.rejectedToolCount=Q.rejectedTools?.length??0,A.resumeBootstrap=Q.resumeBootstrap===!0;return;case"tool_lease":A.subtype=Q.toolName,A.toolName=Q.toolName;return;case"client_filesystem_read_directory_result":case"client_filesystem_read_file_result":OF4(A,Q);return;case"client_git_command_result":{let $=aN(Q,"error");H4(A,"subtype",Q.ok?"ok":$&&$Q($,"code")),A.ok=Q.ok,H4(A,"errorCode",$&&$Q($,"code")),H4(A,"exitCode",Q.exitCode);return}case"tool_approval_queue":A.approvalCount=Q.approvals.length;return;case"executor_tool_lease_revoked":A.subtype=Q.reason;return;case"plugin_message":MF4(A,Q.message);return;case"executor_tool_approval_response":A.subtype=Q.accepted?"accepted":"rejected",A.accepted=Q.accepted;return;case"tool_progress":wF4(A,Q.progress);return;case"executor_error":A.subtype=Q.code;return;case"delta":viQ(A,Q);return;case"queued_messages":A.queuedMessageCount=Q.messages.length;return;case"queued_message_added":A.seq=Q.seq,A.messageId=Q.message.queuedMessage.messageId,A.blockCount=Q.message.queuedMessage.content.length,A.blockTypes=Ex0(Q.message.queuedMessage.content),H4(A,"blockStates",Dx0(Q.message.queuedMessage.content));return;case"queued_message_removed":case"queued_message_dequeued":A.messageId=Q.queuedMessageId;return;case"message_added":case"message_updated":PiQ(A,Q.message);return;case"thread_truncated":A.truncateFromMessage=Q.truncateFromMessage;return;case"observers":A.observerCount=Q.count,A.hasExecutor=Q.hasExecutor===!0;return;case"executor_status":A.subtype=Q.status,H4(A,"executorId",Q.executorId),H4(A,"spawnId",Q.spawnId);return;case"executor_workspace_maybe_changed":H4(A,"toolCallId",Q.toolCallId),H4(A,"toolName",Q.toolName);return;case"thread_relationships":A.relationshipCount=Q.relationships.length;return;case"compaction_complete":H4(A,"cutMessageId",Q.cutMessageId);return;case"compaction_records":A.recordCount=Q.records.length;return;case"cancelled":case"thread_settings":case"error_cleared":case"retry_started":case"retry_cancelled":case"executor_filesystem_read_directory":case"executor_filesystem_read_file":case"executor_git_command":case"executor_tool_result_ack":case"environment_update":case"thread_title":case"thread_status":case"compaction_started":case"edit_rejected":return}}function kiQ(A){if(!x2(A))return!1;if($Q(A,"type")!=="delta")return!1;if($Q(A,"state")!=="generating")return!1;return!LiQ(AJ(A,"blocks"))}function W30(A,Q={}){let $=z30(A.type,Q);return RiQ($,A),SiQ($,A),$}function Jx0(A,Q={}){if(!x2(A)){let B=z30("unknown",Q);return B.messageKind=typeof A,B}let $=z30($Q(A,"type")??"unknown",Q);return uF4($,A),_iQ($,A),$}function LF4(A){return z30("decode_failed",{direction:"receive",frameMessageCount:0,frameMessageIndex:0,frameLength:A})}function C30(A){if(A.type==="delta")return A.state!=="generating"||OiQ(A.blocks);if(A.type==="tool_progress")return!kiQ(A.progress);return!0}function H30(A,Q,$){if(!C30(Q))return;A.info("[thread-client] Received server message",W30(Q,{direction:"receive",...$}))}function Ux0(A,Q){A.info("[thread-client] Failed to decode received server message",LF4(Q))}var fiQ=3000,xiQ=30000,yiQ=5,biQ=120000;function rB(A){if(A.state!=="connected")return!1;return A.requiredRole===null||A.role===A.requiredRole}var hiQ={isReplayingAfterResume:!1};function Yx0(A){return{...A.transport,role:A.role,requiredRole:A.requiredRole,clientId:A.clientId}}function giQ(A){return{isReplayingAfterResume:A.resume.state==="replaying"}}function miQ(A,Q){return A?.type===Q?.type&&A?.at===Q?.at&&A?.code===Q?.code&&A?.reason===Q?.reason&&A?.error===Q?.error}function PF4(A,Q){return A.state===Q.state&&A.reconnectAttempt===Q.reconnectAttempt&&A.nextRetryAt===Q.nextRetryAt&&miQ(A.reconnectCause,Q.reconnectCause)}function diQ(A,Q){return PF4(A,Q)&&A.role===Q.role&&A.requiredRole===Q.requiredRole&&A.clientId===Q.clientId}function ciQ(A,Q){return A.isReplayingAfterResume===Q.isReplayingAfterResume}function piQ(A,Q){return PF4(A.transport,Q.transport)&&A.role===Q.role&&A.requiredRole===Q.requiredRole&&A.clientId===Q.clientId&&A.ready===Q.ready&&A.resume.state===Q.resume.state&&A.resume.version===Q.resume.version}function jF4(A){if(A instanceof oB)return A;if(A instanceof Error){let Q=A.message||"Unknown thread-client connection error";return new oB(Q,A)}if(typeof A==="string"&&A.length>0)return new oB(A,A);return new oB("Unknown thread-client connection error",A)}function liQ(A){let Q=atob(A),$=new Uint8Array(Q.length);for(let B=0;B<Q.length;B++)$[B]=Q.charCodeAt(B);return $}function RF4(A){return{type:"error",message:`Failed to send user message: ${A}`,code:"MESSAGE_ERROR"}}function iiQ(A){let{type:Q,...$}=A;return JSON.stringify({jsonrpc:LX,method:Q,params:$})}function niQ(A,Q,$){let{type:B,...E}=Q;return JSON.stringify({jsonrpc:LX,id:$,method:A,params:E})}function aiQ(A){return`thread-client-${Date.now()}-${A}`}function oiQ(A){let Q=of0.safeDecode(A);if(!Q.success)return null;let $=Q.data;if(!("method"in $)||"id"in $)return null;let B=iN.safeParse({type:$.method,...typeof $.params==="object"&&$.params!==null?$.params:{}});return B.success?B.data:null}function riQ(A){let Q=of0.safeDecode(A);if(!Q.success)return null;let $=Q.data;return"method"in $?null:$}function siQ(A){let Q=Error(A.message);return Q.name="JSONRPCError",Q}class QJ extends Bx0{ensureConnectedPromise=null;pendingReadDirectoryRequests=new Map;pendingReadFileRequests=new Map;pendingGitCommandRequests=new Map;pendingJSONRPCRequests=new Map;queuedJSONRPCRequests=new Set;jsonRPCRequestCounter=0;pendingThreadSettings=null;outbox;optimisticUserMessages;pendingCancelAgentLoop=!1;pendingDismissActiveError=null;fileSystemRequestCounter=0;gitCommandRequestCounter=0;wasConnectionReady=!1;sessionStateSubject=new K4({transport:this.getTransportInfo(),role:null,requiredRole:null,clientId:null,ready:!1,resume:{state:"idle",version:0}});sessionState=this.sessionStateSubject;connectionSubject=new K4(this.getConnectionInfo());observerCallbacks=null;executorCallbacks=null;pendingObserverDispatches=[];pendingExecutorDispatches=[];executorCallbacksCleared=!1;resumeCursor=rf0(0);resumeStateSubject=new K4(hiQ);resumeState=this.resumeStateSubject;threadHistoryLoader;executorConnectedListeners=new Set;executorErrorListeners=new Set;environmentSubject=new K4(null);threadIDSubscription;constructor(A){super(A.transport);if(this.updateSessionState((Q)=>({...Q,requiredRole:A.transport.requiredRole??null})),this.threadHistoryLoader=A.threadHistoryLoader,this.outbox=new Ax0({trySend:(Q)=>this.trySendOutboxMessage(Q),onAckedUserMessage:(Q)=>{this.dispatchObserverCallbacks(($)=>{$.onUserMessageSendAck?.(Q)})}}),this.optimisticUserMessages=new ef0({getThreadID:()=>this.getThreadId(),observerCallbacks:(Q)=>this.dispatchObserverCallbacks(Q)}),this.threadIDSubscription=this.threadIDSubject.subscribe((Q)=>{if(Q!==null)this.dispatchObserverCallbacks(($)=>{$.onThreadId?.(Q)})}),A.observerCallbacks)this.setObserverCallbacks(A.observerCallbacks);if(A.executorCallbacks)this.setExecutorCallbacks(A.executorCallbacks)}connectionChanges(){return this.connectionSubject}getSessionState(){return this.sessionStateSubject.getValue()}getConnectionInfo(){return Yx0(this.getSessionState())}updateSessionState(A){let Q=this.getSessionState(),$=A(Q),B={...$,ready:rB(Yx0($))};if(!piQ(Q,B))this.sessionStateSubject.next(B);let E=Yx0(B);if(!diQ(this.connectionSubject.getValue(),E))this.connectionSubject.next(E);let D=giQ(B);if(!ciQ(this.resumeStateSubject.getValue(),D))this.resumeStateSubject.next(D);return B}updateSessionTransportInfo(){return this.updateSessionState((A)=>{let Q=this.getTransportInfo(),$=Q.state==="reconnecting"||Q.state==="disconnected";return{...A,transport:Q,role:$?null:A.role,clientId:$?null:A.clientId}})}updateResumeState(A){this.updateSessionState((Q)=>({...Q,resume:A}))}setObserverCallbacks(A){if(this.observerCallbacks&&this.observerCallbacks!==A)throw Error("Observer callbacks are already set and cannot be replaced");if(this.observerCallbacks===A)return;if(this.observerCallbacks=A,this.pendingObserverDispatches.length===0)return;for(let Q of this.pendingObserverDispatches)Q(A);this.pendingObserverDispatches.length=0}setExecutorCallbacks(A){if(this.executorCallbacks&&this.executorCallbacks!==A)throw Error("Executor callbacks are already set and cannot be replaced");if(this.executorCallbacks===A)return;if(this.executorCallbacks=A,this.executorCallbacksCleared=!1,this.pendingExecutorDispatches.length===0)return;for(let Q of this.pendingExecutorDispatches)Q(A);this.pendingExecutorDispatches.length=0}clearExecutorCallbacks(A){if(A!==void 0&&this.executorCallbacks!==A)return;this.executorCallbacks=null,this.executorCallbacksCleared=!0,this.pendingExecutorDispatches.length=0}async connect(){try{await super.connect()}catch(A){throw jF4(A)}}async reconnect(){this.disconnect(),await this.connect()}async ensureConnected(A){if(this.ensureConnectedPromise)return this.ensureConnectedPromise;this.ensureConnectedPromise=this.ensureConnectedInternal(A);try{return await this.ensureConnectedPromise}finally{this.ensureConnectedPromise=null}}async ensureConnectedInternal(A){let Q=A?.baseDelayMs??fiQ,$=A?.maxDelayMs??xiQ,B=A?.maxAttempts??yiQ;if(A?.forceReconnectWhenReconnecting&&this.getConnectionInfo().state==="reconnecting")this.disconnect();for(let E=0;E<B;E++){try{await this.connect()}catch(Y){let Z=jF4(Y);if(this.getConnectionInfo().state!=="reconnecting")throw Z;A?.onRetryableConnectError?.(Z)}let D=A?.waitForConnectedTimeoutMs??Math.min(Q*2**E,$);if(await this.waitForConnected(D))return!0;let U=E+1<B?Math.min(Q*2**(E+1),$):null;A?.onAttemptTimeout?.({attempt:E+1,maxAttempts:B,nextDelayMs:U})}return!1}async loadThreadHistory(A){let Q=await this.threadHistoryLoader(A);if(!Q)return null;let $=Q.title;if($!==void 0)this.dispatchObserverCallbacks((B)=>{B.onThreadTitle?.({type:"thread_title",title:$})});for(let[B,E]of Q.messages.entries())this.dispatchObserverCallbacks((D)=>{let J={type:"message_added",message:E,seq:B},U=o$.safeParse(E.parentToolUseId);if(U.success)J.parentToolUseId=U.data;D.onMessageAdded?.(J)});return Q}getResumeVersion(){return this.resumeCursor.getVersion()}sendUserMessage(A,Q,$){let B=$?.messageId??wK(),E={type:"client_append_user_msg",content:eD(A),agentMode:Q,reasoningEffort:$?.reasoningEffort,messageId:B,steer:$?.steer,userState:$?.userState};this.dispatchObserverCallbacks((J)=>{J.onUserMessageSendPending?.(B,Date.now())}),this.optimisticUserMessages.emitOptimisticUserMessage(E);let D=this.request("client_append_user_msg",E).then(()=>{return this.dispatchObserverCallbacks((J)=>{J.onUserMessageSendAck?.(B)}),B}).catch((J)=>{let U=J instanceof Error?J.message:String(J);throw this.dispatchObserverCallbacks((Y)=>{Y.onErrorNotice?.(RF4(U))}),J});return this.retryConnectIfTerminallyDisconnected("user message sent"),D}retryConnectIfTerminallyDisconnected(A){if(this.getConnectionInfo().state!=="disconnected")return;this.retryConnect(A)}removeQueuedMessage(A){this.dispatchObserverCallbacks((Q)=>{Q.onUserActionMessageDeliveryStatusChanged?.(A,"buffered",Date.now())}),this.outbox.send({type:"client_remove_queued_msg",queuedMessageId:A}),this.retryConnectIfTerminallyDisconnected("queued message remove requested")}steerQueuedMessage(A){this.outbox.send({type:"client_steer_queued_msg",queuedMessageId:A}),this.retryConnectIfTerminallyDisconnected("queued message steer requested")}editUserMessage(A,Q,$,B,E){this.outbox.send({type:"client_edit_message",messageId:A,editId:$,content:eD(Q),agentMode:B,reasoningEffort:E?.reasoningEffort}),this.retryConnectIfTerminallyDisconnected("user message edit requested")}markMessageRead(A){this.send({type:"client_mark_message_read",messageId:A})}markMessageUnread(A){this.send({type:"client_mark_message_unread",messageId:A})}setThreadTitle(A){let Q={type:"client_set_thread_title",title:A};if(this.threadActorTransport==="amp-rpc")return this.send(Q),Promise.resolve();return this.request("client_set_thread_title",Q).then(()=>{return})}upsertNotificationSubscription(A,Q){this.send({type:"client_upsert_notification_subscription",subscription:A,threadURL:Q})}readDirectory(A){return this.requestReadDirectory(A)}readFile(A){return this.requestReadFile(A)}runGitOperation(A){return this.requestGitOperation(A)}resumeFromVersion(A){this.resumeCursor.reset(A),this.updateResumeState({state:"replaying",version:A});let Q={type:"client_resume",version:A};try{if(this.threadActorTransport==="amp-rpc")return this.send(Q),this.updateResumeState({state:"idle",version:this.getResumeVersion()}),Promise.resolve();return this.request("client_resume",Q).then(()=>{return}).finally(()=>this.updateResumeState({state:"idle",version:this.getResumeVersion()}))}catch($){throw this.updateResumeState({state:"idle",version:this.getResumeVersion()}),$}}retryAgentLoop(){this.send({type:"client_retry"})}dismissActiveError(A){let Q=A===void 0?{}:{seq:A};if(!this.canSendClientMessage()){this.pendingDismissActiveError=Q;return}this.pendingDismissActiveError=null,this.send({type:"client_dismiss_active_error",...Q})}cancelAgentLoop(){if(!this.canSendClientMessage()){this.pendingCancelAgentLoop=!0,this.retryConnectIfTerminallyDisconnected("agent loop cancel requested");return}this.pendingCancelAgentLoop=!1,this.send({type:"client_cancel"})}appendManualBashInvocation(A){this.send({type:"client_append_manual_bash_invocation",args:eD(A.args),run:eD(A.run),hidden:A.hidden})}resolveToolApproval(A,Q,$){this.send({type:"client_tool_approval_response",toolCallId:A,accepted:Q,input:$})}requestExecutorSpawn(A,Q){let $={type:"client_spawn_executor",requestId:A,repositoryURL:Q?.repositoryURL,projectID:Q?.projectID,additionalRepositories:Q?.additionalRepositories};if(this.threadActorTransport==="amp-rpc")return this.send($),Promise.resolve(null);return this.request("client_spawn_executor",$).then((B)=>{let E=iN.safeParse(B);return E.success&&E.data.type==="executor_status"?E.data:null})}executePluginCommand(A,Q,$,B){this.sendPluginMessage({type:"request",id:A,method:"command.execute",params:{pluginName:Q,commandId:$,threadID:B}})}executorHandshake(A,Q,$){if(this.disposed)throw new dQ("Transport is disposed");if(!this.hasOpenSocket()){if(this.getConnectionInfo().state==="connected")this.forceReconnect("executor handshake attempted without open socket");throw new dQ("WebSocket is not connected. Call connect() first.")}let B=performance.now(),E=60000,D={clientId:A,handshakeSeq:$?.handshakeSeq,executorType:$?.executorType,timeoutMs:E};return this.log.info("[thread-client] Starting executor handshake",{...D,connectionState:this.getConnectionInfo().state}),new Promise((J,U)=>{let Y=!1,Z=null,F=null,X=()=>Math.round(performance.now()-B),I=(W,C,H)=>{let N=this.getConnectionInfo();this.log.error(W,{...D,durationMs:X(),connectionState:N.state,role:N.role,reconnectCauseType:N.reconnectCause?.type,reconnectCode:N.reconnectCause?.code,reconnectReason:N.reconnectCause?.reason,error:C,...H})},G=(W)=>{this.log.info("[thread-client] Executor handshake completed",{...D,durationMs:X(),executorId:W.executorId,registeredToolCount:W.registeredToolCount,resumeBootstrap:W.resumeBootstrap}),K(()=>J(W))},V=(W)=>{let C=new Oc(W.message,W.code,W);I("[thread-client] Executor handshake rejected by server",C,{code:W.code}),K(()=>U(C))},K=(W)=>{if(Y)return;if(Y=!0,Z)clearTimeout(Z),Z=null;this.executorConnectedListeners.delete(G),this.executorErrorListeners.delete(V),F?.unsubscribe(),W()};this.executorConnectedListeners.add(G),this.executorErrorListeners.add(V),F=this.connectionChanges().subscribe({next:(W)=>{if(W.state==="connected")return;let C=new dQ(W.state==="reconnecting"?"Executor handshake interrupted by reconnect":"Executor handshake interrupted by disconnect");I("[thread-client] Executor handshake interrupted",C),K(()=>U(C))}});let z={type:"executor_connect",clientId:A,handshakeSeq:$?.handshakeSeq,capabilities:Q,executorType:$?.executorType};this.request("executor_connect",z).catch((W)=>{I("[thread-client] Executor handshake rejected by server",W),K(()=>U(W))}),Z=setTimeout(()=>{let W=Error("Executor connect timeout");I("[thread-client] Executor handshake timed out",W),K(()=>U(W))},E)})}downgradeExecutorRequirementToObserver(){let A=this.getConnectionInfo();if(A.requiredRole!=="executor")throw Error("Cannot downgrade a thread client that is not waiting for executor role");if(A.role==="executor")throw Error("Cannot downgrade a thread client that already has executor role");this.updateSessionState(($)=>({...$,requiredRole:"observer"})),this.clearExecutorCallbacks();let Q=this.getConnectionInfo();if(this.log.info("[thread-client] Executor role requirement downgraded to observer",{previousRequiredRole:A.requiredRole,nextRequiredRole:Q.requiredRole,state:Q.state,role:Q.role}),rB(Q))this.flushPendingReadyWork();this.emitConnectionChanged()}ackToolLease(A){this.send({type:"executor_tool_lease_ack",toolCallId:A})}sendToolProgress(A,Q){let $=OP(Q,"snapshot");this.send({type:"tool_progress",toolCallId:A,progress:$})}sendExecutorToolResult(A,Q,$){let B={type:"executor_tool_result",toolCallId:A,run:Q};if($!==void 0)B.workspaceChanged=$;this.send(B)}sendExecutorFileSystemReadDirectoryResult(A,Q){this.send({type:"executor_filesystem_read_directory_result",requestId:A,...Q})}sendExecutorFileSystemReadFileResult(A,Q){this.send({type:"executor_filesystem_read_file_result",requestId:A,...Q})}sendExecutorGitCommandResult(A,Q){this.send({type:"executor_git_command_result",requestId:A,...Q})}sendExecutorToolApprovalRequest(A){this.send({type:"executor_tool_approval_request",approval:A})}sendPluginMessage(A){let Q,$;if(A.type==="request")$=A.invocation,Q={type:"request",id:A.id,method:A.method,params:A.params};else if(A.type==="event"){if($=A.invocation,Q={type:"event",event:A.event,data:A.data},A.span!==void 0)Q.span=A.span}else Q=A;let B={type:"executor_plugin_message",message:Q};if($!==void 0)B.invocation=$;this.send(B)}sendExecutorGuidanceSnapshot(A){this.send({type:"executor_guidance_snapshot",...A})}sendExecutorGuidanceDiscovery(A){this.send({type:"executor_guidance_discovery",...A})}sendExecutorSkillSnapshot(A){this.send({type:"executor_skill_snapshot",...A})}sendClientUpdateThreadSettings(A){if(!this.canSendClientMessage()){this.pendingThreadSettings=A;return}try{this.pendingThreadSettings=null,this.send({type:"client_update_thread_settings",settings:A})}catch(Q){if(!this.canSendClientMessage()){this.pendingThreadSettings=A;return}throw Q}}registerTools(A){this.send({type:"executor_tools_register",tools:A})}sendExecutorToolsBootstrapComplete(A,Q){this.send({type:"executor_tools_bootstrap_complete",ok:A,error:Q})}sendEnvironmentSnapshot(A){this.send({type:"executor_environment_snapshot",environment:A}),this.environmentSubject.next(A)}sendEnvironmentUpdate(A){this.send({type:"executor_environment_update",environment:A}),this.environmentSubject.next(A)}environmentChanges(){return this.environmentSubject}getEnvironmentSnapshot(){return this.environmentSubject.getValue()}unregisterTools(A){this.send({type:"executor_tools_unregister",toolNames:A})}dispose(){if(this.disposed)return;super.dispose(),this.connectionSubject.complete(),this.threadIDSubscription.unsubscribe(),this.pendingThreadSettings=null,this.outbox.reset(),this.optimisticUserMessages.reset(),this.pendingCancelAgentLoop=!1,this.pendingDismissActiveError=null,this.pendingObserverDispatches.length=0,this.pendingExecutorDispatches.length=0,this.resumeCursor=rf0(0),this.updateResumeState({state:"idle",version:0}),this.wasConnectionReady=!1,this.environmentSubject.complete(),this.sessionStateSubject.complete(),this.resumeStateSubject.complete(),this.rejectPendingExecutorRequests("Transport disposed"),this.rejectPendingJSONRPCRequests("Transport disposed")}updateConnectionState(A){if(super.updateConnectionState(A),this.updateSessionTransportInfo(),this.flushPendingReadyWork(),this.emitConnectionChanged(),A==="reconnecting"||A==="disconnected")this.rejectPendingExecutorRequests("Connection closed before executor request completed"),this.suspendPendingJSONRPCRequests()}onRawMessage(A){let Q=riQ(A);if(Q){this.handleJSONRPCResponse(Q);return}let $=oiQ(A);if($){H30(this.log,$,{frameMessageCount:1,frameMessageIndex:0,frameLength:A.length}),this.handleServerMessage($);return}let B=ZF4(A);if(B.length===0){Ux0(this.log,A.length);return}for(let[E,D]of B.entries())H30(this.log,D,{frameMessageCount:B.length,frameMessageIndex:E,frameLength:A.length}),this.handleServerMessage(D)}onWebSocketTraffic(A){let Q=this.getSessionState();if(Q.requiredRole!=="observer"||Q.role!==null)return;this.updateSessionState(($)=>({...$,role:"observer"})),this.flushPendingReadyWork(),this.emitConnectionChanged()}onMaxReconnectExceeded(A){this.dispatchObserverCallbacks((Q)=>{Q.onErrorNotice?.({type:"error",message:`Failed to reconnect after ${A} attempts`,code:"MAX_RECONNECT_EXCEEDED"})})}handleServerMessage(A){switch(this.advanceResumeCursor(A),this.reconcileOptimisticUserMessage(A),this.outbox.handleServerMessage(A),A.type){case"agent_state":this.dispatchObserverCallbacks((Q)=>{Q.onAgentState?.(A)});break;case"inference_tools":this.dispatchObserverCallbacks((Q)=>{Q.onInferenceTools?.(A)});break;case"thread_settings":this.dispatchObserverCallbacks((Q)=>{Q.onThreadSettings?.(A)});break;case"error":this.dispatchObserverCallbacks((Q)=>{Q.onErrorNotice?.(A)});break;case"error_set":case"error_cleared":this.dispatchObserverCallbacks((Q)=>{Q.onActiveError?.(A)});break;case"cancelled":this.dispatchObserverCallbacks((Q)=>{Q.onCancelled?.(A)});break;case"retry_scheduled":case"retry_started":case"retry_cancelled":this.dispatchObserverCallbacks((Q)=>{Q.onRetryEvent?.(A)});break;case"delta":this.dispatchObserverCallbacks((Q)=>{Q.onDelta?.(A)});break;case"message_updated":this.dispatchObserverCallbacks((Q)=>{Q.onMessageUpdated?.(A)});break;case"edit_rejected":this.dispatchObserverCallbacks((Q)=>{Q.onEditRejected?.(A)});break;case"executor_connected":this.updateSessionState((Q)=>({...Q,role:"executor",clientId:A.executorId})),this.flushPendingReadyWork(),this.emitConnectionChanged(),this.dispatchObserverCallbacks((Q)=>{Q.onExecutorConnected?.(A)});for(let Q of this.executorConnectedListeners)Q(A);break;case"tool_lease":this.dispatchExecutorCallbacks((Q)=>{Q.onToolLease?.(A)});break;case"executor_filesystem_read_directory":this.dispatchExecutorCallbacks((Q)=>{Q.onFileSystemReadDirectoryRequest?.(A)});break;case"executor_filesystem_read_file":this.dispatchExecutorCallbacks((Q)=>{Q.onFileSystemReadFileRequest?.(A)});break;case"executor_git_command":this.dispatchExecutorCallbacks((Q)=>{Q.onGitCommandRequest?.(A)});break;case"executor_tool_lease_revoked":this.dispatchExecutorCallbacks((Q)=>{Q.onToolLeaseRevoked?.(A)});break;case"executor_tool_result_ack":this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorToolResultAck?.(A)});break;case"tool_approval_queue":this.dispatchObserverCallbacks((Q)=>{Q.onToolApprovalQueue?.(A)});break;case"plugin_message":this.dispatchObserverCallbacks((Q)=>{Q.onPluginMessage?.(A)}),this.dispatchExecutorCallbacks((Q)=>{Q.onPluginMessage?.(A)});break;case"executor_tool_approval_response":this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorToolApprovalResponse?.(A)});break;case"tool_progress":this.dispatchObserverCallbacks((Q)=>{Q.onToolProgress?.(A)});break;case"executor_error":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorError?.(A)}),this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorError?.(A)});for(let Q of this.executorErrorListeners)Q(A);break;case"observers":this.dispatchObserverCallbacks((Q)=>{Q.onObservers?.(A)});break;case"executor_status":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorStatus?.(A)});break;case"environment_update":this.environmentSubject.next(A.environment),this.dispatchObserverCallbacks((Q)=>{Q.onEnvironmentUpdate?.(A)});break;case"executor_workspace_maybe_changed":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorWorkspaceMaybeChanged?.(A)});break;case"thread_title":this.dispatchObserverCallbacks((Q)=>{Q.onThreadTitle?.(A)});break;case"thread_relationships":this.dispatchObserverCallbacks((Q)=>{Q.onThreadRelationships?.(A)});break;case"thread_truncated":this.dispatchObserverCallbacks((Q)=>{Q.onTruncate?.(A)});break;case"client_filesystem_read_directory_result":this.handleReadDirectoryResult(A);break;case"client_filesystem_read_file_result":this.handleReadFileResult(A);break;case"client_git_command_result":this.handleGitCommandResult(A);break;case"compaction_started":case"compaction_complete":case"compaction_records":this.dispatchObserverCallbacks((Q)=>{Q.onCompactionEvent?.(A)});break;case"thread_status":break}}flushPendingReadyWork(){if(!rB(this.getConnectionInfo())){this.wasConnectionReady=!1;return}if(this.wasConnectionReady)return;this.wasConnectionReady=!0,this.flushPendingThreadSettings(),this.retryPendingJSONRPCRequests(),this.outbox.retry(),this.flushPendingCancelAgentLoop(),this.flushPendingDismissActiveError()}flushPendingThreadSettings(){if(!this.pendingThreadSettings||!this.canSendClientMessage())return;let A=this.pendingThreadSettings;try{this.pendingThreadSettings=null,this.send({type:"client_update_thread_settings",settings:A})}catch{if(!this.canSendClientMessage())this.pendingThreadSettings=A}}flushPendingCancelAgentLoop(){if(!this.pendingCancelAgentLoop||!this.canSendClientMessage())return;try{this.send({type:"client_cancel"}),this.pendingCancelAgentLoop=!1}catch{if(this.canSendClientMessage())this.pendingCancelAgentLoop=!1}}flushPendingDismissActiveError(){if(!this.pendingDismissActiveError||!this.canSendClientMessage())return;try{this.send({type:"client_dismiss_active_error",...this.pendingDismissActiveError}),this.pendingDismissActiveError=null}catch{if(this.canSendClientMessage())this.pendingDismissActiveError=null}}reconcileOptimisticUserMessage(A){switch(A.type){case"agent_state":this.optimisticUserMessages.setAgentLoopState(A.state);return;case"message_added":this.optimisticUserMessages.reconcileMessageAdded(A);return;case"queued_messages":this.optimisticUserMessages.reconcileQueuedMessagesSnapshot(A);return;case"queued_message_added":this.optimisticUserMessages.reconcileQueuedMessageAdded(A);return;case"queued_message_dequeued":this.optimisticUserMessages.reconcileQueuedMessageRemoved(A);return;case"queued_message_removed":this.optimisticUserMessages.reconcileQueuedMessageRemoved(A);return;default:return}}trySendOutboxMessage(A){if(!this.canSendClientMessage())return!1;try{return this.send(A),!0}catch(Q){let $=Q instanceof Error?Q.message:String(Q);return this.dispatchObserverCallbacks((B)=>{B.onErrorNotice?.(RF4($))}),!1}}canSendClientMessage(){return this.hasOpenSocket()&&rB(this.getConnectionInfo())}emitConnectionChanged(){let A=this.getConnectionInfo();this.log.info("[thread-client] Emitting connection change callbacks",{state:A.state,role:A.role,clientId:A.clientId,reconnectCauseType:A.reconnectCause?.type,reconnectCode:A.reconnectCause?.code,reconnectReason:A.reconnectCause?.reason,hasExecutorCallbacks:this.executorCallbacks!==null,hasObserverCallbacks:this.observerCallbacks!==null,pendingExecutorDispatches:this.pendingExecutorDispatches.length,pendingObserverDispatches:this.pendingObserverDispatches.length}),this.dispatchExecutorCallbacks((Q)=>{Q.onConnectionChange?.(A)}),this.dispatchObserverCallbacks((Q)=>{Q.onConnectionChanged?.(A)})}dispatchObserverCallbacks(A){let Q=this.observerCallbacks;if(!Q){this.pendingObserverDispatches.push(A);return}A(Q)}dispatchExecutorCallbacks(A){let Q=this.executorCallbacks;if(!Q){if(this.executorCallbacksCleared)return;this.pendingExecutorDispatches.push(A);return}A(Q)}requestReadDirectory(A){let Q=this.nextFileSystemRequestID("read-directory");return this.createPendingRequest(this.pendingReadDirectoryRequests,Q,()=>{let $={type:"client_filesystem_read_directory",requestId:Q,uri:A};return this.request("client_filesystem_read_directory",$)},Hf0,"Filesystem request timed out")}requestReadFile(A){let Q=this.nextFileSystemRequestID("read-file");return this.createPendingRequest(this.pendingReadFileRequests,Q,()=>{let $={type:"client_filesystem_read_file",requestId:Q,uri:A};return this.request("client_filesystem_read_file",$)},Hf0,"Filesystem request timed out")}requestGitOperation(A){let Q=this.nextGitCommandRequestID();return this.createPendingRequest(this.pendingGitCommandRequests,Q,()=>{let $={type:"client_git_command",requestId:Q,operation:A};return this.request("client_git_command",$)},pZ4,"Git command request timed out")}createPendingRequest(A,Q,$,B,E){if(!this.hasOpenSocket())return Promise.reject(new dQ("WebSocket is not connected"));return new Promise((D,J)=>{let U=setTimeout(()=>{A.delete(Q),J(new dQ(`${E}: ${Q}`))},B);A.set(Q,{resolve:D,reject:J,timeoutID:U});try{Promise.resolve($()).catch((Y)=>{if(!A.has(Q))return;clearTimeout(U),A.delete(Q),J(Y instanceof Error?Y:Error(String(Y)))})}catch(Y){clearTimeout(U),A.delete(Q),J(Y instanceof Error?Y:Error(String(Y)))}})}nextFileSystemRequestID(A){let Q=this.fileSystemRequestCounter++;return`${A}-${Date.now()}-${Q}`}nextGitCommandRequestID(){let A=this.gitCommandRequestCounter++;return`git-command-${Date.now()}-${A}`}handleReadDirectoryResult(A){let Q=this.pendingReadDirectoryRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingReadDirectoryRequests.delete(A.requestId),A.ok&&A.entries){Q.resolve(A.entries);return}if(A.ok){Q.reject(Error("Invalid filesystem read_directory response: missing entries"));return}if(!A.error){Q.reject(Error("Invalid filesystem read_directory response: missing error"));return}Q.reject(this.createFileSystemError(A.error))}handleReadFileResult(A){let Q=this.pendingReadFileRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingReadFileRequests.delete(A.requestId),!A.ok&&A.error){Q.reject(this.createFileSystemError(A.error));return}if(!A.ok){Q.reject(Error("Invalid filesystem read_file response: missing error"));return}if(A.contentBase64===void 0){Q.reject(Error("Invalid filesystem read_file response: missing content"));return}try{Q.resolve(liQ(A.contentBase64))}catch{Q.reject(Error("Invalid base64 payload in filesystem read_file response"))}}handleGitCommandResult(A){let Q=this.pendingGitCommandRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingGitCommandRequests.delete(A.requestId),A.ok){if(A.exitCode===void 0||A.stdout===void 0||A.stderr===void 0){Q.reject(Error("Invalid git command response: missing result fields"));return}Q.resolve({exitCode:A.exitCode,stdout:A.stdout,stderr:A.stderr});return}if(!A.error){Q.reject(Error("Invalid git command response: missing error"));return}Q.reject(Error(`Git command error (${A.error.code}): ${A.error.message}`))}createFileSystemError(A){return Error(`Filesystem error (${A.code}): ${A.message}`)}rejectPendingExecutorRequests(A){for(let[Q,$]of this.pendingReadDirectoryRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingReadDirectoryRequests.delete(Q);for(let[Q,$]of this.pendingReadFileRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingReadFileRequests.delete(Q);for(let[Q,$]of this.pendingGitCommandRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingGitCommandRequests.delete(Q)}rejectPendingJSONRPCRequests(A){for(let Q of this.queuedJSONRPCRequests){if(Q.timeoutID!==null)clearTimeout(Q.timeoutID),Q.timeoutID=null;Q.reject(new dQ(A))}this.pendingJSONRPCRequests.clear(),this.queuedJSONRPCRequests.clear()}suspendPendingJSONRPCRequests(){for(let A of this.queuedJSONRPCRequests){if(A.timeoutID!==null)clearTimeout(A.timeoutID),A.timeoutID=null;if(A.requestId!==null)this.pendingJSONRPCRequests.delete(A.requestId),A.requestId=null}}retryPendingJSONRPCRequests(){for(let A of this.queuedJSONRPCRequests)if(A.requestId===null)this.trySendJSONRPCRequest(A)}handleJSONRPCResponse(A){let Q=this.pendingJSONRPCRequests.get(A.id);if(!Q)return;if(this.pendingJSONRPCRequests.delete(A.id),this.queuedJSONRPCRequests.delete(Q),Q.timeoutID!==null)clearTimeout(Q.timeoutID),Q.timeoutID=null;if(Q.requestId=null,"error"in A&&A.error){Q.reject(siQ(A.error));return}Q.resolve("result"in A?A.result:void 0)}advanceResumeCursor(A){if(!("seq"in A)||!Number.isFinite(A.seq))return;let Q=this.resumeCursor.getVersion();this.resumeCursor.advanceFromSeq(A.seq);let $=this.resumeCursor.getVersion();if($===Q)return;this.updateSessionState((B)=>({...B,resume:{...B.resume,version:$}}))}send(A){try{let Q=this.threadActorTransport==="json-rpc"?iiQ(A):BF4.encode(A);this.sendRaw(Q)}catch(Q){let $=Q instanceof Error?Q.message:String(Q);throw new dQ(`Failed to encode thread-protocol message "${A.type}": ${$}`,Q)}}request(A,Q){if(this.threadActorTransport!=="json-rpc")return this.send(Q),Promise.resolve(null);return new Promise(($,B)=>{let E={method:A,message:Q,resolve:$,reject:B,timeoutID:null,requestId:null};this.queuedJSONRPCRequests.add(E),this.trySendJSONRPCRequest(E)})}trySendJSONRPCRequest(A){if(!this.hasOpenSocket()||A.requestId!==null)return;let Q=aiQ(this.jsonRPCRequestCounter++),$=setTimeout(()=>{this.pendingJSONRPCRequests.delete(Q),this.queuedJSONRPCRequests.delete(A),A.requestId=null,A.timeoutID=null,A.reject(new dQ(`JSON-RPC request timed out: ${Q}`))},biQ);A.requestId=Q,A.timeoutID=$,this.pendingJSONRPCRequests.set(Q,A);try{this.sendRaw(niQ(A.method,A.message,Q))}catch(B){clearTimeout($),this.pendingJSONRPCRequests.delete(Q),this.queuedJSONRPCRequests.delete(A),A.requestId=null,A.timeoutID=null,A.reject(B instanceof Error?B:Error(String(B)))}}}function LP(A,Q={}){let $=!1,B=!1;return A.connectionChanges().subscribe({next:(E)=>{let D=Q.requireRole??E.requiredRole,J=rB({state:E.state,role:E.role,requiredRole:D});if(J&&!$){if(B)A.resumeFromVersion(A.getResumeVersion()).catch((U)=>{Q.onError?.({threadID:A.getThreadId(),error:U})});B=!0}$=J}})}xA();function Zx0(A){return{...A,pendingRemoval:!0}}function vF4(A,Q){if(Q.find((B)=>B.queuedMessage.messageId===A.queuedMessage.messageId)?.pendingRemoval!==!0)return A;return Zx0(A)}function TF4(A,Q,$){if(Q.type==="queued_messages")return Q.messages.map((B)=>vF4(B,A));if(Q.type==="queued_message_added"){if(A.find((E)=>E.queuedMessage.messageId===Q.message.queuedMessage.messageId)&&$.dedupeAdded)return[...A];return[...A,vF4(Q.message,A)]}if(!A.some((B)=>B.queuedMessage.messageId===Q.queuedMessageId))return[...A];return A.filter((B)=>B.queuedMessage.messageId!==Q.queuedMessageId)}function _F4(A){if(A.connectionState==="disconnected")return"disconnected";if(A.compactionState==="compacting")return"compacting";if(A.connectionState!=="connected")return"connecting";if(!A.connectionReady)return"preparing_thread";if(A.firstThreadSendPhase==="pending")return"sending";if(A.firstThreadSendPhase==="acked"&&A.agentLoopState==="idle")return"working";switch(A.agentLoopState){case"awaiting_approval":return"awaiting_approval";case"tool_use":case"running_tools":return"running_tools";case"streaming":return A.streamingBlockKind==="thinking"?"thinking":"streaming";case"working":return"working";case"error":return"error";case"idle":if(A.pendingSend)return"sending";if(A.executorStatus?.status==="starting")return"waiting_for_executor";if(A.expectingAgentLoop)return"working";return"idle"}}function jP(A){let Q=0;for(let $=0;$<A.length;$++){let B=A.codePointAt($)??0;if(B<128)Q+=1;else if(B<2048)Q+=2;else if(B<65536)Q+=3;else Q+=4,$++}return Q}function tiQ(A){if(A.complete)return jP(JSON.stringify(A.input));let Q=A.inputPartialJSON?.json;if(typeof Q==="string")return jP(Q);return jP(JSON.stringify(A.input))}var SF4={state:"disconnected",role:null,requiredRole:null,clientId:null},eiQ=750;function fF4(A){switch(A.type){case"thinking":case"redacted_thinking":return"thinking";case"text":if(A.hidden===!0)return null;return"text";case"tool_use":case"server_tool_use":return"tool_use"}}function AnQ(A,Q){let $=Q;for(let B of A){let E=fF4(B);if(E===null)continue;if(E==="thinking"&&$!==null)continue;$=E}return $}function kF4(A){return"blockState"in A?A.blockState:void 0}function QnQ(A){return A.seq===bc}class N30{connectionInfo;agentLoopState;pendingSend=new K4(!1);streamingBlockKind=new K4(null);activeStreamingBlockKinds=new Map;expectingAgentLoop=!1;expectingAgentLoopTimer=null;hasSeenThreadMessage=!1;firstThreadSendPhase="none";status=new K4("idle");stageBytes=new K4(null);currentStage=null;currentStageBytes=0;toolBlockLatestBytes=new Map;queuedMessages=new K4([]);pendingApprovals=new K4([]);lastError=new K4(null);activeError=new K4(null);cancelledMessageId=new K4(null);retryState=new K4(null);executorError=new K4(null);observers=new K4(null);executorStatus=new K4(null);environment=new K4(null);compactionState=new K4("idle");compactionRecords=new K4([]);threadSettings;threadTitle=new K4(void 0);threadId=new K4(null);messageAddedEvents=new w4;messageRemovedEvents=new w4;messageUpdatedEvents=new w4;deltaEvents=new w4;toolProgressEvents=new w4;truncateEvents=new w4;pluginMessages=new w4;pluginUIRequests=new K4([]);pluginUIRequestsByID=new Map;now;dedupeQueuedMessageAdds;compactionRecordsState;constructor(A={}){this.connectionInfo=new K4(A.initialConnectionInfo??SF4),this.agentLoopState=new K4(A.initialAgentLoopState??"idle"),this.threadSettings=new K4(A.initialThreadSettings??null),this.dedupeQueuedMessageAdds=A.dedupeQueuedMessageAdds??!0,this.compactionRecordsState=A.compactionRecordsState??null,this.now=A.now??(()=>new Date().toISOString()),this.recomputeStatus()}callbacks(){return this}recomputeStatus(){let A=this.connectionInfo.getValue(),Q=_F4({connectionState:A.state,connectionReady:rB(A),compactionState:this.compactionState.getValue(),pendingSend:this.pendingSend.getValue(),executorStatus:this.executorStatus.getValue(),agentLoopState:this.agentLoopState.getValue(),streamingBlockKind:this.streamingBlockKind.getValue(),expectingAgentLoop:this.expectingAgentLoop,firstThreadSendPhase:this.firstThreadSendPhase});if(Q!==this.status.getValue())this.status.next(Q);this.syncStageBytes(Q)}syncStageBytes(A){let Q=A==="thinking"||A==="streaming"?A:null;if(Q===this.currentStage)return;this.currentStage=Q,this.currentStageBytes=0,this.toolBlockLatestBytes.clear(),this.stageBytes.next(Q===null?null:{stage:Q,bytes:0})}onConnectionChanged(A){if(!rB(A)){if(this.clearExpectingAgentLoop(),A.state!=="connected")this.clearFirstThreadSendPhase()}this.connectionInfo.next(A),this.recomputeStatus()}onAgentState(A){let Q=c3(A.state);if(A.state!=="idle")this.clearFirstThreadSendPhase();if(Q)this.pendingSend.next(!1);if(A.state==="idle")this.clearStreamingBlockKind();this.clearExpectingAgentLoop(),this.agentLoopState.next(A.state),this.recomputeStatus()}onUserMessageSendPending(A,Q){if(!this.hasSeenThreadMessage)this.firstThreadSendPhase="pending";this.pendingSend.next(!0),this.recomputeStatus()}onUserMessageSendAck(A){if(this.firstThreadSendPhase==="pending")this.firstThreadSendPhase="acked";if(this.pendingSend.next(!1),!c3(this.agentLoopState.getValue()))this.scheduleExpectingAgentLoop();this.recomputeStatus()}scheduleExpectingAgentLoop(){this.clearExpectingAgentLoopTimer(),this.expectingAgentLoop=!0,this.expectingAgentLoopTimer=setTimeout(()=>{this.expectingAgentLoopTimer=null,this.expectingAgentLoop=!1,this.recomputeStatus()},eiQ)}clearFirstThreadSendPhase(){this.firstThreadSendPhase="none"}clearExpectingAgentLoop(){this.clearExpectingAgentLoopTimer(),this.expectingAgentLoop=!1}clearExpectingAgentLoopTimer(){if(this.expectingAgentLoopTimer!==null)clearTimeout(this.expectingAgentLoopTimer),this.expectingAgentLoopTimer=null}onThreadSettings(A){this.threadSettings.next(A.settings)}onMessageAdded(A){if(!QnQ(A))this.hasSeenThreadMessage=!0;this.messageAddedEvents.next(A)}onMessageRemoved(A){this.messageRemovedEvents.next(A)}onMessageUpdated(A){this.messageUpdatedEvents.next(A)}onDelta(A){if(A.role==="assistant")this.clearFirstThreadSendPhase();this.updateStreamingBlockKinds(A),this.accumulateStageBytes(A),this.deltaEvents.next(A)}accumulateStageBytes(A){if(A.role!=="assistant")return;if(this.currentStage===null)return;let Q=A.blocks;if(!Q||Q.length===0)return;let $=A.blockIndex??0,B=0;for(let[E,D]of Q.entries())if(this.currentStage==="streaming"){if(D.type==="text"&&D.hidden!==!0)B+=jP(D.text);else if(D.type==="tool_use"){let J=$+E;if(X30(D)){let Z=jP(D.inputPartialJSONDelta.json);B+=Z,this.toolBlockLatestBytes.set(J,(this.toolBlockLatestBytes.get(J)??0)+Z);continue}let U=tiQ(D),Y=this.toolBlockLatestBytes.get(J)??0;if(U>Y)B+=U-Y,this.toolBlockLatestBytes.set(J,U)}}else if(this.currentStage==="thinking"&&D.type==="thinking")B+=jP(D.thinking);if(B===0)return;this.currentStageBytes+=B,this.stageBytes.next({stage:this.currentStage,bytes:this.currentStageBytes})}updateStreamingBlockKinds(A){if(A.role!=="assistant")return;let Q=this.status.getValue(),$=this.streamingBlockKind.getValue(),B=!1;if(A.state==="start")B=this.clearStreamingBlockKind();let E=A.blocks;if(!E){if(B)this.recomputeStatus(),this.resetCurrentStageBytesIfKindChangedWithinStage(Q,$);return}if(E.some((D)=>kF4(D)!==void 0))B=this.applyStreamingBlockLifecycle(E,A.blockIndex??0)||B;else{let D=AnQ(E,this.streamingBlockKind.getValue());if(D!==this.streamingBlockKind.getValue())this.streamingBlockKind.next(D),B=!0}if(B)this.recomputeStatus(),this.resetCurrentStageBytesIfKindChangedWithinStage(Q,$)}resetCurrentStageBytesIfKindChangedWithinStage(A,Q){if(this.status.getValue()!==A)return;if(this.streamingBlockKind.getValue()===Q)return;this.resetCurrentStageBytes()}resetCurrentStageBytes(){if(this.currentStage===null)return;this.currentStageBytes=0,this.toolBlockLatestBytes.clear(),this.stageBytes.next({stage:this.currentStage,bytes:0})}applyStreamingBlockLifecycle(A,Q){let $=!1;for(let[B,E]of A.entries()){let D=fF4(E),J=kF4(E);if(D===null||J===void 0)continue;let U=Q+B;if(J==="complete")$=this.activeStreamingBlockKinds.delete(U)||$;else if(this.activeStreamingBlockKinds.get(U)!==D)this.activeStreamingBlockKinds.set(U,D),$=!0}return this.syncStreamingBlockKind()||$}clearStreamingBlockKind(){let A=this.activeStreamingBlockKinds.size>0;if(this.activeStreamingBlockKinds.clear(),this.streamingBlockKind.getValue()===null)return A;return this.streamingBlockKind.next(null),!0}syncStreamingBlockKind(){let A=this.deriveStreamingBlockKind();if(A===this.streamingBlockKind.getValue())return!1;return this.streamingBlockKind.next(A),!0}deriveStreamingBlockKind(){let A=-1,Q=null;for(let[$,B]of this.activeStreamingBlockKinds)if($>A)A=$,Q=B;return Q}onToolProgress(A){this.toolProgressEvents.next(A)}onTruncate(A){this.truncateEvents.next(A)}onPluginMessage(A){if(this.applyPluginUIStateEvent(A))return;this.pluginMessages.next(A)}applyPluginUIStateEvent(A){let Q=A.message;if(Q.type!=="event")return!1;if(Q.event==="plugin.ui.snapshot"){let $=Q.data?.requests;if(!Array.isArray($))return!1;this.pluginUIRequestsByID.clear();for(let B of $)this.pluginUIRequestsByID.set(B.requestId,B);return this.emitPluginUIRequestsSnapshot(),!0}if(Q.event==="plugin.ui.request_added"||Q.event==="plugin.ui.request_settled"){let $=Q.data?.request;if(!$)return!1;return this.pluginUIRequestsByID.set($.requestId,$),this.emitPluginUIRequestsSnapshot(),!0}if(Q.event==="plugin.ui.request_removed"){let $=Q.data?.requestId;if(typeof $!=="string")return!1;if(this.pluginUIRequestsByID.delete($))this.emitPluginUIRequestsSnapshot();return!0}return!1}emitPluginUIRequestsSnapshot(){this.pluginUIRequests.next([...this.pluginUIRequestsByID.values()])}onQueuedMessages(A){this.queuedMessages.next(TF4(this.queuedMessages.getValue(),A,{dedupeAdded:this.dedupeQueuedMessageAdds}))}onUserActionMessageDeliveryStatusChanged(A,Q,$){if(Q!=="buffered")return;let B=this.queuedMessages.getValue(),E=B.findIndex((U)=>U.queuedMessage.messageId===A);if(E===-1)return;let D=B[E];if(!D)return;let J=[...B];J[E]=Zx0(D),this.queuedMessages.next(J)}onToolApprovalQueue(A){this.pendingApprovals.next(A.approvals)}onErrorNotice(A){this.clearPendingSendIfIdle(),this.lastError.next(A),this.recomputeStatus()}onActiveError(A){if(A.type==="error_set")this.clearFirstThreadSendPhase(),this.clearPendingSendIfIdle(),this.compactionState.next("idle");this.cancelledMessageId.next(null),this.activeError.next(A.type==="error_set"?A.error:null),this.recomputeStatus()}onCancelled(A){this.cancelledMessageId.next(A.messageId??null),this.activeError.next(null)}onExecutorError(A){this.executorError.next(A)}onRetryEvent(A){this.retryState.next(A)}onObservers(A){this.observers.next({count:A.count,observers:A.observers,hasExecutor:A.hasExecutor??!1})}onExecutorStatus(A){if(this.executorStatus.next(A),A.status==="running")this.executorError.next(null);this.recomputeStatus()}onEnvironmentUpdate(A){this.environment.next(A.environment)}onCompactionEvent(A){if(A.type==="compaction_started"){this.compactionState.next("compacting"),this.recomputeStatus();return}if(A.type==="compaction_complete"){if(this.compactionState.next("idle"),A.cutMessageId!==void 0)this.addCompactionRecord({cutMessageId:A.cutMessageId,createdAt:this.now()});this.recomputeStatus();return}if(this.compactionRecords.next(A.records),this.compactionRecordsState!==null)this.compactionState.next(this.compactionRecordsState),this.recomputeStatus()}onThreadTitle(A){this.threadTitle.next(A.title||void 0)}onThreadId(A){this.threadId.next(A)}resetRuntimeState(){this.connectionInfo.next(SF4),this.agentLoopState.next("idle"),this.pendingSend.next(!1),this.clearStreamingBlockKind(),this.clearExpectingAgentLoop(),this.hasSeenThreadMessage=!1,this.clearFirstThreadSendPhase(),this.queuedMessages.next([]),this.pendingApprovals.next([]),this.activeError.next(null),this.executorError.next(null),this.cancelledMessageId.next(null),this.retryState.next(null),this.observers.next(null),this.executorStatus.next(null),this.environment.next(null),this.compactionState.next("idle"),this.pluginUIRequestsByID.clear(),this.emitPluginUIRequestsSnapshot(),this.recomputeStatus()}dispose(){this.clearExpectingAgentLoopTimer(),this.connectionInfo.complete(),this.agentLoopState.complete(),this.pendingSend.complete(),this.streamingBlockKind.complete(),this.status.complete(),this.stageBytes.complete(),this.queuedMessages.complete(),this.pendingApprovals.complete(),this.lastError.complete(),this.activeError.complete(),this.cancelledMessageId.complete(),this.retryState.complete(),this.executorError.complete(),this.observers.complete(),this.executorStatus.complete(),this.environment.complete(),this.compactionState.complete(),this.compactionRecords.complete(),this.threadSettings.complete(),this.threadTitle.complete(),this.threadId.complete(),this.messageAddedEvents.complete(),this.messageRemovedEvents.complete(),this.messageUpdatedEvents.complete(),this.deltaEvents.complete(),this.toolProgressEvents.complete(),this.truncateEvents.complete(),this.pluginMessages.complete(),this.pluginUIRequestsByID.clear(),this.pluginUIRequests.complete()}addCompactionRecord(A){let Q=this.compactionRecords.getValue();if(Q.some(($)=>$.cutMessageId===A.cutMessageId))return;this.compactionRecords.next([...Q,A])}clearPendingSendIfIdle(){if(this.pendingSend.getValue()&&!c3(this.agentLoopState.getValue()))this.pendingSend.next(!1)}}hB();function xF4(A,Q){let $=A.parentToolUseId;if(A.role==="assistant"){let E={role:"assistant",content:A.content,state:A.state?.type==="cancelled"?{type:"cancelled"}:A.isStreaming===!0?{type:"streaming"}:{type:"complete",stopReason:null},usage:A.usage,messageId:Q,protocolMessageID:A.messageId,readAt:A.readAt};if($===void 0)return E;return{...E,parentToolUseId:$}}if(A.role==="info"){let E={role:"info",content:A.content,messageId:Q,protocolMessageID:A.messageId};if($===void 0)return E;return{...E,parentToolUseId:$}}let B={role:"user",content:A.content,meta:F00(A.meta),userState:A.userState,readAt:A.readAt,messageId:Q,protocolMessageID:A.messageId};if($===void 0)return B;return{...B,parentToolUseId:$}}a0();NyA();function mF4(A,Q,$){let B;switch(Q.type){case"message_added":B=$nQ(A,Q);break;case"message_updated":B=BnQ(A,Q);break;case"delta":B=DnQ(A,Q,$);break;case"tool_progress":B=JnQ(A,Q,$);break;case"thread_truncated":B=UnQ(A,Q);break}return B}function $nQ(A,Q){let $=oN(Q.message,Q.parentToolUseId??Q.message.parentToolUseId);return dF4(A,$)}function BnQ(A,Q){let $=EnQ(A,Q.message);return dF4(A,$)}function dF4(A,Q){let $=NnQ(A,unQ(Q)),B=hc($,Q.messageId),E=$.slice();if(B>=0)return E[B]=Q,E;return E.push(Q),E}function EnQ(A,Q){let $=hc(A,Q.messageId),B=$>=0?A[$]:void 0;return oN(Q,B?.parentToolUseId)}function oN(A,Q){let $={...A};if(Q!==void 0)$.parentToolUseId=Q;return $}function DnQ(A,Q,$){let B=Q.role==="assistant"&&Q.state==="aborted"?KnQ(A,Q.messageId):A;if(!Q.blocks||Q.blocks.length===0){if(Q.role==="assistant"&&(Q.state==="complete"||Q.state==="tool_use"))return hF4(B,{...Q,blocks:[],blockIndex:Q.blockIndex??0},$);return B.slice()}if(Q.role==="assistant")return hF4(B,Q,$);return YnQ(B,{...Q,blocks:Q.blocks},$)}function JnQ(A,Q,$){let B=HnQ(Q.progress);if(B!==void 0&&B.status!=="in-progress"&&!ZY(B.status))return A.slice();if(gF4(A,Q.toolCallId,(X)=>ZY(X.run.status)))return A.slice();let D=gF4(A,Q.toolCallId),J=B!==void 0&&ZY(B.status)?B:void 0;if(J!==void 0){let X=yF4(Q.toolCallId,J,D?.block.userInput);return bF4(A,Q,$,D,X)}let U=D&&"progress"in D.block.run?D.block.run.progress:void 0,Y=Q.progress===void 0?U:I30(U,Q.progress),Z=Y===void 0?{status:"in-progress"}:{status:"in-progress",progress:Y},F=yF4(Q.toolCallId,Z,D?.block.userInput);return bF4(A,Q,$,D,F)}function yF4(A,Q,$){if($!==void 0)return{type:"tool_result",toolUseID:A,run:Q,userInput:$};return{type:"tool_result",toolUseID:A,run:Q}}function bF4(A,Q,$,B,E){if(B)return znQ(A,B,E);return[...A,oN({threadId:$.threadId,messageId:cF4(Q.toolCallId),role:"user",content:[E]},Q.parentToolCallId)]}function UnQ(A,Q){let $=hc(A,Q.truncateFromMessage);return $>=0?A.slice(0,$):A.slice()}function hF4(A,Q,$){let B=hc(A,Q.messageId),E=B>=0?A[B]:void 0,D=E?.role==="assistant"?E.content:[],J=ZnQ(D,Q.blocks,Q.blockIndex),U=Q.parentToolCallId??E?.parentToolUseId,Y=E?.role==="assistant"?oN({...E,content:J},U):oN({threadId:$.threadId,messageId:Q.messageId,role:"assistant",content:J},U);if(Q.usage!==void 0)Y.usage=Q.usage;if(Q.state==="aborted")Y.state={type:"cancelled"},delete Y.isStreaming;else if(Q.state==="complete"||Q.state==="tool_use")Y.state={type:"complete"},delete Y.isStreaming;else Y.isStreaming=!0;return Fx0(A,B,Y)}function YnQ(A,Q,$){let B=hc(A,Q.messageId),E=B>=0?A[B]:void 0,D=E?.role==="user"?E.content:[],J=VnQ(D,Q.blocks),U=Q.parentToolCallId??E?.parentToolUseId,Y=E?.role==="user"?oN({...E,content:J},U):oN({threadId:$.threadId,messageId:Q.messageId,role:"user",content:J},U);return Fx0(A,B,Y)}function ZnQ(A,Q,$){let B=[...A];for(let[E,D]of Q.entries()){let J=$+E;InQ(B,J);let U=B[J];if(X30(D)){B[J]=XnQ(U,D,J);continue}let Y=FnQ(D);if(GnQ(U))B[J]=Y;else if(U?.type==="text"&&Y.type==="text")B[J]={...U,...Y,text:U.text+Y.text};else if(U?.type==="thinking"&&Y.type==="thinking")B[J]={...U,...Y,thinking:U.thinking+Y.thinking};else B[J]=Y}return B}function FnQ(A){if(A.type==="thinking")return{...A,signature:A.signature??""};return A}function XnQ(A,Q,$){if(A?.type!=="tool_use"||A.complete||A.id!==Q.id)return S.warn("[thread-client] Dropping tool input delta without matching incomplete block",{blockIndex:$,toolUseId:Q.id,existingType:A?.type,existingToolUseId:A?.type==="tool_use"?A.id:void 0,existingComplete:A?.type==="tool_use"?A.complete:void 0}),A??{type:"text",text:"",hidden:!0};let B=A.inputPartialJSON.json+Q.inputPartialJSONDelta.json,E=WyA(B);return{...A,input:E.input,inputIncomplete:E.inputIncomplete,inputPartialJSON:{json:B}}}function InQ(A,Q){while(A.length<Q)A.push({type:"text",text:"",hidden:!0})}function GnQ(A){return A?.type==="text"&&A.hidden===!0&&A.text===""}function VnQ(A,Q){let $=[...A];for(let B of Q){let E=$.length-1,D=$[E];if(D?.type==="text"&&B.type==="text")$[E]={...D,text:D.text+B.text};else $.push(B)}return $}function Fx0(A,Q,$){let B=A.slice();if(Q>=0)return B[Q]=$,B;return B.push($),B}function KnQ(A,Q){return A.filter(($)=>$.messageId!==Q)}function hc(A,Q){return A.findIndex(($)=>$.messageId===Q)}function gF4(A,Q,$=()=>!0){for(let[B,E]of A.entries()){if(E.role!=="user")continue;for(let[D,J]of E.content.entries())if(J.type==="tool_result"&&J.toolUseID===Q&&$(J))return{messageIndex:B,blockIndex:D,message:E,block:J}}return}function znQ(A,Q,$){let B=Q.message.content.slice();return B[Q.blockIndex]=$,Fx0(A,Q.messageIndex,{...Q.message,content:B})}var WnQ=["queued","blocked-on-user","in-progress","rejected-by-user","cancellation-requested","cancelled","done","error"];function CnQ(A){return typeof A==="string"&&WnQ.includes(A)}function HnQ(A){if(A===void 0||typeof A!=="object"||A===null)return;let Q=A;if(Q.type!=="snapshot")return;let $=Q.value;if(typeof $!=="object"||$===null)return;let B=$;return CnQ(B.status)?B:void 0}function NnQ(A,Q){if(Q.size===0)return A;return A.filter(($)=>!qnQ($,Q))}function qnQ(A,Q){if(A.role!=="user"||A.content.length!==1)return!1;let $=A.content[0];return $?.type==="tool_result"&&Q.has($.toolUseID)&&A.messageId===cF4($.toolUseID)}function unQ(A){let Q=new Set;if(A.role!=="user")return Q;for(let $ of A.content)if($.type==="tool_result")Q.add($.toolUseID);return Q}function cF4(A){return`M-${A.replace(/^TU-/,"")}`}class q30{inProgressMessageID=null;threadMessages=[];sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages};messageSeq=new Map;messageOrder=new Map;nextMessageOrder=0;threadID;coreMessagesCache={input:this.threadMessages,output:[]};constructor(A){this.threadID=A}setThreadID(A){this.threadID=A}getThreadID(){return this.threadID}reset(A){let Q=this.messages().length;if(A!==void 0)this.threadID=A;return this.threadMessages=[],this.sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages},this.messageSeq.clear(),this.messageOrder.clear(),this.nextMessageOrder=0,this.inProgressMessageID=null,{changed:Q>0,previousMessageCount:Q,nextMessageCount:0,changedIndices:wnQ(Q,0)}}apply(A){if(A.type==="message_added"&&lF4(A)===void 0||A.type==="message_updated")this.setThreadID(A.message.threadId);let Q=this.messages();if(!this.applyToThreadMessages(A))return{changed:!1,previousMessageCount:Q.length,nextMessageCount:Q.length,changedIndices:[]};let B=this.messages();return{changed:!0,previousMessageCount:Q.length,nextMessageCount:B.length,changedIndices:pF4(Q,B)}}applyToThreadMessages(A){let Q=this.threadMessages;if(A.type==="delta"&&A.parentToolCallId===void 0&&A.state==="aborted"){if(this.applyThreadMessageEvent(A),this.inProgressMessageID===A.messageId)this.inProgressMessageID=null;return this.threadMessages!==Q}let $=MnQ(A);if($!==void 0)this.updateInProgressMessage($);if(this.applyThreadMessageEvent(A),A.type==="delta"&&(A.state==="complete"||A.state==="tool_use"))this.inProgressMessageID=null;return this.threadMessages!==Q}messages(){if(this.sortedThreadMessagesCache.input!==this.threadMessages)this.sortedThreadMessagesCache={input:this.threadMessages,output:this.sortThreadMessages(this.threadMessages)};return this.sortedThreadMessagesCache.output}coreMessages(){let A=this.messages();if(this.coreMessagesCache.input!==A)this.coreMessagesCache={input:A,output:A.map((Q,$)=>{return xF4(Q,$)})};return this.coreMessagesCache.output}remove(A){let Q=this.messages(),$=this.threadMessages.filter((E)=>E.messageId!==A);if($.length===this.threadMessages.length)return{changed:!1,previousMessageCount:Q.length,nextMessageCount:Q.length,changedIndices:[]};this.threadMessages=$,this.sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages},this.coreMessagesCache={input:this.threadMessages,output:[]},this.pruneMessageOrder();let B=this.messages();return{changed:!0,previousMessageCount:Q.length,nextMessageCount:B.length,changedIndices:pF4(Q,B)}}applyThreadMessageEvent(A){this.recordMessageOrder(A);let Q=A.type==="thread_truncated"?this.messages():this.threadMessages;this.threadMessages=mF4(Q,A,{threadId:this.threadID}),this.pruneMessageOrder()}recordMessageOrder(A){if(A.type==="message_added"){this.recordMessage(A.message.messageId,A.seq);return}if(A.type==="message_updated"){this.recordMessage(A.message.messageId,this.messageSeq.has(A.message.messageId)?void 0:A.seq);return}if(A.type==="delta"){this.recordMessage(A.messageId);return}if(A.type==="tool_progress")this.recordMessage(OnQ(A.toolCallId))}recordMessage(A,Q){if(!this.messageOrder.has(A))this.messageOrder.set(A,this.nextMessageOrder),this.nextMessageOrder+=1;if(Q!==void 0)this.messageSeq.set(A,Q)}sortThreadMessages(A){return A.toSorted((Q,$)=>{let B=this.messageSeq.get(Q.messageId),E=this.messageSeq.get($.messageId),D=B!==void 0&&E!==void 0?B-E:this.messageSortOrder(Q.messageId)-this.messageSortOrder($.messageId);if(D!==0)return D;return this.messageSortOrder(Q.messageId)-this.messageSortOrder($.messageId)})}messageSortOrder(A){return this.messageOrder.get(A)??Number.MAX_SAFE_INTEGER}pruneMessageOrder(){let A=new Set(this.threadMessages.map((Q)=>Q.messageId));for(let Q of this.messageSeq.keys())if(!A.has(Q))this.messageSeq.delete(Q);for(let Q of this.messageOrder.keys())if(!A.has(Q))this.messageOrder.delete(Q);if(this.inProgressMessageID!==null&&!A.has(this.inProgressMessageID))this.inProgressMessageID=null}updateInProgressMessage(A){if(this.inProgressMessageID===A)return;if(this.inProgressMessageID!==null)this.markMessageNotInProgress(this.inProgressMessageID);this.inProgressMessageID=A}markMessageNotInProgress(A){this.threadMessages=this.threadMessages.map((Q)=>{if(Q.messageId!==A||Q.role!=="assistant"||Q.state!==void 0)return Q;let $={...Q,state:{type:"complete"}};return delete $.isStreaming,$})}}function pF4(A,Q){let $=Math.max(A.length,Q.length),B=[];for(let E=0;E<$;E+=1)if(A[E]!==Q[E])B.push(E);return B}function wnQ(A,Q){return Array.from({length:Math.max(A,Q)},($,B)=>B)}function MnQ(A){if(A.type==="message_added"&&lF4(A)===void 0)return A.message.messageId;if(A.type==="delta"&&A.parentToolCallId===void 0)return A.messageId;return}function lF4(A){return A.parentToolUseId??A.message.parentToolUseId}function OnQ(A){return`M-${A.replace(/^TU-/,"")}`}class u30{requestCounter=0;rpcEndpoint;fetch;constructor(A){this.rpcEndpoint=A.rpcEndpoint,this.fetch=A.fetch??fetch}async appendUserMessage(A){let Q=A.messageId??wK(),$={type:"client_append_user_msg",content:eD(A.content),agentMode:A.agentMode,reasoningEffort:A.reasoningEffort,messageId:Q,steer:A.steer,userState:A.userState};return await this.request("client_append_user_msg",$),Q}async request(A,Q){let $=await this.fetch(this.rpcEndpoint,{method:"POST",headers:{"content-type":"application/json"},body:LnQ(A,Q,jnQ(this.requestCounter++))}),B=await $.text(),E=ff0.safeParse(RnQ(B));if(!E.success)throw new dQ(`Invalid JSON-RPC response from thread actor: HTTP ${$.status}`);let D=E.data;if("error"in D&&D.error)throw PnQ(D.error)}}function LnQ(A,Q,$){let{type:B,...E}=Q;return JSON.stringify({jsonrpc:LX,id:$,method:A,params:E})}function jnQ(A){return`thread-one-shot-client-${Date.now()}-${A}`}function RnQ(A){try{return JSON.parse(A)}catch{return null}}function PnQ(A){let Q=Error(A.message);return Q.name="JSONRPCError",Q}var iF4=(A=0)=>(Q)=>`\x1B[${Q+A}m`,nF4=(A=0)=>(Q)=>`\x1B[${38+A};5;${Q}m`,aF4=(A=0)=>(Q,$,B)=>`\x1B[${38+A};2;${Q};${$};${B}m`,f$={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},yv$=Object.keys(f$.modifier),vnQ=Object.keys(f$.color),TnQ=Object.keys(f$.bgColor),bv$=[...vnQ,...TnQ];function _nQ(){let A=new Map;for(let[Q,$]of Object.entries(f$)){for(let[B,E]of Object.entries($))f$[B]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},$[B]=f$[B],A.set(E[0],E[1]);Object.defineProperty(f$,Q,{value:$,enumerable:!1})}return Object.defineProperty(f$,"codes",{value:A,enumerable:!1}),f$.color.close="\x1B[39m",f$.bgColor.close="\x1B[49m",f$.color.ansi=iF4(),f$.color.ansi256=nF4(),f$.color.ansi16m=aF4(),f$.bgColor.ansi=iF4(10),f$.bgColor.ansi256=nF4(10),f$.bgColor.ansi16m=aF4(10),Object.defineProperties(f$,{rgbToAnsi256:{value(Q,$,B){if(Q===$&&$===B){if(Q<8)return 16;if(Q>248)return 231;return Math.round((Q-8)/247*24)+232}return 16+36*Math.round(Q/255*5)+6*Math.round($/255*5)+Math.round(B/255*5)},enumerable:!1},hexToRgb:{value(Q){let $=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Q.toString(16));if(!$)return[0,0,0];let[B]=$;if(B.length===3)B=[...B].map((D)=>D+D).join("");let E=Number.parseInt(B,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(Q)=>f$.rgbToAnsi256(...f$.hexToRgb(Q)),enumerable:!1},ansi256ToAnsi:{value(Q){if(Q<8)return 30+Q;if(Q<16)return 90+(Q-8);let $,B,E;if(Q>=232)$=((Q-232)*10+8)/255,B=$,E=$;else{Q-=16;let U=Q%36;$=Math.floor(Q/36)/5,B=Math.floor(U/6)/5,E=U%6/5}let D=Math.max($,B,E)*2;if(D===0)return 30;let J=30+(Math.round(E)<<2|Math.round(B)<<1|Math.round($));if(D===2)J+=60;return J},enumerable:!1},rgbToAnsi:{value:(Q,$,B)=>f$.ansi256ToAnsi(f$.rgbToAnsi256(Q,$,B)),enumerable:!1},hexToAnsi:{value:(Q)=>f$.ansi256ToAnsi(f$.hexToAnsi256(Q)),enumerable:!1}}),f$}var SnQ=_nQ(),y2=SnQ;import Xx0 from"node:process";import knQ from"node:os";import oF4 from"node:tty";function $J(A,Q=globalThis.Deno?globalThis.Deno.args:Xx0.argv){let $=A.startsWith("-")?"":A.length===1?"-":"--",B=Q.indexOf($+A),E=Q.indexOf("--");return B!==-1&&(E===-1||B<E)}var{env:DB}=Xx0,w30;if($J("no-color")||$J("no-colors")||$J("color=false")||$J("color=never"))w30=0;else if($J("color")||$J("colors")||$J("color=true")||$J("color=always"))w30=1;function fnQ(){if("FORCE_COLOR"in DB){if(DB.FORCE_COLOR==="true")return 1;if(DB.FORCE_COLOR==="false")return 0;return DB.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(DB.FORCE_COLOR,10),3)}}function xnQ(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function ynQ(A,{streamIsTTY:Q,sniffFlags:$=!0}={}){let B=fnQ();if(B!==void 0)w30=B;let E=$?w30:B;if(E===0)return 0;if($){if($J("color=16m")||$J("color=full")||$J("color=truecolor"))return 3;if($J("color=256"))return 2}if("TF_BUILD"in DB&&"AGENT_NAME"in DB)return 1;if(A&&!Q&&E===void 0)return 0;let D=E||0;if(DB.TERM==="dumb")return D;if(Xx0.platform==="win32"){let J=knQ.release().split(".");if(Number(J[0])>=10&&Number(J[2])>=10586)return Number(J[2])>=14931?3:2;return 1}if("CI"in DB){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((J)=>(J in DB)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((J)=>(J in DB))||DB.CI_NAME==="codeship")return 1;return D}if("TEAMCITY_VERSION"in DB)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(DB.TEAMCITY_VERSION)?1:0;if(DB.COLORTERM==="truecolor")return 3;if(DB.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in DB){let J=Number.parseInt((DB.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(DB.TERM_PROGRAM){case"iTerm.app":return J>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(DB.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(DB.TERM))return 1;if("COLORTERM"in DB)return 1;return D}function rF4(A,Q={}){let $=ynQ(A,{streamIsTTY:A&&A.isTTY,...Q});return xnQ($)}var bnQ={stdout:rF4({isTTY:oF4.isatty(1)}),stderr:rF4({isTTY:oF4.isatty(2)})},sF4=bnQ;function tF4(A,Q,$){let B=A.indexOf(Q);if(B===-1)return A;let E=Q.length,D=0,J="";do J+=A.slice(D,B)+Q+$,D=B+E,B=A.indexOf(Q,D);while(B!==-1);return J+=A.slice(D),J}function eF4(A,Q,$,B){let E=0,D="";do{let J=A[B-1]==="\r";D+=A.slice(E,J?B-1:B)+Q+(J?`\r
2650
+ ${I}`)}}if(A.skipParseResponse)return;try{let U=new Uint8Array(await J.arrayBuffer());return zc(A.encoding,U,A.responseVersionedDataHandler,A.responseZodSchema,A.responseFromJson,A.responseFromBare)}catch(U){throw new uc(`Failed to parse response: ${U}`,{cause:U})}}function qZ4(A){async function Q($,B,E){let D=(E==null?void 0:E.wait)??!1,J=E==null?void 0:E.timeout,U=await Jf0({url:`http://actor/queue/${encodeURIComponent($)}`,method:"POST",headers:{[EZ4]:A.encoding,...A.params!==void 0?{[Af0]:JSON.stringify(A.params)}:{}},body:{body:B,wait:D,timeout:J},encoding:A.encoding,customFetch:A.customFetch,signal:E==null?void 0:E.signal,requestVersion:wc,requestVersionedDataHandler:qmQ,responseVersion:wc,responseVersionedDataHandler:umQ,requestZodSchema:xmQ,responseZodSchema:ymQ,requestToJson:(Y)=>({...Y,name:$}),requestToBare:(Y)=>({name:Y.name??$,body:yB0(bN(Y.body)),wait:Y.wait??!1,timeout:Y.timeout!==void 0?BigInt(Y.timeout):null}),responseFromJson:(Y)=>{if(Y.response===void 0)return{status:Y.status};return{status:Y.status,response:Y.response}},responseFromBare:(Y)=>{if(Y.response===null||Y.response===void 0)return{status:Y.status};return{status:Y.status,response:wX(new Uint8Array(Y.response))}}});if(D)return U;return}return{send:Q}}async function amQ(A,Q,$,B,E,D={}){let J,U=E||{};if(typeof B==="string")J=B;else if(B instanceof URL)J=B.pathname+B.search;else if(B instanceof Request){let Y=new URL(B.url);J=Y.pathname+Y.search;let Z=new Headers(B.headers),F=new Headers((E==null?void 0:E.headers)||{}),X=new Headers(Z);if(F.forEach((I,G)=>{X.set(G,I)}),U={method:B.method,body:B.body,mode:B.mode,credentials:B.credentials,redirect:B.redirect,referrer:B.referrer,referrerPolicy:B.referrerPolicy,integrity:B.integrity,keepalive:B.keepalive,signal:B.signal,...U,headers:X},U.body)U.duplex="half"}else throw TypeError("Invalid input type for fetch");try{z4().debug("directId"in Q?{msg:"sending raw http request to actor",actorId:Q.directId}:{msg:"sending raw http request with actor query",query:Q});let Y=J.startsWith("/")?J.slice(1):J,Z=new URL(`http://actor/request/${Y}`),F=new Headers(U.headers);if($)F.set(Af0,JSON.stringify($));let X=new Request(Z,{...U,headers:F});return A.sendRequest(Q,X,D)}catch(Y){let{group:Z,code:F,message:X,metadata:I,actor:G}=Bc(Y,!0);throw new mQ(Z,F,X,{metadata:I,actor:G})}}async function omQ(A,Q,$,B,E,D={}){let U="",Y="";if(B){let X=B.indexOf("?");if(X!==-1)U=B.substring(0,X),Y=B.substring(X);else U=B;if(U.startsWith("/"))U=U.slice(1)}let Z=`${BZ4}${U}${Y}`;return z4().debug({msg:"opening websocket",target:Q,encoding:"bare",path:Z}),await A.openWebSocket(Z,Q,"bare",$,D)}async function uZ4(A,Q){if("directId"in Q)return Q.directId;if("getForId"in Q)return Q.getForId.actorId;if("getForKey"in Q){let $=await A.getWithKey({name:Q.getForKey.name,key:Q.getForKey.key});if(!$)throw ZJ4(`${Q.getForKey.name}:${JSON.stringify(Q.getForKey.key)}`);return $.actorId}if("getOrCreateForKey"in Q)return(await A.getOrCreateWithKey({name:Q.getOrCreateForKey.name,key:Q.getOrCreateForKey.key,input:Q.getOrCreateForKey.input,region:Q.getOrCreateForKey.region})).actorId;if("create"in Q)return(await A.createActor({name:Q.create.name,key:Q.create.key,input:Q.create.input,region:Q.create.region})).actorId;throw GB0("Invalid query format")}var rmQ=class{#A;#Q;#$;#B;#D;#E;#U;#J;#Y;#Z=new xY4;constructor(A,Q,$,B,E,D,J={}){this.#A=A,this.#Q=Q,this.#$=E,this.#B=D,this.#D=J,this.#E=$,this.#U=B}async#X(){if(this.#U)return await this.#U();return this.#E}send(A,Q,$){return this.#I(A,Q,$)}async#I(A,Q,$){return await this.#Z.run(async()=>{let B=this.#W(),E=!1;for(let D=0;D<B;D++){let J;try{let U=VP(this.#D),Y=await this.#q(E,U);return J="directId"in Y?Y.directId:void 0,await qZ4({encoding:this.#$,params:this.#E,customFetch:async(Z)=>{return await this.#Q.sendRequest(Y,Z,U)}}).send(A,Q,$)}catch(U){let{group:Y,code:Z,message:F,metadata:X,actor:I}=Bc(U,!0);if(this.#V(Y,Z,X,D,B)){await this.#G();continue}if(await this.#u(Y,Z,J,D,B)){E=!0,await this.#G();continue}if(this.#z(Y,Z,D,B)){this.#F(),E=!0,await this.#G();continue}if(this.#C(Y,Z)&&D<B-1){if(E=Z==="starting"||Z==="stopping"||Z.startsWith("destroyed_"),E)await this.#G();continue}throw new mQ(Y,Z,F,{metadata:X,actor:I})}}throw Error("unreachable queue retry state")})}async action(A){if(typeof A==="string"||typeof A!=="object"||A===null||!("name"in A))throw Error(`Invalid action call: expected an options object { name, args }, got ${typeof A}. Use handle.actionName(...args) for the shorthand API.`);let Q=async()=>await this.#K(A);if(A.name==="destroy")return await Q();return await lmQ(Q,{signal:A.signal})}async#K(A){let Q=this.#W(),$=!1,B=VP(this.#D,A);for(let E=0;E<Q;E++){let D;try{let J=await this.#q($,B);D="directId"in J?J.directId:void 0,z4().debug(D?{msg:"using direct actor gateway target",actorId:D}:{msg:"using query gateway target for action",query:this.#B}),z4().debug({msg:"handling action",name:A.name,encoding:this.#$});let U=await Jf0({url:`http://actor/action/${encodeURIComponent(A.name)}`,method:"POST",headers:{[EZ4]:this.#$,...this.#E!==void 0?{[Af0]:JSON.stringify(this.#E)}:{}},body:A.args,encoding:this.#$,customFetch:async(Y)=>await this.#Q.sendRequest(J,Y,B),signal:A==null?void 0:A.signal,requestVersion:wc,requestVersionedDataHandler:HmQ,responseVersion:wc,responseVersionedDataHandler:NmQ,requestZodSchema:kmQ,responseZodSchema:fmQ,requestToJson:(Y)=>({args:Y}),requestToBare:(Y)=>({args:yB0(bN(Y))}),responseFromJson:(Y)=>Y.output,responseFromBare:(Y)=>wX(new Uint8Array(Y.output))});if(A.name==="destroy"&&D)await this.#H(D);return U}catch(J){let{group:U,code:Y,message:Z,metadata:F,actor:X}=Bc(J,!0);if(await this.#u(U,Y,D,E,Q)){$=!0,await this.#G();continue}if(A.name!=="destroy"&&this.#z(U,Y,E,Q)){this.#F(),$=!0,await this.#G();continue}if(U==="actor"&&Y==="destroyed_while_waiting_for_ready"&&"getForId"in this.#B)throw new mQ("actor","not_found","The actor does not exist or was destroyed.",{metadata:F,actor:X});if(this.#C(U,Y)&&E<Q-1){if(U==="actor"&&(Y==="starting"||Y==="stopping"))$=!0,await new Promise((G)=>setTimeout(G,100));continue}throw new mQ(U,Y,Z,{metadata:F,actor:X})}}throw Error("unreachable action retry state")}async#H(A){let Q=WZ4(this.#B),$=Date.now()+1000;while(Date.now()<$){if(!await this.#Q.getForId({name:Q,actorId:A}))return;await new Promise((E)=>setTimeout(E,25))}}async#G(){await new Promise((A)=>setTimeout(A,100))}#W(){if(!HK(this.#B))return 1;return"getOrCreateForKey"in this.#B?60:24}#z(A,Q,$,B){if(!HK(this.#B)||$>=B-1||A!=="actor")return!1;return Q==="not_found"||Q==="starting"||Q==="stopping"||Q==="not_configured"||Q==="dropped_reply"||Q==="destroying"||Q.startsWith("destroyed_")}#V(A,Q,$,B,E){if(!HK(this.#B)||B>=E-1||A!=="actor"||Q!=="overloaded"||$===null||typeof $!=="object")return!1;let D=$;return D.channel==="dispatch_inbox"&&D.operation==="dispatch_queue_send"}#F(){this.#J=void 0,this.#Y=void 0}async#u(A,Q,$,B,E){if(!HK(this.#B)||!ok0(A,Q)||B>=E-1)return!1;if($){let D=await tk0(A,Q,$,this.#B,this.#Q);if(D)throw D}return this.#F(),!0}#C(A,Q){if(!HK(this.#B)||!sk0(A,Q))return!1;return this.#F(),!0}async#M(A){if("getForId"in this.#B)return mN(this.#B);if(A)return mN(this.#B);if(this.#J)return{directId:this.#J};if(!this.#Y)this.#Y=uZ4(this.#Q,this.#B).then((Q)=>{return this.#J=Q,Q});try{return{directId:await this.#Y}}finally{this.#Y=void 0}}async#q(A,Q){if(Q.skipReadyWait)return mN(this.#B);return await this.#M(A)}connect(A,Q={}){z4().debug({msg:"establishing connection from handle",query:this.#B});let $=A===void 0?this.#E:A,B=A===void 0?this.#U:void 0,E=new tmQ(this.#A,this.#Q,$,B,this.#$,this.#B,VP(this.#D,Q));return this.#A[wZ4](E)}fetch(A,Q){return this.#w(A,Q)}async#w(A,Q){let $=this.#W(),B=!1,{skipReadyWait:E,...D}=Q??{},J=VP(this.#D,{skipReadyWait:E});for(let U=0;U<$;U++){let Y;try{let Z=await this.#q(B,J);Y="directId"in Z?Z.directId:void 0;let F=await amQ(this.#Q,Z,this.#E,A,D,J),X=await this.#N(F,Y,U,$);if(X){if(B=X.useQueryTarget,X.waitForRetryWindow)await this.#G();continue}return F}catch(Z){let{group:F,code:X,message:I,metadata:G,actor:V}=Bc(Z,!0);if(await this.#u(F,X,Y,U,$)){B=!0,await this.#G();continue}if(this.#z(F,X,U,$)){this.#F(),B=!0,await this.#G();continue}if(this.#C(F,X)&&U<$-1){if(B=X==="starting"||X==="stopping"||X.startsWith("destroyed_"),B)await this.#G();continue}throw new mQ(F,X,I,{metadata:G,actor:V})}}throw Error("unreachable fetch retry state")}async#N(A,Q,$,B){if(A.ok||!HK(this.#B))return null;let E=await this.#O(A);if(!E)return null;let{group:D,code:J}=E;if(await this.#u(D,J,Q,$,B))return{useQueryTarget:!0,waitForRetryWindow:!0};if(this.#z(D,J,$,B))return this.#F(),{useQueryTarget:!0,waitForRetryWindow:!0};if(this.#C(D,J)&&$<B-1){let Y=J==="starting"||J==="stopping"||J.startsWith("destroyed_");return{useQueryTarget:Y,waitForRetryWindow:Y}}return null}async#O(A){if(A.ok)return null;let Q=A.headers.get("content-type"),$=(Q==null?void 0:Q.includes("application/json"))?"json":this.#$;try{return zc($,new Uint8Array(await A.clone().arrayBuffer()),VZ4,zZ4,(B)=>({...B,actor:B.actor?{...B.actor,generation:Number(B.actor.generation)}:void 0}),(B)=>({group:B.group,code:B.code,message:B.message,metadata:B.metadata?wX(new Uint8Array(B.metadata)):void 0,actor:B.actor?{actorId:B.actor.actorId,generation:Number(B.actor.generation),key:B.actor.key??void 0}:void 0}))}catch{return null}}async webSocket(A,Q,$={}){let B=await this.#X(),E=VP(this.#D,$),D=await this.#q(!1,E);return await omQ(this.#Q,D,B,A,Q,E)}async resolve(){if("getForId"in this.#B)return this.#B.getForId.actorId;let A=await this.#M(!1);if("directId"in A)return A.directId;throw Error("dynamic actor resolution did not produce a direct actor id")}async getGatewayUrl(){return await this.#Q.buildGatewayUrl(mN(this.#B),this.#D)}async reload(){let A=mN(this.#B),Q=new Request("http://actor/dynamic/reload",{method:"PUT"}),$=await this.#Q.sendRequest(A,Q);if(!$.ok){let B=await $.text().catch(()=>"");throw new mQ("actor","reload_failed",`reload failed with status ${$.status}: ${B}`,{})}}},Q30=Symbol("actorConns"),wZ4=Symbol("createActorConnProxy"),smQ=class{#A=!1;[Q30]=new Set;#Q;#$;#B;constructor(A,Q,$={}){this.#Q=A,this.#$=Q??"bare",this.#B=$}getForId(A,Q,$){z4().debug({msg:"get handle to actor with id",name:A,actorId:Q,params:$==null?void 0:$.params});let B={getForId:{name:A,actorId:Q}},E=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,B);return Nc(E)}get(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[];z4().debug({msg:"get handle to actor",name:A,key:B,parameters:$==null?void 0:$.params});let E={getForKey:{name:A,key:B}},D=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,E);return Nc(D)}getOrCreate(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[];z4().debug({msg:"get or create handle to actor",name:A,key:B,parameters:$==null?void 0:$.params,createInRegion:$==null?void 0:$.createInRegion});let E={getOrCreateForKey:{name:A,key:B,input:$==null?void 0:$.createWithInput,region:$==null?void 0:$.createInRegion}},D=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,E);return Nc(D)}async create(A,Q,$){let B=typeof Q==="string"?[Q]:Q||[],E={create:{...$,name:A,key:B}};z4().debug({msg:"create actor handle",name:A,key:B,parameters:$==null?void 0:$.params,create:E.create});let D=await uZ4(this.#Q,E);z4().debug({msg:"created actor with ID",name:A,key:B,actorId:D});let J={getForId:{name:A,actorId:D}},U=this.#D($==null?void 0:$.params,$==null?void 0:$.getParams,J);return Nc(U)}#D(A,Q,$){return new rmQ(this,this.#Q,A,Q,this.#$,$,this.#B)}[wZ4](A){return this[Q30].add(A),A[OZ4](),Nc(A)}async dispose(){if(this.#A){z4().warn({msg:"client already disconnected"});return}this.#A=!0,z4().debug({msg:"disposing client"});let A=[];for(let Q of this[Q30].values())A.push(Q.dispose());await Promise.all(A)}};function MZ4(A,Q={}){let $=new smQ(A,Q.encoding,Q.gateway);return new Proxy($,{get:(B,E,D)=>{if(typeof E==="symbol"||E in B){let J=Reflect.get(B,E,D);if(typeof J==="function")return J.bind(B);return J}if(typeof E==="string")return{get:(J,U)=>{return B.get(E,J,U)},getOrCreate:(J,U)=>{return B.getOrCreate(E,J,U)},getForId:(J,U)=>{return B.getForId(E,J,U)},create:async(J,U={})=>{return await B.create(E,J,U)}};return}})}function Nc(A){let Q=new Map;return new Proxy(A,{get($,B,E){if(typeof B==="symbol")return Reflect.get($,B,E);if(B==="constructor"||B in $){let D=Reflect.get($,B,$);if(typeof D==="function")return D.bind($);return D}if(typeof B==="string"){if(B==="then")return;let D=Q.get(B);if(!D)D=(...J)=>$.action({name:B,args:J}),Q.set(B,D);return D}},has($,B){if(typeof B==="string")return!0;return Reflect.has($,B)},getPrototypeOf($){return Reflect.getPrototypeOf($)},ownKeys($){return Reflect.ownKeys($)},getOwnPropertyDescriptor($,B){let E=Reflect.getOwnPropertyDescriptor($,B);if(E)return E;if(typeof B==="string")return{configurable:!0,enumerable:!1,writable:!1,value:(...D)=>$.action({name:B,args:D})};return}})}var ik0=65536,OZ4=Symbol("connect"),tmQ=class{#A=!1;#Q=new AbortController;#$="idle";#B;#D;#E=[];#U=new Map;#J=new Map;#Y=new Set;#Z=new Set;#X=!1;#I=new Set;#K=new Set;#H=0;#G;#W;#z;#V;#F;#u;#C;#M;#q;#w;#N;#O;constructor(A,Q,$,B,E,D,J={}){if(this.#u=A,this.#C=Q,this.#M=$,this.#q=B,this.#w=E,this.#N=D,this.#O=VP(J),"getForId"in D)this.#B=D.getForId.actorId;this.#W=UP((U)=>z4().warn({msg:"unhandled ready promise rejection",reason:U})),this.#G=qZ4({encoding:this.#w,params:this.#M,customFetch:async(U)=>{return await this.#C.sendRequest(mN(this.#N),U,this.#O)}}),this.#z=setInterval(()=>60000)}#P(){this.#B=void 0,this.#D=void 0}#v(A,Q){if(!HK(this.#N)||!sk0(A,Q))return!1;return this.#P(),!0}#T(A,Q){return HK(this.#N)&&sk0(A,Q)&&this.#V!==void 0&&this.#$!=="connected"}send(A,Q,$){return this.#h(A,Q,$)}async#h(A,Q,$){return await this.#G.send(A,Q,$)}async action(A){if(typeof A==="string"||typeof A!=="object"||A===null||!("name"in A))throw Error(`Invalid action call: expected an options object { name, args }, got ${typeof A}. Use conn.actionName(...args) for the shorthand API.`);z4().debug({msg:"action",name:A.name,args:A.args});let Q=this.#H;this.#H+=1;let{promise:$,resolve:B,reject:E}=UP((U)=>z4().warn({msg:"unhandled action promise rejection",reason:U}));this.#U.set(Q,{name:A.name,resolve:B,reject:E}),z4().debug({msg:"added action to in-flight map",actionId:Q,actionName:A.name,inFlightCount:this.#U.size}),this.#S({body:{tag:"ActionRequest",val:{id:BigInt(Q),name:A.name,args:A.args}}});let{id:D,output:J}=await $;if(D!==BigInt(Q))throw Error(`Request ID ${Q} does not match response ID ${D}`);return J}[OZ4](){this.#f()}#L(A){let Q=this.#$;if(Q===A)return;this.#$=A;for(let $ of[...this.#K])try{$(A)}catch(B){z4().error({msg:"error in status change handler",error:V3(B)})}if(A==="connected"){this.#W.resolve(void 0);for(let $ of[...this.#Z])try{$()}catch(B){z4().error({msg:"error in open handler",error:V3(B)})}}if((A==="disconnected"||A==="idle")&&Q==="connected")for(let $ of[...this.#I])try{$()}catch(B){z4().error({msg:"error in close handler",error:V3(B)})}}#f(){this.#L("connecting"),Cc(this.#g.bind(this),{forever:!0,minTimeout:250,maxTimeout:30000,onFailedAttempt:(A)=>{z4().warn({msg:"failed to reconnect",attempt:A.attemptNumber,error:V3(A)})},signal:this.#Q.signal}).catch((A)=>{if(A instanceof Wc||A.name==="AbortError"||!this.#x(A))z4().info({msg:"connection retry aborted"});else z4().error({msg:"unexpected error in connection retry",error:V3(A)})})}async#g(){try{if(this.#V)throw Error("#onOpenPromise already defined");this.#V=UP((A)=>z4().warn({msg:"unhandled open promise rejection",reason:A})),await this.#d(),await this.#V.promise}catch(A){if(this.#x(A))throw A;let Q=A instanceof mQ?A:new mQ("client","connection_open_failed",`Failed to open connection: ${V3(A)}`,{error:V3(A)});throw this.#y(),this.#j(Q,!1),this.#R(Q),this.#L("idle"),new Wc(A instanceof Error?A:Error(V3(A)))}finally{this.#V=void 0}}#x(A){if(A instanceof A30)return!1;if(A instanceof mQ&&this.#T(A.group,A.code))return!0;if(A instanceof mQ&&A.group==="client"&&A.code==="get_params_failed")return!0;return cmQ(A)}#y(){if(this.#E.length===0)return;z4().debug({msg:"clearing queued connection messages",queueLength:this.#E.length}),this.#E=[]}async#m(){if(!this.#q)return this.#M;try{return await this.#q()}catch(A){let Q=V3(A),$=new mQ("client","get_params_failed",`Failed to resolve connection params: ${Q}`,{error:Q});throw this.#y(),this.#j($,!1),this.#R($),$}}async#d(){let A=await this.#m(),Q=mN(this.#N),$=await this.#C.openWebSocket($Z4,Q,this.#w,A,this.#O);rk0.default($,"websocket should have been created"),z4().debug({msg:"opened websocket",connId:this.#D,readyState:$.readyState,messageQueueLength:this.#E.length}),this.#F=$,$.addEventListener("open",()=>{z4().debug({msg:"client websocket open",connId:this.#D})}),$.addEventListener("message",async(B)=>{try{await this.#p(B.data)}catch(E){z4().error({msg:"error in websocket message handler",error:V3(E)})}}),$.addEventListener("close",async(B)=>{try{await this.#l(B)}catch(E){z4().error({msg:"error in websocket close handler",error:V3(E)})}}),$.addEventListener("error",()=>{try{this.#i()}catch(B){z4().error({msg:"error in websocket error handler",error:V3(B)})}})}#c(){if(this.#A){if(z4().debug({msg:"handleOnOpen called after dispose, closing websocket"}),this.#F)this.#F.close(1000,"Disposed"),this.#F=void 0;return}if(this.#$==="connected"||this.#X)return;this.#X=!0,queueMicrotask(()=>{if(this.#X=!1,this.#A){if(z4().debug({msg:"handleOnOpen scheduled after dispose, closing websocket"}),this.#F)this.#F.close(1000,"Disposed"),this.#F=void 0;return}if(z4().debug({msg:"socket open",messageQueueLength:this.#E.length,connId:this.#D}),this.#L("connected"),this.#V)this.#V.resolve(void 0);else z4().warn({msg:"#onOpenPromise is undefined"});for(let Q of this.#J.keys())this.#k(Q,!0);let A=this.#E;this.#E=[],z4().debug({msg:"flushing message queue",queueLength:A.length});for(let Q of A)this.#S(Q)})}async#p(A){var Q;z4().trace({msg:"received message",dataType:typeof A,isBlob:A instanceof Blob,isArrayBuffer:A instanceof ArrayBuffer});let $=await this.#a(A);if(z4().trace(KU4()?{msg:"parsed message",message:xk0($).substring(0,100)+"..."}:{msg:"parsed message"}),$.body.tag==="Init")this.#B=$.body.val.actorId,this.#D=$.body.val.connectionId,z4().trace({msg:"received init message",actorId:this.#B,connId:this.#D}),this.#c();else if($.body.tag==="Error"){let{group:B,code:E,message:D,metadata:J,actionId:U,actor:Y}=$.body.val;if(U!==null){let Z=this.#_(Number(U));this.#v(B,E),z4().warn({msg:"action error",actionId:U,actionName:Z==null?void 0:Z.name,group:B,code:E,message:D,metadata:J,actorId:Y==null?void 0:Y.actorId,generation:Y==null?void 0:Y.generation,actorKey:Y==null?void 0:Y.key}),Z.reject(new mQ(B,E,D,{metadata:J,actor:Y}))}else{if(z4().warn({msg:"connection error",group:B,code:E,message:D,metadata:J,actorId:Y==null?void 0:Y.actorId,generation:Y==null?void 0:Y.generation,actorKey:Y==null?void 0:Y.key}),this.#T(B,E)){this.#P(),(Q=this.#V)==null||Q.reject(new mQ(B,E,D,{metadata:J,actor:Y}));return}let Z=new mQ(B,E,D,{metadata:J,actor:Y});if(ok0(B,E)&&this.#B){let F=await tk0(B,E,this.#B,this.#N,this.#C);if(F)Z=F}if(this.#V)this.#V.reject(Z);this.#v(B,E);for(let[F,X]of this.#U.entries())X.reject(Z),this.#U.delete(F);this.#R(Z)}}else if($.body.tag==="ActionResponse"){let{id:B}=$.body.val;z4().debug({msg:"received action response",actionId:Number(B),inFlightCount:this.#U.size,inFlightIds:Array.from(this.#U.keys())});let E=this.#_(Number(B));z4().trace({msg:"resolving action promise",actionId:B,actionName:E==null?void 0:E.name}),E.resolve($.body.val)}else if($.body.tag==="Event")z4().trace({msg:"received event",name:$.body.val.name}),this.#n($.body.val);else _N($.body)}async#l(A){var Q;let $=A,B=$.wasClean,E=this.#$==="connected";if(z4().info({msg:"socket closed",code:$.code,reason:$.reason,wasClean:B,disposed:this.#A,connId:this.#D}),this.#F=void 0,this.#A)this.#j(new A30,!0);else{this.#L("disconnected");let D,J=$.reason||"",U=imQ(J);if(U){let{group:Y,code:Z}=U;if(this.#T(Y,Z)){this.#P(),(Q=this.#V)==null||Q.reject(new mQ(Y,Z,`Connection closed: ${J}`,void 0));return}if(ok0(Y,Z)&&this.#B){let F=await tk0(Y,Z,this.#B,this.#N,this.#C);if(F)D=F;else D=new mQ(Y,Z,`Connection closed: ${J}`,void 0)}else D=new mQ(Y,Z,`Connection closed: ${J}`,void 0);this.#v(Y,Z)}else D=Error(`${B?"Connection closed":"Connection lost"} (code: ${$.code}, reason: ${J})`);if(this.#j(D,!1),D instanceof mQ)this.#R(D);if(E)z4().debug({msg:"triggering reconnect",connId:this.#D}),this.#f()}}#j(A,Q){if(this.#V){if(Q)this.#V.promise.catch(()=>{});this.#V.reject(A)}for(let $ of this.#U.values())$.reject(A);this.#U.clear()}#i(){if(this.#A)return;z4().warn("socket error")}#_(A){let Q=this.#U.get(A);if(!Q)throw z4().error({msg:"action not found in in-flight map",lookupId:A,inFlightCount:this.#U.size,inFlightIds:Array.from(this.#U.keys()),inFlightActions:Array.from(this.#U.entries()).map(([$,B])=>({id:$,name:B.name}))}),uyQ(`No in flight response for ${A}`);return this.#U.delete(A),z4().debug({msg:"removed action from in-flight map",actionId:A,actionName:Q.name,inFlightCount:this.#U.size}),Q}#n(A){let{name:Q,args:$}=A,B=this.#J.get(Q);if(!B)return;for(let E of[...B])if(E.callback(...$),E.once)B.delete(E);if(B.size===0)this.#J.delete(Q)}#R(A){for(let Q of[...this.#Y])try{Q(A)}catch($){z4().error({msg:"error in connection error handler",error:V3($)})}}#b(A,Q,$){let B={callback:Q,once:$},E=this.#J.get(A);if(E===void 0)E=new Set,this.#J.set(A,E),this.#k(A,!0);return E.add(B),()=>{let D=this.#J.get(A);if(D){if(D.delete(B),D.size===0)this.#J.delete(A),this.#k(A,!1)}}}on(A,Q){return this.#b(A,Q,!1)}once(A,Q){return this.#b(A,Q,!0)}onError(A){return this.#Y.add(A),()=>{this.#Y.delete(A)}}get connStatus(){return this.#$}get isConnected(){return this.#$==="connected"}get ready(){return this.#W.promise}onOpen(A){if(this.#Z.add(A),this.#$==="connected")queueMicrotask(()=>{if(!this.#Z.has(A))return;try{A()}catch(Q){z4().error({msg:"error in open handler",error:V3(Q)})}});return()=>{this.#Z.delete(A)}}onClose(A){return this.#I.add(A),()=>{this.#I.delete(A)}}onStatusChange(A){return this.#K.add(A),()=>{this.#K.delete(A)}}#S(A,Q){var $,B;if(this.#A)if(Q==null?void 0:Q.ephemeral)return;else throw new A30;let E=!1;if(this.#F){let D=this.#F.readyState;if(z4().debug({msg:"websocket send attempt",readyState:D,readyStateString:D===0?"CONNECTING":D===1?"OPEN":D===2?"CLOSING":"CLOSED",connId:this.#D,messageType:A.body.tag,actionName:($=A.body.val)==null?void 0:$.name}),this.#$!=="connected")z4().debug({msg:"websocket init pending, queueing message",connStatus:this.#$,messageType:A.body.tag}),E=!0;else if(D===1)try{let J=yk0(this.#w,A,WmQ,wc,SmQ,(Y)=>Y,(Y)=>{if(Y.body.tag==="ActionRequest")return{body:{tag:"ActionRequest",val:{id:Y.body.val.id,name:Y.body.val.name,args:yB0(bN(Y.body.val.args))}}};else return Y}),U=nmQ(J);if(U>ik0&&A.body.tag==="ActionRequest"){let Y=Number(A.body.val.id),Z=this.#_(Y),F=new mQ("message","incoming_too_long","Incoming message too long",{maxSize:ik0,actualSize:U});z4().warn({msg:"rejecting oversized connection action request",actionId:Y,actionName:Z.name,actualSize:U,maxSize:ik0}),Z.reject(F),this.#R(F);return}this.#F.send(J),z4().trace({msg:"sent websocket message",len:U})}catch(J){z4().warn({msg:"failed to send message, added to queue",error:J,connId:this.#D}),E=!0}else z4().debug({msg:"websocket not open, queueing message",readyState:D}),E=!0}else z4().debug({msg:"no websocket, queueing message"}),E=!0;if(!(Q==null?void 0:Q.ephemeral)&&E)this.#E.push(A),z4().debug({msg:"queued connection message",queueLength:this.#E.length,connId:this.#D,messageType:A.body.tag,actionName:(B=A.body.val)==null?void 0:B.name})}async#a(A){rk0.default(this.#F,"websocket must be defined");let Q=await TY4(A);return zc(this.#w,Q,CmQ,PmQ,($)=>{if($.body.tag!=="Error"||!$.body.val.actor)return $;return{body:{tag:"Error",val:{...$.body.val,actor:{...$.body.val.actor,generation:Number($.body.val.actor.generation)}}}}},($)=>{if($.body.tag==="Error")return{body:{tag:"Error",val:{group:$.body.val.group,code:$.body.val.code,message:$.body.val.message,metadata:$.body.val.metadata?wX(new Uint8Array($.body.val.metadata)):null,actionId:$.body.val.actionId,actor:$.body.val.actor?{actorId:$.body.val.actor.actorId,generation:Number($.body.val.actor.generation),key:$.body.val.actor.key??void 0}:void 0}}};else if($.body.tag==="ActionResponse")return{body:{tag:"ActionResponse",val:{id:$.body.val.id,output:wX(new Uint8Array($.body.val.output))}}};else if($.body.tag==="Event")return{body:{tag:"Event",val:{name:$.body.val.name,args:wX(new Uint8Array($.body.val.args))}}};else return $})}get actorId(){return this.#B}get connId(){return this.#D}get connectionId(){return this.#D}async dispose(){if(this.#A){z4().warn({msg:"connection already disconnected"});return}if(this.#A=!0,z4().debug({msg:"disposing actor conn"}),this.#L("idle"),clearInterval(this.#z),this.#Q.abort(),this.#u[Q30].delete(this),this.#F){let A=this.#F;if(A.readyState!==2&&A.readyState!==3){let{promise:Q,resolve:$}=UP((B)=>z4().warn({msg:"unhandled websocket close promise rejection",reason:B}));A.addEventListener("close",()=>$(void 0)),A.close(1000,"Disposed"),await Q}}else this.#j(new A30,!0);this.#F=void 0}#k(A,Q){this.#S({body:{tag:"SubscriptionRequest",val:{eventName:A,subscribe:Q}}},{ephemeral:!0})}};function emQ(A,Q){let{endpoint:$,path:B=["endpoint"],namespace:E,token:D}=Q,J;try{J=new URL($)}catch{A.addIssue({code:"custom",message:`invalid URL: ${$}`,path:B});return}if(J.search){A.addIssue({code:"custom",message:"endpoint cannot contain a query string",path:B});return}if(J.hash){A.addIssue({code:"custom",message:"endpoint cannot contain a fragment",path:B});return}let U=J.username?decodeURIComponent(J.username):void 0,Y=J.password?decodeURIComponent(J.password):void 0;if(Y&&!U){A.addIssue({code:"custom",message:"endpoint cannot have a token without a namespace",path:B});return}if(U&&E)A.addIssue({code:"custom",message:"cannot specify namespace both in endpoint URL and as a separate config option",path:["namespace"]});if(Y&&D)A.addIssue({code:"custom",message:"cannot specify token both in endpoint URL and as a separate config option",path:["token"]});return J.username="",J.password="",{endpoint:J.toString(),namespace:U,token:Y}}var nY4="http://localhost:6420",LZ4=4096,aY4=!1,AdQ=g7.object({endpoint:g7.string().optional().transform((A)=>{let Q=A??FU4()??XU4();if(!Q&&!aY4)aY4=!0,console.warn(`[rivetkit] No endpoint provided to client. Defaulting to ${nY4}. Starting in 2.2.0, an explicit endpoint will be required. Pass an endpoint to createClient() or createRivetKit(), or set the RIVET_ENDPOINT environment variable.`);return Q??nY4}),token:g7.string().optional().transform((A)=>A??IU4()),namespace:g7.string().optional().transform((A)=>A??GU4()),poolName:g7.string().default(()=>VU4()??"default"),encoding:vY4.default("bare"),headers:g7.record(g7.string(),g7.string()).optional().default(()=>({})),gateway:g7.object({skipReadyWait:g7.boolean().optional().default(!1)}).optional().default(()=>({skipReadyWait:!1})),getUpgradeWebSocket:g7.custom().optional(),disableMetadataLookup:g7.boolean().optional().default(!1),maxInputSize:g7.number().int().positive().default(LZ4),devtools:g7.boolean().default(()=>{var A,Q;return typeof window<"u"&&(((A=window==null?void 0:window.location)==null?void 0:A.hostname)==="127.0.0.1"||((Q=window.location)==null?void 0:Q.hostname)==="localhost")})}),jZ4=AdQ.transform((A,Q)=>QdQ(A,Q));function QdQ(A,Q){let $=emQ(Q,{endpoint:A.endpoint,path:["endpoint"],namespace:A.namespace,token:A.token});return{...A,endpoint:$==null?void 0:$.endpoint,namespace:($==null?void 0:$.namespace)??A.namespace??"default",token:($==null?void 0:$.token)??A.token}}function A6(){return GK("engine-client")}function $30(A){return A.endpoint??"http://127.0.0.1:6420"}async function qK(A,Q,$,B){let E=$30(A),D=YP(E,$,{namespace:A.namespace});A6().debug({msg:"making api call",method:Q,url:D});let J={...A.headers};if(A.token)J.Authorization=`Bearer ${A.token}`;return await Jf0({method:Q,url:D,headers:J,body:B,encoding:"json",skipParseResponse:!1,requestVersionedDataHandler:void 0,requestVersion:void 0,responseVersionedDataHandler:void 0,responseVersion:void 0,requestZodSchema:j.any(),responseZodSchema:j.any(),requestToJson:(U)=>U,requestToBare:(U)=>U,responseFromJson:(U)=>U,responseFromBare:(U)=>U})}async function $dQ(A,Q,$){return qK(A,"GET",`/actors?actor_ids=${encodeURIComponent($)}`)}async function BdQ(A,Q,$){let B=IB0($);return qK(A,"GET",`/actors?name=${encodeURIComponent(Q)}&key=${encodeURIComponent(B)}`)}async function EdQ(A,Q){return qK(A,"GET",`/actors?name=${encodeURIComponent(Q)}`)}async function DdQ(A,Q){return qK(A,"PUT","/actors",Q)}async function JdQ(A,Q){return qK(A,"POST","/actors",Q)}async function UdQ(A,Q){return qK(A,"DELETE",`/actors/${encodeURIComponent(Q)}`)}async function YdQ(A){return qK(A,"GET","/metadata")}async function ZdQ(A,Q,$){return qK(A,"GET",`/actors/${encodeURIComponent(Q)}/kv/keys/${encodeURIComponent($)}`)}function KP(A={}){return A.skipReadyWait===!0}async function oY4(A,Q,$,B={}){let E=null,D=XdQ(A,$,B);if($.method!=="GET"&&$.method!=="HEAD"){if($.bodyUsed)throw Error("Request body has already been consumed");let U=await $.arrayBuffer();if(U.byteLength!==0)E=U,D.delete("transfer-encoding"),D.set("content-length",String(E.byteLength))}let J=new Request(Q,{method:$.method,headers:D,body:E,signal:$.signal});return FdQ(await fetch(J))}function FdQ(A){return new Response(A.body,A)}function XdQ(A,Q,$){let B=new Headers;Q.headers.forEach((E,D)=>{B.set(D,E)});for(let[E,D]of Object.entries(A.headers))B.set(E,D);if(A.token)B.set(ZyQ,A.token);if($.directActorId!==void 0)B.set(FyQ,"actor"),B.set(XyQ,$.directActorId);if(KP($))B.set(IyQ,"1");return B}var rY4=new Map;function IdQ(A,Q,$){if(!$)return;let B=A;B.__rivetGetHibernatableAckState=Q.getState,B.__rivetWaitForHibernatableAck=Q.waitForAck}function GdQ(A,Q,$){if(!$)return;IdQ(A,{getState:()=>{let B=rY4.get(Q);if(!B)throw Error(`remote hibernatable websocket ack hooks are unavailable for token ${Q}`);return B.getState()},waitForAck:async(B)=>{let E=rY4.get(Q);if(!E)throw Error(`remote hibernatable websocket ack hooks are unavailable for token ${Q}`);await E.waitForAck(B)}},$)}var VdQ=class{CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;#A;#Q=new Map;#$=[];#B=null;#D=null;#E=null;#U=null;constructor(A){this.#A=A;for(let Q of["open","message","close","error"])this.#A.addEventListener(Q,($)=>{this.#J(Q,$)})}get readyState(){return this.#A.readyState}get binaryType(){return this.#A.binaryType}set binaryType(A){this.#A.binaryType=A}get bufferedAmount(){return this.#A.bufferedAmount}get extensions(){return this.#A.extensions}get protocol(){return this.#A.protocol}get url(){return this.#A.url}get onopen(){return this.#B}set onopen(A){this.#B=A,this.#Y()}get onclose(){return this.#D}set onclose(A){this.#D=A,this.#Y()}get onerror(){return this.#E}set onerror(A){this.#E=A,this.#Y()}get onmessage(){return this.#U}set onmessage(A){this.#U=A,this.#Y()}send(A){this.#A.send(A)}close(A,Q){this.#A.close(A,Q)}addEventListener(A,Q){let $=this.#Q.get(A)??new Set;$.add(Q),this.#Q.set(A,$),this.#Y()}removeEventListener(A,Q){var $;($=this.#Q.get(A))==null||$.delete(Q)}dispatchEvent(A){return this.#X(A.type,A)}#J(A,Q){if(this.#Z(A)){this.#X(A,Q);return}this.#$.push({type:A,event:Q})}#Y(){if(this.#$.length===0)return;let A=this.#$;this.#$=[];for(let Q of A){if(this.#Z(Q.type)){this.#X(Q.type,Q.event);continue}this.#$.push(Q)}}#Z(A){var Q;let $=A==="open"?this.#B:A==="close"?this.#D:A==="error"?this.#E:A==="message"?this.#U:null;return Boolean($)||(((Q=this.#Q.get(A))==null?void 0:Q.size)??0)>0}#X(A,Q){let $=this.#Q.get(A);if($)for(let E of $)E(Q);let B=A==="open"?this.#B:A==="close"?this.#D:A==="error"?this.#E:A==="message"?this.#U:null;return B==null||B(Q),!0}};function sY4(A,Q,$,B=""){let E=$!==void 0?`@${encodeURIComponent($)}`:"",D=`/gateway/${encodeURIComponent(Q)}${E}${B}`;return YP(A,D)}function KdQ(A,Q,$,B,E="",D=LZ4,J=void 0,U,Y={}){if(Q.length===0)throw Error("actor query namespace must not be empty");let Z,F=new URLSearchParams;if(F.append("rvt-namespace",Q),"getForKey"in $){if(Z=$.getForKey.name,F.append("rvt-method","get"),tY4(F,$.getForKey.key),J!==void 0)throw Error("Actor query method=get does not support crashPolicy.");if(U!==void 0)throw Error("Actor query method=get does not support runnerName.")}else if("getOrCreateForKey"in $){if(Z=$.getOrCreateForKey.name,F.append("rvt-method","getOrCreate"),U===void 0)throw Error("Actor query method=getOrCreate requires runnerName.");if(F.append("rvt-runner",U),tY4(F,$.getOrCreateForKey.key),zdQ(F,$.getOrCreateForKey.input,D),$.getOrCreateForKey.region!==void 0)F.append("rvt-region",$.getOrCreateForKey.region);F.append("rvt-crash-policy",J??"sleep")}else throw Error("Actor query gateway URLs only support get and getOrCreate.");if(Z.length===0)throw Error("actor query name must not be empty");if(B!==void 0)F.append("rvt-token",B);if(KP(Y))F.append("rvt-skip-ready-wait","true");let X=F.toString(),I;if(E.endsWith("?")||E.endsWith("&"))I="";else if(E.includes("?"))I="&";else I="?";let G=`/gateway/${encodeURIComponent(Z)}${E}${I}${X}`;return YP(A,G)}function tY4(A,Q){if(Q.length>0)A.append("rvt-key",Q.join(","))}function zdQ(A,Q,$){if(Q===void 0)return;let B=bN(Q);if(B.byteLength>$)throw Error(`Actor query input exceeds maxInputSize (${B.byteLength} > ${$} bytes). Increase client maxInputSize to allow larger query payloads.`);A.append("rvt-input",WdQ(B))}function WdQ(A){return aB0(A).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function CdQ(A,Q,$,B,E={}){let D=await bk0(),J=typeof process<"u"&&process.env.VITEST?crypto.randomUUID():void 0;A6().debug({msg:"opening websocket to actor via guard",gatewayUrl:Q});let U=new D(Q,PZ4(A,$,B,J,E.directActorId?{target:"actor",actorId:E.directActorId}:void 0,E));U.binaryType="arraybuffer";let Y=new VdQ(U);if(J)GdQ(Y,J,!0);return Y}function PZ4(A,Q,$,B,E,D={}){let J=[];if(J.push(GyQ),J.push(`${zyQ}${Q}`),E){if(J.push(`${VyQ}${E.target}`),J.push(`${KyQ}${E.actorId}`),A.token)J.push(`${CyQ}${A.token}`)}if(KP(D))J.push(HyQ);if($)J.push(`${WyQ}${encodeURIComponent(JSON.stringify($))}`);if(B)J.push(`${NyQ}${encodeURIComponent(B)}`);return J}var eY4=new Map;async function HdQ(A){let Q=$30(A),$=eY4.get(Q);if($)return $;let B=Cc(async()=>{A6().debug({msg:"fetching metadata",endpoint:Q});let E=await YdQ(A);return A6().debug({msg:"received metadata",endpoint:Q,clientEndpoint:E.clientEndpoint}),E},{forever:!0,minTimeout:500,maxTimeout:15000,onFailedAttempt:(E)=>{if(E.attemptNumber>1)A6().warn({msg:"failed to fetch metadata, retrying",endpoint:Q,attempt:E.attemptNumber,error:V3(E)})}});return eY4.set(Q,B),B}async function NdQ(A,Q,$){let B=await bk0(),E={};return{onOpen:async(D,J)=>{if(A6().debug({msg:"client websocket connected",targetUrl:Q}),J.readyState!==1){A6().warn({msg:"client websocket not open on connection",targetUrl:Q,readyState:J.readyState});return}let U=new B(Q,$);E.targetWs=U,E.connectPromise=new Promise((Y,Z)=>{U.addEventListener("open",()=>{if(A6().debug({msg:"target websocket connected",targetUrl:Q}),J.readyState!==1){A6().warn({msg:"client websocket closed before target connected",targetUrl:Q,clientReadyState:J.readyState}),U.close(1001,"Client disconnected"),Z(Error("Client disconnected"));return}Y()}),U.addEventListener("error",(F)=>{A6().warn({msg:"target websocket error during connection",targetUrl:Q}),Z(F)})}),E.targetWs.addEventListener("message",(Y)=>{if(typeof Y.data==="string"||Y.data instanceof ArrayBuffer)J.send(Y.data);else if(Y.data instanceof Blob)Y.data.arrayBuffer().then((Z)=>{J.send(Z)})}),E.targetWs.addEventListener("close",(Y)=>{A6().debug({msg:"target websocket closed",targetUrl:Q,code:Y.code,reason:Y.reason}),nk0(J,Y.code,Y.reason)}),E.targetWs.addEventListener("error",(Y)=>{A6().error({msg:"target websocket error",targetUrl:Q,error:V3(Y)}),nk0(J,1011,"Target WebSocket error")})},onMessage:async(D,J)=>{if(!E.targetWs||!E.connectPromise){A6().error({msg:"websocket state not initialized",targetUrl:Q});return}try{if(await E.connectPromise,E.targetWs.readyState===B.OPEN)E.targetWs.send(D.data);else A6().warn({msg:"target websocket not open",targetUrl:Q,readyState:E.targetWs.readyState})}catch(U){A6().error({msg:"failed to connect to target websocket",targetUrl:Q,error:U}),nk0(J,1011,"Failed to connect to target")}},onClose:(D,J)=>{if(A6().debug({msg:"client websocket closed",targetUrl:Q,code:D.code,reason:D.reason,wasClean:D.wasClean}),E.targetWs){if(E.targetWs.readyState===B.OPEN||E.targetWs.readyState===B.CONNECTING)E.targetWs.close(1000,D.reason||"Client disconnected")}},onError:(D,J)=>{if(A6().error({msg:"client websocket error",targetUrl:Q,event:D}),E.targetWs){if(E.targetWs.readyState===B.OPEN)E.targetWs.close(1011,"Client WebSocket error");else if(E.targetWs.readyState===B.CONNECTING)E.targetWs.close()}}}}function nk0(A,Q,$){if(A.readyState===1)A.close(Q,$);else if("close"in A&&A.readyState===WebSocket.OPEN)A.close(Q,$)}var vZ4=class{#A;#Q;constructor(A){if(zU4()==="phase-production-build")A6().info("detected next.js build phase, disabling health check"),A.disableMetadataLookup=!0;if(this.#A={...A},!A.disableMetadataLookup)this.#Q=HdQ(this.#A).then((Q)=>{if(Q.clientEndpoint){if(this.#A.endpoint=Q.clientEndpoint,Q.clientNamespace)this.#A.namespace=Q.clientNamespace;if(Q.clientToken)this.#A.token=Q.clientToken;A6().info({msg:"overriding client endpoint",endpoint:Q.clientEndpoint,namespace:Q.clientNamespace,token:Q.clientToken})}A6().info({msg:"connected to rivetkit runtime",runtime:Q.runtime,version:Q.version,envoy:Q.envoy})})}async getForId({name:A,actorId:Q}){await this.#Q;let B=(await $dQ(this.#A,A,Q)).actors[0];if(!B)return;if(B.name!==A){A6().debug({msg:"actor name mismatch from api",actorId:Q,apiName:B.name,requestedName:A});return}return qc(B)}async getWithKey({name:A,key:Q}){await this.#Q,A6().debug({msg:"getWithKey: searching for actor",name:A,key:Q});try{let B=(await BdQ(this.#A,A,Q)).actors[0];if(!B)return;return A6().debug({msg:"getWithKey: found actor via api",actorId:B.actor_id,name:A,key:Q}),qc(B)}catch($){if($ instanceof mQ&&$.group==="actor"&&$.code==="not_found")return;throw $}}async getOrCreateWithKey(A){await this.#Q;let{name:Q,key:$,input:B,region:E,crashPolicy:D}=A;A6().info({msg:"getOrCreateWithKey: getting or creating actor via engine api",name:Q,key:$});let{actor:J,created:U}=await DdQ(this.#A,{datacenter:E,name:Q,key:IB0($),runner_name_selector:this.#A.poolName,input:B?aB0(bN(B)):void 0,crash_policy:D??"sleep"});return A6().info({msg:"getOrCreateWithKey: actor ready",actorId:J.actor_id,name:Q,key:$,created:U}),qc(J)}async createActor({name:A,key:Q,input:$,region:B,crashPolicy:E}){await this.#Q,A6().info({msg:"creating actor via engine api",name:A,key:Q});let D=await JdQ(this.#A,{datacenter:B,name:A,runner_name_selector:this.#A.poolName,key:IB0(Q),input:$?aB0(bN($)):void 0,crash_policy:E??"sleep"});return A6().info({msg:"actor created",actorId:D.actor.actor_id,name:A,key:Q}),qc(D.actor)}async listActors({name:A}){return await this.#Q,A6().debug({msg:"listing actors via engine api",name:A}),(await EdQ(this.#A,A)).actors.map(qc)}async destroyActor(A){await this.#Q,A6().info({msg:"destroying actor via engine api",actorId:A}),await UdQ(this.#A,A),A6().info({msg:"actor destroyed",actorId:A})}async sendRequest(A,Q,$={}){await this.#Q;let B=QZ4(Q),E=this.#$(A,B,$),D={...$,directActorId:KP($)?ak0(A):void 0};return oY4(this.#A,E,Q,D)}async openWebSocket(A,Q,$,B,E={}){await this.#Q;let D=this.#$(Q,A,E);return CdQ(this.#A,D,$,B,{...E,directActorId:KP(E)?ak0(Q):void 0})}async buildGatewayUrl(A,Q={}){return await this.#Q,this.#$(A,"",Q)}async proxyRequest(A,Q,$){await this.#Q;let B=this.#$({directId:$},QZ4(Q));return oY4(this.#A,B,Q)}async proxyWebSocket(A,Q,$,B,E){var D,J;await this.#Q;let U=(J=(D=this.#A).getUpgradeWebSocket)==null?void 0:J.call(D);RZ4.default(U,"missing getUpgradeWebSocket");let Y=$30(this.#A),Z=YP(Y,Q),F=Z.replace("http://","ws://");A6().debug({msg:"forwarding websocket to actor via guard",actorId:$,path:Q,guardUrl:Z});let X=PZ4(this.#A,B,E,void 0,{target:"actor",actorId:$}),I=await NdQ(A,F,X);return await U(()=>I)(A,WU4())}async kvGet(A,Q){return await this.#Q,A6().debug({msg:"getting kv value via engine api",key:Q}),(await ZdQ(this.#A,A,new TextDecoder("utf8").decode(Q))).value}async kvBatchGet(A,Q){throw Error("kvBatchGet not supported on remote engine client")}async kvBatchPut(A,Q){throw Error("kvBatchPut not supported on remote engine client")}async kvBatchDelete(A,Q){throw Error("kvBatchDelete not supported on remote engine client")}async kvDeleteRange(A,Q,$){throw Error("kvDeleteRange not supported on remote engine client")}displayInformation(){return{properties:{}}}setGetUpgradeWebSocket(A){this.#A.getUpgradeWebSocket=A}#$(A,Q,$={}){let B=$30(this.#A);if(KP($)&&ak0(A)&&qdQ(Q))return YP(B,Q);if("directId"in A)return sY4(B,A.directId,this.#A.token,Q);if("getForId"in A)return sY4(B,A.getForId.actorId,this.#A.token,Q);if("getForKey"in A||"getOrCreateForKey"in A)return KdQ(B,this.#A.namespace,A,this.#A.token,Q,this.#A.maxInputSize,void 0,"getOrCreateForKey"in A?this.#A.poolName:void 0,$);if("create"in A)throw Error("Gateway URLs only support direct actor IDs, get, and getOrCreate targets.");throw Error("unreachable: unknown gateway target type")}};function qdQ(A){return udQ(A)||AZ4(A,$Z4)||AZ4(A,YyQ)||A.startsWith(BZ4)}function AZ4(A,Q){return A===Q||A.startsWith(`${Q}?`)}function udQ(A){let Q=A.slice(8);return A.startsWith("/request")&&(Q.length===0||Q.startsWith("/")||Q.startsWith("?"))}function ak0(A){if("directId"in A)return A.directId;if("getForId"in A)return A.getForId.actorId;return}function QZ4(A){let Q=new URL(A.url);return`${Q.pathname}${Q.search}`}function qc(A){return{actorId:A.actor_id,name:A.name,key:JJ4(A.key),createTs:A.create_ts,startTs:A.start_ts??null,connectableTs:A.connectable_ts??null,sleepTs:A.sleep_ts??null,destroyTs:A.destroy_ts??null,error:A.error??void 0}}function wdQ(){return GK("devtools")}var MdQ=(A=Ek0)=>`https://releases.rivet.dev/rivet/latest/devtools/mod.js?v=${A}`,TZ4="rivetkit-devtools-script";function OdQ(A){if(!window){wdQ().warn("devtools not available outside browser environment");return}if(!document.getElementById(TZ4)){let Q=document.createElement("script");Q.id=TZ4,Q.src=MdQ(),Q.async=!0,document.head.appendChild(Q)}window.__rivetkit=window.__rivetkit||[],window.__rivetkit.push(A)}function Uf0(A){let Q=A===void 0?{}:typeof A==="string"?{endpoint:A}:A,$=jZ4.parse(Q),B=new vZ4($);if($.devtools)OdQ($);return MZ4(B,$)}function Z7(A){return Uf0(LdQ(A))}var NP=65536;function LdQ(A){let Q=RdQ()??jdQ(A);if(A===void 0)return Q?{poolName:Q,maxInputSize:NP,devtools:!1}:{maxInputSize:NP,devtools:!1};if(typeof A==="string")return Q?{endpoint:A,poolName:Q,maxInputSize:NP,devtools:!1}:{endpoint:A,maxInputSize:NP,devtools:!1};return Q?{...A,poolName:Q,maxInputSize:NP,devtools:!1}:{...A,maxInputSize:NP,devtools:!1}}function jdQ(A){if(A===void 0||typeof A==="string")return;let Q=A.poolName?.trim();return Q&&Q.length>0?Q:void 0}function RdQ(){if(typeof process>"u")return;let A=process.env.RIVET_POOL?.trim();return A&&A.length>0?A:void 0}class Mc extends Error{constructor(A){super(A);this.name="ThreadClientError"}}class dQ extends Mc{cause;constructor(A,Q){super(A);this.cause=Q;this.name="NetworkError"}}class oB extends Mc{cause;constructor(A,Q){super(A);this.cause=Q;this.name="ThreadClientConnectionError"}}class Oc extends Mc{code;payload;constructor(A,Q,$){super(A);this.code=Q;this.payload=$;this.name="ExecutorHandshakeRejectedError"}}function Lc(A){return A instanceof Oc&&A.code==="EXECUTOR_ALREADY_CONNECTED"}a0();a0();function _Z4(A){if(!A._regex)try{A._regex=new RegExp(A.pattern,A.caseInsensitive?"gi":"g")}catch(Q){S.warn("Error compiling regex",{pattern:A.id,error:Q}),A._regex=/$^/}return A._regex}var SZ4=[{id:"sourcegraph-access-token-v3",category:"sourcegraph",title:"Sourcegraph Access Token (v3)",pattern:String.raw`(sgp_(?:[a-fA-F0-9]{16}|local)_[a-fA-F0-9]{40})`,keywords:["sgp_"]},{id:"sourcegraph-access-token-v2",category:"sourcegraph",title:"Sourcegraph Access Token (v2, deprecated)",pattern:String.raw`(sgp_[a-fA-F0-9]{40})`,keywords:["sgp_"]},{id:"sourcegraph-dotcom-user-gateway",category:"sourcegraph",title:"Sourcegraph Dotcom User Gateway Access Token",pattern:String.raw`(sgd_[a-fA-F0-9]{64})`,keywords:["sgd_"]},{id:"sourcegraph-license-key",category:"sourcegraph",title:"Sourcegraph License Key Token",pattern:String.raw`(slk_[a-fA-F0-9]{64})`,keywords:["slk_"]},{id:"sourcegraph-enterprise-subscription",category:"sourcegraph",title:"Sourcegraph Enterprise subscription Token",pattern:String.raw`(sgs_[a-fA-F0-9]{64})`,keywords:["sgs_"]},{id:"sourcegraph-amp",category:"sourcegraph",title:"Sourcegraph Amp Access Token",pattern:String.raw`(sgamp_user_[A-Z0-9]{26}_[a-f0-9]{64})`,keywords:["sgamp_user_"]},{id:"sourcegraph-amp-auth-bypass",category:"sourcegraph",title:"Sourcegraph Amp Auth Bypass Token",pattern:String.raw`(sgamp_user_auth-bypass_[a-zA-Z0-9_-]+)`,keywords:["sgamp_user_auth-bypass_"]},{id:"sourcegraph-workspace-token",category:"sourcegraph",title:"Sourcegraph Workspace Access Token",pattern:String.raw`(sgp_ws[a-fA-F0-9]{32}_[a-fA-F0-9]{40})`,keywords:["sgp_ws"]},{id:"github-pat",category:"github",title:"GitHub Personal Access Token",pattern:String.raw`(ghp_[0-9a-zA-Z]{36})`,keywords:["ghp_"]},{id:"github-oauth",category:"github",title:"GitHub OAuth Access Token",pattern:String.raw`(gho_[0-9a-zA-Z]{36})`,keywords:["gho_"]},{id:"github-app-token",category:"github",title:"GitHub App Token",pattern:String.raw`((ghu|ghs)_[0-9a-zA-Z]{36})`,keywords:["ghu_","ghs_"]},{id:"github-refresh-token",category:"github",title:"GitHub Refresh Token",pattern:String.raw`(ghr_[0-9a-zA-Z]{76})`,keywords:["ghr_"]},{id:"github-fine-grained-pat",category:"github",title:"GitHub Fine-grained personal access tokens",pattern:String.raw`(github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59})`,keywords:["github_pat_"]},{id:"gitlab-pat",category:"gitlab",title:"GitLab Personal Access Token",pattern:String.raw`(glpat-[0-9a-zA-Z_-]{20})`,keywords:["glpat-"]},{id:"bitbucket-pat",category:"bitbucket",title:"Bitbucket Personal Access Token",pattern:String.raw`(bbpat-[A-Za-z0-9]{20,200})`,keywords:["bbpat-"]},{id:"bitbucket-repo-access-token",category:"bitbucket",title:"Bitbucket Repository Access Token",pattern:String.raw`(bbrat-[A-Za-z0-9]{20,200})`,keywords:["bbrat-"]},{id:"bitbucket-dc-http-token",category:"bitbucket",title:"Bitbucket DC/Server HTTP Access Token",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}bitbucket[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([A-Za-z0-9+/]{40,80}={0,2})['"]`,keywords:["bitbucket"]},{id:"aws-access-key-id",category:"aws",title:"AWS Access Key ID",pattern:String.raw`((A3T[A-Z0-9]|AKIA|ASIA)[A-Z0-9]{16})`,keywords:["A3T","AKIA","ASIA"]},{id:"hugging-face-access-token",category:"huggingface",title:"Hugging Face Access Token",pattern:String.raw`(hf_[A-Za-z0-9]{34,40})`,keywords:["hf_"]},{id:"private-key",category:"asymmetric-private-key",title:"Asymmetric Private Key",pattern:String.raw`-----\s*?BEGIN[ A-Z0-9_-]*?PRIVATE KEY(?: BLOCK)?\s*?-----\s*([A-Za-z0-9=+/\s]+)\s*-----\s*?END[ A-Z0-9_-]*? PRIVATE KEY(?: BLOCK)?\s*?-----`,keywords:["-----"],caseInsensitive:!0},{id:"shopify-token",category:"shopify",title:"Shopify token",pattern:String.raw`(shp(ss|at|ca|pa)_[a-fA-F0-9]{32})`,keywords:["shpss_","shpat_","shpca_","shppa_"]},{id:"slack-access-token",category:"slack",title:"Slack token",pattern:String.raw`((xox[baoprs]-|xapp-|xwfp-)([0-9a-zA-Z-]{10,100}))`,keywords:["xoxb-","xoxa-","xoxp-","xoxr-","xoxs-","xoxo-","xapp-","xwfp-"]},{id:"slack-config-refresh-token",category:"slack",title:"Slack config refresh token",pattern:String.raw`(xoxe-\d-[a-zA-Z0-9]{146})`,caseInsensitive:!0,keywords:["xoxe-"]},{id:"slack-config-access-token",category:"slack",title:"Slack config access token",pattern:String.raw`(xoxe.xox[bp]-\d-[A-Z0-9]{163,166})`,caseInsensitive:!0,keywords:["xoxe.xoxb-","xoxe.xoxp-"]},{id:"slack-web-hook",category:"slack",title:"Slack Webhook",pattern:String.raw`(https:\/\/hooks\.slack\.com\/(services|triggers|workflows)\/[A-Za-z0-9+\/]{43,56})`,caseInsensitive:!0,keywords:["hooks.slack.com"]},{id:"stripe-secret-token",category:"stripe",title:"Stripe Secret Key",pattern:String.raw`(sk_(test|live)_[0-9a-z]{10,99})`,keywords:["sk_test_","sk_live_"],caseInsensitive:!0},{id:"supabase-service-key",category:"supabase",title:"Supabase Service Key",pattern:String.raw`(sbp_[a-fA-F0-9]{40})`,keywords:["sbp_"]},{id:"pypi-upload-token",category:"pypi",title:"PyPI upload token",pattern:String.raw`(pypi-AgEIcHlwaS5vcmc[A-Za-z0-9_-]{50,1000})`,keywords:["pypi-AgEIcHlwaS5vcmc"]},{id:"gcp-service-account",category:"google",title:"Google (GCP) Service-account",pattern:String.raw`("type": "service_account")`,keywords:['"type": "service_account"']},{id:"cloudflare-api-token",category:"unknown",title:"Cloudflare API Token",pattern:String.raw`\b(cfut_[A-Za-z0-9]{48})\b`,keywords:["cfut_"]},{id:"e2b-api-key",category:"unknown",title:"E2B API Key",pattern:String.raw`\b(e2b_[a-f0-9]{40})\b`,keywords:["e2b_"]},{id:"google-api-key",category:"google",title:"Google API Key",pattern:String.raw`\b(AIza[0-9A-Za-z_-]{35,40})\b`,keywords:["AIza"]},{id:"heroku-api-key",category:"heroku",title:"Heroku API Key",pattern:String.raw`(?:heroku[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](\d[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})['"]`,keywords:["heroku"],caseInsensitive:!0},{id:"twilio-api-key",category:"twilio",title:"Twilio API Key",pattern:String.raw`(SK[0-9a-fA-F]{32})`,keywords:["SK"]},{id:"age-secret-key",category:"age",title:"Age secret key",pattern:String.raw`(AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58})`,keywords:["AGE-SECRET-KEY-1"]},{id:"jwt-token",category:"jwt",title:"JWT token",pattern:String.raw`(ey[a-zA-Z0-9]{17,}\.ey[a-zA-Z0-9/\\_-]{17,}\.(?:[a-zA-Z0-9/\\_-]{10,}={0,2})?)`,keywords:[".eyJ"]},{id:"npm-access-token",category:"npm",title:"npm access token",pattern:String.raw`(npm_[a-z0-9]{36})`,keywords:["npm_"],caseInsensitive:!0},{id:"sendgrid-api-token",category:"sendgrid",title:"SendGrid API token",pattern:String.raw`(SG\.[a-z0-9_.-]{66})`,keywords:["SG."],caseInsensitive:!0},{id:"aws-secret-access-key",category:"aws",title:"AWS Secret Access Key",pattern:String.raw`(aws[_-]secret[_-]access[_-]key[_-][A-Za-z0-9/+=]{40})`,keywords:["key"],caseInsensitive:!0},{id:"dockerconfig-secret",category:"docker",title:"Dockerconfig secret exposed",pattern:String.raw`((\.dockerconfigjson|dockercfg):\s*\|*\s*((ey|ew)+[A-Za-z0-9/+=]+))`,keywords:["dockerc"],caseInsensitive:!0},{id:"linear-api-token",category:"linear",title:"Linear API token",pattern:String.raw`(lin_api_[a-z0-9]{40})`,keywords:["lin_api_"],caseInsensitive:!0},{id:"sendinblue-api-token",category:"sendinblue",title:"Sendinblue API token",pattern:String.raw`(xkeysib-[a-f0-9]{64}-[a-z0-9]{16})`,keywords:["xkeysib-"],caseInsensitive:!0},{id:"planetscale-api-token",category:"planetscale",title:"PlanetScale API token",pattern:String.raw`(pscale_tkn_[a-z0-9_.-]{43})`,keywords:["pscale_tkn_"],caseInsensitive:!0},{id:"doppler-api-token",category:"doppler",title:"Doppler API token",pattern:String.raw`(dp\.pt\.[a-z0-9]{43})`,keywords:["dp.pt."],caseInsensitive:!0},{id:"discord-api-token",category:"discord",title:"Discord API key",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{64})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"pulumi-api-token",category:"pulumi",title:"Pulumi API token",pattern:String.raw`(pul-[a-f0-9]{40})`,keywords:["pul-"]},{id:"postman-api-token",category:"postman",title:"Postman API token",pattern:String.raw`(PMAK-[a-f0-9]{24}-[a-f0-9]{34})`,keywords:["PMAK-"],caseInsensitive:!0},{id:"facebook-token",category:"facebook",title:"Facebook token",pattern:String.raw`(?:facebook[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["facebook"],caseInsensitive:!0},{id:"twitter-token",category:"twitter",title:"Twitter token",pattern:String.raw`(?:twitter[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{35,44})['"]`,keywords:["twitter"],caseInsensitive:!0},{id:"adobe-client-id",category:"adobe",title:"Adobe Client ID (Oauth Web)",pattern:String.raw`(?:adobe[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["adobe"],caseInsensitive:!0},{id:"adobe-client-secret",category:"adobe",title:"Adobe Client Secret",pattern:String.raw`(p8e-[a-z0-9]{32})`,keywords:["p8e-"],caseInsensitive:!0},{id:"alibaba-access-key-id",category:"alibaba",title:"Alibaba AccessKey ID",pattern:String.raw`((LTAI)[a-z0-9]{20})`,keywords:["LTAI"],caseInsensitive:!0},{id:"alibaba-secret-key",category:"alibaba",title:"Alibaba Secret Key",pattern:String.raw`(?:alibaba[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{30})['"]`,keywords:["alibaba"],caseInsensitive:!0},{id:"asana-client-id",category:"asana",title:"Asana Client ID",pattern:String.raw`(?:asana[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([0-9]{16})['"]`,keywords:["asana"],caseInsensitive:!0},{id:"asana-client-secret",category:"asana",title:"Asana Client Secret",pattern:String.raw`(?:asana[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{32})['"]`,keywords:["asana"],caseInsensitive:!0},{id:"atlassian-api-token",category:"atlassian",title:"Atlassian API token",pattern:String.raw`(?:atlassian[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{24})['"]`,keywords:["atlassian"],caseInsensitive:!0},{id:"beamer-api-token",category:"beamer",title:"Beamer API token",pattern:String.raw`(?:beamer[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](b_[a-z0-9=_-]{44})['"]`,keywords:["beamer"],caseInsensitive:!0},{id:"buildkite-agent-token",category:"buildkite",title:"Buildkite API Token V2",pattern:String.raw`(bkua_[a-fA-F0-9]{40})`,keywords:["bkua_"]},{id:"clojars-api-token",category:"clojars",title:"Clojars API token",pattern:String.raw`(CLOJARS_[a-z0-9]{60})`,keywords:["CLOJARS_"],caseInsensitive:!0},{id:"contentful-delivery-api-token",category:"contentful-delivery",title:"Contentful delivery API token",pattern:String.raw`(?:contentful[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{43})['"]`,keywords:["contentful"],caseInsensitive:!0},{id:"databricks-api-token",category:"databricks",title:"Databricks API token",pattern:String.raw`(dapi[a-h0-9]{32})`,keywords:["dapi"]},{id:"discord-client-id",category:"discord",title:"Discord client ID",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([0-9]{18})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"discord-client-secret",category:"discord",title:"Discord client secret",pattern:String.raw`(?:discord[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{32})['"]`,keywords:["discord"],caseInsensitive:!0},{id:"dropbox-api-secret",category:"dropbox",title:"Dropbox API secret/key",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{15})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"dropbox-short-lived-api-token",category:"dropbox",title:"Dropbox short lived API token",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](sl\.[a-z0-9=_-]{135})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"dropbox-long-lived-api-token",category:"dropbox",title:"Dropbox long lived API token",pattern:String.raw`(?:dropbox[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9_=-]{43})['"]`,keywords:["dropbox"],caseInsensitive:!0},{id:"duffel-api-token",category:"duffel",title:"Duffel API token",pattern:String.raw`(duffel_(test|live)_[a-z0-9_-]{43})`,keywords:["duffel_test_","duffel_live_"],caseInsensitive:!0},{id:"dynatrace-api-token",category:"dynatrace",title:"Dynatrace API token",pattern:String.raw`(dt0c01\.[a-z0-9]{24}\.[a-z0-9]{64})`,keywords:["dt0c01."],caseInsensitive:!0},{id:"easypost-api-token",category:"easypost",title:"EasyPost API token",pattern:String.raw`(EZ[AT]K[a-z0-9]{54})`,keywords:["EZAK","EZAT"],caseInsensitive:!0},{id:"fastly-api-token",category:"fastly",title:"Fastly API token",pattern:String.raw`(?:fastly[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_-]{32})['"]`,keywords:["fastly"],caseInsensitive:!0},{id:"finicity-client-secret",category:"finicity",title:"Finicity client secret",pattern:String.raw`(?:finicity[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{20})['"]`,keywords:["finicity"],caseInsensitive:!0},{id:"finicity-api-token",category:"finicity",title:"Finicity API token",pattern:String.raw`(?:finicity[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["finicity"],caseInsensitive:!0},{id:"flutterwave-public-key",category:"flutterwave",title:"Flutterwave public/secret key",pattern:String.raw`(FLW(PUB|SEC)K_TEST-[a-h0-9]{32}-X)`,keywords:["FLWSECK_TEST-","FLWPUBK_TEST-"],caseInsensitive:!0},{id:"flutterwave-enc-key",category:"flutterwave",title:"Flutterwave encrypted key",pattern:String.raw`(FLWSECK_TEST[a-h0-9]{12})`,keywords:["FLWSECK_TEST"]},{id:"frameio-api-token",category:"frameio",title:"Frame.io API token",pattern:String.raw`(fio-u-[a-z0-9_=-]{64})`,keywords:["fio-u-"],caseInsensitive:!0},{id:"gocardless-api-token",category:"gocardless",title:"GoCardless API token",pattern:String.raw`(live_[a-z0-9_=-]{40})`,keywords:["live_"],caseInsensitive:!0},{id:"grafana-api-token",category:"grafana",title:"Grafana API token",pattern:String.raw`(eyJrIjoi[a-z0-9_=-]{72,92})`,keywords:["eyJrIjoi"],caseInsensitive:!0},{id:"hashicorp-tf-api-token",category:"hashicorp",title:"HashiCorp Terraform user/org API token",pattern:String.raw`([a-z0-9]{14}\.atlasv1\.[a-z0-9_=-]{60,70})`,keywords:["atlasv1."],caseInsensitive:!0},{id:"hubspot-api-token",category:"hubspot",title:"HubSpot API token",pattern:String.raw`(?:hubspot[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["hubspot"],caseInsensitive:!0},{id:"intercom-api-token",category:"intercom",title:"Intercom API token",pattern:String.raw`(?:intercom[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9=_]{60})['"]`,keywords:["intercom"],caseInsensitive:!0},{id:"intercom-client-secret",category:"intercom",title:"Intercom client secret/ID",pattern:String.raw`(?:intercom[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["intercom"],caseInsensitive:!0},{id:"ionic-api-token",category:"ionic",title:"Ionic API token",pattern:String.raw`(?:ionic[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"](ion_[a-z0-9]{42})['"]`,keywords:["ionic"],caseInsensitive:!0},{id:"linear-client-secret",category:"linear",title:"Linear client secret/ID",pattern:String.raw`(?:linear[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32})['"]`,keywords:["linear"],caseInsensitive:!0},{id:"lob-api-key",category:"lob",title:"Lob API Key",pattern:String.raw`(?:lob[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]((live|test)_[a-f0-9]{35})['"]`,keywords:["lob"],caseInsensitive:!0},{id:"mailchimp-api-key",category:"mailchimp",title:"Mailchimp API key",pattern:String.raw`(?:mailchimp[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-f0-9]{32}-us20)['"]`,keywords:["mailchimp"],caseInsensitive:!0},{id:"mailgun-token",category:"mailgun",title:"Mailgun private API token",pattern:String.raw`(?:mailgun[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]((pub)?key-[a-f0-9]{32})['"]`,keywords:["mailgun"],caseInsensitive:!0},{id:"mailgun-signing-key",category:"mailgun",title:"Mailgun webhook signing key",pattern:String.raw`(?:mailgun[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{32}-[a-h0-9]{8}-[a-h0-9]{8})['"]`,keywords:["mailgun"],caseInsensitive:!0},{id:"mapbox-api-token",category:"mapbox",title:"Mapbox API token",pattern:String.raw`(pk\.[a-z0-9]{60}\.[a-z0-9]{22})`,keywords:["pk."],caseInsensitive:!0},{id:"messagebird-api-token",category:"messagebird",title:"MessageBird API token",pattern:String.raw`(?:messagebird[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{25})['"]`,keywords:["messagebird"],caseInsensitive:!0},{id:"messagebird-client-id",category:"messagebird",title:"MessageBird API client ID",pattern:String.raw`(?:messagebird[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-h0-9]{8}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{4}-[a-h0-9]{12})['"]`,keywords:["messagebird"],caseInsensitive:!0},{id:"new-relic-user-api-key",category:"newrelic",title:"New Relic user API Key",pattern:String.raw`(NRAK-[A-Z0-9]{27})`,keywords:["NRAK-"]},{id:"new-relic-user-api-id",category:"newrelic",title:"New Relic user API ID",pattern:String.raw`(?:newrelic[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([A-Z0-9]{64})['"]`,keywords:["newrelic"],caseInsensitive:!0},{id:"new-relic-browser-api-token",category:"newrelic",title:"New Relic ingest browser API token",pattern:String.raw`(NRJS-[a-f0-9]{19})`,keywords:["NRJS-"]},{id:"planetscale-password",category:"planetscale",title:"PlanetScale password",pattern:String.raw`(pscale_pw_[a-z0-9_.-]{43})`,keywords:["pscale_pw_"],caseInsensitive:!0},{id:"private-packagist-token",category:"private-packagist",title:"Private Packagist token",pattern:String.raw`(packagist_[ou][ru]t_[a-f0-9]{68})`,keywords:["packagist_uut_","packagist_ort_","packagist_out_"],caseInsensitive:!0},{id:"rubygems-api-token",category:"rubygems",title:"Rubygem API token",pattern:String.raw`(rubygems_[a-f0-9]{48})`,keywords:["rubygems_"]},{id:"shippo-api-token",category:"shippo",title:"Shippo API token",pattern:String.raw`(shippo_(live|test)_[a-f0-9]{40})`,keywords:["shippo_live_","shippo_test_"]},{id:"linkedin-client-secret",category:"linkedin",title:"LinkedIn Client secret",pattern:String.raw`(?:linkedin[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z]{16})['"]`,keywords:["linkedin"],caseInsensitive:!0},{id:"linkedin-client-id",category:"linkedin",title:"LinkedIn Client ID",pattern:String.raw`(?:linkedin[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{14})['"]`,keywords:["linkedin"],caseInsensitive:!0},{id:"twitch-api-token",category:"twitch",title:"Twitch API token",pattern:String.raw`(?:twitch[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}['"]([a-z0-9]{30})['"]`,keywords:["twitch"],caseInsensitive:!0},{id:"typeform-api-token",category:"typeform",title:"Typeform API token",pattern:String.raw`(?:typeform[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:).{0,5}(tfp_[a-z0-9_.=-]{59})`,keywords:["typeform"],caseInsensitive:!0},{id:"todoist-api-token",category:"todoist",title:"Todoist API token",pattern:String.raw`(?:todoist[a-z0-9_ .,-]{0,25})(?:=|>|:=|\|\|:|<=|=>|:)[\s'"]{0,3}([0-9a-f]{40})`,keywords:["todoist"],caseInsensitive:!0},{id:"openai-api-key",category:"openai",title:"OpenAI API Key",pattern:String.raw`(sk-[a-zA-Z0-9]{50})`,caseInsensitive:!1,keywords:["sk-"]},{id:"openai-api-key-project",category:"openai",title:"OpenAI Project-scoped API Key",pattern:String.raw`(sk-proj-[A-Za-z0-9]{24}-[A-Za-z0-9]{40,128})`,caseInsensitive:!0,keywords:["sk-proj-"]},{id:"openai-api-key-env",category:"openai",title:"OpenAI Environment-scoped API Key",pattern:String.raw`(sk-(?:live|test)-[A-Za-z0-9]{24}-[A-Za-z0-9]{40,128})`,caseInsensitive:!0,keywords:["sk-live-","sk-test-"]},{id:"anthropic-api-key",category:"anthropic",title:"Anthropic API Key",pattern:String.raw`(sk-ant-([a-zA-Z0-9]{1,10}-)?[a-zA-Z0-9_-]{32,128})`,caseInsensitive:!1,keywords:["sk-ant-"]},{id:"canva-token",category:"canva",title:"Canva Token",pattern:String.raw`\b(cnv[a-z0-9]{2}[A-Za-z0-9_=-]+[a-f0-9]{8})\b`,caseInsensitive:!1,keywords:["cnv"]},{id:"posthog-secret-key",category:"posthog",title:"PostHog Secret Key (personal/feature-flag/OAuth)",pattern:String.raw`(ph[xsar]_[A-Za-z0-9]{32,})`,caseInsensitive:!1,keywords:["phx_","phs_","pha_","phr_"]},{id:"api-key",category:"unknown",title:"Unknown API Key",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}api[-_](?:key|token)(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["api-key","api_key","api-token","api_token"],caseInsensitive:!0},{id:"webhook-secret",category:"unknown",title:"Unknown Webhook Secret",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}webhook[-_]secret(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token|webhook))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["webhook-secret","webhook_secret"],caseInsensitive:!0},{id:"secret-value",category:"unknown",title:"Unknown API Key",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}[-_](?:secret)(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|password|12345|abcde|placeholder|fake|token))[a-z0-9+/=_-]{6,256})['"]?(?=\s|$|[;,\]})'"])`,keywords:["secret"],caseInsensitive:!0},{id:"password",category:"unknown",title:"Unknown Password",pattern:String.raw`(?:[a-z0-9_ .,-]{0,25}password(?!length|count|max|min|maxlength|_length|_count|_min|_maxlength)[a-z0-9_ .,-]{0,25})\s*(?:=|>|:=|\|\|:|<=|=>|:)\s*['"]?((?!.*(?:api|key|secret|foo|example|dummy|string|password|12345|abcde|placeholder|fake|token|password|pass|pwd))[a-z0-9+/=_-]{6,128})['"]?(?=\s|$|[;,\]})'"])`,keywords:["password"],caseInsensitive:!0},{id:"sk-secret",category:"unknown",title:"Unknown SK Secret",pattern:String.raw`(?:^|['"\s])(sk(?:[-_][a-z0-9]{1,10})?[-_][a-z0-9]{10,99})(?:$|['"\s])`,caseInsensitive:!0,keywords:["sk-","sk_"]}];var PdQ=/[\uDB40][\uDC00-\uDC7F]/g;function vdQ(A){if(!A||typeof A!=="string")return A;let Q=A.replace(PdQ,"");if(Q.length!==A.length){let $=A.length-Q.length;S.info("Invisible Unicode tag characters removed during sanitization",{removedCount:$})}return Q}var TdQ=2000,_dQ=512000,B30=new Map;function Yf0(A){if(!A||typeof A!=="string")return A;let Q=B30.get(A);if(Q!==void 0)return Q;let $=vdQ(A);for(let B of SZ4){if(!B.keywords.some((D)=>B.caseInsensitive?$.toLowerCase().includes(D.toLowerCase()):$.includes(D)))continue;let E=_Z4(B);$=$.replace(E,(D,J)=>{return D.replace(J,`[REDACTED:${B.id}]`)})}if(A.length<=_dQ){if(B30.size>=TdQ)B30.clear();B30.set(A,$)}return $}function E30(A,Q){if(!A||typeof A==="number"||typeof A==="boolean")return A;if(typeof A==="string")return Q(A);if(Array.isArray(A))return A.map(($)=>{if(typeof $==="string")return Q($);else if($&&typeof $==="object")return E30($,Q);return $});if(A&&typeof A==="object"){if("type"in A&&(A.type==="base64"||A.type==="image")&&"data"in A)return{...A};if("isImage"in A&&A.isImage===!0&&"content"in A&&typeof A.content==="string"){let $={};for(let[B,E]of Object.entries(A))if(B==="content")$[B]=E;else $[B]=E30(E,Q);return $}}return Object.fromEntries(Object.entries(A).map(([$,B])=>[$,E30(B,Q)]))}function eD(A){return E30(A,Yf0)}xA();v7();function Zf0(A){let Q=A.replace(/-/g,"");if(Q.length!==32)throw Error(`Invalid UUID hex length: ${Q.length}`);let $=BigInt("0x"+Q),B="";while($>0n)B="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"[Number($%62n)]+B,$=$/62n;return B.padStart(22,"0")}IY();J4();HN0();v7();var Q6=j.string().min(1),uK=Q6.brand(),Xf0=j.string().regex(/^[0-9A-Za-z]{22}$/),SdQ=j.templateLiteral([j.string().regex(/^[0-9a-f]{8}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{4}$/),"-",j.string().regex(/^[0-9a-f]{12}$/)]),jc=j.templateLiteral(["T-",SdQ]),If0=j.enum(["fork","handoff","mention"]),Gf0=j.enum(["parent","child"]),kZ4=j.object({threadID:jc,type:If0,role:Gf0,messageIndex:j.number().int().nonnegative().optional(),blockIndex:j.number().int().nonnegative().optional(),createdAt:j.number().int().nonnegative(),comment:j.string().optional()}),j6=j.templateLiteral(["M-",Xf0]);function wK(){return`M-${Zf0(hO())}`}var o$=j.templateLiteral(["TU-",Xf0]);var fZ4=j.templateLiteral(["E-",Xf0]);function xZ4(){return`E-${Zf0(hO())}`}var kdQ=j.record(j.string(),j.unknown()),fdQ=j.looseObject({type:j.literal("object"),properties:j.record(j.string(),j.unknown()),required:j.array(j.string()).optional(),additionalProperties:j.union([j.boolean(),kdQ]).optional()}),xdQ=j.union([j.literal("builtin"),j.object({toolbox:Q6}).strict(),j.object({mcp:Q6,target:j.enum(["global","workspace","flag","default"]).optional()}).strict(),j.object({plugin:Q6}).strict(),j.object({remote:Q6}).strict()]),ydQ=j.object({serial:j.boolean().optional(),deferred:j.boolean().optional(),skillNames:j.array(Q6).optional()}),bdQ=j.object({type:j.literal("custom"),inputField:j.string().min(1),format:j.object({type:j.literal("grammar"),syntax:j.enum(["lark","regex"]),definition:j.string()}).strict().optional()}).strict(),D30=j.looseObject({name:Q6,description:j.string(),inputSchema:fdQ,source:xdQ,meta:ydQ.optional(),openAICustomToolConfig:bdQ.optional()}),gR$=j.object({id:Q6,category:Q6,title:Q6,description:j.string().optional(),pluginName:Q6}),MK=j.enum(["none","minimal","low","medium","high","xhigh","max"]),Vf0=j.enum(["anthropic","vertex"]),Kf0=j.enum(["standard","fast"]),hdQ=j.enum(["standard","fast"]),gdQ=j.string().min(1),zf0=j.enum(["none","minimal","low","medium","high","xhigh"]),Wf0=j.enum(["minimal","low","medium","high"]),J30=j.object({"agent.skipTitleGenerationIfMessageContains":j.array(j.string()).optional(),"anthropic.thinking.enabled":j.boolean().optional(),"anthropic.interleavedThinking.enabled":j.boolean().optional(),"anthropic.temperature":j.number().optional(),"anthropic.provider":Vf0.optional(),"anthropic.speed":hdQ.optional(),"openai.speed":Kf0.optional(),"painter.model":gdQ.optional(),"reasoning.effort":MK.optional(),"internal.compactionThresholdPercent":j.number().min(0).max(100).optional(),"internal.model":j.union([j.string(),j.record(j.string(),j.string())]).optional(),"internal.oracleReasoningEffort":zf0.optional(),"gemini.thinkingLevel":Wf0.optional(),"tools.disable":j.array(j.string()).optional(),"tools.enable":j.array(j.string()).optional()}),yZ4=j.object({workspaceId:j.string(),workingDirectory:j.string(),pid:j.number().int().positive().optional(),environment:j.object({os:j.enum(["darwin","linux","windows"]),hasDocker:j.boolean().optional(),hasBrowser:j.boolean().optional()}).strict(),tags:j.array(j.string())}).strict(),mdQ=j.enum(["ui.input","ui.confirm","ui.select"]),Cf0=j.discriminatedUnion("kind",[j.object({kind:j.literal("tool"),id:Q6}),j.object({kind:j.literal("command"),id:Q6})]),ddQ=j.discriminatedUnion("kind",[j.object({kind:j.literal("interactive")}),j.object({kind:j.literal("connection"),connectionId:Q6})]),cdQ=j.enum(["pending","responded","cancelled","expired","errored"]),U30=j.object({requestId:Q6,method:mdQ,params:j.unknown(),invocation:Cf0,target:ddQ,status:cdQ,response:j.unknown().optional(),error:j.string().optional(),createdAt:j.string(),updatedAt:j.string()}),bZ4=j.object({requests:j.array(U30)}),hZ4=j.object({request:U30}),gZ4=j.object({request:U30}),mZ4=j.object({requestId:Q6}),mR$=j.object({requestId:Q6,result:j.unknown().optional(),error:j.string().optional()}),dR$=j.object({status:j.enum(["accepted","already_settled","not_pending","not_allowed"]),state:U30.optional()}),dZ4=j.enum(["sandbox","local-client"]),Rc=j.any().and(j.object({status:j.string()})),cZ4=j.discriminatedUnion("type",[j.object({type:j.literal("delta"),blocks:j.array(j.unknown()).optional(),state:j.enum(["start","generating","tool_use","complete","error","aborted"])}),j.object({type:j.literal("snapshot"),value:j.unknown()})]),QZ=Q6,Hf0=30000,uP=eJ,pdQ=j.enum(["file","directory"]),ldQ=j.object({mtimeMs:j.number().nonnegative().optional()}),Pc=j.tuple([j.string(),pdQ,ldQ.nullish()]),idQ=j.enum(["INVALID_URI","EXECUTOR_NOT_CONNECTED","NOT_FOUND","NOT_DIRECTORY","IS_DIRECTORY","ACCESS_DENIED","INTERNAL_ERROR"]),OK=j.object({code:idQ,message:j.string()}),ndQ=j.object({ok:j.literal(!0),entries:j.array(Pc)}),adQ=j.object({ok:j.literal(!1),error:OK}),cR$=j.discriminatedUnion("ok",[ndQ,adQ]),odQ=j.object({ok:j.literal(!0),contentBase64:j.string()}),rdQ=j.object({ok:j.literal(!1),error:OK}),pR$=j.discriminatedUnion("ok",[odQ,rdQ]),wP=Q6,pZ4=30000,vc=j.object({code:j.enum(["EXECUTOR_NOT_CONNECTED","INVALID_ARGS","INTERNAL_ERROR"]),message:j.string()}),sdQ=j.object({ok:j.literal(!0),exitCode:j.number().int().nonnegative(),stdout:j.string(),stderr:j.string()}),tdQ=j.object({ok:j.literal(!1),error:vc}),lR$=j.discriminatedUnion("ok",[sdQ,tdQ]),Nf0=j.looseObject({uri:eJ,content:j.string().optional(),lineCount:j.int().optional(),hash:j.string().optional()}),edQ=j.enum(utA),lZ4=j.object({path:eJ,error:j.string(),hint:j.string().optional()}),iZ4=j.object({uri:eJ,hash:j.string(),lineCount:j.int().optional()}),nZ4=j.object({name:Q6,description:j.string(),baseDir:eJ,frontmatter:j.object({name:Q6,description:j.string()}).catchall(j.unknown()),files:j.array(j.string()).optional(),source:edQ.optional()}),AcQ=j.enum(["start","streaming","complete"]),MP=j.object({blockState:AcQ.optional()}),qf0=j.object({type:j.literal("text"),text:j.string(),hidden:j.boolean().optional()}).extend(MP.shape),aZ4=j.looseObject({type:j.literal("image"),source:j.discriminatedUnion("type",[j.object({type:j.literal("base64"),mediaType:j.literal(["image/jpeg","image/png","image/gif","image/webp"]),data:j.string()}),j.object({type:j.literal("url"),url:j.string()})]),sourcePath:j.string()}),Tc=j.array(j.discriminatedUnion("type",[qf0,aZ4])),qP=j.record(j.string(),j.unknown()),oZ4=j.object({type:j.literal("tool_use"),id:j.string().min(1),name:j.string().min(1),normalizedName:j.string().optional(),metadata:j.record(j.string(),j.unknown()).optional()}).extend(MP.shape),QcQ=j.object({type:j.literal("tool_use"),id:j.string().min(1),complete:j.literal(!1),inputPartialJSONDelta:j.object({json:j.string()})}),$cQ=oZ4.extend({complete:j.literal(!0),input:qP,normalizedInput:qP.optional()}),BcQ=oZ4.extend({complete:j.literal(!1),input:qP,inputIncomplete:qP,inputPartialJSON:j.object({json:j.string()}),normalizedInput:qP.optional()}),EcQ=j.object({accepted:j.boolean(),askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}),DcQ=j.object({type:j.literal("tool_result"),toolUseID:j.string().min(1),run:Rc,userInput:EcQ.optional()}),JcQ=j.object({type:j.literal("thinking"),thinking:j.string(),signature:j.string()}).extend(MP.shape),UcQ=j.object({type:j.literal("thinking"),thinking:j.string(),signature:j.string().optional()}).extend(MP.shape),YcQ=j.object({type:j.literal("redacted_thinking"),data:j.string()}).extend(MP.shape),ZcQ=j.object({type:j.literal("server_tool_use"),id:j.string().min(1),name:j.string().min(1),input:qP}).extend(MP.shape),FcQ=j.object({type:j.literal("manual_bash_invocation"),args:j.object({cmd:j.string(),args:j.array(j.string()).readonly().optional(),cwd:j.string().optional()}),toolRun:Rc,hidden:j.boolean().optional()}),uf0=j.object({sentAt:j.number().int().nonnegative().optional(),fromAggman:j.boolean().optional(),fromExecutorThreadID:jc.optional()}),XcQ=j.union([qf0,aZ4,DcQ]),rZ4=j.union([qf0,JcQ,YcQ,$cQ,BcQ,ZcQ]),_c=j.array(XcQ),wf0=j.array(rZ4),sZ4=j.array(j.union([rZ4,UcQ,QcQ])),Mf0=j.array(FcQ),Ff0=j.looseObject({line:j.number().int(),column:j.number().int()}),IcQ=j.looseObject({start:Ff0,end:Ff0}),GcQ=j.looseObject({name:j.string(),repositoryURL:j.string()}),VcQ=j.looseObject({currentURL:j.string(),availableProjects:j.array(GcQ).optional()}),Of0=j.looseObject({currentlyVisibleFiles:j.array(eJ),runningTerminalCommands:j.array(j.string()).optional(),activeEditor:j.any().optional(),cursorLocation:Ff0.optional(),cursorLocationLine:j.string().optional(),selectionRange:IcQ.optional(),aggmanContext:VcQ.optional()}),OX=j.custom((A)=>typeof A==="string"&&_$(A)!==void 0),KcQ=j.object({threadId:jc,role:j.literal("user"),content:_c,agentMode:OX.optional(),meta:uf0.optional(),userState:Of0.optional(),readAt:j.string().nullable().optional(),messageId:j6,createdAt:j.string().optional()}),Lf0=j.object({model:j.string().optional(),maxInputTokens:j.number(),inputTokens:j.number(),outputTokens:j.number(),cacheCreationInputTokens:j.number().nullable(),cacheReadInputTokens:j.number().nullable(),totalInputTokens:j.number(),thinkingBudget:j.number().optional(),timestamp:j.string().optional()}),jf0=j.union([j.object({type:j.literal("complete")}),j.object({type:j.literal("cancelled")})]),zcQ=j.object({threadId:jc,role:j.literal("assistant"),content:wf0,state:jf0.optional(),usage:Lf0.optional(),readAt:j.string().nullable().optional(),messageId:j6,createdAt:j.string().optional()}),WcQ=j.object({threadId:jc,role:j.literal("info"),content:Mf0,messageId:j6,createdAt:j.string().optional()}),Rf0=j.discriminatedUnion("role",[KcQ,zcQ,WcQ]),Sc=j.object({workspaceRoot:eJ.optional(),workingDirectory:eJ.optional(),rootDirectoryListing:j.string().nullable().optional(),trees:j.array(j.any()).optional(),platform:j.any().optional(),tags:j.array(j.string()).optional(),git:j.object({branch:j.string().optional()}).optional(),updatedAt:j.string().optional()}),CcQ=j.object({added:j.number().int().nonnegative(),deleted:j.number().int().nonnegative(),changed:j.number().int().nonnegative()}),Pf0=j.enum(["added","modified","deleted","renamed","copied","type_changed","unmerged","untracked"]),HcQ=j.object({path:j.string(),previousPath:j.string().optional(),changeType:Pf0,created:j.boolean(),hasStagedChanges:j.boolean().optional(),hasUnstagedChanges:j.boolean().optional(),diffToken:j.string().optional(),diff:j.string(),fullFileDiff:j.string().optional(),oldContent:j.string().optional(),newContent:j.string().optional(),diffStat:CcQ}),NcQ=j.object({hash:j.string(),shortHash:j.string(),subject:j.string(),message:j.string().optional(),metadata:j.object({isMergeBase:j.boolean()}).optional()}),iR$=j.object({provider:j.literal("git"),capturedAt:j.number(),available:j.boolean(),repositoryRoot:j.string().nullable(),repositoryName:j.string().nullable(),branch:j.string().nullable(),head:j.string().nullable(),baseRef:j.string().nullable().optional(),baseRefHead:j.string().nullable().optional(),aheadCount:j.number().int().nonnegative().optional(),behindCount:j.number().int().nonnegative().optional(),aheadCommits:j.array(NcQ).optional(),diffHash:j.string().optional(),files:j.array(HcQ),unavailableReason:j.string().optional(),unchanged:j.boolean().optional()}),vf0=j.enum(["thread","subagent"]),Tf0=j.enum(["user","built-in"]),Y30=j.object({id:j.string(),toolCallId:o$,toolName:j.string(),args:j.record(j.string(),j.unknown()),reason:j.string().optional(),toAllow:j.array(j.string()).optional(),context:vf0,subagentToolName:j.string().optional(),parentToolCallId:o$.optional(),timestamp:j.number(),matchedRule:j.object({tool:j.string(),action:j.string(),matches:j.record(j.string(),j.unknown()).optional()}).optional(),ruleSource:Tf0.optional()}),qcQ=j.object({type:j.literal("request"),id:Q6,method:Q6,params:j.unknown()}),ucQ=j.object({type:j.literal("response"),id:Q6,result:j.unknown().optional(),error:j.string().optional()}),wcQ=j.object({type:j.literal("event"),event:Q6,data:j.unknown(),span:j.string().optional()}),Z30=j.discriminatedUnion("type",[qcQ,ucQ,wcQ]);var McQ=j.object({type:j.literal("executor_connect"),clientId:uK,handshakeSeq:j.number().int().nonnegative().optional(),capabilities:yZ4,executorType:dZ4.optional()}),OcQ=j.object({type:j.literal("client_update_thread_settings"),settings:J30}),LcQ=j.object({type:j.literal("executor_tools_register"),tools:j.array(D30)}),jcQ=j.object({type:j.literal("executor_tools_unregister"),toolNames:j.array(Q6)}),RcQ=j.object({type:j.literal("executor_tools_bootstrap_complete"),ok:j.boolean(),error:j.string().optional()}),PcQ=j.object({type:j.literal("executor_tool_lease_ack"),toolCallId:o$}),_f0=j.object({type:j.literal("tool_progress"),toolCallId:o$,progress:j.union([cZ4,j.unknown()]).optional(),parentToolCallId:o$.optional()}),vcQ=j.object({type:j.literal("executor_tool_result"),toolCallId:o$,run:Rc,workspaceChanged:j.boolean().optional()}),TcQ=j.object({type:j.literal("executor_guidance_snapshot"),snapshotId:Q6,files:j.array(Nf0),isLast:j.boolean(),userConfigDir:j.any().optional()}),_cQ=j.object({type:j.literal("executor_guidance_discovery"),toolCallId:o$,files:j.array(Nf0),isLast:j.boolean()}),ScQ=j.object({type:j.literal("executor_skill_snapshot"),snapshotId:Q6,skills:j.array(nZ4),isLast:j.boolean(),errors:j.array(lZ4).optional()}),kcQ=j.object({type:j.literal("executor_environment_snapshot"),environment:Sc}),fcQ=j.object({type:j.literal("executor_environment_update"),environment:Sc}),xcQ=j.object({type:j.literal("executor_tool_approval_request"),approval:Y30}),ycQ=j.object({type:j.literal("executor_plugin_message"),message:Z30,invocation:Cf0.optional()}),bcQ=j.object({type:j.literal("client_append_user_msg"),content:Tc,userState:Of0.optional(),agentMode:OX.optional(),reasoningEffort:MK.optional(),messageId:j6,steer:j.boolean().optional()}),hcQ=j.object({type:j.literal("client_remove_queued_msg"),queuedMessageId:j6}),gcQ=j.object({type:j.literal("client_steer_queued_msg"),queuedMessageId:j6}),mcQ=j.object({type:j.literal("client_edit_message"),messageId:j6,editId:fZ4,content:Tc,agentMode:OX.optional(),reasoningEffort:MK.optional()}),dcQ=j.object({type:j.literal("client_mark_message_read"),messageId:j6}),ccQ=j.object({type:j.literal("client_mark_message_unread"),messageId:j6}),pcQ=j.object({type:j.literal("client_set_thread_title"),title:j.string().trim().min(1).max(256)}),lcQ=j.object({auth:j.string().min(1),p256dh:j.string().min(1)}),icQ=j.object({endpoint:j.string().url(),keys:lcQ}),ncQ=j.object({type:j.literal("client_upsert_notification_subscription"),subscription:icQ,threadURL:j.string().min(1)}),acQ=j.object({type:j.literal("client_filesystem_read_directory"),requestId:QZ,uri:uP}),ocQ=j.object({type:j.literal("client_filesystem_read_file"),requestId:QZ,uri:uP}),Sf0=j.object({type:j.literal("client_git_command"),requestId:wP,operation:j.discriminatedUnion("type",[j.object({type:j.literal("repository_root")}),j.object({type:j.literal("head")}),j.object({type:j.literal("branch")}),j.object({type:j.literal("status")}),j.object({type:j.literal("status_snapshot")}),j.object({type:j.literal("comparison_base_ref")}),j.object({type:j.literal("comparison_base_head")}),j.object({type:j.literal("ahead_count")}),j.object({type:j.literal("behind_count")}),j.object({type:j.literal("ahead_commits")}),j.object({type:j.literal("diff_range_snapshot"),baseHash:j.string().regex(/^[0-9a-fA-F]{7,64}$/),headHash:j.string().regex(/^[0-9a-fA-F]{7,64}$/).optional()}),j.object({type:j.literal("file_diff"),path:j.string().min(1),changeType:Pf0,full:j.boolean()})])}),rcQ=j.object({type:j.literal("executor_filesystem_read_directory_result"),requestId:QZ,ok:j.boolean(),entries:j.array(Pc).optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(!A.entries)Q.addIssue({code:j.ZodIssueCode.custom,message:"entries is required when ok is true"});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"});if(A.entries)Q.addIssue({code:j.ZodIssueCode.custom,message:"entries must not be present when ok is false"})}),scQ=j.object({type:j.literal("executor_filesystem_read_file_result"),requestId:QZ,ok:j.boolean(),contentBase64:j.string().optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(A.contentBase64===void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:"contentBase64 is required when ok is true"});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"});if(A.contentBase64!==void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:"contentBase64 must not be present when ok is false"})}),tcQ=j.object({type:j.literal("executor_git_command_result"),requestId:wP,ok:j.boolean(),exitCode:j.number().int().nonnegative().optional(),stdout:j.string().optional(),stderr:j.string().optional(),error:vc.optional()}).superRefine((A,Q)=>{if(A.ok){for(let $ of["exitCode","stdout","stderr"])if(A[$]===void 0)Q.addIssue({code:j.ZodIssueCode.custom,message:`${$} is required when ok is true`});if(A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:j.ZodIssueCode.custom,message:"error is required when ok is false"})}),ecQ=j.object({type:j.literal("client_resume"),version:j.number()}),ApQ=j.object({type:j.literal("client_retry")}),QpQ=j.object({type:j.literal("client_dismiss_active_error"),seq:j.number().optional()}),$pQ=j.object({type:j.literal("client_cancel")}),BpQ=j.object({type:j.literal("client_append_manual_bash_invocation"),args:j.object({cmd:j.string().trim().min(1,"cmd must contain at least one non-whitespace character"),args:j.array(j.string()).optional(),cwd:j.string().optional()}),run:Rc,hidden:j.boolean().optional()}),EpQ=j.object({type:j.literal("client_tool_approval_response"),toolCallId:o$,accepted:j.boolean(),input:j.object({askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}).optional()}),DpQ=j.union([j.object({name:j.string(),type:j.literal("git").optional(),url:j.string()}),j.object({repositoryName:j.string().min(1).describe("Repository name. Must be a single path component."),name:j.string(),namespace:j.string(),type:j.literal("repository")})]),JpQ=j.object({type:j.literal("client_spawn_executor"),requestId:j.string().optional(),repositoryURL:j.string().optional(),projectID:j.uuid().optional(),additionalRepositories:j.array(DpQ).optional()}),tZ4=j.discriminatedUnion("type",[McQ,OcQ,LcQ,jcQ,RcQ,PcQ,_f0,vcQ,TcQ,_cQ,ScQ,kcQ,fcQ,xcQ,ycQ,bcQ,hcQ,gcQ,mcQ,dcQ,ccQ,pcQ,ncQ,acQ,ocQ,Sf0,rcQ,scQ,tcQ,ecQ,ApQ,QpQ,$pQ,BpQ,EpQ,JpQ]);v7();var kc=(A)=>j.codec(j.string(),A,{decode:(Q,$)=>{try{return JSON.parse(Q)}catch(B){return $.issues.push({code:"invalid_format",format:"json",input:Q,message:B.message}),j.NEVER}},encode:(Q)=>JSON.stringify(Q)});v7();v7();var LX="2.0";var kf0=j.union([j.string(),j.number(),j.null()]),UpQ=j.looseObject({code:j.number(),message:j.string(),data:j.unknown().optional()}),YpQ=j.object({jsonrpc:j.literal(LX),id:kf0,method:j.string().min(1),params:j.unknown().optional()}),ZpQ=j.object({jsonrpc:j.literal(LX),method:j.string().min(1),params:j.unknown().optional(),id:j.undefined().optional()}),FpQ=j.object({jsonrpc:j.literal(LX),id:kf0,error:UpQ}),XpQ=j.object({jsonrpc:j.literal(LX),id:kf0,result:j.unknown().optional()}),ff0=j.union([FpQ,XpQ]),eZ4=j.union([YpQ,ZpQ,ff0]);v7();var xc=["idle","working","streaming","tool_use","running_tools","awaiting_approval","error"],QP$=new Set(xc);var IpQ=["working","streaming","tool_use","running_tools"],GpQ=new Set(IpQ);function c3(A){if(typeof A!=="string")return!1;return GpQ.has(A)}var VpQ=["ui.input","ui.confirm","ui.select"],KpQ=new Set(VpQ);function F30(A){return KpQ.has(A)}function X30(A){if(typeof A!=="object"||A===null)return!1;let Q=A;return Q.type==="tool_use"&&typeof Q.id==="string"&&Q.complete===!1&&typeof Q.inputPartialJSONDelta?.json==="string"}function fc(A){return typeof A==="object"&&A!==null}function zpQ(A){return fc(A)&&A.type==="text"&&typeof A.text==="string"}function xf0(A){if(!A)return;let Q=A.filter(zpQ).map(($)=>$.text).join("");return Q.length>0?Q:void 0}function yf0(A){if(typeof A==="string")return A;if(Array.isArray(A))return xf0(A);if(!fc(A))return;for(let Q of["output","displayMessage","message","reason"]){let $=A[Q];if(typeof $==="string")return $}for(let Q of["result","error","value"])if(Q in A){let $=yf0(A[Q]);if($!==void 0)return $}return}function AF4(A,Q){if(typeof A==="string")return A+Q;if(Array.isArray(A)){if(!A.every(($)=>fc($)&&typeof $.type==="string"))return;return[...A,{type:"text",text:Q}]}if(!fc(A))return;for(let $ of["output","displayMessage","message","reason"]){let B=A[$];if(typeof B==="string")return{...A,[$]:B+Q}}if("value"in A){let $=AF4(A.value,Q);if($!==void 0)return{...A,value:$}}return}function WpQ(A){return fc(A)&&typeof A.status==="string"}function CpQ(A,Q){return{type:"delta",...A?{blocks:[{type:"text",text:A}]}:{},state:Q}}function HpQ(A){if(!A)return;if(A.type==="snapshot")return yf0(A.value);return xf0(A.blocks)}function OP(A,Q){if(A&&typeof A==="object"&&"type"in A){let B=A;if(B.type==="delta"||B.type==="snapshot")return B}if(Q==="snapshot")return{type:"snapshot",value:A};let $=typeof A==="string"?A:A!==void 0?JSON.stringify(A):"";return{type:"delta",blocks:$?[{type:"text",text:$}]:void 0,state:"generating"}}function QF4(A,Q){if(Q.type!=="snapshot"||WpQ(Q.value))return Q;let $=HpQ(A),B=yf0(Q.value);if($===void 0||B===void 0)return Q;if(!B.startsWith($))return Q;return CpQ(B.slice($.length),"generating")}function I30(A,Q){let $=A===void 0?void 0:OP(A,"snapshot"),B=OP(Q,"snapshot");if(B.type==="snapshot")return B;if(!$)return B;let E=xf0(B.blocks);if(E===void 0)return $;if($.type==="snapshot"){let J=AF4($.value,E);if(J!==void 0)return{type:"snapshot",value:J}}return{type:"delta",blocks:[...$.type==="delta"?$.blocks??[]:Array.isArray($.value)?$.value:[],...B.blocks??[]],state:B.state}}var NpQ=j.enum(xc),bf0=j.enum(["start","generating","tool_use","complete","error","aborted"]),qpQ=j.object({message:j.string(),code:j.string().optional(),stack:j.string().optional(),retryAt:j.number().optional(),attempt:j.number().optional()}),upQ=j.object({userId:j.string(),name:j.string(),avatarURL:j.string().optional()}),hf0=j.enum(["starting","running","failed"]),gf0=j.enum(["missing","allocating_environment","configuring_workspace","starting_headless","headless_ready","paused","failed"]),mf0=j.enum(["pending","ready","failed"]),wpQ=mf0.nullable(),df0=j.enum(["allocating_environment","configuring_workspace","starting_headless"]),MpQ=df0.nullable(),cf0=j.enum(["idle","creating","recovering"]),pf0=j.enum(["unknown","running","paused","missing"]),lf0=j.enum(["spawn_requested","spawn_rejected","environment_recovering","waiting_for_executor_connect","executor_connected","executor_disconnected","connect_timeout","executor_connect_rejected","spawn_failed","restart_failed","environment_missing"]),if0=j.enum(["ACCESS_DENIED","ACTOR_STOPPING","CONNECTION_ERROR","MAX_RECONNECT_EXCEEDED","MESSAGE_ERROR","LOOP_RUNNING","NO_THREAD_ID","NO_ERROR","INVALID_MESSAGE","PARSE_ERROR","UNKNOWN_TYPE","INTERNAL_ERROR"]),nf0=j.enum(["executor_disconnected","reassigned","user_canceled"]),af0=j.enum(["NOT_CONNECTED","EXECUTOR_ALREADY_CONNECTED","ACCESS_DENIED","INVALID_MESSAGE","TOOL_NOT_FOUND","LEASE_NOT_FOUND","DUPLICATE_TOOL","INTERNAL_ERROR"]),OpQ=j.object({environmentId:j.string().nullable().optional(),stage:gf0.optional(),setupState:wpQ.optional(),setupPhase:MpQ.optional(),operation:cf0.optional(),providerState:pf0.optional(),restartAttempts:j.number().optional()}),LpQ=j.object({reasonCode:lf0.optional(),executionEnvironment:OpQ.optional()}),jpQ=j.object({cutMessageId:j6,createdAt:j.string()}),$F4=j.object({steer:j.boolean(),queuedMessage:j.object({role:j.literal("user"),messageId:j6,content:Tc,userState:j.any().optional(),meta:uf0.optional(),createdAt:j.string().optional()})}),RpQ=j.object({type:j.literal("agent_state"),state:NpQ,messageId:j6.optional(),agentMode:OX.optional(),reasoningEffort:MK.optional()}),PpQ=j.object({type:j.literal("inference_tools"),messageId:j6,agentMode:OX,tools:j.array(Q6),parentToolCallId:o$.optional()}),vpQ=j.object({type:j.literal("thread_settings"),settings:J30}),TpQ=j.object({type:j.literal("error"),message:j.string(),code:if0.optional()}),_pQ=j.object({type:j.literal("error_set"),seq:j.number(),error:qpQ}),SpQ=j.object({type:j.literal("error_cleared"),seq:j.number()}),kpQ=j.object({type:j.literal("cancelled"),seq:j.number(),messageId:j6.optional()}),fpQ=j.object({type:j.literal("retry_scheduled"),retryAt:j.number(),attempt:j.number(),maxAttempts:j.number(),reason:j.string()}),xpQ=j.object({type:j.literal("retry_started")}),ypQ=j.object({type:j.literal("retry_cancelled")}),bpQ=j.object({type:j.literal("executor_connected"),executorId:uK,registeredToolCount:j.number(),guidanceInventory:j.array(iZ4),resumeBootstrap:j.boolean().optional(),rejectedTools:j.array(j.object({name:j.string(),reason:j.string()})).optional()}),hpQ=j.object({type:j.literal("tool_lease"),toolCallId:o$,toolName:j.string(),args:j.unknown(),messageId:j6,parentToolCallId:o$.optional()}),gpQ=j.object({type:j.literal("executor_filesystem_read_directory"),requestId:QZ,uri:uP}),mpQ=j.object({type:j.literal("executor_filesystem_read_file"),requestId:QZ,uri:uP}),dpQ=j.object({type:j.literal("executor_git_command"),requestId:wP,args:j.array(j.string()).nonempty(),maxOutputBytes:j.number().int().positive().optional(),operation:Sf0.shape.operation.optional()}),cpQ=j.object({type:j.literal("client_filesystem_read_directory_result"),requestId:QZ,ok:j.boolean(),entries:j.array(Pc).optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(!A.entries)Q.addIssue({code:"custom",message:"entries is required when ok is true"});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"});if(A.entries)Q.addIssue({code:"custom",message:"entries must not be present when ok is false"})}),ppQ=j.object({type:j.literal("client_filesystem_read_file_result"),requestId:QZ,ok:j.boolean(),contentBase64:j.string().optional(),error:OK.optional()}).superRefine((A,Q)=>{if(A.ok){if(A.contentBase64===void 0)Q.addIssue({code:"custom",message:"contentBase64 is required when ok is true"});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"});if(A.contentBase64!==void 0)Q.addIssue({code:"custom",message:"contentBase64 must not be present when ok is false"})}),lpQ=j.object({type:j.literal("client_git_command_result"),requestId:wP,ok:j.boolean(),exitCode:j.number().int().nonnegative().optional(),stdout:j.string().optional(),stderr:j.string().optional(),error:vc.optional()}).superRefine((A,Q)=>{if(A.ok){for(let $ of["exitCode","stdout","stderr"])if(A[$]===void 0)Q.addIssue({code:"custom",message:`${$} is required when ok is true`});if(A.error)Q.addIssue({code:"custom",message:"error must not be present when ok is true"});return}if(!A.error)Q.addIssue({code:"custom",message:"error is required when ok is false"})}),ipQ=j.object({type:j.literal("tool_approval_queue"),approvals:j.array(Y30)}),npQ=j.object({type:j.literal("executor_tool_lease_revoked"),toolCallId:o$,reason:nf0}),apQ=j.object({type:j.literal("executor_tool_result_ack"),toolCallId:o$}),opQ=j.object({type:j.literal("plugin_message"),message:Z30}),rpQ=j.object({type:j.literal("executor_tool_approval_response"),toolCallId:o$,accepted:j.boolean(),input:j.object({askAnswers:j.record(j.string(),j.string()).optional(),denyFeedback:j.string().optional()}).optional()}),spQ=j.object({type:j.literal("executor_error"),message:j.string(),toolCallId:o$.optional(),code:af0,existingExecutorPid:j.number().int().positive().optional()}),tpQ=j.object({type:j.literal("delta"),messageId:j6,role:j.literal("assistant"),blocks:sZ4.optional(),blockIndex:j.number().int().nonnegative().optional(),state:bf0,usage:Lf0.optional(),parentToolCallId:o$.optional()}),epQ=j.object({type:j.literal("delta"),messageId:j6,role:j.literal("user"),blocks:_c.optional(),state:j.literal("complete"),parentToolCallId:o$.optional()}),AlQ=j.discriminatedUnion("role",[tpQ,epQ]),QlQ=j.object({type:j.literal("queued_messages"),messages:j.array($F4)}),$lQ=j.object({type:j.literal("queued_message_added"),message:$F4,seq:j.number()}),BlQ=j.object({type:j.literal("queued_message_removed"),queuedMessageId:j6,seq:j.number()}),ElQ=j.object({type:j.literal("queued_message_dequeued"),queuedMessageId:j6,seq:j.number()}),DlQ=j.object({type:j.literal("message_added"),message:Rf0,seq:j.number(),parentToolUseId:o$.optional()}),JlQ=j.object({type:j.literal("message_updated"),message:Rf0,seq:j.number()}),UlQ=j.object({type:j.literal("edit_rejected"),editId:j.string(),message:j.string()}),YlQ=j.object({type:j.literal("thread_truncated"),seq:j.number(),truncateFromMessage:j6}),ZlQ=j.object({type:j.literal("observers"),count:j.number(),observers:j.array(upQ),hasExecutor:j.boolean().optional()}),FlQ=j.object({type:j.literal("executor_status"),spawnId:j.string().optional(),status:hf0,message:j.string().optional(),executorId:j.string().optional(),details:LpQ.optional()}),XlQ=j.object({type:j.literal("environment_update"),environment:Sc}),IlQ=j.object({type:j.literal("executor_workspace_maybe_changed"),toolCallId:o$,toolName:Q6}),GlQ=j.object({type:j.literal("thread_title"),title:j.string().nullable()}),VlQ=j.object({type:j.literal("thread_status"),status:j.union([j.literal("merging"),j.literal("merged"),j.null()])}),KlQ=j.object({type:j.literal("thread_relationships"),seq:j.number(),relationships:j.array(kZ4)}),zlQ=j.object({type:j.literal("compaction_started")}),WlQ=j.object({type:j.literal("compaction_complete"),cutMessageId:j6.optional()}),ClQ=j.object({type:j.literal("compaction_records"),records:j.array(jpQ)}),iN=j.discriminatedUnion("type",[RpQ,PpQ,vpQ,TpQ,_pQ,SpQ,kpQ,fpQ,xpQ,ypQ,bpQ,hpQ,gpQ,mpQ,dpQ,cpQ,ppQ,lpQ,ipQ,npQ,apQ,opQ,rpQ,_f0,spQ,AlQ,YlQ,QlQ,$lQ,BlQ,ElQ,DlQ,JlQ,UlQ,ZlQ,FlQ,XlQ,IlQ,GlQ,VlQ,KlQ,zlQ,WlQ,ClQ]);var BF4=kc(tZ4),of0=kc(eZ4),HlQ=j.union([iN,j.array(iN)]),EF4=kc(iN),GP$=kc(HlQ);J4();function DF4(A,Q={}){let B=(Q.mode??"lenient")==="strict";if(!Array.isArray(A))return B?null:[];let E=[];for(let D of A){if(typeof D!=="object"||D===null){if(B)return null;continue}let J=D;if(typeof J.uri!=="string"||J.uri.length===0){if(B)return null;continue}let U;try{U=$4(m0.parse(J.uri))}catch{if(B)return null;continue}let Y={uri:U};if(typeof J.content==="string")Y.content=J.content;if(typeof J.lineCount==="number"&&Number.isFinite(J.lineCount))Y.lineCount=J.lineCount;if(typeof J.hash==="string")Y.hash=J.hash;E.push(Y)}return E}function rf0(A){let Q=Number.isFinite(A)?A:0;function $(E=Q){if(Number.isFinite(E))Q=E;return Q}function B(E){if(!Number.isFinite(E)||E<1)return Q;return Q=Math.max(Q,E),Q}return{getVersion:()=>Q,reset:$,advanceFromSeq:B}}var NlQ=MB(bf0.options),qlQ=MB(xc),ulQ=MB(if0.options),wlQ=MB(af0.options),MlQ=MB(hf0.options),OlQ=MB(gf0.options),LlQ=MB(mf0.options),jlQ=MB(df0.options),RlQ=MB(cf0.options),PlQ=MB(pf0.options),vlQ=MB(lf0.options),TlQ=MB(nf0.options),_lQ=MB(If0.options),SlQ=MB(Gf0.options),klQ=MB(vf0.options),flQ=MB(Tf0.options),xlQ=MB(Vf0.options),ylQ=MB(Kf0.options),YF4=MB(MK.options),blQ=MB(zf0.options),hlQ=MB(Wf0.options);function MB(A){return new Set(A)}function jX(A){return typeof A==="object"&&A!==null&&!Array.isArray(A)}function e7(A,Q){return typeof A==="string"&&Q.has(A)}function glQ(A){return typeof A==="number"&&Number.isInteger(A)&&A>=0}function JF4(A){let Q;try{Q=JSON.stringify(A)}catch{return null}let $=EF4.safeDecode(Q);return $.success?$.data:null}function ZF4(A){let Q;try{Q=JSON.parse(A)}catch{return[]}let $=Array.isArray(Q)?Q:[Q],B=[];for(let E of $){let D=mlQ(E);if(D)B.push(D)}return B}function mlQ(A){let Q=JF4(A);if(Q)return Q;if(!jX(A)||typeof A.type!=="string")return null;let $=dlQ(A);return $?JF4($):null}function dlQ(A){switch(A.type){case"agent_state":return clQ(A);case"thread_settings":return plQ(A);case"error":return ilQ(A);case"executor_tool_lease_revoked":return alQ(A);case"tool_approval_queue":return YiQ(A);case"executor_error":return nlQ(A);case"delta":return olQ(A);case"queued_messages":return rlQ(A);case"queued_message_added":return slQ(A);case"message_added":case"message_updated":return tlQ(A);case"executor_status":return DiQ(A);case"thread_relationships":return FiQ(A);default:return null}}function clQ(A){let Q={...A};if(!e7(Q.state,qlQ))Q.state="working";if(Q.agentMode!==void 0&&!OX.safeParse(Q.agentMode).success)delete Q.agentMode;if(Q.reasoningEffort!==void 0&&!e7(Q.reasoningEffort,YF4))delete Q.reasoningEffort;return Q}function plQ(A){if(!jX(A.settings))return A;return{...A,settings:llQ(A.settings)}}function llQ(A){let Q={...A};if(yc(Q,"anthropic.provider",xlQ),yc(Q,"openai.speed",ylQ),yc(Q,"reasoning.effort",YF4),yc(Q,"internal.oracleReasoningEffort",blQ),yc(Q,"gemini.thinkingLevel",hlQ),Q["internal.compactionThresholdPercent"]!==void 0&&(typeof Q["internal.compactionThresholdPercent"]!=="number"||Q["internal.compactionThresholdPercent"]<0||Q["internal.compactionThresholdPercent"]>100))delete Q["internal.compactionThresholdPercent"];return Q}function yc(A,Q,$){if(A[Q]!==void 0&&!e7(A[Q],$))delete A[Q]}function ilQ(A){let Q={...A};if(Q.code!==void 0&&!e7(Q.code,ulQ))delete Q.code;return Q}function nlQ(A){let Q={...A};if(!e7(Q.code,wlQ))Q.code="INTERNAL_ERROR";return Q}function alQ(A){let Q={...A};if(!e7(Q.reason,TlQ))Q.reason="reassigned";return Q}function olQ(A){if(A.role!=="assistant"&&A.role!=="user")return null;let Q={...A};if(A.role==="assistant"){if(!e7(Q.state,NlQ))Q.state="generating";if(Array.isArray(Q.blocks)){if(Q.blocks=BiQ(Q.blocks),!glQ(Q.blockIndex))Q.blockIndex=0}else if(Q.blocks!==void 0)delete Q.blocks,delete Q.blockIndex;return Q}if(Q.state="complete",Array.isArray(Q.blocks))Q.blocks=tf0(Q.blocks,"user");else if(Q.blocks!==void 0)delete Q.blocks;return delete Q.blockIndex,Q}function rlQ(A){if(!Array.isArray(A.messages))return A;return{...A,messages:A.messages.map(FF4).filter((Q)=>Q!==null)}}function slQ(A){let Q=FF4(A.message);return Q?{...A,message:Q}:null}function FF4(A){if(!jX(A)||!jX(A.queuedMessage))return null;let Q=XF4(A.queuedMessage);return Q?{...A,queuedMessage:Q}:null}function tlQ(A){let Q=elQ(A.message);return Q?{...A,message:Q}:null}function elQ(A){if(!jX(A))return null;if(A.role==="user")return XF4(A);if(A.role==="assistant")return AiQ(A);if(A.role==="info")return QiQ(A);return null}function XF4(A){if(A.role!=="user"||!Array.isArray(A.content))return null;return{...A,content:tf0(A.content,"user")}}function AiQ(A){if(A.role!=="assistant"||!Array.isArray(A.content))return null;let Q={...A,content:tf0(A.content,"assistant")};if(Q.state!==void 0&&!$iQ(Q.state))delete Q.state;return Q}function QiQ(A){if(A.role!=="info"||!Array.isArray(A.content))return null;return{...A,content:EiQ(A.content)}}function $iQ(A){return jf0.safeParse(A).success}function tf0(A,Q){let $=[];for(let B of A){let E=IF4(B,Q);if(E)$.push(E)}return $}function BiQ(A){return A.map((Q)=>IF4(Q,"assistant")??{type:"text",text:"",hidden:!0})}function IF4(A,Q){let B=(Q==="assistant"?wf0:_c).safeParse([A]);return B.success?B.data[0]??null:null}function EiQ(A){let Q=[];for(let $ of A){let B=Mf0.safeParse([$]);if(B.success&&B.data[0])Q.push(B.data[0])}return Q}function DiQ(A){let Q={...A};if(!e7(Q.status,MlQ))Q.status="starting";if(Q.details!==void 0){let $=JiQ(Q.details);if($)Q.details=$;else delete Q.details}return Q}function JiQ(A){if(!jX(A))return null;let Q={...A};if(Q.reasonCode!==void 0&&!e7(Q.reasonCode,vlQ))delete Q.reasonCode;if(Q.executionEnvironment!==void 0){let $=UiQ(Q.executionEnvironment);if($)Q.executionEnvironment=$;else delete Q.executionEnvironment}return Q}function UiQ(A){if(!jX(A))return null;let Q={...A};return UF4(Q,"setupState",LlQ),UF4(Q,"setupPhase",jlQ),sf0(Q,"stage",OlQ),sf0(Q,"operation",RlQ),sf0(Q,"providerState",PlQ),Q}function sf0(A,Q,$){if(A[Q]!==void 0&&!e7(A[Q],$))delete A[Q]}function UF4(A,Q,$){if(A[Q]!==void 0&&A[Q]!==null&&!e7(A[Q],$))delete A[Q]}function YiQ(A){if(!Array.isArray(A.approvals))return A;return{...A,approvals:A.approvals.map(ZiQ).filter((Q)=>Q!==null)}}function ZiQ(A){if(!jX(A))return null;let Q={...A};if(!e7(Q.context,klQ))Q.context="thread";if(Q.ruleSource!==void 0&&!e7(Q.ruleSource,flQ))delete Q.ruleSource;return Q}function FiQ(A){if(!Array.isArray(A.relationships))return A;return{...A,relationships:A.relationships.filter(XiQ)}}function XiQ(A){return jX(A)&&e7(A.type,_lQ)&&e7(A.role,SlQ)}var bc=Number.MAX_SAFE_INTEGER;class ef0{callbacks;agentLoopState=null;pending=new Map;constructor(A){this.callbacks=A}setAgentLoopState(A){this.agentLoopState=A}emitOptimisticUserMessage(A){if(this.pending.has(A.messageId))return;let Q=this.nextEventType();this.pending.set(A.messageId,Q),this.dispatchOptimistic(Q,A)}reconcileMessageAdded(A){let Q=A.message.messageId;if(this.pending.get(Q)==="queued_message_added")this.emitQueuedMessages({type:"queued_message_dequeued",queuedMessageId:Q,seq:bc});this.pending.delete(Q),this.emitMessageAdded(A)}reconcileQueuedMessageAdded(A){let Q=A.message.queuedMessage.messageId,$=this.pending.get(Q);if($==="queued_message_added")return;if($==="message_added")this.pending.set(Q,"queued_message_added"),this.emitMessageRemoved(Q);this.emitQueuedMessages(A)}reconcileQueuedMessagesSnapshot(A){let Q=new Set;for(let $ of A.messages)Q.add($.queuedMessage.messageId);for(let $ of Q)if(this.pending.get($)==="message_added")this.pending.set($,"queued_message_added"),this.emitMessageRemoved($);for(let[$,B]of this.pending)if(B==="queued_message_added"&&!Q.has($))return;this.emitQueuedMessages(A)}reconcileQueuedMessageRemoved(A){this.pending.delete(A.queuedMessageId),this.emitQueuedMessages(A)}reset(){this.agentLoopState=null,this.pending.clear()}nextEventType(){if(this.pending.size>0)return"queued_message_added";if(this.agentLoopState===null||this.agentLoopState==="idle")return"message_added";return"queued_message_added"}dispatchOptimistic(A,Q){if(A==="message_added"){this.emitMessageAdded({type:"message_added",message:{role:"user",messageId:Q.messageId,content:Q.content,agentMode:Q.agentMode,threadId:this.callbacks.getThreadID()??"T-00000000-0000-0000-0000-000000000000"},seq:bc});return}this.emitQueuedMessages({type:"queued_message_added",message:{steer:!1,queuedMessage:{role:"user",messageId:Q.messageId,content:Q.content,userState:Q.userState}},seq:bc})}emitMessageAdded(A){this.callbacks.observerCallbacks((Q)=>{Q.onMessageAdded?.(A)})}emitMessageRemoved(A){this.callbacks.observerCallbacks((Q)=>{Q.onMessageRemoved?.(A)})}emitQueuedMessages(A){this.callbacks.observerCallbacks((Q)=>{Q.onQueuedMessages?.(A)})}}class Ax0{options;queue=[];active=null;retryTimer=null;constructor(A){this.options=A}send(A){this.queue.push({message:A,sent:!1}),this.pump()}retry(){this.clearRetryTimer(),this.pump({forceActiveRetry:!0})}handleServerMessage(A){if(!this.active||!this.active.sent||this.active.message.type!=="client_append_user_msg")return;if(!GiQ(this.active.message,A))return;let Q=this.active.message.messageId;this.clearRetryTimer(),this.active=null,this.options.onAckedUserMessage?.(Q),this.pump()}reset(){this.clearRetryTimer(),this.queue.length=0,this.active=null}pump(A){if(this.active){if(!this.active.sent||A?.forceActiveRetry)this.tryActive();return}let Q=this.queue.shift();if(!Q)return;this.active=Q,this.tryActive()}tryActive(){let A=this.active;if(!A||A.sent&&A.message.type!=="client_append_user_msg")return;if(!this.options.trySend(A.message)){this.scheduleRetry();return}if(A.sent=!0,A.message.type!=="client_append_user_msg"){this.clearRetryTimer(),this.active=null,this.pump();return}this.scheduleRetry()}scheduleRetry(){if(this.retryTimer!==null)return;this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.pump({forceActiveRetry:!0})},1000),IiQ(this.retryTimer)}clearRetryTimer(){if(this.retryTimer===null)return;clearTimeout(this.retryTimer),this.retryTimer=null}}function IiQ(A){if(typeof A!=="object"||A===null||!("unref"in A))return;let Q=A.unref;if(typeof Q==="function")Q.call(A)}function GiQ(A,Q){switch(Q.type){case"message_added":return Q.message.messageId===A.messageId;case"queued_message_added":return Q.message.queuedMessage.messageId===A.messageId;case"queued_messages":return ViQ(Q.messages,A.messageId);default:return!1}}function ViQ(A,Q){return A.some(($)=>$.queuedMessage.messageId===Q)}a0();xA();var KiQ=1000,ziQ=30000,WiQ=124,CiQ=30000,HiQ=15000,NiQ=1000,qiQ=200,GF4="Connection timed out. Retrying...",G30="Connection attempt superseded",uiQ=30000,VF4=["online","focus","pageshow","keydown","pointerdown"],KF4=["visibilitychange"];function $x0(){return globalThis}function WF4(A){if(!A||typeof A!=="object")return null;let Q=A;if(typeof Q.addEventListener!=="function"||typeof Q.removeEventListener!=="function")return null;return Q}function zF4(){return WF4($x0().window)}function Qx0(){let A=$x0().document;if(!WF4(A))return null;return A}function wiQ(){let A=$x0().navigator;if(!A||typeof A!=="object")return null;return A}function MiQ(A){if(!A)return"none";let Q=[A.type];if(A.code!==void 0)Q.push(`code=${A.code}`);if(A.reason!==void 0)Q.push(`reason=${A.reason}`);if(A.error!==void 0)Q.push(`error=${A.error}`);return Q.join(" ")}class Bx0{ws=null;transportInfo={state:"disconnected"};reconnectCause=null;reconnectAttempts=0;reconnectAttempt=null;nextRetryAt=null;reconnectTimeoutID=null;reconnectResetTimeoutID=null;pingIntervalID=null;latencyTimeoutIDs=new Set;connectPromise=null;connectGeneration=0;pendingConnectSockets=new Set;disposed=!1;lastServerFrameAt=Date.now();intentionallyClosedSockets=new WeakSet;reconnectActivityCleanup=null;lifecycleEventID=0;lifecycleEvents=[];transportSubject=new K4({state:"disconnected"});lifecycleEventSubject=new K4([]);config;threadIDSubject=new K4(null);_currentThreadID=null;log=S;get currentThreadID(){return this._currentThreadID}get threadActorTransport(){return this.config.threadActorTransport}set currentThreadID(A){if(A!==null&&A!==this._currentThreadID)this._currentThreadID=A,this.log=S.with({threadId:A}),this.threadIDSubject.next(A);else this._currentThreadID=A}constructor(A){this.config={threadId:A.threadId,webSocketProvider:A.webSocketProvider,reconnectDelayMs:A.reconnectDelayMs??KiQ,maxReconnectDelayMs:A.maxReconnectDelayMs??ziQ,maxReconnectAttempts:A.maxReconnectAttempts??WiQ,pingIntervalMs:A.pingIntervalMs??CiQ,connectTimeoutMs:A.connectTimeoutMs??HiQ,threadActorTransport:A.threadActorTransport??"json-rpc",webSocketLatencyMs:A.webSocketLatencyMs??(()=>0),onWebSocketTraffic:A.onWebSocketTraffic??(()=>{return})},this.currentThreadID=A.threadId??null,this.recordLifecycleEvent("transport_initialized",`threadId=${this.currentThreadID??"none"}`)}getThreadId(){return this.currentThreadID}transportChanges(){return this.transportSubject}getTransportInfo(){return{...this.transportInfo}}waitForConnected(A){if(this.transportInfo.state==="connected")return Promise.resolve(!0);if(this.disposed||A<=0)return Promise.resolve(!1);return new Promise((Q)=>{let $=!1,B=null,E=null,D=(J)=>{if($)return;if($=!0,B)clearTimeout(B),B=null;E?.unsubscribe(),E=null,Q(J)};B=setTimeout(()=>{D(!1)},A),E=this.transportSubject.subscribe({next:(J)=>{if(J.state==="connected")D(!0)},error:()=>{D(!1)},complete:()=>{D(!1)}})})}connectionLifecycleChanges(){return this.lifecycleEventSubject}getConnectionLifecycleEvents(){return[...this.lifecycleEvents]}async connect(){return this.connectInternal({fromReconnect:!1})}recordLifecycleEvent(A,Q){let $={id:++this.lifecycleEventID,at:Date.now(),type:A,...Q?{details:Q}:{}},B=qiQ,E=this.lifecycleEvents.slice(-(B-1));this.lifecycleEvents=[...E,$],this.lifecycleEventSubject.next([...this.lifecycleEvents])}async connectInternal(A){if(this.connectPromise)return this.connectPromise;let Q=this.connectGeneration,$=this.connectInternalOnce(A,Q);this.connectPromise=$;try{return await $}finally{if(this.connectPromise===$)this.connectPromise=null}}async connectInternalOnce(A,Q){if(this.disposed)throw new dQ("Transport is disposed");if(this.ws)return;this.recordLifecycleEvent("connect_requested",A.fromReconnect?`mode=reconnect attempt=${this.reconnectAttempts}`:"mode=initial"),this.updateConnectionState("connecting");try{let{webSocket:$,threadId:B}=await this.openWebSocketProviderWithTimeout();this.throwIfConnectAttemptSuperseded(Q,$);try{$.binaryType="arraybuffer"}catch{}this.pendingConnectSockets.add($);try{await this.waitForOpen($)}finally{this.pendingConnectSockets.delete($)}this.throwIfConnectAttemptSuperseded(Q,$),this.currentThreadID=B,this.ws=$,this.lastServerFrameAt=Date.now(),this.setupWebSocketHandlers($),this.stopWaitingForReconnectActivity(),this.scheduleReconnectAttemptsReset(),this.reconnectCause=null,this.updateConnectionState("connected"),this.recordLifecycleEvent("connect_succeeded",`threadId=${this.currentThreadID??"none"} attempt=${this.reconnectAttempts}`)}catch($){if(!this.isConnectAttemptCurrent(Q))throw this.recordLifecycleEvent("connect_superseded",A.fromReconnect?"mode=reconnect":"mode=initial"),new dQ(G30,$);let B=$ instanceof Error?$.message:String($),E=$ instanceof dQ&&$.cause instanceof Error?$.cause.message:null,D=`mode=${A.fromReconnect?"reconnect":"initial"} error=${B}`;if(this.recordLifecycleEvent("connect_failed",E?`${D} cause=${E}`:D),!A.fromReconnect&&!this.disposed)this.reconnectCause={type:"connect_failed",at:Date.now(),error:B},this.scheduleReconnect();throw $}}disconnect(){this.recordLifecycleEvent("disconnect_requested"),this.cancelReconnect(),this.invalidateConnectAttempts(),this.reconnectCause=null,this.detachCurrentSocket({closeCode:1000,closeReason:"Client disconnect",cancelReconnectAttemptsReset:!1,markIntentional:!0}),this.updateConnectionState("disconnected")}forceReconnect(A){if(this.disposed)return;if(!this.ws&&this.transportInfo.state!=="connected")return;this.recordLifecycleEvent("force_reconnect_requested",`reason=${A}`),this.invalidateConnectAttempts(),this.reconnectCause={type:"error",at:Date.now(),error:A},this.detachCurrentSocket({closeCode:4000,closeReason:A,cancelReconnectAttemptsReset:!0,markIntentional:!1}),this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}detachCurrentSocket(A){let Q=this.ws;if(this.ws=null,this.clearWebSocketLatencyTimeouts(),this.stopPingInterval(),A.cancelReconnectAttemptsReset)this.cancelReconnectAttemptsReset();if(!Q)return;if(A.markIntentional)this.intentionallyClosedSockets.add(Q);if(A.closeCode!==null&&(Q.readyState===WebSocket.OPEN||Q.readyState===WebSocket.CONNECTING))try{Q.close(A.closeCode,A.closeReason)}catch{}}invalidateConnectAttempts(){this.connectGeneration++,this.connectPromise=null;for(let A of this.pendingConnectSockets)this.closeSocketDuringConnect(A,4000,G30);this.pendingConnectSockets.clear()}isConnectAttemptCurrent(A){return!this.disposed&&A===this.connectGeneration}throwIfConnectAttemptSuperseded(A,Q){if(this.isConnectAttemptCurrent(A))return;throw this.closeSocketDuringConnect(Q,4000,G30),new dQ(G30)}retryConnect(A){if(this.disposed)return;if(this.recordLifecycleEvent("reconnect_attempts_reset",`reason=${A}`),this.reconnectAttempts=0,this.cancelReconnectAttemptsReset(),this.reconnectTimeoutID)return;this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}async disconnectAndWait(A){let Q=this.ws;if(!Q||Q.readyState!==WebSocket.OPEN)return this.disconnect(),{status:"not_connected"};let $=this.waitForSocketClose(Q,A?.waitForCloseTimeoutMs??NiQ);return this.disconnect(),$}dispose(){if(this.disposed)return;this.recordLifecycleEvent("disposed"),this.disposed=!0,this.disconnect(),this.transportSubject.complete(),this.lifecycleEventSubject.complete()}sendRaw(A){if(!this.hasOpenSocket())throw new dQ("WebSocket is not connected");let Q=this.ws;if(!Q)throw new dQ("WebSocket is not connected");this.runAfterWebSocketLatency(()=>{if(Q!==this.ws||Q.readyState!==WebSocket.OPEN)return;Q.send(A)}),this.startPingIntervalOnce()}hasOpenSocket(){return!!this.ws&&this.ws.readyState===WebSocket.OPEN}runAfterWebSocketLatency(A){let Q=this.config.webSocketLatencyMs();if(!Number.isFinite(Q)||Q<=0){A();return}let $=setTimeout(()=>{this.latencyTimeoutIDs.delete($),A()},Q);this.latencyTimeoutIDs.add($)}clearWebSocketLatencyTimeouts(){for(let A of this.latencyTimeoutIDs)clearTimeout(A);this.latencyTimeoutIDs.clear()}waitForSocketClose(A,Q){return new Promise(($)=>{let B=!1,E=null,D=(U)=>{if(B)return;if(B=!0,E)clearTimeout(E);A.removeEventListener("close",J),$(U)},J=(U)=>{let Y=U;D({status:Y.code===1000?"server_acknowledged":"timeout",...typeof Y.code==="number"?{closeCode:Y.code}:{},...typeof Y.reason==="string"?{closeReason:Y.reason}:{}})};if(E=setTimeout(()=>{D({status:"timeout"})},Q),A.addEventListener("close",J),A.readyState===WebSocket.CLOSED)D({status:"timeout"})})}async openWebSocketProviderWithTimeout(){let A=!1,Q=null,$=this.config.webSocketProvider();$.then((E)=>{if(A)this.closeSocketDuringConnect(E.webSocket,4000,"Connection attempt timed out")},()=>{return});let B=new Promise((E,D)=>{Q=setTimeout(()=>{A=!0,D(new dQ(GF4,Error(`WebSocket provider timed out after ${this.config.connectTimeoutMs}ms`)))},this.config.connectTimeoutMs)});try{return await Promise.race([$,B])}finally{if(Q)clearTimeout(Q)}}closeSocketDuringConnect(A,Q,$){try{if(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)A.close(Q,$)}catch{}}updateConnectionState(A){let Q={...this.transportInfo};if(this.transportInfo.state=A,A==="connected")this.reconnectCause=null,this.clearReconnectScheduleMetadata(),delete this.transportInfo.reconnectCause;else if(this.reconnectCause)this.transportInfo.reconnectCause=this.reconnectCause;else delete this.transportInfo.reconnectCause;if(this.reconnectAttempt===null)delete this.transportInfo.reconnectAttempt;else this.transportInfo.reconnectAttempt=this.reconnectAttempt;if(this.nextRetryAt===null)delete this.transportInfo.nextRetryAt;else this.transportInfo.nextRetryAt=this.nextRetryAt;let $={...this.transportInfo};this.transportSubject.next($),this.log.info("[thread-client] Transport connection state changed",{previousState:Q.state,nextState:$.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("state_changed",`state=${A} cause=${MiQ(this.reconnectCause)}`)}onRawMessage(A){}onWebSocketTraffic(A){this.config.onWebSocketTraffic(A)}onMaxReconnectExceeded(A){}async waitForOpen(A){if(A.readyState===WebSocket.OPEN)return;return new Promise((Q,$)=>{let B=setTimeout(()=>{E(),this.closeSocketDuringConnect(A,4000,"Connection attempt timed out"),$(new dQ(GF4,Error(`WebSocket connection timed out after ${this.config.connectTimeoutMs}ms`)))},this.config.connectTimeoutMs),E=()=>{clearTimeout(B),A.removeEventListener("open",D),A.removeEventListener("error",J),A.removeEventListener("close",U)},D=()=>{E(),Q()},J=(Y)=>{E();let Z="message"in Y?Y.message:("error"in Y)&&Y.error instanceof Error?Y.error.message:Y.type;$(new dQ(`WebSocket connection failed: ${Z}`))},U=(Y)=>{E(),$(new dQ(`WebSocket closed during connect: code=${Y.code} reason=${Y.reason||"none"}`))};if(A.addEventListener("open",D),A.addEventListener("error",J),A.addEventListener("close",U),A.readyState===WebSocket.OPEN)return D();if(A.readyState===WebSocket.CLOSED||A.readyState===WebSocket.CLOSING)return U({code:1006,reason:"Socket already closed before connect"})})}setupWebSocketHandlers(A){A.addEventListener("message",(Q)=>{let $=Q.data;this.runAfterWebSocketLatency(()=>this.handleWebSocketMessage(A,$))}),A.addEventListener("close",(Q)=>{this.handleClose(A,Q.code,Q.reason)}),A.addEventListener("error",()=>{this.handleError(A)})}handleWebSocketMessage(A,Q){if(A!==this.ws)return;if(this.lastServerFrameAt=Date.now(),this.startPingIntervalOnce(),this.onWebSocketTraffic(Q),typeof Q==="string"){if(Q==="pong")return;this.onRawMessage(Q)}else if(Q instanceof ArrayBuffer)this.onRawMessage(new TextDecoder().decode(Q))}handleClose(A,Q,$){let B=this.intentionallyClosedSockets.has(A);if(B)this.intentionallyClosedSockets.delete(A);if(this.log.info("[thread-client] Transport socket close observed",{code:Q,reason:$||void 0,intentional:B,isCurrentSocket:A===this.ws,stateBeforeClose:this.transportInfo.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("socket_closed",`code=${Q} reason=${$||"none"} intentional=${B}`),A!==this.ws)return;if(this.detachCurrentSocket({closeCode:null,closeReason:"",cancelReconnectAttemptsReset:!0,markIntentional:!1}),!this.disposed&&!B){let E=this.reconnectCause,D=E?.type==="ping_timeout"&&Q===4000&&!$?{...E,at:Date.now(),code:Q}:{type:"close",at:Date.now(),code:Q,...$?{reason:$}:{}};this.reconnectCause=D,this.scheduleReconnect()}else this.reconnectCause=null,this.updateConnectionState("disconnected")}handleError(A){if(A!==this.ws)return;if(this.recordLifecycleEvent("socket_error","error=WebSocket error event"),this.reconnectCause={type:"error",at:Date.now(),error:"WebSocket error event"},this.ws)this.ws.close()}scheduleReconnect(A){if(this.disposed||this.reconnectTimeoutID)return;if(this.reconnectAttempts>=this.config.maxReconnectAttempts){this.stopWaitingForReconnectActivity(),this.recordLifecycleEvent("reconnect_exhausted",`attempts=${this.reconnectAttempts} max=${this.config.maxReconnectAttempts}`),this.clearReconnectScheduleMetadata(),this.updateConnectionState("disconnected"),this.onMaxReconnectExceeded(this.config.maxReconnectAttempts);return}if(!A?.bypassActivityGate&&this.shouldWaitForReconnectActivity()){this.recordLifecycleEvent("reconnect_waiting_for_activity",`offline=${this.isBrowserOffline()} hidden=${this.isDocumentHidden()}`),this.updateConnectionState("reconnecting"),this.waitForReconnectActivity();return}this.stopWaitingForReconnectActivity(),this.updateConnectionState("reconnecting"),this.reconnectAttempts++;let Q=A?.immediate?0:this.getReconnectDelayMs();this.reconnectAttempt=this.reconnectAttempts,this.nextRetryAt=Date.now()+Q,this.updateConnectionState("reconnecting"),this.log.info("[thread-client] Scheduling transport reconnect",{attempt:this.reconnectAttempts,delayMs:Math.round(Q),immediate:A?.immediate===!0,bypassActivityGate:A?.bypassActivityGate===!0,state:this.transportInfo.state,reconnectCauseType:this.reconnectCause?.type,reconnectCode:this.reconnectCause?.code,reconnectReason:this.reconnectCause?.reason}),this.recordLifecycleEvent("reconnect_scheduled",`attempt=${this.reconnectAttempts} delayMs=${Math.round(Q)}`),this.reconnectTimeoutID=setTimeout(()=>{this.reconnectTimeoutID=null,this.nextRetryAt=null,this.updateConnectionState("connecting"),this.connectInternal({fromReconnect:!0}).catch(($)=>{if(this.reconnectCause={type:"connect_failed",at:Date.now(),error:$ instanceof Error?$.message:String($)},!this.disposed)this.scheduleReconnect()})},Q)}cancelReconnect(){if(this.reconnectTimeoutID)clearTimeout(this.reconnectTimeoutID),this.reconnectTimeoutID=null;this.stopWaitingForReconnectActivity(),this.cancelReconnectAttemptsReset(),this.reconnectAttempts=0,this.clearReconnectScheduleMetadata()}clearReconnectScheduleMetadata(){this.reconnectAttempt=null,this.nextRetryAt=null}getReconnectDelayMs(){let A=Math.min(this.config.reconnectDelayMs*2**(this.reconnectAttempts-1),this.config.maxReconnectDelayMs),Q=0.8+Math.random()*0.4;return A*Q}shouldWaitForReconnectActivity(){let A=zF4(),Q=Qx0();if(!A&&!Q)return!1;return this.isBrowserOffline()||this.isDocumentHidden()}isBrowserOffline(){let A=wiQ();if(typeof A?.onLine!=="boolean")return!1;return A.onLine===!1}isDocumentHidden(){let A=Qx0();if(!A)return!1;return A.visibilityState==="hidden"}waitForReconnectActivity(){if(this.reconnectActivityCleanup)return;let A=zF4(),Q=Qx0();if(!A&&!Q)return;let $=()=>{this.handleReconnectActivity()};for(let B of VF4)A?.addEventListener(B,$);for(let B of KF4)Q?.addEventListener(B,$);this.reconnectActivityCleanup=()=>{for(let B of VF4)A?.removeEventListener(B,$);for(let B of KF4)Q?.removeEventListener(B,$)}}stopWaitingForReconnectActivity(){this.reconnectActivityCleanup?.(),this.reconnectActivityCleanup=null}handleReconnectActivity(){if(this.disposed||this.ws){this.stopWaitingForReconnectActivity();return}if(this.shouldWaitForReconnectActivity())return;this.stopWaitingForReconnectActivity(),this.recordLifecycleEvent("reconnect_activity_detected"),this.scheduleReconnect({immediate:!0,bypassActivityGate:!0})}scheduleReconnectAttemptsReset(){this.cancelReconnectAttemptsReset(),this.reconnectResetTimeoutID=setTimeout(()=>{this.reconnectResetTimeoutID=null,this.reconnectAttempts=0},uiQ)}cancelReconnectAttemptsReset(){if(this.reconnectResetTimeoutID)clearTimeout(this.reconnectResetTimeoutID),this.reconnectResetTimeoutID=null}startPingIntervalOnce(){if(this.pingIntervalID)return;this.startPingInterval()}startPingInterval(){this.stopPingInterval();let A=Date.now();this.pingIntervalID=setInterval(()=>{let Q=Date.now(),$=Q-A;if(A=Q,$>this.config.pingIntervalMs*3){this.lastServerFrameAt=Q;return}if(this.hasOpenSocket()){let B=Q-this.lastServerFrameAt,E=this.config.pingIntervalMs*2;if(B>E){this.recordLifecycleEvent("ping_timeout",`elapsedMs=${B} thresholdMs=${E}`);let D=`No server frame received for ${B}ms (threshold ${E}ms)`,J={type:"ping_timeout",at:Q,code:4000,reason:"Pong timeout",error:D};this.reconnectAfterPingTimeout(J);return}try{this.ws?.send("ping")}catch{}}},this.config.pingIntervalMs)}stopPingInterval(){if(this.pingIntervalID)clearInterval(this.pingIntervalID),this.pingIntervalID=null}reconnectAfterPingTimeout(A){if(this.reconnectCause=A,this.detachCurrentSocket({closeCode:4000,closeReason:"Pong timeout",cancelReconnectAttemptsReset:!0,markIntentional:!1}),!this.disposed)this.scheduleReconnect({immediate:!0})}}function x2(A){return typeof A==="object"&&A!==null}function V30(A,Q){return Object.hasOwn(A,Q)}function $Q(A,Q){let $=A[Q];return typeof $==="string"?$:void 0}function K30(A,Q){let $=A[Q];return typeof $==="number"&&Number.isFinite($)?$:void 0}function nN(A,Q){let $=A[Q];return typeof $==="boolean"?$:void 0}function aN(A,Q){let $=A[Q];return x2($)?$:void 0}function AJ(A,Q){let $=A[Q];return Array.isArray($)?$:void 0}function H4(A,Q,$){if($!==void 0)A[Q]=$}function Ex0(A){return A?.map((Q)=>Q.type)}function Dx0(A){let Q=A?.flatMap(($)=>$.blockState?[$.blockState]:[]);return Q&&Q.length>0?Q:void 0}function OiQ(A){return A?.some((Q)=>HF4(Q.blockState))??!1}function HF4(A){return A==="start"||A==="complete"}function NF4(A){return A.flatMap((Q)=>{if(!x2(Q))return[];let $=$Q(Q,"type");return $?[$]:[]})}function qF4(A){let Q=A.flatMap(($)=>{if(!x2($))return[];let B=$Q($,"blockState");return B?[B]:[]});return Q.length>0?Q:void 0}function LiQ(A){return A?.some((Q)=>{if(!x2(Q))return!1;return HF4($Q(Q,"blockState"))})??!1}function jiQ(A,Q){if(!Array.isArray(Q))return;A.blockCount=Q.length,A.blockTypes=NF4(Q),H4(A,"blockStates",qF4(Q))}function z30(A,Q){let $={type:A};return H4($,"direction",Q.direction),H4($,"clientID",Q.clientID),H4($,"frameMessageCount",Q.frameMessageCount),H4($,"frameMessageIndex",Q.frameMessageIndex),H4($,"frameLength",Q.frameLength),$}function uF4(A,Q){H4(A,"seq",K30(Q,"seq")),H4(A,"messageId",$Q(Q,"messageId")),H4(A,"toolCallId",$Q(Q,"toolCallId")),H4(A,"parentToolCallId",$Q(Q,"parentToolCallId")),H4(A,"requestId",$Q(Q,"requestId")),H4(A,"queuedMessageId",$Q(Q,"queuedMessageId")),H4(A,"editId",$Q(Q,"editId")),H4(A,"threadId",$Q(Q,"threadId")),H4(A,"threadID",$Q(Q,"threadID"))}function RiQ(A,Q){uF4(A,Q)}function PiQ(A,Q){if(A.messageId=Q.messageId,A.role=Q.role,A.blockCount=Q.content.length,A.blockTypes=Ex0(Q.content),H4(A,"blockStates",Dx0(Q.content)),Q.role==="assistant")H4(A,"messageState",Q.state?.type),A.hasUsage=Q.usage!==void 0}function viQ(A,Q){if(A.subtype=`${Q.role}.${Q.state}`,A.role=Q.role,A.deltaState=Q.state,A.blockCount=Q.blocks?.length??0,H4(A,"blockTypes",Ex0(Q.blocks)),H4(A,"blockStates",Dx0(Q.blocks)),A.hasUsage=Q.role==="assistant"&&Q.usage!==void 0,Q.role==="assistant"&&Q.blockIndex!==void 0)A.blockIndex=Q.blockIndex}function wF4(A,Q){if(!x2(Q)){if(Q!==void 0)A.hasProgress=!0;return}let $=$Q(Q,"type"),B=$Q(Q,"state");if(H4(A,"progressType",$),H4(A,"progressState",B),$)A.subtype=B?`${$}.${B}`:$;let E=AJ(Q,"blocks");if(E)A.progressBlockCount=E.length,A.progressBlockTypes=NF4(E),H4(A,"progressBlockStates",qF4(E));if(V30(Q,"value"))A.hasProgressValue=!0}function MF4(A,Q){if(!x2(Q))return;let $=$Q(Q,"type");H4(A,"subtype",$),H4(A,"rpcType",$),H4(A,"rpcMethod",$Q(Q,"method"))}function CF4(A,Q){if(!x2(Q))return;H4(A,"runStatus",$Q(Q,"status")),A.hasRunProgress=V30(Q,"progress"),A.hasRunResult=V30(Q,"result"),A.hasRunError=V30(Q,"error")}function TiQ(A,Q){let $=AJ(Q,"files");if($)A.fileCount=$.length;H4(A,"fileCount",K30(Q,"fileCount"));let B=AJ(Q,"withContent");if(B)A.withContentCount=B.length;let E=AJ(Q,"contentOmitted");if(E)A.contentOmittedCount=E.length}function OF4(A,Q){H4(A,"ok",nN(Q,"ok"));let $=AJ(Q,"entries");if($)A.entryCount=$.length;let B=$Q(Q,"contentBase64");if(B!==void 0)A.contentBase64Length=B.length;let E=aN(Q,"error");H4(A,"errorCode",E?$Q(E,"code"):void 0)}function _iQ(A,Q){switch(A.type){case"executor_connect":{H4(A,"clientId",$Q(Q,"clientId")),H4(A,"executorType",$Q(Q,"executorType"));let $=aN(Q,"capabilities");if($)A.capabilityCount=Object.keys($).length;return}case"client_update_thread_settings":A.settingsCount=Object.keys(aN(Q,"settings")??{}).length;return;case"executor_tools_register":A.toolCount=AJ(Q,"tools")?.length??0;return;case"executor_tools_unregister":A.toolCount=AJ(Q,"toolNames")?.length??0;return;case"executor_tools_bootstrap_complete":H4(A,"ok",nN(Q,"ok")),A.hasError=$Q(Q,"error")!==void 0;return;case"tool_progress":wF4(A,Q.progress);return;case"executor_tool_result":CF4(A,Q.run);return;case"executor_guidance_snapshot":case"executor_guidance_discovery":TiQ(A,Q),H4(A,"snapshotId",$Q(Q,"snapshotId")),H4(A,"isLast",nN(Q,"isLast"));return;case"executor_skill_snapshot":H4(A,"snapshotId",$Q(Q,"snapshotId")),A.skillCount=AJ(Q,"skills")?.length??0,A.errorCount=AJ(Q,"errors")?.length??0,H4(A,"isLast",nN(Q,"isLast"));return;case"executor_environment_snapshot":case"executor_environment_update":A.hasEnvironment=x2(Q.environment);return;case"executor_artifact_upsert":{let $=aN(Q,"artifact");H4(A,"artifactKey",$&&$Q($,"key")),H4(A,"artifactDataType",$&&$Q($,"dataType"));return}case"executor_artifact_delete":H4(A,"artifactKey",$Q(Q,"key"));return;case"executor_plugin_message":MF4(A,Q.message);return;case"client_append_user_msg":case"client_edit_message":jiQ(A,Q.content),H4(A,"agentMode",$Q(Q,"agentMode")),H4(A,"reasoningEffort",$Q(Q,"reasoningEffort")),H4(A,"steer",nN(Q,"steer"));return;case"client_set_thread_title":H4(A,"titleLength",$Q(Q,"title")?.length);return;case"executor_filesystem_read_directory_result":case"executor_filesystem_read_file_result":OF4(A,Q);return;case"executor_git_command_result":{let $=aN(Q,"error");H4(A,"subtype",Q.ok?"ok":$&&$Q($,"code")),A.ok=Q.ok,H4(A,"errorCode",$&&$Q($,"code")),H4(A,"exitCode",Q.exitCode);return}case"client_resume":H4(A,"version",K30(Q,"version"));return;case"client_dismiss_active_error":H4(A,"seq",K30(Q,"seq"));return;case"client_append_manual_bash_invocation":A.argCount=AJ(aN(Q,"args")??{},"args")?.length??0,H4(A,"hidden",nN(Q,"hidden")),CF4(A,Q.run);return;case"client_tool_approval_response":H4(A,"accepted",nN(Q,"accepted")),A.hasInput=x2(Q.input);return;case"client_spawn_executor":A.additionalRepositoryCount=AJ(Q,"additionalRepositories")?.length??0,A.hasRepositoryURL=$Q(Q,"repositoryURL")!==void 0,A.hasProjectID=$Q(Q,"projectID")!==void 0;return;case"executor_tool_lease_ack":case"executor_tool_approval_request":case"client_remove_queued_msg":case"client_steer_queued_msg":case"client_mark_message_read":case"client_mark_message_unread":case"client_upsert_notification_subscription":case"client_filesystem_read_directory":case"client_filesystem_read_file":case"client_git_command":case"client_retry":case"client_cancel":return}}function SiQ(A,Q){switch(Q.type){case"agent_state":A.subtype=Q.state,H4(A,"agentMode",Q.agentMode),H4(A,"reasoningEffort",Q.reasoningEffort);return;case"inference_tools":H4(A,"agentMode",Q.agentMode),A.toolCount=Q.tools.length;return;case"error":H4(A,"subtype",Q.code);return;case"error_set":H4(A,"subtype",Q.error.code),H4(A,"retryAt",Q.error.retryAt),H4(A,"attempt",Q.error.attempt);return;case"retry_scheduled":A.attempt=Q.attempt,A.maxAttempts=Q.maxAttempts,A.retryAt=Q.retryAt;return;case"executor_connected":A.executorId=Q.executorId,A.registeredToolCount=Q.registeredToolCount,A.guidanceInventoryCount=Q.guidanceInventory.length,A.rejectedToolCount=Q.rejectedTools?.length??0,A.resumeBootstrap=Q.resumeBootstrap===!0;return;case"tool_lease":A.subtype=Q.toolName,A.toolName=Q.toolName;return;case"client_filesystem_read_directory_result":case"client_filesystem_read_file_result":OF4(A,Q);return;case"client_git_command_result":{let $=aN(Q,"error");H4(A,"subtype",Q.ok?"ok":$&&$Q($,"code")),A.ok=Q.ok,H4(A,"errorCode",$&&$Q($,"code")),H4(A,"exitCode",Q.exitCode);return}case"tool_approval_queue":A.approvalCount=Q.approvals.length;return;case"executor_tool_lease_revoked":A.subtype=Q.reason;return;case"plugin_message":MF4(A,Q.message);return;case"executor_tool_approval_response":A.subtype=Q.accepted?"accepted":"rejected",A.accepted=Q.accepted;return;case"tool_progress":wF4(A,Q.progress);return;case"executor_error":A.subtype=Q.code;return;case"delta":viQ(A,Q);return;case"queued_messages":A.queuedMessageCount=Q.messages.length;return;case"queued_message_added":A.seq=Q.seq,A.messageId=Q.message.queuedMessage.messageId,A.blockCount=Q.message.queuedMessage.content.length,A.blockTypes=Ex0(Q.message.queuedMessage.content),H4(A,"blockStates",Dx0(Q.message.queuedMessage.content));return;case"queued_message_removed":case"queued_message_dequeued":A.messageId=Q.queuedMessageId;return;case"message_added":case"message_updated":PiQ(A,Q.message);return;case"thread_truncated":A.truncateFromMessage=Q.truncateFromMessage;return;case"observers":A.observerCount=Q.count,A.hasExecutor=Q.hasExecutor===!0;return;case"executor_status":A.subtype=Q.status,H4(A,"executorId",Q.executorId),H4(A,"spawnId",Q.spawnId);return;case"executor_workspace_maybe_changed":H4(A,"toolCallId",Q.toolCallId),H4(A,"toolName",Q.toolName);return;case"thread_relationships":A.relationshipCount=Q.relationships.length;return;case"compaction_complete":H4(A,"cutMessageId",Q.cutMessageId);return;case"compaction_records":A.recordCount=Q.records.length;return;case"cancelled":case"thread_settings":case"error_cleared":case"retry_started":case"retry_cancelled":case"executor_filesystem_read_directory":case"executor_filesystem_read_file":case"executor_git_command":case"executor_tool_result_ack":case"environment_update":case"thread_title":case"thread_status":case"compaction_started":case"edit_rejected":return}}function kiQ(A){if(!x2(A))return!1;if($Q(A,"type")!=="delta")return!1;if($Q(A,"state")!=="generating")return!1;return!LiQ(AJ(A,"blocks"))}function W30(A,Q={}){let $=z30(A.type,Q);return RiQ($,A),SiQ($,A),$}function Jx0(A,Q={}){if(!x2(A)){let B=z30("unknown",Q);return B.messageKind=typeof A,B}let $=z30($Q(A,"type")??"unknown",Q);return uF4($,A),_iQ($,A),$}function LF4(A){return z30("decode_failed",{direction:"receive",frameMessageCount:0,frameMessageIndex:0,frameLength:A})}function C30(A){if(A.type==="delta")return A.state!=="generating"||OiQ(A.blocks);if(A.type==="tool_progress")return!kiQ(A.progress);return!0}function H30(A,Q,$){if(!C30(Q))return;A.info("[thread-client] Received server message",W30(Q,{direction:"receive",...$}))}function Ux0(A,Q){A.info("[thread-client] Failed to decode received server message",LF4(Q))}var fiQ=3000,xiQ=30000,yiQ=5,biQ=120000;function rB(A){if(A.state!=="connected")return!1;return A.requiredRole===null||A.role===A.requiredRole}var hiQ={isReplayingAfterResume:!1};function Yx0(A){return{...A.transport,role:A.role,requiredRole:A.requiredRole,clientId:A.clientId}}function giQ(A){return{isReplayingAfterResume:A.resume.state==="replaying"}}function miQ(A,Q){return A?.type===Q?.type&&A?.at===Q?.at&&A?.code===Q?.code&&A?.reason===Q?.reason&&A?.error===Q?.error}function PF4(A,Q){return A.state===Q.state&&A.reconnectAttempt===Q.reconnectAttempt&&A.nextRetryAt===Q.nextRetryAt&&miQ(A.reconnectCause,Q.reconnectCause)}function diQ(A,Q){return PF4(A,Q)&&A.role===Q.role&&A.requiredRole===Q.requiredRole&&A.clientId===Q.clientId}function ciQ(A,Q){return A.isReplayingAfterResume===Q.isReplayingAfterResume}function piQ(A,Q){return PF4(A.transport,Q.transport)&&A.role===Q.role&&A.requiredRole===Q.requiredRole&&A.clientId===Q.clientId&&A.ready===Q.ready&&A.resume.state===Q.resume.state&&A.resume.version===Q.resume.version}function jF4(A){if(A instanceof oB)return A;if(A instanceof Error){let Q=A.message||"Unknown thread-client connection error";return new oB(Q,A)}if(typeof A==="string"&&A.length>0)return new oB(A,A);return new oB("Unknown thread-client connection error",A)}function liQ(A){let Q=atob(A),$=new Uint8Array(Q.length);for(let B=0;B<Q.length;B++)$[B]=Q.charCodeAt(B);return $}function RF4(A){return{type:"error",message:`Failed to send user message: ${A}`,code:"MESSAGE_ERROR"}}function iiQ(A){let{type:Q,...$}=A;return JSON.stringify({jsonrpc:LX,method:Q,params:$})}function niQ(A,Q,$){let{type:B,...E}=Q;return JSON.stringify({jsonrpc:LX,id:$,method:A,params:E})}function aiQ(A){return`thread-client-${Date.now()}-${A}`}function oiQ(A){let Q=of0.safeDecode(A);if(!Q.success)return null;let $=Q.data;if(!("method"in $)||"id"in $)return null;let B=iN.safeParse({type:$.method,...typeof $.params==="object"&&$.params!==null?$.params:{}});return B.success?B.data:null}function riQ(A){let Q=of0.safeDecode(A);if(!Q.success)return null;let $=Q.data;return"method"in $?null:$}function siQ(A){let Q=Error(A.message);return Q.name="JSONRPCError",Q}class QJ extends Bx0{ensureConnectedPromise=null;pendingReadDirectoryRequests=new Map;pendingReadFileRequests=new Map;pendingGitCommandRequests=new Map;pendingJSONRPCRequests=new Map;queuedJSONRPCRequests=new Set;jsonRPCRequestCounter=0;pendingThreadSettings=null;outbox;optimisticUserMessages;pendingCancelAgentLoop=!1;pendingDismissActiveError=null;fileSystemRequestCounter=0;gitCommandRequestCounter=0;wasConnectionReady=!1;sessionStateSubject=new K4({transport:this.getTransportInfo(),role:null,requiredRole:null,clientId:null,ready:!1,resume:{state:"idle",version:0}});sessionState=this.sessionStateSubject;connectionSubject=new K4(this.getConnectionInfo());observerCallbacks=null;executorCallbacks=null;pendingObserverDispatches=[];pendingExecutorDispatches=[];executorCallbacksCleared=!1;resumeCursor=rf0(0);resumeStateSubject=new K4(hiQ);resumeState=this.resumeStateSubject;threadHistoryLoader;executorConnectedListeners=new Set;executorErrorListeners=new Set;environmentSubject=new K4(null);threadIDSubscription;constructor(A){super(A.transport);if(this.updateSessionState((Q)=>({...Q,requiredRole:A.transport.requiredRole??null})),this.threadHistoryLoader=A.threadHistoryLoader,this.outbox=new Ax0({trySend:(Q)=>this.trySendOutboxMessage(Q),onAckedUserMessage:(Q)=>{this.dispatchObserverCallbacks(($)=>{$.onUserMessageSendAck?.(Q)})}}),this.optimisticUserMessages=new ef0({getThreadID:()=>this.getThreadId(),observerCallbacks:(Q)=>this.dispatchObserverCallbacks(Q)}),this.threadIDSubscription=this.threadIDSubject.subscribe((Q)=>{if(Q!==null)this.dispatchObserverCallbacks(($)=>{$.onThreadId?.(Q)})}),A.observerCallbacks)this.setObserverCallbacks(A.observerCallbacks);if(A.executorCallbacks)this.setExecutorCallbacks(A.executorCallbacks)}connectionChanges(){return this.connectionSubject}getSessionState(){return this.sessionStateSubject.getValue()}getConnectionInfo(){return Yx0(this.getSessionState())}updateSessionState(A){let Q=this.getSessionState(),$=A(Q),B={...$,ready:rB(Yx0($))};if(!piQ(Q,B))this.sessionStateSubject.next(B);let E=Yx0(B);if(!diQ(this.connectionSubject.getValue(),E))this.connectionSubject.next(E);let D=giQ(B);if(!ciQ(this.resumeStateSubject.getValue(),D))this.resumeStateSubject.next(D);return B}updateSessionTransportInfo(){return this.updateSessionState((A)=>{let Q=this.getTransportInfo(),$=Q.state==="reconnecting"||Q.state==="disconnected";return{...A,transport:Q,role:$?null:A.role,clientId:$?null:A.clientId}})}updateResumeState(A){this.updateSessionState((Q)=>({...Q,resume:A}))}setObserverCallbacks(A){if(this.observerCallbacks&&this.observerCallbacks!==A)throw Error("Observer callbacks are already set and cannot be replaced");if(this.observerCallbacks===A)return;if(this.observerCallbacks=A,this.pendingObserverDispatches.length===0)return;for(let Q of this.pendingObserverDispatches)Q(A);this.pendingObserverDispatches.length=0}setExecutorCallbacks(A){if(this.executorCallbacks&&this.executorCallbacks!==A)throw Error("Executor callbacks are already set and cannot be replaced");if(this.executorCallbacks===A)return;if(this.executorCallbacks=A,this.executorCallbacksCleared=!1,this.pendingExecutorDispatches.length===0)return;for(let Q of this.pendingExecutorDispatches)Q(A);this.pendingExecutorDispatches.length=0}clearExecutorCallbacks(A){if(A!==void 0&&this.executorCallbacks!==A)return;this.executorCallbacks=null,this.executorCallbacksCleared=!0,this.pendingExecutorDispatches.length=0}async connect(){try{await super.connect()}catch(A){throw jF4(A)}}async reconnect(){this.disconnect(),await this.connect()}async ensureConnected(A){if(this.ensureConnectedPromise)return this.ensureConnectedPromise;this.ensureConnectedPromise=this.ensureConnectedInternal(A);try{return await this.ensureConnectedPromise}finally{this.ensureConnectedPromise=null}}async ensureConnectedInternal(A){let Q=A?.baseDelayMs??fiQ,$=A?.maxDelayMs??xiQ,B=A?.maxAttempts??yiQ;if(A?.forceReconnectWhenReconnecting&&this.getConnectionInfo().state==="reconnecting")this.disconnect();for(let E=0;E<B;E++){try{await this.connect()}catch(Y){let Z=jF4(Y);if(this.getConnectionInfo().state!=="reconnecting")throw Z;A?.onRetryableConnectError?.(Z)}let D=A?.waitForConnectedTimeoutMs??Math.min(Q*2**E,$);if(await this.waitForConnected(D))return!0;let U=E+1<B?Math.min(Q*2**(E+1),$):null;A?.onAttemptTimeout?.({attempt:E+1,maxAttempts:B,nextDelayMs:U})}return!1}async loadThreadHistory(A){let Q=await this.threadHistoryLoader(A);if(!Q)return null;let $=Q.title;if($!==void 0)this.dispatchObserverCallbacks((B)=>{B.onThreadTitle?.({type:"thread_title",title:$})});for(let[B,E]of Q.messages.entries())this.dispatchObserverCallbacks((D)=>{let J={type:"message_added",message:E,seq:B},U=o$.safeParse(E.parentToolUseId);if(U.success)J.parentToolUseId=U.data;D.onMessageAdded?.(J)});return Q}getResumeVersion(){return this.resumeCursor.getVersion()}sendUserMessage(A,Q,$){let B=$?.messageId??wK(),E={type:"client_append_user_msg",content:eD(A),agentMode:Q,reasoningEffort:$?.reasoningEffort,messageId:B,steer:$?.steer,userState:$?.userState};this.dispatchObserverCallbacks((J)=>{J.onUserMessageSendPending?.(B,Date.now())}),this.optimisticUserMessages.emitOptimisticUserMessage(E);let D=this.request("client_append_user_msg",E).then(()=>{return this.dispatchObserverCallbacks((J)=>{J.onUserMessageSendAck?.(B)}),B}).catch((J)=>{let U=J instanceof Error?J.message:String(J);throw this.dispatchObserverCallbacks((Y)=>{Y.onErrorNotice?.(RF4(U))}),J});return this.retryConnectIfTerminallyDisconnected("user message sent"),D}retryConnectIfTerminallyDisconnected(A){if(this.getConnectionInfo().state!=="disconnected")return;this.retryConnect(A)}removeQueuedMessage(A){this.dispatchObserverCallbacks((Q)=>{Q.onUserActionMessageDeliveryStatusChanged?.(A,"buffered",Date.now())}),this.outbox.send({type:"client_remove_queued_msg",queuedMessageId:A}),this.retryConnectIfTerminallyDisconnected("queued message remove requested")}steerQueuedMessage(A){this.outbox.send({type:"client_steer_queued_msg",queuedMessageId:A}),this.retryConnectIfTerminallyDisconnected("queued message steer requested")}editUserMessage(A,Q,$,B,E){this.outbox.send({type:"client_edit_message",messageId:A,editId:$,content:eD(Q),agentMode:B,reasoningEffort:E?.reasoningEffort}),this.retryConnectIfTerminallyDisconnected("user message edit requested")}markMessageRead(A){this.send({type:"client_mark_message_read",messageId:A})}markMessageUnread(A){this.send({type:"client_mark_message_unread",messageId:A})}setThreadTitle(A){let Q={type:"client_set_thread_title",title:A};if(this.threadActorTransport==="amp-rpc")return this.send(Q),Promise.resolve();return this.request("client_set_thread_title",Q).then(()=>{return})}upsertNotificationSubscription(A,Q){this.send({type:"client_upsert_notification_subscription",subscription:A,threadURL:Q})}readDirectory(A){return this.requestReadDirectory(A)}readFile(A){return this.requestReadFile(A)}runGitOperation(A){return this.requestGitOperation(A)}resumeFromVersion(A){this.resumeCursor.reset(A),this.updateResumeState({state:"replaying",version:A});let Q={type:"client_resume",version:A};try{if(this.threadActorTransport==="amp-rpc")return this.send(Q),this.updateResumeState({state:"idle",version:this.getResumeVersion()}),Promise.resolve();return this.request("client_resume",Q).then(()=>{return}).finally(()=>this.updateResumeState({state:"idle",version:this.getResumeVersion()}))}catch($){throw this.updateResumeState({state:"idle",version:this.getResumeVersion()}),$}}retryAgentLoop(){this.send({type:"client_retry"})}dismissActiveError(A){let Q=A===void 0?{}:{seq:A};if(!this.canSendClientMessage()){this.pendingDismissActiveError=Q;return}this.pendingDismissActiveError=null,this.send({type:"client_dismiss_active_error",...Q})}cancelAgentLoop(){if(!this.canSendClientMessage()){this.pendingCancelAgentLoop=!0,this.retryConnectIfTerminallyDisconnected("agent loop cancel requested");return}this.pendingCancelAgentLoop=!1,this.send({type:"client_cancel"})}appendManualBashInvocation(A){this.send({type:"client_append_manual_bash_invocation",args:eD(A.args),run:eD(A.run),hidden:A.hidden})}resolveToolApproval(A,Q,$){this.send({type:"client_tool_approval_response",toolCallId:A,accepted:Q,input:$})}requestExecutorSpawn(A,Q){let $={type:"client_spawn_executor",requestId:A,repositoryURL:Q?.repositoryURL,projectID:Q?.projectID,additionalRepositories:Q?.additionalRepositories};if(this.threadActorTransport==="amp-rpc")return this.send($),Promise.resolve(null);return this.request("client_spawn_executor",$).then((B)=>{let E=iN.safeParse(B);return E.success&&E.data.type==="executor_status"?E.data:null})}executePluginCommand(A,Q,$,B){this.sendPluginMessage({type:"request",id:A,method:"command.execute",params:{pluginName:Q,commandId:$,threadID:B}})}executorHandshake(A,Q,$){if(this.disposed)throw new dQ("Transport is disposed");if(!this.hasOpenSocket()){if(this.getConnectionInfo().state==="connected")this.forceReconnect("executor handshake attempted without open socket");throw new dQ("WebSocket is not connected. Call connect() first.")}let B=performance.now(),E=60000,D={clientId:A,handshakeSeq:$?.handshakeSeq,executorType:$?.executorType,timeoutMs:E};return this.log.info("[thread-client] Starting executor handshake",{...D,connectionState:this.getConnectionInfo().state}),new Promise((J,U)=>{let Y=!1,Z=null,F=null,X=()=>Math.round(performance.now()-B),I=(W,C,H)=>{let N=this.getConnectionInfo();this.log.error(W,{...D,durationMs:X(),connectionState:N.state,role:N.role,reconnectCauseType:N.reconnectCause?.type,reconnectCode:N.reconnectCause?.code,reconnectReason:N.reconnectCause?.reason,error:C,...H})},G=(W)=>{this.log.info("[thread-client] Executor handshake completed",{...D,durationMs:X(),executorId:W.executorId,registeredToolCount:W.registeredToolCount,resumeBootstrap:W.resumeBootstrap}),K(()=>J(W))},V=(W)=>{let C=new Oc(W.message,W.code,W);I("[thread-client] Executor handshake rejected by server",C,{code:W.code}),K(()=>U(C))},K=(W)=>{if(Y)return;if(Y=!0,Z)clearTimeout(Z),Z=null;this.executorConnectedListeners.delete(G),this.executorErrorListeners.delete(V),F?.unsubscribe(),W()};this.executorConnectedListeners.add(G),this.executorErrorListeners.add(V),F=this.connectionChanges().subscribe({next:(W)=>{if(W.state==="connected")return;let C=new dQ(W.state==="reconnecting"?"Executor handshake interrupted by reconnect":"Executor handshake interrupted by disconnect");I("[thread-client] Executor handshake interrupted",C),K(()=>U(C))}});let z={type:"executor_connect",clientId:A,handshakeSeq:$?.handshakeSeq,capabilities:Q,executorType:$?.executorType};this.request("executor_connect",z).catch((W)=>{I("[thread-client] Executor handshake rejected by server",W),K(()=>U(W))}),Z=setTimeout(()=>{let W=Error("Executor connect timeout");I("[thread-client] Executor handshake timed out",W),K(()=>U(W))},E)})}downgradeExecutorRequirementToObserver(){let A=this.getConnectionInfo();if(A.requiredRole!=="executor")throw Error("Cannot downgrade a thread client that is not waiting for executor role");if(A.role==="executor")throw Error("Cannot downgrade a thread client that already has executor role");this.updateSessionState(($)=>({...$,requiredRole:"observer"})),this.clearExecutorCallbacks();let Q=this.getConnectionInfo();if(this.log.info("[thread-client] Executor role requirement downgraded to observer",{previousRequiredRole:A.requiredRole,nextRequiredRole:Q.requiredRole,state:Q.state,role:Q.role}),rB(Q))this.flushPendingReadyWork();this.emitConnectionChanged()}ackToolLease(A){this.send({type:"executor_tool_lease_ack",toolCallId:A})}sendToolProgress(A,Q){let $=OP(Q,"snapshot");this.send({type:"tool_progress",toolCallId:A,progress:$})}sendExecutorToolResult(A,Q,$){let B={type:"executor_tool_result",toolCallId:A,run:Q};if($!==void 0)B.workspaceChanged=$;this.send(B)}sendExecutorFileSystemReadDirectoryResult(A,Q){this.send({type:"executor_filesystem_read_directory_result",requestId:A,...Q})}sendExecutorFileSystemReadFileResult(A,Q){this.send({type:"executor_filesystem_read_file_result",requestId:A,...Q})}sendExecutorGitCommandResult(A,Q){this.send({type:"executor_git_command_result",requestId:A,...Q})}sendExecutorToolApprovalRequest(A){this.send({type:"executor_tool_approval_request",approval:A})}sendPluginMessage(A){let Q,$;if(A.type==="request")$=A.invocation,Q={type:"request",id:A.id,method:A.method,params:A.params};else if(A.type==="event"){if($=A.invocation,Q={type:"event",event:A.event,data:A.data},A.span!==void 0)Q.span=A.span}else Q=A;let B={type:"executor_plugin_message",message:Q};if($!==void 0)B.invocation=$;this.send(B)}sendExecutorGuidanceSnapshot(A){this.send({type:"executor_guidance_snapshot",...A})}sendExecutorGuidanceDiscovery(A){this.send({type:"executor_guidance_discovery",...A})}sendExecutorSkillSnapshot(A){this.send({type:"executor_skill_snapshot",...A})}sendClientUpdateThreadSettings(A){if(!this.canSendClientMessage()){this.pendingThreadSettings=A;return}try{this.pendingThreadSettings=null,this.send({type:"client_update_thread_settings",settings:A})}catch(Q){if(!this.canSendClientMessage()){this.pendingThreadSettings=A;return}throw Q}}registerTools(A){this.send({type:"executor_tools_register",tools:A})}sendExecutorToolsBootstrapComplete(A,Q){this.send({type:"executor_tools_bootstrap_complete",ok:A,error:Q})}sendEnvironmentSnapshot(A){this.send({type:"executor_environment_snapshot",environment:A}),this.environmentSubject.next(A)}sendEnvironmentUpdate(A){this.send({type:"executor_environment_update",environment:A}),this.environmentSubject.next(A)}environmentChanges(){return this.environmentSubject}getEnvironmentSnapshot(){return this.environmentSubject.getValue()}unregisterTools(A){this.send({type:"executor_tools_unregister",toolNames:A})}dispose(){if(this.disposed)return;super.dispose(),this.connectionSubject.complete(),this.threadIDSubscription.unsubscribe(),this.pendingThreadSettings=null,this.outbox.reset(),this.optimisticUserMessages.reset(),this.pendingCancelAgentLoop=!1,this.pendingDismissActiveError=null,this.pendingObserverDispatches.length=0,this.pendingExecutorDispatches.length=0,this.resumeCursor=rf0(0),this.updateResumeState({state:"idle",version:0}),this.wasConnectionReady=!1,this.environmentSubject.complete(),this.sessionStateSubject.complete(),this.resumeStateSubject.complete(),this.rejectPendingExecutorRequests("Transport disposed"),this.rejectPendingJSONRPCRequests("Transport disposed")}updateConnectionState(A){if(super.updateConnectionState(A),this.updateSessionTransportInfo(),this.flushPendingReadyWork(),this.emitConnectionChanged(),A==="reconnecting"||A==="disconnected")this.rejectPendingExecutorRequests("Connection closed before executor request completed"),this.suspendPendingJSONRPCRequests()}onRawMessage(A){let Q=riQ(A);if(Q){this.handleJSONRPCResponse(Q);return}let $=oiQ(A);if($){H30(this.log,$,{frameMessageCount:1,frameMessageIndex:0,frameLength:A.length}),this.handleServerMessage($);return}let B=ZF4(A);if(B.length===0){Ux0(this.log,A.length);return}for(let[E,D]of B.entries())H30(this.log,D,{frameMessageCount:B.length,frameMessageIndex:E,frameLength:A.length}),this.handleServerMessage(D)}onWebSocketTraffic(A){let Q=this.getSessionState();if(Q.requiredRole!=="observer"||Q.role!==null)return;this.updateSessionState(($)=>({...$,role:"observer"})),this.flushPendingReadyWork(),this.emitConnectionChanged()}onMaxReconnectExceeded(A){this.dispatchObserverCallbacks((Q)=>{Q.onErrorNotice?.({type:"error",message:`Failed to reconnect after ${A} attempts`,code:"MAX_RECONNECT_EXCEEDED"})})}handleServerMessage(A){switch(this.advanceResumeCursor(A),this.reconcileOptimisticUserMessage(A),this.outbox.handleServerMessage(A),A.type){case"agent_state":this.dispatchObserverCallbacks((Q)=>{Q.onAgentState?.(A)});break;case"inference_tools":this.dispatchObserverCallbacks((Q)=>{Q.onInferenceTools?.(A)});break;case"thread_settings":this.dispatchObserverCallbacks((Q)=>{Q.onThreadSettings?.(A)});break;case"error":this.dispatchObserverCallbacks((Q)=>{Q.onErrorNotice?.(A)});break;case"error_set":case"error_cleared":this.dispatchObserverCallbacks((Q)=>{Q.onActiveError?.(A)});break;case"cancelled":this.dispatchObserverCallbacks((Q)=>{Q.onCancelled?.(A)});break;case"retry_scheduled":case"retry_started":case"retry_cancelled":this.dispatchObserverCallbacks((Q)=>{Q.onRetryEvent?.(A)});break;case"delta":this.dispatchObserverCallbacks((Q)=>{Q.onDelta?.(A)});break;case"message_updated":this.dispatchObserverCallbacks((Q)=>{Q.onMessageUpdated?.(A)});break;case"edit_rejected":this.dispatchObserverCallbacks((Q)=>{Q.onEditRejected?.(A)});break;case"executor_connected":this.updateSessionState((Q)=>({...Q,role:"executor",clientId:A.executorId})),this.flushPendingReadyWork(),this.emitConnectionChanged(),this.dispatchObserverCallbacks((Q)=>{Q.onExecutorConnected?.(A)});for(let Q of this.executorConnectedListeners)Q(A);break;case"tool_lease":this.dispatchExecutorCallbacks((Q)=>{Q.onToolLease?.(A)});break;case"executor_filesystem_read_directory":this.dispatchExecutorCallbacks((Q)=>{Q.onFileSystemReadDirectoryRequest?.(A)});break;case"executor_filesystem_read_file":this.dispatchExecutorCallbacks((Q)=>{Q.onFileSystemReadFileRequest?.(A)});break;case"executor_git_command":this.dispatchExecutorCallbacks((Q)=>{Q.onGitCommandRequest?.(A)});break;case"executor_tool_lease_revoked":this.dispatchExecutorCallbacks((Q)=>{Q.onToolLeaseRevoked?.(A)});break;case"executor_tool_result_ack":this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorToolResultAck?.(A)});break;case"tool_approval_queue":this.dispatchObserverCallbacks((Q)=>{Q.onToolApprovalQueue?.(A)});break;case"plugin_message":this.dispatchObserverCallbacks((Q)=>{Q.onPluginMessage?.(A)}),this.dispatchExecutorCallbacks((Q)=>{Q.onPluginMessage?.(A)});break;case"executor_tool_approval_response":this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorToolApprovalResponse?.(A)});break;case"tool_progress":this.dispatchObserverCallbacks((Q)=>{Q.onToolProgress?.(A)});break;case"executor_error":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorError?.(A)}),this.dispatchExecutorCallbacks((Q)=>{Q.onExecutorError?.(A)});for(let Q of this.executorErrorListeners)Q(A);break;case"observers":this.dispatchObserverCallbacks((Q)=>{Q.onObservers?.(A)});break;case"executor_status":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorStatus?.(A)});break;case"environment_update":this.environmentSubject.next(A.environment),this.dispatchObserverCallbacks((Q)=>{Q.onEnvironmentUpdate?.(A)});break;case"executor_workspace_maybe_changed":this.dispatchObserverCallbacks((Q)=>{Q.onExecutorWorkspaceMaybeChanged?.(A)});break;case"thread_title":this.dispatchObserverCallbacks((Q)=>{Q.onThreadTitle?.(A)});break;case"thread_relationships":this.dispatchObserverCallbacks((Q)=>{Q.onThreadRelationships?.(A)});break;case"thread_truncated":this.dispatchObserverCallbacks((Q)=>{Q.onTruncate?.(A)});break;case"client_filesystem_read_directory_result":this.handleReadDirectoryResult(A);break;case"client_filesystem_read_file_result":this.handleReadFileResult(A);break;case"client_git_command_result":this.handleGitCommandResult(A);break;case"compaction_started":case"compaction_complete":case"compaction_records":this.dispatchObserverCallbacks((Q)=>{Q.onCompactionEvent?.(A)});break;case"thread_status":break}}flushPendingReadyWork(){if(!rB(this.getConnectionInfo())){this.wasConnectionReady=!1;return}if(this.wasConnectionReady)return;this.wasConnectionReady=!0,this.flushPendingThreadSettings(),this.retryPendingJSONRPCRequests(),this.outbox.retry(),this.flushPendingCancelAgentLoop(),this.flushPendingDismissActiveError()}flushPendingThreadSettings(){if(!this.pendingThreadSettings||!this.canSendClientMessage())return;let A=this.pendingThreadSettings;try{this.pendingThreadSettings=null,this.send({type:"client_update_thread_settings",settings:A})}catch{if(!this.canSendClientMessage())this.pendingThreadSettings=A}}flushPendingCancelAgentLoop(){if(!this.pendingCancelAgentLoop||!this.canSendClientMessage())return;try{this.send({type:"client_cancel"}),this.pendingCancelAgentLoop=!1}catch{if(this.canSendClientMessage())this.pendingCancelAgentLoop=!1}}flushPendingDismissActiveError(){if(!this.pendingDismissActiveError||!this.canSendClientMessage())return;try{this.send({type:"client_dismiss_active_error",...this.pendingDismissActiveError}),this.pendingDismissActiveError=null}catch{if(this.canSendClientMessage())this.pendingDismissActiveError=null}}reconcileOptimisticUserMessage(A){switch(A.type){case"agent_state":this.optimisticUserMessages.setAgentLoopState(A.state);return;case"message_added":this.optimisticUserMessages.reconcileMessageAdded(A);return;case"queued_messages":this.optimisticUserMessages.reconcileQueuedMessagesSnapshot(A);return;case"queued_message_added":this.optimisticUserMessages.reconcileQueuedMessageAdded(A);return;case"queued_message_dequeued":this.optimisticUserMessages.reconcileQueuedMessageRemoved(A);return;case"queued_message_removed":this.optimisticUserMessages.reconcileQueuedMessageRemoved(A);return;default:return}}trySendOutboxMessage(A){if(!this.canSendClientMessage())return!1;try{return this.send(A),!0}catch(Q){let $=Q instanceof Error?Q.message:String(Q);return this.dispatchObserverCallbacks((B)=>{B.onErrorNotice?.(RF4($))}),!1}}canSendClientMessage(){return this.hasOpenSocket()&&rB(this.getConnectionInfo())}emitConnectionChanged(){let A=this.getConnectionInfo();this.log.info("[thread-client] Emitting connection change callbacks",{state:A.state,role:A.role,clientId:A.clientId,reconnectCauseType:A.reconnectCause?.type,reconnectCode:A.reconnectCause?.code,reconnectReason:A.reconnectCause?.reason,hasExecutorCallbacks:this.executorCallbacks!==null,hasObserverCallbacks:this.observerCallbacks!==null,pendingExecutorDispatches:this.pendingExecutorDispatches.length,pendingObserverDispatches:this.pendingObserverDispatches.length}),this.dispatchExecutorCallbacks((Q)=>{Q.onConnectionChange?.(A)}),this.dispatchObserverCallbacks((Q)=>{Q.onConnectionChanged?.(A)})}dispatchObserverCallbacks(A){let Q=this.observerCallbacks;if(!Q){this.pendingObserverDispatches.push(A);return}A(Q)}dispatchExecutorCallbacks(A){let Q=this.executorCallbacks;if(!Q){if(this.executorCallbacksCleared)return;this.pendingExecutorDispatches.push(A);return}A(Q)}requestReadDirectory(A){let Q=this.nextFileSystemRequestID("read-directory");return this.createPendingRequest(this.pendingReadDirectoryRequests,Q,()=>{let $={type:"client_filesystem_read_directory",requestId:Q,uri:A};return this.request("client_filesystem_read_directory",$)},Hf0,"Filesystem request timed out")}requestReadFile(A){let Q=this.nextFileSystemRequestID("read-file");return this.createPendingRequest(this.pendingReadFileRequests,Q,()=>{let $={type:"client_filesystem_read_file",requestId:Q,uri:A};return this.request("client_filesystem_read_file",$)},Hf0,"Filesystem request timed out")}requestGitOperation(A){let Q=this.nextGitCommandRequestID();return this.createPendingRequest(this.pendingGitCommandRequests,Q,()=>{let $={type:"client_git_command",requestId:Q,operation:A};return this.request("client_git_command",$)},pZ4,"Git command request timed out")}createPendingRequest(A,Q,$,B,E){if(!this.hasOpenSocket())return Promise.reject(new dQ("WebSocket is not connected"));return new Promise((D,J)=>{let U=setTimeout(()=>{A.delete(Q),J(new dQ(`${E}: ${Q}`))},B);A.set(Q,{resolve:D,reject:J,timeoutID:U});try{Promise.resolve($()).catch((Y)=>{if(!A.has(Q))return;clearTimeout(U),A.delete(Q),J(Y instanceof Error?Y:Error(String(Y)))})}catch(Y){clearTimeout(U),A.delete(Q),J(Y instanceof Error?Y:Error(String(Y)))}})}nextFileSystemRequestID(A){let Q=this.fileSystemRequestCounter++;return`${A}-${Date.now()}-${Q}`}nextGitCommandRequestID(){let A=this.gitCommandRequestCounter++;return`git-command-${Date.now()}-${A}`}handleReadDirectoryResult(A){let Q=this.pendingReadDirectoryRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingReadDirectoryRequests.delete(A.requestId),A.ok&&A.entries){Q.resolve(A.entries);return}if(A.ok){Q.reject(Error("Invalid filesystem read_directory response: missing entries"));return}if(!A.error){Q.reject(Error("Invalid filesystem read_directory response: missing error"));return}Q.reject(this.createFileSystemError(A.error))}handleReadFileResult(A){let Q=this.pendingReadFileRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingReadFileRequests.delete(A.requestId),!A.ok&&A.error){Q.reject(this.createFileSystemError(A.error));return}if(!A.ok){Q.reject(Error("Invalid filesystem read_file response: missing error"));return}if(A.contentBase64===void 0){Q.reject(Error("Invalid filesystem read_file response: missing content"));return}try{Q.resolve(liQ(A.contentBase64))}catch{Q.reject(Error("Invalid base64 payload in filesystem read_file response"))}}handleGitCommandResult(A){let Q=this.pendingGitCommandRequests.get(A.requestId);if(!Q)return;if(clearTimeout(Q.timeoutID),this.pendingGitCommandRequests.delete(A.requestId),A.ok){if(A.exitCode===void 0||A.stdout===void 0||A.stderr===void 0){Q.reject(Error("Invalid git command response: missing result fields"));return}Q.resolve({exitCode:A.exitCode,stdout:A.stdout,stderr:A.stderr});return}if(!A.error){Q.reject(Error("Invalid git command response: missing error"));return}Q.reject(Error(`Git command error (${A.error.code}): ${A.error.message}`))}createFileSystemError(A){return Error(`Filesystem error (${A.code}): ${A.message}`)}rejectPendingExecutorRequests(A){for(let[Q,$]of this.pendingReadDirectoryRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingReadDirectoryRequests.delete(Q);for(let[Q,$]of this.pendingReadFileRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingReadFileRequests.delete(Q);for(let[Q,$]of this.pendingGitCommandRequests)clearTimeout($.timeoutID),$.reject(new dQ(A)),this.pendingGitCommandRequests.delete(Q)}rejectPendingJSONRPCRequests(A){for(let Q of this.queuedJSONRPCRequests){if(Q.timeoutID!==null)clearTimeout(Q.timeoutID),Q.timeoutID=null;Q.reject(new dQ(A))}this.pendingJSONRPCRequests.clear(),this.queuedJSONRPCRequests.clear()}suspendPendingJSONRPCRequests(){for(let A of this.queuedJSONRPCRequests){if(A.timeoutID!==null)clearTimeout(A.timeoutID),A.timeoutID=null;if(A.requestId!==null)this.pendingJSONRPCRequests.delete(A.requestId),A.requestId=null}}retryPendingJSONRPCRequests(){for(let A of this.queuedJSONRPCRequests)if(A.requestId===null)this.trySendJSONRPCRequest(A)}handleJSONRPCResponse(A){let Q=this.pendingJSONRPCRequests.get(A.id);if(!Q)return;if(this.pendingJSONRPCRequests.delete(A.id),this.queuedJSONRPCRequests.delete(Q),Q.timeoutID!==null)clearTimeout(Q.timeoutID),Q.timeoutID=null;if(Q.requestId=null,"error"in A&&A.error){Q.reject(siQ(A.error));return}Q.resolve("result"in A?A.result:void 0)}advanceResumeCursor(A){if(!("seq"in A)||!Number.isFinite(A.seq))return;let Q=this.resumeCursor.getVersion();this.resumeCursor.advanceFromSeq(A.seq);let $=this.resumeCursor.getVersion();if($===Q)return;this.updateSessionState((B)=>({...B,resume:{...B.resume,version:$}}))}send(A){try{let Q=this.threadActorTransport==="json-rpc"?iiQ(A):BF4.encode(A);this.sendRaw(Q)}catch(Q){let $=Q instanceof Error?Q.message:String(Q);throw new dQ(`Failed to encode thread-protocol message "${A.type}": ${$}`,Q)}}request(A,Q){if(this.threadActorTransport!=="json-rpc")return this.send(Q),Promise.resolve(null);return new Promise(($,B)=>{let E={method:A,message:Q,resolve:$,reject:B,timeoutID:null,requestId:null};this.queuedJSONRPCRequests.add(E),this.trySendJSONRPCRequest(E)})}trySendJSONRPCRequest(A){if(!this.hasOpenSocket()||A.requestId!==null)return;let Q=aiQ(this.jsonRPCRequestCounter++),$=setTimeout(()=>{this.pendingJSONRPCRequests.delete(Q),this.queuedJSONRPCRequests.delete(A),A.requestId=null,A.timeoutID=null,A.reject(new dQ(`JSON-RPC request timed out: ${Q}`))},biQ);A.requestId=Q,A.timeoutID=$,this.pendingJSONRPCRequests.set(Q,A);try{this.sendRaw(niQ(A.method,A.message,Q))}catch(B){clearTimeout($),this.pendingJSONRPCRequests.delete(Q),this.queuedJSONRPCRequests.delete(A),A.requestId=null,A.timeoutID=null,A.reject(B instanceof Error?B:Error(String(B)))}}}function LP(A,Q={}){let $=!1,B=!1;return A.connectionChanges().subscribe({next:(E)=>{let D=Q.requireRole??E.requiredRole,J=rB({state:E.state,role:E.role,requiredRole:D});if(J&&!$){if(B)A.resumeFromVersion(A.getResumeVersion()).catch((U)=>{Q.onError?.({threadID:A.getThreadId(),error:U})});B=!0}$=J}})}xA();function Zx0(A){return{...A,pendingRemoval:!0}}function vF4(A,Q){if(Q.find((B)=>B.queuedMessage.messageId===A.queuedMessage.messageId)?.pendingRemoval!==!0)return A;return Zx0(A)}function TF4(A,Q,$){if(Q.type==="queued_messages")return Q.messages.map((B)=>vF4(B,A));if(Q.type==="queued_message_added"){if(A.find((E)=>E.queuedMessage.messageId===Q.message.queuedMessage.messageId)&&$.dedupeAdded)return[...A];return[...A,vF4(Q.message,A)]}if(!A.some((B)=>B.queuedMessage.messageId===Q.queuedMessageId))return[...A];return A.filter((B)=>B.queuedMessage.messageId!==Q.queuedMessageId)}function _F4(A){if(A.connectionState==="disconnected")return"disconnected";if(A.compactionState==="compacting")return"compacting";if(A.connectionState!=="connected")return"connecting";if(!A.connectionReady)return"preparing_thread";if(A.firstThreadSendPhase==="pending")return"sending";if(A.firstThreadSendPhase==="acked"&&A.agentLoopState==="idle")return"working";switch(A.agentLoopState){case"awaiting_approval":return"awaiting_approval";case"tool_use":case"running_tools":return"running_tools";case"streaming":return A.streamingBlockKind==="thinking"?"thinking":"streaming";case"working":return"working";case"error":return"error";case"idle":if(A.pendingSend)return"sending";if(A.executorStatus?.status==="starting")return"waiting_for_executor";if(A.expectingAgentLoop)return"working";return"idle"}}function jP(A){let Q=0;for(let $=0;$<A.length;$++){let B=A.codePointAt($)??0;if(B<128)Q+=1;else if(B<2048)Q+=2;else if(B<65536)Q+=3;else Q+=4,$++}return Q}function tiQ(A){if(A.complete)return jP(JSON.stringify(A.input));let Q=A.inputPartialJSON?.json;if(typeof Q==="string")return jP(Q);return jP(JSON.stringify(A.input))}var SF4={state:"disconnected",role:null,requiredRole:null,clientId:null},eiQ=750;function fF4(A){switch(A.type){case"thinking":case"redacted_thinking":return"thinking";case"text":if(A.hidden===!0)return null;return"text";case"tool_use":case"server_tool_use":return"tool_use"}}function AnQ(A,Q){let $=Q;for(let B of A){let E=fF4(B);if(E===null)continue;if(E==="thinking"&&$!==null)continue;$=E}return $}function kF4(A){return"blockState"in A?A.blockState:void 0}function QnQ(A){return A.seq===bc}class N30{connectionInfo;agentLoopState;pendingSend=new K4(!1);streamingBlockKind=new K4(null);activeStreamingBlockKinds=new Map;expectingAgentLoop=!1;expectingAgentLoopTimer=null;hasSeenThreadMessage=!1;firstThreadSendPhase="none";status=new K4("idle");stageBytes=new K4(null);currentStage=null;currentStageBytes=0;toolBlockLatestBytes=new Map;queuedMessages=new K4([]);pendingApprovals=new K4([]);lastError=new K4(null);activeError=new K4(null);cancelledMessageId=new K4(null);retryState=new K4(null);executorError=new K4(null);observers=new K4(null);executorStatus=new K4(null);environment=new K4(null);compactionState=new K4("idle");compactionRecords=new K4([]);threadSettings;threadTitle=new K4(void 0);threadId=new K4(null);messageAddedEvents=new w4;messageRemovedEvents=new w4;messageUpdatedEvents=new w4;deltaEvents=new w4;toolProgressEvents=new w4;truncateEvents=new w4;pluginMessages=new w4;pluginUIRequests=new K4([]);pluginUIRequestsByID=new Map;now;dedupeQueuedMessageAdds;compactionRecordsState;constructor(A={}){this.connectionInfo=new K4(A.initialConnectionInfo??SF4),this.agentLoopState=new K4(A.initialAgentLoopState??"idle"),this.threadSettings=new K4(A.initialThreadSettings??null),this.dedupeQueuedMessageAdds=A.dedupeQueuedMessageAdds??!0,this.compactionRecordsState=A.compactionRecordsState??null,this.now=A.now??(()=>new Date().toISOString()),this.recomputeStatus()}callbacks(){return this}recomputeStatus(){let A=this.connectionInfo.getValue(),Q=_F4({connectionState:A.state,connectionReady:rB(A),compactionState:this.compactionState.getValue(),pendingSend:this.pendingSend.getValue(),executorStatus:this.executorStatus.getValue(),agentLoopState:this.agentLoopState.getValue(),streamingBlockKind:this.streamingBlockKind.getValue(),expectingAgentLoop:this.expectingAgentLoop,firstThreadSendPhase:this.firstThreadSendPhase});if(Q!==this.status.getValue())this.status.next(Q);this.syncStageBytes(Q)}syncStageBytes(A){let Q=A==="thinking"||A==="streaming"?A:null;if(Q===this.currentStage)return;this.currentStage=Q,this.currentStageBytes=0,this.toolBlockLatestBytes.clear(),this.stageBytes.next(Q===null?null:{stage:Q,bytes:0})}onConnectionChanged(A){if(!rB(A)){if(this.clearExpectingAgentLoop(),A.state!=="connected")this.clearFirstThreadSendPhase()}this.connectionInfo.next(A),this.recomputeStatus()}onAgentState(A){let Q=c3(A.state);if(A.state!=="idle")this.clearFirstThreadSendPhase();if(Q)this.pendingSend.next(!1);if(A.state==="idle")this.clearStreamingBlockKind();this.clearExpectingAgentLoop(),this.agentLoopState.next(A.state),this.recomputeStatus()}onUserMessageSendPending(A,Q){if(!this.hasSeenThreadMessage)this.firstThreadSendPhase="pending";this.pendingSend.next(!0),this.recomputeStatus()}onUserMessageSendAck(A){if(this.firstThreadSendPhase==="pending")this.firstThreadSendPhase="acked";if(this.pendingSend.next(!1),!c3(this.agentLoopState.getValue()))this.scheduleExpectingAgentLoop();this.recomputeStatus()}scheduleExpectingAgentLoop(){this.clearExpectingAgentLoopTimer(),this.expectingAgentLoop=!0,this.expectingAgentLoopTimer=setTimeout(()=>{this.expectingAgentLoopTimer=null,this.expectingAgentLoop=!1,this.recomputeStatus()},eiQ)}clearFirstThreadSendPhase(){this.firstThreadSendPhase="none"}clearExpectingAgentLoop(){this.clearExpectingAgentLoopTimer(),this.expectingAgentLoop=!1}clearExpectingAgentLoopTimer(){if(this.expectingAgentLoopTimer!==null)clearTimeout(this.expectingAgentLoopTimer),this.expectingAgentLoopTimer=null}onThreadSettings(A){this.threadSettings.next(A.settings)}onMessageAdded(A){if(!QnQ(A))this.hasSeenThreadMessage=!0;this.messageAddedEvents.next(A)}onMessageRemoved(A){this.messageRemovedEvents.next(A)}onMessageUpdated(A){this.messageUpdatedEvents.next(A)}onDelta(A){if(A.role==="assistant")this.clearFirstThreadSendPhase();this.updateStreamingBlockKinds(A),this.accumulateStageBytes(A),this.deltaEvents.next(A)}accumulateStageBytes(A){if(A.role!=="assistant")return;if(this.currentStage===null)return;let Q=A.blocks;if(!Q||Q.length===0)return;let $=A.blockIndex??0,B=0;for(let[E,D]of Q.entries())if(this.currentStage==="streaming"){if(D.type==="text"&&D.hidden!==!0)B+=jP(D.text);else if(D.type==="tool_use"){let J=$+E;if(X30(D)){let Z=jP(D.inputPartialJSONDelta.json);B+=Z,this.toolBlockLatestBytes.set(J,(this.toolBlockLatestBytes.get(J)??0)+Z);continue}let U=tiQ(D),Y=this.toolBlockLatestBytes.get(J)??0;if(U>Y)B+=U-Y,this.toolBlockLatestBytes.set(J,U)}}else if(this.currentStage==="thinking"&&D.type==="thinking")B+=jP(D.thinking);if(B===0)return;this.currentStageBytes+=B,this.stageBytes.next({stage:this.currentStage,bytes:this.currentStageBytes})}updateStreamingBlockKinds(A){if(A.role!=="assistant")return;let Q=this.status.getValue(),$=this.streamingBlockKind.getValue(),B=!1;if(A.state==="start")B=this.clearStreamingBlockKind();let E=A.blocks;if(!E){if(B)this.recomputeStatus(),this.resetCurrentStageBytesIfKindChangedWithinStage(Q,$);return}if(E.some((D)=>kF4(D)!==void 0))B=this.applyStreamingBlockLifecycle(E,A.blockIndex??0)||B;else{let D=AnQ(E,this.streamingBlockKind.getValue());if(D!==this.streamingBlockKind.getValue())this.streamingBlockKind.next(D),B=!0}if(B)this.recomputeStatus(),this.resetCurrentStageBytesIfKindChangedWithinStage(Q,$)}resetCurrentStageBytesIfKindChangedWithinStage(A,Q){if(this.status.getValue()!==A)return;if(this.streamingBlockKind.getValue()===Q)return;this.resetCurrentStageBytes()}resetCurrentStageBytes(){if(this.currentStage===null)return;this.currentStageBytes=0,this.toolBlockLatestBytes.clear(),this.stageBytes.next({stage:this.currentStage,bytes:0})}applyStreamingBlockLifecycle(A,Q){let $=!1;for(let[B,E]of A.entries()){let D=fF4(E),J=kF4(E);if(D===null||J===void 0)continue;let U=Q+B;if(J==="complete")$=this.activeStreamingBlockKinds.delete(U)||$;else if(this.activeStreamingBlockKinds.get(U)!==D)this.activeStreamingBlockKinds.set(U,D),$=!0}return this.syncStreamingBlockKind()||$}clearStreamingBlockKind(){let A=this.activeStreamingBlockKinds.size>0;if(this.activeStreamingBlockKinds.clear(),this.streamingBlockKind.getValue()===null)return A;return this.streamingBlockKind.next(null),!0}syncStreamingBlockKind(){let A=this.deriveStreamingBlockKind();if(A===this.streamingBlockKind.getValue())return!1;return this.streamingBlockKind.next(A),!0}deriveStreamingBlockKind(){let A=-1,Q=null;for(let[$,B]of this.activeStreamingBlockKinds)if($>A)A=$,Q=B;return Q}onToolProgress(A){this.toolProgressEvents.next(A)}onTruncate(A){this.truncateEvents.next(A)}onPluginMessage(A){if(this.applyPluginUIStateEvent(A))return;this.pluginMessages.next(A)}applyPluginUIStateEvent(A){let Q=A.message;if(Q.type!=="event")return!1;if(Q.event==="plugin.ui.snapshot"){let $=Q.data?.requests;if(!Array.isArray($))return!1;this.pluginUIRequestsByID.clear();for(let B of $)this.pluginUIRequestsByID.set(B.requestId,B);return this.emitPluginUIRequestsSnapshot(),!0}if(Q.event==="plugin.ui.request_added"||Q.event==="plugin.ui.request_settled"){let $=Q.data?.request;if(!$)return!1;return this.pluginUIRequestsByID.set($.requestId,$),this.emitPluginUIRequestsSnapshot(),!0}if(Q.event==="plugin.ui.request_removed"){let $=Q.data?.requestId;if(typeof $!=="string")return!1;if(this.pluginUIRequestsByID.delete($))this.emitPluginUIRequestsSnapshot();return!0}return!1}emitPluginUIRequestsSnapshot(){this.pluginUIRequests.next([...this.pluginUIRequestsByID.values()])}onQueuedMessages(A){this.queuedMessages.next(TF4(this.queuedMessages.getValue(),A,{dedupeAdded:this.dedupeQueuedMessageAdds}))}onUserActionMessageDeliveryStatusChanged(A,Q,$){if(Q!=="buffered")return;let B=this.queuedMessages.getValue(),E=B.findIndex((U)=>U.queuedMessage.messageId===A);if(E===-1)return;let D=B[E];if(!D)return;let J=[...B];J[E]=Zx0(D),this.queuedMessages.next(J)}onToolApprovalQueue(A){this.pendingApprovals.next(A.approvals)}onErrorNotice(A){this.clearPendingSendIfIdle(),this.lastError.next(A),this.recomputeStatus()}onActiveError(A){if(A.type==="error_set")this.clearFirstThreadSendPhase(),this.clearPendingSendIfIdle(),this.compactionState.next("idle");this.cancelledMessageId.next(null),this.activeError.next(A.type==="error_set"?A.error:null),this.recomputeStatus()}onCancelled(A){this.cancelledMessageId.next(A.messageId??null),this.activeError.next(null)}onExecutorError(A){this.executorError.next(A)}onRetryEvent(A){this.retryState.next(A)}onObservers(A){this.observers.next({count:A.count,observers:A.observers,hasExecutor:A.hasExecutor??!1})}onExecutorStatus(A){if(this.executorStatus.next(A),A.status==="running")this.executorError.next(null);this.recomputeStatus()}onEnvironmentUpdate(A){this.environment.next(A.environment)}onCompactionEvent(A){if(A.type==="compaction_started"){this.compactionState.next("compacting"),this.recomputeStatus();return}if(A.type==="compaction_complete"){if(this.compactionState.next("idle"),A.cutMessageId!==void 0)this.addCompactionRecord({cutMessageId:A.cutMessageId,createdAt:this.now()});this.recomputeStatus();return}if(this.compactionRecords.next(A.records),this.compactionRecordsState!==null)this.compactionState.next(this.compactionRecordsState),this.recomputeStatus()}onThreadTitle(A){this.threadTitle.next(A.title||void 0)}onThreadId(A){this.threadId.next(A)}resetRuntimeState(){this.connectionInfo.next(SF4),this.agentLoopState.next("idle"),this.pendingSend.next(!1),this.clearStreamingBlockKind(),this.clearExpectingAgentLoop(),this.hasSeenThreadMessage=!1,this.clearFirstThreadSendPhase(),this.queuedMessages.next([]),this.pendingApprovals.next([]),this.activeError.next(null),this.executorError.next(null),this.cancelledMessageId.next(null),this.retryState.next(null),this.observers.next(null),this.executorStatus.next(null),this.environment.next(null),this.compactionState.next("idle"),this.pluginUIRequestsByID.clear(),this.emitPluginUIRequestsSnapshot(),this.recomputeStatus()}dispose(){this.clearExpectingAgentLoopTimer(),this.connectionInfo.complete(),this.agentLoopState.complete(),this.pendingSend.complete(),this.streamingBlockKind.complete(),this.status.complete(),this.stageBytes.complete(),this.queuedMessages.complete(),this.pendingApprovals.complete(),this.lastError.complete(),this.activeError.complete(),this.cancelledMessageId.complete(),this.retryState.complete(),this.executorError.complete(),this.observers.complete(),this.executorStatus.complete(),this.environment.complete(),this.compactionState.complete(),this.compactionRecords.complete(),this.threadSettings.complete(),this.threadTitle.complete(),this.threadId.complete(),this.messageAddedEvents.complete(),this.messageRemovedEvents.complete(),this.messageUpdatedEvents.complete(),this.deltaEvents.complete(),this.toolProgressEvents.complete(),this.truncateEvents.complete(),this.pluginMessages.complete(),this.pluginUIRequestsByID.clear(),this.pluginUIRequests.complete()}addCompactionRecord(A){let Q=this.compactionRecords.getValue();if(Q.some(($)=>$.cutMessageId===A.cutMessageId))return;this.compactionRecords.next([...Q,A])}clearPendingSendIfIdle(){if(this.pendingSend.getValue()&&!c3(this.agentLoopState.getValue()))this.pendingSend.next(!1)}}hB();function xF4(A,Q){let $=A.parentToolUseId;if(A.role==="assistant"){let E={role:"assistant",content:A.content,state:A.state?.type==="cancelled"?{type:"cancelled"}:A.isStreaming===!0?{type:"streaming"}:{type:"complete",stopReason:null},usage:A.usage,messageId:Q,protocolMessageID:A.messageId,readAt:A.readAt};if($===void 0)return E;return{...E,parentToolUseId:$}}if(A.role==="info"){let E={role:"info",content:A.content,messageId:Q,protocolMessageID:A.messageId};if($===void 0)return E;return{...E,parentToolUseId:$}}let B={role:"user",content:A.content,meta:F00(A.meta),userState:A.userState,readAt:A.readAt,messageId:Q,protocolMessageID:A.messageId};if($===void 0)return B;return{...B,parentToolUseId:$}}a0();NyA();function mF4(A,Q,$){let B;switch(Q.type){case"message_added":B=$nQ(A,Q);break;case"message_updated":B=BnQ(A,Q);break;case"delta":B=DnQ(A,Q,$);break;case"tool_progress":B=JnQ(A,Q,$);break;case"thread_truncated":B=UnQ(A,Q);break}return B}function $nQ(A,Q){let $=oN(Q.message,Q.parentToolUseId??Q.message.parentToolUseId);return dF4(A,$)}function BnQ(A,Q){let $=EnQ(A,Q.message);return dF4(A,$)}function dF4(A,Q){let $=NnQ(A,unQ(Q)),B=hc($,Q.messageId),E=$.slice();if(B>=0)return E[B]=Q,E;return E.push(Q),E}function EnQ(A,Q){let $=hc(A,Q.messageId),B=$>=0?A[$]:void 0;return oN(Q,B?.parentToolUseId)}function oN(A,Q){let $={...A};if(Q!==void 0)$.parentToolUseId=Q;return $}function DnQ(A,Q,$){let B=Q.role==="assistant"&&Q.state==="aborted"?KnQ(A,Q.messageId):A;if(!Q.blocks||Q.blocks.length===0){if(Q.role==="assistant"&&(Q.state==="complete"||Q.state==="tool_use"))return hF4(B,{...Q,blocks:[],blockIndex:Q.blockIndex??0},$);return B.slice()}if(Q.role==="assistant")return hF4(B,Q,$);return YnQ(B,{...Q,blocks:Q.blocks},$)}function JnQ(A,Q,$){let B=HnQ(Q.progress);if(B!==void 0&&B.status!=="in-progress"&&!ZY(B.status))return A.slice();if(gF4(A,Q.toolCallId,(X)=>ZY(X.run.status)))return A.slice();let D=gF4(A,Q.toolCallId),J=B!==void 0&&ZY(B.status)?B:void 0;if(J!==void 0){let X=yF4(Q.toolCallId,J,D?.block.userInput);return bF4(A,Q,$,D,X)}let U=D&&"progress"in D.block.run?D.block.run.progress:void 0,Y=Q.progress===void 0?U:I30(U,Q.progress),Z=Y===void 0?{status:"in-progress"}:{status:"in-progress",progress:Y},F=yF4(Q.toolCallId,Z,D?.block.userInput);return bF4(A,Q,$,D,F)}function yF4(A,Q,$){if($!==void 0)return{type:"tool_result",toolUseID:A,run:Q,userInput:$};return{type:"tool_result",toolUseID:A,run:Q}}function bF4(A,Q,$,B,E){if(B)return znQ(A,B,E);return[...A,oN({threadId:$.threadId,messageId:cF4(Q.toolCallId),role:"user",content:[E]},Q.parentToolCallId)]}function UnQ(A,Q){let $=hc(A,Q.truncateFromMessage);return $>=0?A.slice(0,$):A.slice()}function hF4(A,Q,$){let B=hc(A,Q.messageId),E=B>=0?A[B]:void 0,D=E?.role==="assistant"?E.content:[],J=ZnQ(D,Q.blocks,Q.blockIndex),U=Q.parentToolCallId??E?.parentToolUseId,Y=E?.role==="assistant"?oN({...E,content:J},U):oN({threadId:$.threadId,messageId:Q.messageId,role:"assistant",content:J},U);if(Q.usage!==void 0)Y.usage=Q.usage;if(Q.state==="aborted")Y.state={type:"cancelled"},delete Y.isStreaming;else if(Q.state==="complete"||Q.state==="tool_use")Y.state={type:"complete"},delete Y.isStreaming;else Y.isStreaming=!0;return Fx0(A,B,Y)}function YnQ(A,Q,$){let B=hc(A,Q.messageId),E=B>=0?A[B]:void 0,D=E?.role==="user"?E.content:[],J=VnQ(D,Q.blocks),U=Q.parentToolCallId??E?.parentToolUseId,Y=E?.role==="user"?oN({...E,content:J},U):oN({threadId:$.threadId,messageId:Q.messageId,role:"user",content:J},U);return Fx0(A,B,Y)}function ZnQ(A,Q,$){let B=[...A];for(let[E,D]of Q.entries()){let J=$+E;InQ(B,J);let U=B[J];if(X30(D)){B[J]=XnQ(U,D,J);continue}let Y=FnQ(D);if(GnQ(U))B[J]=Y;else if(U?.type==="text"&&Y.type==="text")B[J]={...U,...Y,text:U.text+Y.text};else if(U?.type==="thinking"&&Y.type==="thinking")B[J]={...U,...Y,thinking:U.thinking+Y.thinking};else B[J]=Y}return B}function FnQ(A){if(A.type==="thinking")return{...A,signature:A.signature??""};return A}function XnQ(A,Q,$){if(A?.type!=="tool_use"||A.complete||A.id!==Q.id)return S.warn("[thread-client] Dropping tool input delta without matching incomplete block",{blockIndex:$,toolUseId:Q.id,existingType:A?.type,existingToolUseId:A?.type==="tool_use"?A.id:void 0,existingComplete:A?.type==="tool_use"?A.complete:void 0}),A??{type:"text",text:"",hidden:!0};let B=A.inputPartialJSON.json+Q.inputPartialJSONDelta.json,E=WyA(B);return{...A,input:E.input,inputIncomplete:E.inputIncomplete,inputPartialJSON:{json:B}}}function InQ(A,Q){while(A.length<Q)A.push({type:"text",text:"",hidden:!0})}function GnQ(A){return A?.type==="text"&&A.hidden===!0&&A.text===""}function VnQ(A,Q){let $=[...A];for(let B of Q){let E=$.length-1,D=$[E];if(D?.type==="text"&&B.type==="text")$[E]={...D,text:D.text+B.text};else $.push(B)}return $}function Fx0(A,Q,$){let B=A.slice();if(Q>=0)return B[Q]=$,B;return B.push($),B}function KnQ(A,Q){return A.filter(($)=>$.messageId!==Q)}function hc(A,Q){return A.findIndex(($)=>$.messageId===Q)}function gF4(A,Q,$=()=>!0){for(let[B,E]of A.entries()){if(E.role!=="user")continue;for(let[D,J]of E.content.entries())if(J.type==="tool_result"&&J.toolUseID===Q&&$(J))return{messageIndex:B,blockIndex:D,message:E,block:J}}return}function znQ(A,Q,$){let B=Q.message.content.slice();return B[Q.blockIndex]=$,Fx0(A,Q.messageIndex,{...Q.message,content:B})}var WnQ=["queued","blocked-on-user","in-progress","rejected-by-user","cancellation-requested","cancelled","done","error"];function CnQ(A){return typeof A==="string"&&WnQ.includes(A)}function HnQ(A){if(A===void 0||typeof A!=="object"||A===null)return;let Q=A;if(Q.type!=="snapshot")return;let $=Q.value;if(typeof $!=="object"||$===null)return;let B=$;return CnQ(B.status)?B:void 0}function NnQ(A,Q){if(Q.size===0)return A;return A.filter(($)=>!qnQ($,Q))}function qnQ(A,Q){if(A.role!=="user"||A.content.length!==1)return!1;let $=A.content[0];return $?.type==="tool_result"&&Q.has($.toolUseID)&&A.messageId===cF4($.toolUseID)}function unQ(A){let Q=new Set;if(A.role!=="user")return Q;for(let $ of A.content)if($.type==="tool_result")Q.add($.toolUseID);return Q}function cF4(A){return`M-${A.replace(/^TU-/,"")}`}class q30{inProgressMessageID=null;threadMessages=[];sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages};messageSeq=new Map;messageOrder=new Map;nextMessageOrder=0;threadID;coreMessagesCache={input:this.threadMessages,output:[]};constructor(A){this.threadID=A}setThreadID(A){this.threadID=A}getThreadID(){return this.threadID}reset(A){let Q=this.messages().length;if(A!==void 0)this.threadID=A;return this.threadMessages=[],this.sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages},this.messageSeq.clear(),this.messageOrder.clear(),this.nextMessageOrder=0,this.inProgressMessageID=null,{changed:Q>0,previousMessageCount:Q,nextMessageCount:0,changedIndices:wnQ(Q,0)}}apply(A){if(A.type==="message_added"&&lF4(A)===void 0||A.type==="message_updated")this.setThreadID(A.message.threadId);let Q=this.messages();if(!this.applyToThreadMessages(A))return{changed:!1,previousMessageCount:Q.length,nextMessageCount:Q.length,changedIndices:[]};let B=this.messages();return{changed:!0,previousMessageCount:Q.length,nextMessageCount:B.length,changedIndices:pF4(Q,B)}}applyToThreadMessages(A){let Q=this.threadMessages;if(A.type==="delta"&&A.parentToolCallId===void 0&&A.state==="aborted"){if(this.applyThreadMessageEvent(A),this.inProgressMessageID===A.messageId)this.inProgressMessageID=null;return this.threadMessages!==Q}let $=MnQ(A);if($!==void 0)this.updateInProgressMessage($);if(this.applyThreadMessageEvent(A),A.type==="delta"&&(A.state==="complete"||A.state==="tool_use"))this.inProgressMessageID=null;return this.threadMessages!==Q}messages(){if(this.sortedThreadMessagesCache.input!==this.threadMessages)this.sortedThreadMessagesCache={input:this.threadMessages,output:this.sortThreadMessages(this.threadMessages)};return this.sortedThreadMessagesCache.output}coreMessages(){let A=this.messages();if(this.coreMessagesCache.input!==A)this.coreMessagesCache={input:A,output:A.map((Q,$)=>{return xF4(Q,$)})};return this.coreMessagesCache.output}remove(A){let Q=this.messages(),$=this.threadMessages.filter((E)=>E.messageId!==A);if($.length===this.threadMessages.length)return{changed:!1,previousMessageCount:Q.length,nextMessageCount:Q.length,changedIndices:[]};this.threadMessages=$,this.sortedThreadMessagesCache={input:this.threadMessages,output:this.threadMessages},this.coreMessagesCache={input:this.threadMessages,output:[]},this.pruneMessageOrder();let B=this.messages();return{changed:!0,previousMessageCount:Q.length,nextMessageCount:B.length,changedIndices:pF4(Q,B)}}applyThreadMessageEvent(A){this.recordMessageOrder(A);let Q=A.type==="thread_truncated"?this.messages():this.threadMessages;this.threadMessages=mF4(Q,A,{threadId:this.threadID}),this.pruneMessageOrder()}recordMessageOrder(A){if(A.type==="message_added"){this.recordMessage(A.message.messageId,A.seq);return}if(A.type==="message_updated"){this.recordMessage(A.message.messageId,this.messageSeq.has(A.message.messageId)?void 0:A.seq);return}if(A.type==="delta"){this.recordMessage(A.messageId);return}if(A.type==="tool_progress")this.recordMessage(OnQ(A.toolCallId))}recordMessage(A,Q){if(!this.messageOrder.has(A))this.messageOrder.set(A,this.nextMessageOrder),this.nextMessageOrder+=1;if(Q!==void 0)this.messageSeq.set(A,Q)}sortThreadMessages(A){return A.toSorted((Q,$)=>{let B=this.messageSeq.get(Q.messageId),E=this.messageSeq.get($.messageId),D=B!==void 0&&E!==void 0?B-E:this.messageSortOrder(Q.messageId)-this.messageSortOrder($.messageId);if(D!==0)return D;return this.messageSortOrder(Q.messageId)-this.messageSortOrder($.messageId)})}messageSortOrder(A){return this.messageOrder.get(A)??Number.MAX_SAFE_INTEGER}pruneMessageOrder(){let A=new Set(this.threadMessages.map((Q)=>Q.messageId));for(let Q of this.messageSeq.keys())if(!A.has(Q))this.messageSeq.delete(Q);for(let Q of this.messageOrder.keys())if(!A.has(Q))this.messageOrder.delete(Q);if(this.inProgressMessageID!==null&&!A.has(this.inProgressMessageID))this.inProgressMessageID=null}updateInProgressMessage(A){if(this.inProgressMessageID===A)return;if(this.inProgressMessageID!==null)this.markMessageNotInProgress(this.inProgressMessageID);this.inProgressMessageID=A}markMessageNotInProgress(A){this.threadMessages=this.threadMessages.map((Q)=>{if(Q.messageId!==A||Q.role!=="assistant"||Q.state!==void 0)return Q;let $={...Q,state:{type:"complete"}};return delete $.isStreaming,$})}}function pF4(A,Q){let $=Math.max(A.length,Q.length),B=[];for(let E=0;E<$;E+=1)if(A[E]!==Q[E])B.push(E);return B}function wnQ(A,Q){return Array.from({length:Math.max(A,Q)},($,B)=>B)}function MnQ(A){if(A.type==="message_added"&&lF4(A)===void 0)return A.message.messageId;if(A.type==="delta"&&A.parentToolCallId===void 0)return A.messageId;return}function lF4(A){return A.parentToolUseId??A.message.parentToolUseId}function OnQ(A){return`M-${A.replace(/^TU-/,"")}`}class u30{requestCounter=0;rpcEndpoint;fetch;constructor(A){this.rpcEndpoint=A.rpcEndpoint,this.fetch=A.fetch??fetch}async appendUserMessage(A){let Q=A.messageId??wK(),$={type:"client_append_user_msg",content:eD(A.content),agentMode:A.agentMode,reasoningEffort:A.reasoningEffort,messageId:Q,steer:A.steer,userState:A.userState};return await this.request("client_append_user_msg",$),Q}async request(A,Q){let $=await this.fetch(this.rpcEndpoint,{method:"POST",headers:{"content-type":"application/json"},body:LnQ(A,Q,jnQ(this.requestCounter++))}),B=await $.text(),E=ff0.safeParse(RnQ(B));if(!E.success)throw new dQ(`Invalid JSON-RPC response from thread actor: HTTP ${$.status}`);let D=E.data;if("error"in D&&D.error)throw PnQ(D.error)}}function LnQ(A,Q,$){let{type:B,...E}=Q;return JSON.stringify({jsonrpc:LX,id:$,method:A,params:E})}function jnQ(A){return`thread-one-shot-client-${Date.now()}-${A}`}function RnQ(A){try{return JSON.parse(A)}catch{return null}}function PnQ(A){let Q=Error(A.message);return Q.name="JSONRPCError",Q}var iF4=(A=0)=>(Q)=>`\x1B[${Q+A}m`,nF4=(A=0)=>(Q)=>`\x1B[${38+A};5;${Q}m`,aF4=(A=0)=>(Q,$,B)=>`\x1B[${38+A};2;${Q};${$};${B}m`,f$={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},yv$=Object.keys(f$.modifier),vnQ=Object.keys(f$.color),TnQ=Object.keys(f$.bgColor),bv$=[...vnQ,...TnQ];function _nQ(){let A=new Map;for(let[Q,$]of Object.entries(f$)){for(let[B,E]of Object.entries($))f$[B]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},$[B]=f$[B],A.set(E[0],E[1]);Object.defineProperty(f$,Q,{value:$,enumerable:!1})}return Object.defineProperty(f$,"codes",{value:A,enumerable:!1}),f$.color.close="\x1B[39m",f$.bgColor.close="\x1B[49m",f$.color.ansi=iF4(),f$.color.ansi256=nF4(),f$.color.ansi16m=aF4(),f$.bgColor.ansi=iF4(10),f$.bgColor.ansi256=nF4(10),f$.bgColor.ansi16m=aF4(10),Object.defineProperties(f$,{rgbToAnsi256:{value(Q,$,B){if(Q===$&&$===B){if(Q<8)return 16;if(Q>248)return 231;return Math.round((Q-8)/247*24)+232}return 16+36*Math.round(Q/255*5)+6*Math.round($/255*5)+Math.round(B/255*5)},enumerable:!1},hexToRgb:{value(Q){let $=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Q.toString(16));if(!$)return[0,0,0];let[B]=$;if(B.length===3)B=[...B].map((D)=>D+D).join("");let E=Number.parseInt(B,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(Q)=>f$.rgbToAnsi256(...f$.hexToRgb(Q)),enumerable:!1},ansi256ToAnsi:{value(Q){if(Q<8)return 30+Q;if(Q<16)return 90+(Q-8);let $,B,E;if(Q>=232)$=((Q-232)*10+8)/255,B=$,E=$;else{Q-=16;let U=Q%36;$=Math.floor(Q/36)/5,B=Math.floor(U/6)/5,E=U%6/5}let D=Math.max($,B,E)*2;if(D===0)return 30;let J=30+(Math.round(E)<<2|Math.round(B)<<1|Math.round($));if(D===2)J+=60;return J},enumerable:!1},rgbToAnsi:{value:(Q,$,B)=>f$.ansi256ToAnsi(f$.rgbToAnsi256(Q,$,B)),enumerable:!1},hexToAnsi:{value:(Q)=>f$.ansi256ToAnsi(f$.hexToAnsi256(Q)),enumerable:!1}}),f$}var SnQ=_nQ(),y2=SnQ;import Xx0 from"node:process";import knQ from"node:os";import oF4 from"node:tty";function $J(A,Q=globalThis.Deno?globalThis.Deno.args:Xx0.argv){let $=A.startsWith("-")?"":A.length===1?"-":"--",B=Q.indexOf($+A),E=Q.indexOf("--");return B!==-1&&(E===-1||B<E)}var{env:DB}=Xx0,w30;if($J("no-color")||$J("no-colors")||$J("color=false")||$J("color=never"))w30=0;else if($J("color")||$J("colors")||$J("color=true")||$J("color=always"))w30=1;function fnQ(){if("FORCE_COLOR"in DB){if(DB.FORCE_COLOR==="true")return 1;if(DB.FORCE_COLOR==="false")return 0;return DB.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(DB.FORCE_COLOR,10),3)}}function xnQ(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function ynQ(A,{streamIsTTY:Q,sniffFlags:$=!0}={}){let B=fnQ();if(B!==void 0)w30=B;let E=$?w30:B;if(E===0)return 0;if($){if($J("color=16m")||$J("color=full")||$J("color=truecolor"))return 3;if($J("color=256"))return 2}if("TF_BUILD"in DB&&"AGENT_NAME"in DB)return 1;if(A&&!Q&&E===void 0)return 0;let D=E||0;if(DB.TERM==="dumb")return D;if(Xx0.platform==="win32"){let J=knQ.release().split(".");if(Number(J[0])>=10&&Number(J[2])>=10586)return Number(J[2])>=14931?3:2;return 1}if("CI"in DB){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((J)=>(J in DB)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((J)=>(J in DB))||DB.CI_NAME==="codeship")return 1;return D}if("TEAMCITY_VERSION"in DB)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(DB.TEAMCITY_VERSION)?1:0;if(DB.COLORTERM==="truecolor")return 3;if(DB.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in DB){let J=Number.parseInt((DB.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(DB.TERM_PROGRAM){case"iTerm.app":return J>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(DB.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(DB.TERM))return 1;if("COLORTERM"in DB)return 1;return D}function rF4(A,Q={}){let $=ynQ(A,{streamIsTTY:A&&A.isTTY,...Q});return xnQ($)}var bnQ={stdout:rF4({isTTY:oF4.isatty(1)}),stderr:rF4({isTTY:oF4.isatty(2)})},sF4=bnQ;function tF4(A,Q,$){let B=A.indexOf(Q);if(B===-1)return A;let E=Q.length,D=0,J="";do J+=A.slice(D,B)+Q+$,D=B+E,B=A.indexOf(Q,D);while(B!==-1);return J+=A.slice(D),J}function eF4(A,Q,$,B){let E=0,D="";do{let J=A[B-1]==="\r";D+=A.slice(E,J?B-1:B)+Q+(J?`\r
2651
2651
  `:`
2652
2652
  `)+$,E=B+1,B=A.indexOf(`
2653
2653
  `,E)}while(B!==-1);return D+=A.slice(E),D}var{stdout:AX4,stderr:QX4}=sF4,Ix0=Symbol("GENERATOR"),RP=Symbol("STYLER"),gc=Symbol("IS_EMPTY"),$X4=["ansi","ansi","ansi256","ansi16m"],PP=Object.create(null),hnQ=(A,Q={})=>{if(Q.level&&!(Number.isInteger(Q.level)&&Q.level>=0&&Q.level<=3))throw Error("The `level` option should be an integer from 0 to 3");let $=AX4?AX4.level:0;A.level=Q.level===void 0?$:Q.level};var gnQ=(A)=>{let Q=(...$)=>$.join(" ");return hnQ(Q,A),Object.setPrototypeOf(Q,mc.prototype),Q};function mc(A){return gnQ(A)}Object.setPrototypeOf(mc.prototype,Function.prototype);for(let[A,Q]of Object.entries(y2))PP[A]={get(){let $=M30(this,Vx0(Q.open,Q.close,this[RP]),this[gc]);return Object.defineProperty(this,A,{value:$}),$}};PP.visible={get(){let A=M30(this,this[RP],!0);return Object.defineProperty(this,"visible",{value:A}),A}};var Gx0=(A,Q,$,...B)=>{if(A==="rgb"){if(Q==="ansi16m")return y2[$].ansi16m(...B);if(Q==="ansi256")return y2[$].ansi256(y2.rgbToAnsi256(...B));return y2[$].ansi(y2.rgbToAnsi(...B))}if(A==="hex")return Gx0("rgb",Q,$,...y2.hexToRgb(...B));return y2[$][A](...B)},mnQ=["rgb","hex","ansi256"];for(let A of mnQ){PP[A]={get(){let{level:$}=this;return function(...B){let E=Vx0(Gx0(A,$X4[$],"color",...B),y2.color.close,this[RP]);return M30(this,E,this[gc])}}};let Q="bg"+A[0].toUpperCase()+A.slice(1);PP[Q]={get(){let{level:$}=this;return function(...B){let E=Vx0(Gx0(A,$X4[$],"bgColor",...B),y2.bgColor.close,this[RP]);return M30(this,E,this[gc])}}}}var dnQ=Object.defineProperties(()=>{},{...PP,level:{enumerable:!0,get(){return this[Ix0].level},set(A){this[Ix0].level=A}}}),Vx0=(A,Q,$)=>{let B,E;if($===void 0)B=A,E=Q;else B=$.openAll+A,E=Q+$.closeAll;return{open:A,close:Q,openAll:B,closeAll:E,parent:$}},M30=(A,Q,$)=>{let B=(...E)=>cnQ(B,E.length===1?""+E[0]:E.join(" "));return Object.setPrototypeOf(B,dnQ),B[Ix0]=A,B[RP]=Q,B[gc]=$,B},cnQ=(A,Q)=>{if(A.level<=0||!Q)return A[gc]?"":Q;let $=A[RP];if($===void 0)return Q;let{openAll:B,closeAll:E}=$;if(Q.includes("\x1B"))while($!==void 0)Q=tF4(Q,$.close,$.open),$=$.parent;let D=Q.indexOf(`
@@ -4177,13 +4177,13 @@ ${K}`))}},error:(V)=>{if(!G)G=!0,Z(Error(`Failed to spawn brew: ${V.message}`))}
4177
4177
  ${K}`;if(J==="pnpm"&&K.includes("Unable to find the global bin directory"))z+=`
4178
4178
 
4179
4179
  Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
4180
- npm install -g ${D}`;Z(Error(z))}},error:(V)=>{if(!I)I=!0,Z(Error(`Failed to spawn ${J}: ${V.message}`))},complete:()=>{if(!I)I=!0,Y()}})})}a0();a0();Kg();var FeQ="@ampcode/cli";async function G50(A,Q,$=FeQ){let E=`${Q||"https://registry.npmjs.org"}/${$}/latest`,D=new AbortController,J=setTimeout(()=>D.abort(),5000);try{let U=await fetch(E,{signal:D.signal});if(!U.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let Y=await U.json(),Z=Y.version??Y["dist-tags"]?.latest;if(!Z)return{hasUpdate:!1,currentVersion:A,source:"npm"};let F=Yp(A,Z),X=F<0,I,G;if(Y.time){let V=Y.time[A],K=Y.time[Z],z=Date.now();if(V)I=Math.floor((z-new Date(V).getTime())/3600000);if(K)G=Math.floor((z-new Date(K).getTime())/3600000)}return S.info("NPM version comparison",{currentVersion:A,latestVersion:Z,compareResult:F,hasUpdate:X,currentVersionAge:I,latestVersionAge:G}),{hasUpdate:X,latestVersion:Z,currentVersion:A,currentVersionAge:I,latestVersionAge:G,source:"npm"}}catch(U){return S.debug("Error checking npm version",{error:U}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(J)}}var XeQ="https://static.ampcode.com/cli/cli-version.txt";async function V50(A){let Q=new AbortController,$=setTimeout(()=>Q.abort(),5000);try{let B=await fetch(`${XeQ}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!B.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let E=(await B.text()).trim();if(!E||!/^\d+\.\d+\.\d+/.test(E))return{hasUpdate:!1,currentVersion:A,source:"bin"};let D=Yp(A,E),J=D<0;return S.info("Bin version comparison",{currentVersion:A,latestVersion:E,compareResult:D,hasUpdate:J}),{hasUpdate:J,latestVersion:E,currentVersion:A,source:"bin"}}catch(B){return S.debug("Error checking bin version",{error:B}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout($)}}function Yp(A,Q){let $=(J)=>{let[U,Y]=J.split("-");return{parts:U?.split(".").map(Number)||[],label:Y}},B=$(A),E=$(Q),D=Math.max(B.parts.length,E.parts.length);for(let J=0;J<D;J++){let U=B.parts[J]||0,Y=E.parts[J]||0;if(U<Y)return-1;if(U>Y)return 1}if(B.label===E.label)return 0;if(!B.label&&E.label)return 1;if(B.label&&!E.label)return-1;if(B.label&&E.label)return B.label<E.label?-1:1;return 0}function Zp(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-(.+))?/);if(!Q)return null;let $=parseInt(Q[1],10),B=$!==0?$*1000:void 0,D=Q[2]?.match(/^g?([a-f0-9]+)$/)?.[1],J=B!==void 0?TV(B):void 0;return{sha:D,timestamp:B,age:J}}catch{return null}}xA();a0();import{readFile as IeQ,realpath as GeQ}from"node:fs/promises";import{dirname as TV4,join as VeQ}from"node:path";async function _V4(A){switch(A){case"binary":case"brew":return KeQ(Jp());case"npm":case"pnpm":case"yarn":case"bun":return zeQ()}}async function KeQ(A){let Q=await _K(A,["--version"],5000);if(Q.reason!=="success")return S.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function zeQ(){try{let A=process.argv[1];if(!A)return null;let Q=await GeQ(A),$=TV4(TV4(Q));return await WeQ(VeQ($,"package.json"))}catch(A){return S.debug("failed to read installed version from package.json",{error:A}),null}}async function WeQ(A){let Q=await IeQ(A,"utf8"),$=JSON.parse(Q);if(!$.name||!Ky0($.name))return S.debug("package.json name mismatch",{pkgJsonPath:A,name:$.name}),null;return $.version||null}a0();import{spawn as CeQ}from"node:child_process";function uy0(A){if(A=A.replace(/\/$/,""),!A.startsWith("http://")&&!A.startsWith("https://"))A=`https://${A}`;try{return new URL(A),A}catch{return S.warn(`Invalid registry URL: ${A}, falling back to npmjs.org`),"https://registry.npmjs.org"}}var K50=null,Fp=null;function SV4(A){return new Promise((Q)=>{let $=CeQ("npm",["config","get",A],{stdio:["ignore","pipe","ignore"],timeout:5000,shell:process.platform==="win32"}),B="";$.stdout.on("data",(E)=>{B+=E.toString()}),$.on("close",(E,D)=>{if(E!==0||D==="SIGTERM"){Q(null);return}let J=B.trim();Q(J&&J!=="undefined"?J:null)}),$.on("error",()=>{Q(null)})})}async function z50(){if(K50)return K50;if(Fp)return Fp;Fp=(async()=>{let A=process.env.NPM_CONFIG_REGISTRY??process.env.npm_config_registry;if(A)return uy0(A);let Q=await SV4("@sourcegraph:registry");if(Q)return uy0(Q);let $=await SV4("registry");if($)return uy0($);return"https://registry.npmjs.org"})();try{return K50=await Fp,K50}finally{Fp=null}}var HeQ=3600000,NeQ=5000;function wy0(A,Q,$={}){let B=new w4,E=B.pipe(C$({shouldCountRefs:!1})),D=$.startDelayMs??0,J=$.checkIntervalMs??HeQ,U=!1,Y=()=>{U=!0};return setImmediate(async()=>{let Z=S.getChild("update");if(D>0){if(await SV(D),U)return}let F=E.subscribe({next:(I)=>{Z.debug("emit new state",I)}}),X=A;try{while(!U){let I=await qeQ(X,Q,Z,B);if(I.stop)return;if(I.updatedTo)X=I.updatedTo;if(I.emittedVisibleState){if(await SV(NeQ),U)return;B.next("hidden")}if(J<=0)return;let G=1000,V=J;while(V>0&&!U){let K=Math.min(G,V);await SV(K),V-=K}}}finally{F.unsubscribe(),B.complete()}}),{state:E,dispose:Y}}async function qeQ(A,Q,$,B){let E={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return $.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),E.stop=!0,E;let D=await Q.get("updates.mode");if(D==="disabled")return $.debug("checking disabled"),E.stop=!0,E;let J=await EZ(),U=J==="binary"||J==="brew",Y=U?void 0:await SK();$.debug("checking",{currentVersion:A,mode:D,packageManager:J,isBinaryDistribution:U,npmPackageName:Y});let Z;if(U)Z=await V50(A);else{let I=await z50();Z=await G50(A,I,Y)}if(!(Z.latestVersion&&Z.hasUpdate))return $.debug("no update available"),E;let F=(I)=>{B.next(I),E.emittedVisibleState=!0};if(J){let I=await _V4(J);if(I&&Yp(I,Z.latestVersion)>=0){if($.debug("on-disk version already up to date",{currentVersion:A,installedVersion:I,latestVersion:Z.latestVersion}),E.updatedTo=I,Yp(A,I)<0){let G=await SX(I),V={from:A,to:I,externallyUpdated:!0,...G};if(G.status==="same")$.info("on-disk already updated by another instance",V),F("updated");else $.warn("on-disk already updated by another instance, with PATH warning",V),F("updated-with-warning")}return E}}let X=()=>{if(Z.currentVersionAge!==void 0&&Z.latestVersionAge!==void 0){let I=Z.currentVersionAge-Z.latestVersionAge,G=0.5;if(Math.abs(I)<0.5)return $.debug("versions too close together, suppressing update warning",{currentVersionAge:Z.currentVersionAge,latestVersionAge:Z.latestVersionAge,ageDifferenceHours:I}),!0}return!1};if(!D)D=J==="pnpm"?"warn":"auto",$.debug("no configured update mode; selected default based on package manager",{packageManager:J,mode:D});if(J==="brew"){if(!X())F("update-available-brew");return E}if(J==="binary"&&process.execPath!==Jp()){if($.debug("non-standard binary path, showing warning"),!X())F("update-available-unrecognized-path");return E}if(D==="warn"){if(!X())F("update-available");return E}if(!J){if($.debug("auto-update not supported, falling back to warn mode"),!X())F("update-available");return E}try{await Up(Z.latestVersion,J),E.updatedTo=Z.latestVersion;let I=await SX(Z.latestVersion),G={from:Z.currentVersion,to:Z.latestVersion,...I};if(I.status==="same")$.info("success",G),F("updated");else $.warn("success with warning",G),F("updated-with-warning")}catch(I){F("update-error")}return E}catch(D){return $.debug("check failed",{error:D}),E}}Kg();import{stderr as EJ}from"node:process";function kV4(A){let Q=new PX().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(B)=>{await Gy0(B.force||!1,B.verbose||!1,"0.0.1780456213-g47360c"),process.exit()});A.addCommand(Q,{hidden:!0});let $=new PX("update").alias("up").summary("Update Amp CLI").description("Update Amp CLI to the latest version. You can specify a particular version to install, or leave blank to get the latest stable release.").option("--target-version <version>","Update to a specific version").allowUnknownOption(!1).action(async(B)=>{await MeQ(B.targetVersion)});A.addCommand($)}function ueQ(A){let Q=Boolean(A.isTTY),$=0,B=!1;function E(){if(!Q||!B)return;A.write(`
4180
+ npm install -g ${D}`;Z(Error(z))}},error:(V)=>{if(!I)I=!0,Z(Error(`Failed to spawn ${J}: ${V.message}`))},complete:()=>{if(!I)I=!0,Y()}})})}a0();a0();Kg();var FeQ="@ampcode/cli";async function G50(A,Q,$=FeQ){let E=`${Q||"https://registry.npmjs.org"}/${$}/latest`,D=new AbortController,J=setTimeout(()=>D.abort(),5000);try{let U=await fetch(E,{signal:D.signal});if(!U.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let Y=await U.json(),Z=Y.version??Y["dist-tags"]?.latest;if(!Z)return{hasUpdate:!1,currentVersion:A,source:"npm"};let F=Yp(A,Z),X=F<0,I,G;if(Y.time){let V=Y.time[A],K=Y.time[Z],z=Date.now();if(V)I=Math.floor((z-new Date(V).getTime())/3600000);if(K)G=Math.floor((z-new Date(K).getTime())/3600000)}return S.info("NPM version comparison",{currentVersion:A,latestVersion:Z,compareResult:F,hasUpdate:X,currentVersionAge:I,latestVersionAge:G}),{hasUpdate:X,latestVersion:Z,currentVersion:A,currentVersionAge:I,latestVersionAge:G,source:"npm"}}catch(U){return S.debug("Error checking npm version",{error:U}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(J)}}var XeQ="https://static.ampcode.com/cli/cli-version.txt";async function V50(A){let Q=new AbortController,$=setTimeout(()=>Q.abort(),5000);try{let B=await fetch(`${XeQ}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!B.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let E=(await B.text()).trim();if(!E||!/^\d+\.\d+\.\d+/.test(E))return{hasUpdate:!1,currentVersion:A,source:"bin"};let D=Yp(A,E),J=D<0;return S.info("Bin version comparison",{currentVersion:A,latestVersion:E,compareResult:D,hasUpdate:J}),{hasUpdate:J,latestVersion:E,currentVersion:A,source:"bin"}}catch(B){return S.debug("Error checking bin version",{error:B}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout($)}}function Yp(A,Q){let $=(J)=>{let[U,Y]=J.split("-");return{parts:U?.split(".").map(Number)||[],label:Y}},B=$(A),E=$(Q),D=Math.max(B.parts.length,E.parts.length);for(let J=0;J<D;J++){let U=B.parts[J]||0,Y=E.parts[J]||0;if(U<Y)return-1;if(U>Y)return 1}if(B.label===E.label)return 0;if(!B.label&&E.label)return 1;if(B.label&&!E.label)return-1;if(B.label&&E.label)return B.label<E.label?-1:1;return 0}function Zp(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-(.+))?/);if(!Q)return null;let $=parseInt(Q[1],10),B=$!==0?$*1000:void 0,D=Q[2]?.match(/^g?([a-f0-9]+)$/)?.[1],J=B!==void 0?TV(B):void 0;return{sha:D,timestamp:B,age:J}}catch{return null}}xA();a0();import{readFile as IeQ,realpath as GeQ}from"node:fs/promises";import{dirname as TV4,join as VeQ}from"node:path";async function _V4(A){switch(A){case"binary":case"brew":return KeQ(Jp());case"npm":case"pnpm":case"yarn":case"bun":return zeQ()}}async function KeQ(A){let Q=await _K(A,["--version"],5000);if(Q.reason!=="success")return S.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function zeQ(){try{let A=process.argv[1];if(!A)return null;let Q=await GeQ(A),$=TV4(TV4(Q));return await WeQ(VeQ($,"package.json"))}catch(A){return S.debug("failed to read installed version from package.json",{error:A}),null}}async function WeQ(A){let Q=await IeQ(A,"utf8"),$=JSON.parse(Q);if(!$.name||!Ky0($.name))return S.debug("package.json name mismatch",{pkgJsonPath:A,name:$.name}),null;return $.version||null}a0();import{spawn as CeQ}from"node:child_process";function uy0(A){if(A=A.replace(/\/$/,""),!A.startsWith("http://")&&!A.startsWith("https://"))A=`https://${A}`;try{return new URL(A),A}catch{return S.warn(`Invalid registry URL: ${A}, falling back to npmjs.org`),"https://registry.npmjs.org"}}var K50=null,Fp=null;function SV4(A){return new Promise((Q)=>{let $=CeQ("npm",["config","get",A],{stdio:["ignore","pipe","ignore"],timeout:5000,shell:process.platform==="win32"}),B="";$.stdout.on("data",(E)=>{B+=E.toString()}),$.on("close",(E,D)=>{if(E!==0||D==="SIGTERM"){Q(null);return}let J=B.trim();Q(J&&J!=="undefined"?J:null)}),$.on("error",()=>{Q(null)})})}async function z50(){if(K50)return K50;if(Fp)return Fp;Fp=(async()=>{let A=process.env.NPM_CONFIG_REGISTRY??process.env.npm_config_registry;if(A)return uy0(A);let Q=await SV4("@sourcegraph:registry");if(Q)return uy0(Q);let $=await SV4("registry");if($)return uy0($);return"https://registry.npmjs.org"})();try{return K50=await Fp,K50}finally{Fp=null}}var HeQ=3600000,NeQ=5000;function wy0(A,Q,$={}){let B=new w4,E=B.pipe(C$({shouldCountRefs:!1})),D=$.startDelayMs??0,J=$.checkIntervalMs??HeQ,U=!1,Y=()=>{U=!0};return setImmediate(async()=>{let Z=S.getChild("update");if(D>0){if(await SV(D),U)return}let F=E.subscribe({next:(I)=>{Z.debug("emit new state",I)}}),X=A;try{while(!U){let I=await qeQ(X,Q,Z,B);if(I.stop)return;if(I.updatedTo)X=I.updatedTo;if(I.emittedVisibleState){if(await SV(NeQ),U)return;B.next("hidden")}if(J<=0)return;let G=1000,V=J;while(V>0&&!U){let K=Math.min(G,V);await SV(K),V-=K}}}finally{F.unsubscribe(),B.complete()}}),{state:E,dispose:Y}}async function qeQ(A,Q,$,B){let E={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return $.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),E.stop=!0,E;let D=await Q.get("updates.mode");if(D==="disabled")return $.debug("checking disabled"),E.stop=!0,E;let J=await EZ(),U=J==="binary"||J==="brew",Y=U?void 0:await SK();$.debug("checking",{currentVersion:A,mode:D,packageManager:J,isBinaryDistribution:U,npmPackageName:Y});let Z;if(U)Z=await V50(A);else{let I=await z50();Z=await G50(A,I,Y)}if(!(Z.latestVersion&&Z.hasUpdate))return $.debug("no update available"),E;let F=(I)=>{B.next(I),E.emittedVisibleState=!0};if(J){let I=await _V4(J);if(I&&Yp(I,Z.latestVersion)>=0){if($.debug("on-disk version already up to date",{currentVersion:A,installedVersion:I,latestVersion:Z.latestVersion}),E.updatedTo=I,Yp(A,I)<0){let G=await SX(I),V={from:A,to:I,externallyUpdated:!0,...G};if(G.status==="same")$.info("on-disk already updated by another instance",V),F("updated");else $.warn("on-disk already updated by another instance, with PATH warning",V),F("updated-with-warning")}return E}}let X=()=>{if(Z.currentVersionAge!==void 0&&Z.latestVersionAge!==void 0){let I=Z.currentVersionAge-Z.latestVersionAge,G=0.5;if(Math.abs(I)<0.5)return $.debug("versions too close together, suppressing update warning",{currentVersionAge:Z.currentVersionAge,latestVersionAge:Z.latestVersionAge,ageDifferenceHours:I}),!0}return!1};if(!D)D=J==="pnpm"?"warn":"auto",$.debug("no configured update mode; selected default based on package manager",{packageManager:J,mode:D});if(J==="brew"){if(!X())F("update-available-brew");return E}if(J==="binary"&&process.execPath!==Jp()){if($.debug("non-standard binary path, showing warning"),!X())F("update-available-unrecognized-path");return E}if(D==="warn"){if(!X())F("update-available");return E}if(!J){if($.debug("auto-update not supported, falling back to warn mode"),!X())F("update-available");return E}try{await Up(Z.latestVersion,J),E.updatedTo=Z.latestVersion;let I=await SX(Z.latestVersion),G={from:Z.currentVersion,to:Z.latestVersion,...I};if(I.status==="same")$.info("success",G),F("updated");else $.warn("success with warning",G),F("updated-with-warning")}catch(I){F("update-error")}return E}catch(D){return $.debug("check failed",{error:D}),E}}Kg();import{stderr as EJ}from"node:process";function kV4(A){let Q=new PX().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(B)=>{await Gy0(B.force||!1,B.verbose||!1,"0.0.1780478921-g021c3e"),process.exit()});A.addCommand(Q,{hidden:!0});let $=new PX("update").alias("up").summary("Update Amp CLI").description("Update Amp CLI to the latest version. You can specify a particular version to install, or leave blank to get the latest stable release.").option("--target-version <version>","Update to a specific version").allowUnknownOption(!1).action(async(B)=>{await MeQ(B.targetVersion)});A.addCommand($)}function ueQ(A){let Q=Boolean(A.isTTY),$=0,B=!1;function E(){if(!Q||!B)return;A.write(`
4181
4181
  `),B=!1,$=0}function D(J){if(!Q)return;let U=J.padEnd($," ");A.write(`\r${U}`),B=!0,$=U.length}return{flushProgressLine:E,renderProgress:D}}function weQ(A){if(A.source==="npm"&&A.latestVersionAge!==void 0&&A.latestVersionAge>36)EJ.write(f0.yellow(`The latest Amp CLI version reported by npm is older than expected. Be aware that you may be using an npm proxy with a corporate policy to delay package updates.
4182
4182
  `))}async function MeQ(A){let $=process.platform==="win32"&&Uq()?{currentExecutablePath:process.execPath}:void 0,{flushProgressLine:B,renderProgress:E}=ueQ(EJ);if(process.env.AMP_SKIP_UPDATE_CHECK==="1")EJ.write(f0.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
4183
4183
 
4184
4184
  `));try{if(!A){EJ.write(f0.blue(`Checking for updates...
4185
- `));let U=!1,Y;if(Uq()){let Z=await V50("0.0.1780456213-g47360c");U=Z.hasUpdate,Y=Z.latestVersion}else{let Z=await z50(),F=await SK(),X=await G50("0.0.1780456213-g47360c",Z,F);weQ(X),U=X.hasUpdate,Y=X.latestVersion}if(!U){let Z=Zp("0.0.1780456213-g47360c"),F=Z?.age?`released ${Z.age} ago`:`built ${TV(new Date("2026-06-03T03:14:57.812Z"))} ago`;EJ.write(f0.green(`✓ Amp is already up to date on version ${"0.0.1780456213-g47360c"} (${F})
4186
- `));let X=await SX("0.0.1780456213-g47360c",$);if(X.warning)EJ.write(`
4185
+ `));let U=!1,Y;if(Uq()){let Z=await V50("0.0.1780478921-g021c3e");U=Z.hasUpdate,Y=Z.latestVersion}else{let Z=await z50(),F=await SK(),X=await G50("0.0.1780478921-g021c3e",Z,F);weQ(X),U=X.hasUpdate,Y=X.latestVersion}if(!U){let Z=Zp("0.0.1780478921-g021c3e"),F=Z?.age?`released ${Z.age} ago`:`built ${TV(new Date("2026-06-03T09:34:18.051Z"))} ago`;EJ.write(f0.green(`✓ Amp is already up to date on version ${"0.0.1780478921-g021c3e"} (${F})
4186
+ `));let X=await SX("0.0.1780478921-g021c3e",$);if(X.warning)EJ.write(`
4187
4187
  `+f0.yellow(X.warning)+`
4188
4188
  `);process.exit(0)}if(!Y)EJ.write(f0.yellow("[WARN] could not find latest version")),process.exit(0);A=Y}EJ.write(f0.blue(`Updating to version ${A}...
4189
4189
  `)),await Up(A,void 0,(U)=>{B(),EJ.write(f0.dim(`Running: ${U}
@@ -4335,7 +4335,7 @@ ${B}`}async function g$6(A,Q){if(!Q?.forceExternal&&Q?.onShowImagePreview&&pH4(A
4335
4335
  `).length,E=new D0({text:new h(A,new $0({color:$}))});if(B<=T80)return E;return new y0({width:1/0,height:T80,child:new PB({autofocus:!1,controller:Q,child:E})})}function e86(){return new Map([[HA.key("PageUp"),new _80],[HA.key("PageDown"),new $m0],[HA.ctrl("u"),new _80],[HA.shift("Home"),new Bm0],[HA.shift("End"),new Em0]])}function A96(A,Q,$){return Math.max(Q,Math.min(A,$))}var Dm0=8,Kw4=1,zw4=Dm0-1;class Jm0 extends G4{}class Um0 extends G4{}class S80 extends G4{}class k80 extends G4{}class Ym0 extends G4{}class Zm0 extends G4{}class Fm0 extends p0{props;constructor(A){super(A.key===void 0?{}:{key:A.key});this.props=A}createState(){return new Ww4}}class Ww4 extends c0{messageScroll=new G$;initState(){super.initState(),this.messageScroll.followMode=!1,this.messageScroll.jumpTo(0)}dispose(){this.messageScroll.dispose(),super.dispose()}build(A){let Q=this.widget.props,$=Q96(Q,this.messageScroll),B=$96(Q.options.message),E=B?new N4({actions:this.buildScrollActions(),child:new pQ({debugLabel:"SelectDialogScrollShortcuts",shortcuts:E96(),child:$})}):$,D=[{keys:["↑/↓","j/k"],label:"move"},{keys:["Enter"],label:"select"}];if(B)D.push({keys:["Ctrl+E","Ctrl+Y"],label:"scroll"});return D.push({keys:["Esc"],label:"cancel"}),new B1({header:Q.options.title,minWidth:64,maxWidth:80,footer:D,autofocus:!1,onDismiss:Q.onCancel,child:E})}buildScrollActions(){let A=(Q)=>{let $=D96(this.messageScroll.offset+Q,0,this.messageScroll.maxScrollExtent);this.messageScroll.jumpTo($)};return new Map([[Jm0,new pA(()=>A(-Kw4))],[Um0,new pA(()=>A(Kw4))],[S80,new pA(()=>A(-zw4))],[k80,new pA(()=>A(zw4))],[Ym0,new pA(()=>this.messageScroll.jumpTo(0))],[Zm0,new pA(()=>this.messageScroll.jumpTo(this.messageScroll.maxScrollExtent))]])}}function Q96(A,Q){let $=A.options.options.map((E)=>({value:E,label:E})),B=Math.max(0,$.findIndex((E)=>E.value===A.options.initialValue));return new gX({options:$,selectedIndex:B,body:B96(A.options.message,Q),onSelect:(E)=>{if(E===null){A.onCancel();return}A.onSelect(E)},padding:n0.all(0),showBorder:!1,showDismissalMessage:!1,enableMouseInteraction:!0,wrapOptions:!0})}function $96(A){if(A===void 0)return!1;return A.split(`
4336
4336
  `).length>Dm0}function B96(A,Q){if(A===void 0)return;let $=A.split(`
4337
4337
  `).length,B=Math.min($,Dm0);return new y0({width:1/0,height:B,child:new PB({autofocus:!1,controller:Q,child:new D0({text:new h(A)})})})}function E96(){return new Map([[HA.key("PageUp"),new S80],[HA.key("PageDown"),new k80],[HA.ctrl("u"),new S80],[HA.ctrl("d"),new k80],[HA.ctrl("y"),new Jm0],[HA.ctrl("e"),new Um0],[HA.shift("Home"),new Ym0],[HA.shift("End"),new Zm0]])}function D96(A,Q,$){return Math.max(Q,Math.min(A,$))}var J96=3,U96=2097152,Y96=new UB("PluginDialogOverlay");function f80(A,Q,$){if($!==void 0)return{type:"response",id:A,error:$};if(Q===void 0)return{type:"response",id:A};return{type:"response",id:A,result:Q}}function Z96(A){let Q=new TextEncoder().encode(JSON.stringify(A)).byteLength;if(Q<=U96)return;throw Error(`thread.messages response is too large (${Q} bytes). Request fewer messages.`)}class Xm0{options;unregisterPluginCommands=null;pluginCommandSubscriptions=[];pluginErrorToastKeys=new Set;activeDialog=null;queuedDialogs=[];resolvingDialog=null;pendingOwnerUIRequests=new Map;pendingActorUIRequests=new Map;stateBackedRequestIDs=new Set;pluginUIRespondRequestCounter=0;statusItems=new Map;blockingConfirmDialog=!1;disposed=!1;constructor(A){this.options=A}init(){this.disposed=!1,this.configurePluginPlatform(),this.subscribePluginCommands()}dispose(){this.disposed=!0,this.unregisterPluginCommands?.(),this.unregisterPluginCommands=null;for(let A of this.pluginCommandSubscriptions)A.unsubscribe();this.pluginCommandSubscriptions=[],this.cancelOwnerUIRequests(),this.cancelPendingDialogs(),this.statusItems.clear(),this.clearPluginPlatformStatusHandlers()}handlePluginMessage(A,Q){let $=A.message;if($.type==="response"){this.cancelOwnerUIRequest($.id),this.cancelActorUIRequest($.id);return}if($.type==="event"){if(this.handlePluginUIStateEvent($,Q))return;this.handlePluginEvent($);return}if(this.stateBackedRequestIDs.has($.id))return;if(!F30($.method)){if($.method==="thread.messages")this.handleThreadMessagesRequest($,Q);return}this.handleOwnerUIRequest($,Q)}cancelOwnerUIRequests(){let A=[...this.pendingOwnerUIRequests.values(),...this.pendingActorUIRequests.values()];this.pendingOwnerUIRequests.clear(),this.pendingActorUIRequests.clear(),this.stateBackedRequestIDs.clear();for(let Q of A)Q.abort()}hasBlockingDialog(){return this.activeDialog!==null}hasBlockingConfirmDialog(){return this.activeDialog?.kind==="confirm"}buildDialogLayers(){let A=this.activeDialog;if(!A)return[];return[new c6({key:Y96,debugLabel:"PluginDialogOverlay",autofocus:!1,canRequestFocus:!0,child:this.buildActiveDialog(A)})]}buildActiveDialog(A){switch(A.kind){case"input":return new ml({key:new kK(A),header:A.options.title??"Input",helpText:A.options.helpText,initialValue:A.options.initialValue,isRequired:!1,onSubmit:(Q)=>this.resolveInputDialog(A,Q),onDismiss:()=>this.resolveInputDialog(A,void 0)});case"confirm":return new Qm0({key:new kK(A),options:A.options,onConfirm:()=>this.resolveConfirmDialog(A,!0),onCancel:()=>this.resolveConfirmDialog(A,!1)});case"select":return new Fm0({key:new kK(A),options:A.options,onSelect:(Q)=>this.resolveSelectDialog(A,Q),onCancel:()=>this.resolveSelectDialog(A,void 0)})}}getStatusItems(){return[...this.statusItems.values()].flatMap((A)=>A.value===void 0?[]:[{pluginURI:A.pluginURI,id:A.id,value:A.value}])}configurePluginPlatform(){let A=this.options.context.pluginPlatform;if(!A)return;if(A.showToast=(Q)=>this.options.toastController.show(Q,"success"),A.showOpenedURLToast=(Q)=>{this.options.toastController.show(`Opened URL: ${Q}`,"success",8000)},A.appendToThreadHandler=this.options.context.observerOnly?async()=>{throw Error("thread.append is only available from an executor-owned plugin runtime")}:this.options.appendToThread,this.options.readThreadMessages)A.readThreadMessagesHandler=this.readThreadMessages;A.runAgentHandler=this.options.context.observerOnly?async()=>{throw Error("agent.run is only available from an executor-owned plugin runtime")}:this.options.runAgent??(async()=>{throw Error("agent.run is not available in this context")}),A.showInputDialog=this.showInputDialog,A.showConfirmDialog=this.showConfirmDialog,A.showSelectDialog=this.showSelectDialog,A.createStatusItemHandler=this.createStatusItem,A.updateStatusItemHandler=this.updateStatusItem,A.removeStatusItemHandler=this.removeStatusItem}handlePluginEvent(A){if(A.event!=="ui.notify")return;let Q=A.data;if(typeof Q.message==="string")this.options.toastController.show(Q.message,"success")}async handleThreadMessagesRequest(A,Q){try{let{options:$,threadID:B}=this.parseThreadMessagesRequestParams(A.params),E=await this.readThreadMessages($,B);Z96(E),Q(f80(A.id,E))}catch($){Q(f80(A.id,void 0,$ instanceof Error?$.message:String($)))}}parseThreadMessagesRequestParams(A){if(!A||typeof A!=="object")return{options:void 0,threadID:void 0};let Q=A;return{options:Q.options,threadID:typeof Q.threadID==="string"?Q.threadID:void 0}}async handleOwnerUIRequest(A,Q){let $=new AbortController;this.pendingOwnerUIRequests.set(A.id,$);try{let B=await this.dispatchOwnerUIRequest(A,$.signal);if(this.pendingOwnerUIRequests.get(A.id)!==$)return;this.pendingOwnerUIRequests.delete(A.id),Q(f80(A.id,B))}catch(B){if(this.pendingOwnerUIRequests.get(A.id)!==$)return;this.pendingOwnerUIRequests.delete(A.id),Q(f80(A.id,void 0,B instanceof Error?B.message:String(B)))}}dispatchOwnerUIRequest(A,Q){switch(A.method){case"ui.input":return this.showInputDialog(A.params.options,Q);case"ui.confirm":return this.showConfirmDialog(A.params.options,Q);case"ui.select":return this.showSelectDialog(A.params.options,Q);default:throw Error(`Unknown owner UI request method: ${A.method}`)}}cancelOwnerUIRequest(A){let Q=this.pendingOwnerUIRequests.get(A);if(!Q)return;this.pendingOwnerUIRequests.delete(A),Q.abort()}cancelActorUIRequest(A){let Q=this.pendingActorUIRequests.get(A);if(!Q)return;this.pendingActorUIRequests.delete(A),Q.abort()}buildPluginUIRespondRequest(A,Q,$){this.pluginUIRespondRequestCounter+=1;let B={requestId:A};if($!==void 0)B.error=$;else if(Q!==void 0)B.result=Q;return{type:"request",id:`plugin-ui-respond-${A}-${this.pluginUIRespondRequestCounter}`,method:"plugin.ui.respond",params:B}}async handleActorUIRequest(A,Q){let $=new AbortController;this.pendingActorUIRequests.set(A.requestId,$);let B={type:"request",id:A.requestId,method:A.method,params:A.params};try{let E=await this.dispatchOwnerUIRequest(B,$.signal);if(this.pendingActorUIRequests.get(A.requestId)!==$)return;this.pendingActorUIRequests.delete(A.requestId),Q(this.buildPluginUIRespondRequest(A.requestId,E))}catch(E){if(this.pendingActorUIRequests.get(A.requestId)!==$)return;this.pendingActorUIRequests.delete(A.requestId),Q(this.buildPluginUIRespondRequest(A.requestId,void 0,E instanceof Error?E.message:String(E)))}}upsertActorUIState(A,Q){if(this.stateBackedRequestIDs.add(A.requestId),A.status!=="pending"){this.cancelActorUIRequest(A.requestId);return}if(this.pendingActorUIRequests.has(A.requestId))return;this.handleActorUIRequest(A,Q)}handlePluginUISnapshot(A,Q){let $=new Set(A.requests.map((B)=>B.requestId));for(let B of this.pendingActorUIRequests.keys())if(!$.has(B))this.cancelActorUIRequest(B);for(let B of this.stateBackedRequestIDs)if(!$.has(B))this.stateBackedRequestIDs.delete(B);for(let B of A.requests)this.upsertActorUIState(B,Q)}handlePluginUIRequestAdded(A,Q){this.upsertActorUIState(A.request,Q)}handlePluginUIRequestSettled(A,Q){this.upsertActorUIState(A.request,Q)}handlePluginUIRequestRemoved(A){this.cancelActorUIRequest(A.requestId),this.stateBackedRequestIDs.delete(A.requestId)}handlePluginUIStateEvent(A,Q){if(A.event==="plugin.ui.snapshot"){let $=bZ4.safeParse(A.data);if($.success)this.handlePluginUISnapshot($.data,Q);return!0}if(A.event==="plugin.ui.request_added"){let $=hZ4.safeParse(A.data);if($.success)this.handlePluginUIRequestAdded($.data,Q);return!0}if(A.event==="plugin.ui.request_settled"){let $=gZ4.safeParse(A.data);if($.success)this.handlePluginUIRequestSettled($.data,Q);return!0}if(A.event==="plugin.ui.request_removed"){let $=mZ4.safeParse(A.data);if($.success)this.handlePluginUIRequestRemoved($.data);return!0}return!1}clearPluginPlatformStatusHandlers(){let A=this.options.context.pluginPlatform;if(!A)return;if(A.readThreadMessagesHandler===this.readThreadMessages)A.readThreadMessagesHandler=null;if(A.createStatusItemHandler===this.createStatusItem)A.createStatusItemHandler=null;if(A.updateStatusItemHandler===this.updateStatusItem)A.updateStatusItemHandler=null;if(A.removeStatusItemHandler===this.removeStatusItem)A.removeStatusItemHandler=null;if(A.runAgentHandler===this.options.runAgent)A.runAgentHandler=null}subscribePluginCommands(){let A=this.options.context.pluginService;if(!A)return;this.refreshPluginCommands(A.commands.list()),this.pluginCommandSubscriptions=[A.plugins.subscribe((Q)=>{this.removeInactivePluginStatusItems(Q),this.showNewPluginErrorToasts(Q),this.refreshPluginCommands(A.commands.list())}),A.commands.changed.subscribe(()=>{this.refreshPluginCommands(A.commands.list())})]}refreshPluginCommands(A){this.unregisterPluginCommands?.();let $=A.map((B)=>this.createPluginCommand(B)).map((B)=>this.options.commandRegistry.register(B));this.unregisterPluginCommands=()=>{for(let B of $)B()}}showNewPluginErrorToasts(A){let Q=new Set;for(let $ of A){if($.status!=="error")continue;if(Lh($.errorMessage))continue;let B=`${$.uri.toString()}
4338
- ${$.errorMessage??""}`;if(Q.add(B),this.pluginErrorToastKeys.has(B))continue;this.options.toastController.show(this.formatPluginErrorToast($),"error",8000)}this.pluginErrorToastKeys=Q}removeInactivePluginStatusItems(A){let Q=new Set(A.filter((B)=>B.status==="active").map((B)=>B.uri.toString())),$=[];for(let[B,E]of this.statusItems){if(Q.has(E.pluginURI))continue;$.push(B)}if($.length===0)return;this.updateStatusItemState(()=>{for(let B of $)this.statusItems.delete(B)})}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.context.logFilePath}`}createPluginCommand(A){return{id:A.id,noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,status:A.availability,run:async(Q,$,B)=>{B();try{await this.options.context.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(E){S.error("Neo plugin command failed",{error:E,command:A}),this.options.toastController.show(E instanceof Error?E.message:String(E),"error",5000)}}}}showInputDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"input",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showConfirmDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(!1);return}let B={kind:"confirm",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showSelectDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"select",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};createStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{let B=this.statusItemKey(A,Q),E={pluginURI:A,id:Q};if($!==void 0)E.value=$;this.statusItems.set(B,E)})};updateStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.set(this.statusItemKey(A,Q),{pluginURI:A,id:Q,value:$})})};removeStatusItem=(A,Q)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.delete(this.statusItemKey(A,Q))})};readThreadMessages=(A,Q)=>{let $=this.options.readThreadMessages;if(!$)return Promise.reject(Error("thread.messages is not available - no active thread"));return $(A,Q)};updateStatusItemState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}statusItemKey(A,Q){return`${A}\x00${Q}`}cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[],this.resolvingDialog=null,this.emitBlockingConfirmDialogChange();for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.abortUnsubscribe(),A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}abortDialog(A){if(this.activeDialog===A){this.advanceDialog(),this.cancelDialog(A);return}let Q=this.queuedDialogs.indexOf(A);if(Q===-1)return;this.updateDialogState(()=>{this.queuedDialogs.splice(Q,1)}),this.cancelDialog(A)}enqueueDialog(A){if(this.activeDialog){if(this.queuedDialogs.push(A),this.resolvingDialog===this.activeDialog)this.advanceResolvingDialog(this.activeDialog);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A}),this.emitBlockingConfirmDialogChange()}resolveInputDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveConfirmDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveSelectDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveDialog(A,Q){if(this.activeDialog!==A||this.resolvingDialog===A)return;this.resolvingDialog=A,A.abortUnsubscribe(),Q(),this.scheduleResolvingDialogAdvance(A,J96)}scheduleResolvingDialogAdvance(A,Q){z6.instance.addPostFrameCallback(()=>{if(this.activeDialog!==A)return;if(this.queuedDialogs.length>0||Q<=1){this.advanceResolvingDialog(A);return}this.scheduleResolvingDialogAdvance(A,Q-1)},"PluginIntegration.advanceDialog")}advanceResolvingDialog(A){if(this.resolvingDialog===A)this.resolvingDialog=null;if(this.activeDialog!==A)return;this.advanceDialog()}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A();this.emitBlockingConfirmDialogChange()}emitBlockingConfirmDialogChange(){let A=this.hasBlockingConfirmDialog();if(A===this.blockingConfirmDialog)return;this.blockingConfirmDialog=A,this.options.onBlockingConfirmDialogChange?.(A)}}a0();import{spawnSync as F96}from"node:child_process";import N9 from"node:process";var Cw4={options:new Set(["settings-file","log-level","log-file","mcp-config"]),booleans:new Set(["color","dangerously-allow-all","ide","jetbrains","neo-orb","notifications"])};function dl(A){let Q=A.getRelaunchThreadIDs();if(A.onRelaunchRequested?.(Q),A.stop)A.stop();else X1.instance.stop()}function Hw4(A){return{noun:"amp",verb:"Relaunch (Quit & Reopen)",description:"Quit, reopen Amp, and resume active threads",keywords:["restart","update"],shortcut:N9.env.NODE_ENV==="development"&&N9.platform==="darwin"?HA.meta("r"):void 0,status:{type:"enabled"},sortBoost:90,run:(Q,$,B)=>{B(),dl(A)}}}function X96(A,Q){let{command:$,args:B}=I96(A),E=N9.execve,D=N9.platform==="win32"||!E,J=D?"spawnSync":"execve";if(S.info("Relaunching Amp; threads will be resumed",{threadIDs:A,relaunchMethod:J}),D){let U=F96($,B,{cwd:Q,env:N9.env,stdio:"inherit"});if(U.error)return S.error("Failed to relaunch Amp",{error:U.error}),1;return U.status??1}try{if(N9.chdir(Q),$.includes("/"))return E($,[$,...B],N9.env);return E("/usr/bin/env",["env",$,...B],N9.env)}catch(U){return S.error("Failed to relaunch Amp",{error:U}),1}}class Im0{relaunchRequested=!1;requestedThreadIDs=[];request=(A)=>{S.info("Relaunch requested; threads will be resumed",{threadIDs:A}),this.relaunchRequested=!0,this.requestedThreadIDs=A};get shouldShowExitSummary(){return!this.relaunchRequested}relaunchIfRequested(A){if(!this.relaunchRequested)return;return X96(this.requestedThreadIDs,A)}}function I96(A){let Q=A.length>0?["threads","continue",...A]:[],$=G96(N9.argv),B=K96();if(B)return{command:B.command,args:[...B.args,...$,...Q]};let E=N9.argv[1],D=E&&V96(E)?[E]:[];return{command:N9.execPath,args:[...D,...$,...Q]}}function G96(A){let Q=[],$=A.slice(2);for(let B=0;B<$.length;B+=1){let E=$[B];if(!E?.startsWith("--"))continue;let[D,J]=E.split("=",2);if(!D)continue;let U=D.slice(2),Y=U.startsWith("no-")?U.slice(3):U;if(Cw4.booleans.has(Y)){Q.push(E);continue}if(!Cw4.options.has(U))continue;if(J!==void 0){Q.push(E);continue}let Z=$[B+1];if(Z===void 0||Z.startsWith("--"))continue;Q.push(E,Z),B+=1}return Q}function V96(A){return A!==N9.execPath&&!A.startsWith("/$bunfs/")}function K96(){if(N9.env.NODE_ENV!=="development")return null;let A=N9.env.AMP_DEV_RELAUNCH_COMMAND?.trim();if(!A)return null;let Q=z96(A),$=Q[0];if(!$)return null;return{command:$,args:Q.slice(1)}}function z96(A){if(A.startsWith("["))try{let Q=JSON.parse(A);if(Array.isArray(Q)&&Q.every(($)=>typeof $==="string"))return Q}catch{return[]}return A.split(/\s+/).filter(Boolean)}var W96=48;class Gm0{visible=!1;onClick=void 0;listeners=new Set;show(A){this.visible=!0,this.onClick=A,this.notifyListeners()}activate(){this.onClick?.()}get isVisible(){return this.visible}dismiss(){this.visible=!1,this.onClick=void 0,this.notifyListeners()}addListener(A){this.listeners.add(A)}removeListener(A){this.listeners.delete(A)}buildComplexToast(){if(!this.visible||!this.onClick)return null;return new bl({width:W96,title:"Relaunch to Update Amp",message:"Your threads will resume.",variant:"success",mouseBehavior:"click-anywhere",action:{keyboardShortcut:"Ctrl+O",command:"amp: relaunch",confirmShortcut:"Enter",label:"relaunch",onAction:()=>this.activate()}})}notifyListeners(){for(let A of this.listeners)A()}}import{readFile as C96}from"node:fs/promises";import Vm0 from"node:os";H$();function H96(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function Nw4(A,Q){try{return{path:Q,contents:Yf0(await C96(A,"utf8"))}}catch{return null}}async function x80(A,Q){let $=[],B=H96(),E=await j4.getThread({thread:Q},{config:A.configService}),D=E.ok?E.result.thread.data:null;$.push({path:`${B}/thread.json`,contents:JSON.stringify(eD(D),null,2)});let J=await Nw4(SP(Q),`${B}/logs/${Q}.log`);if(J)$.push(J);let U=await Nw4(A.settingsFilePath,`${B}/settings/global.json`);if(U)$.push(U);let Y=await EZ()??"unknown",Z=await j4.sendReport({threadID:Q,files:$,metadata:{clientVersion:"0.0.1780456213-g47360c",clientOS:`${Vm0.platform()} ${Vm0.release()} ${Vm0.arch()}`,installMethod:Y}},{config:A.configService});if(!Z.ok)throw Error(`Failed to submit report: ${Z.error.message}`);return Z.result.reportID}class Km0{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.backStack.pop();this.forwardStack.push(Q)}}}}var N96=86400000;class zm0{options;subscription=null;relaunchNotificationShown=!1;relaunchNotificationPending=!1;relaunchNotificationTimer=null;openedAt=Date.now();constructor(A){this.options=A}init(){if(this.subscription=this.options.updateService?.state.subscribe((A)=>{this.handleUpdateState(A)})??null,process.env.DEV_SHOW_RELAUNCH_NOTIF_ON_STARTUP==="1")this.showUpdateRelaunchNotification(!0)}dispose(){if(this.subscription?.unsubscribe(),this.subscription=null,this.relaunchNotificationTimer)clearTimeout(this.relaunchNotificationTimer),this.relaunchNotificationTimer=null}handleUpdateState(A){if(A!=="updated")return;this.showUpdateRelaunchNotification()}showUpdateRelaunchNotification(A=!1){if(this.relaunchNotificationShown)return;let $=(this.options.minimumOpenDurationMs??N96)-(Date.now()-this.openedAt);if($>0&&!A){if(this.relaunchNotificationPending=!0,!this.relaunchNotificationTimer)this.relaunchNotificationTimer=setTimeout(()=>{if(this.relaunchNotificationTimer=null,!this.relaunchNotificationPending)return;this.relaunchNotificationPending=!1,this.showUpdateRelaunchNotification()},$),this.relaunchNotificationTimer.unref();return}this.relaunchNotificationPending=!1,this.relaunchNotificationShown=!0,this.options.relaunchNotificationController.show(()=>dl(this.options))}}class y80 extends R6{offstage;constructor({key:A,offstage:Q=!0,child:$}){super({key:A,child:$});this.offstage=Q}createRenderObject(){return new Wm0(this.offstage)}updateRenderObject(A){if(A instanceof Wm0)A.offstage=this.offstage}}class Wm0 extends bA{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;rA(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let $=A.constrain(Q.size.width,Q.size.height);this.setSize($.width,$.height),Q.setOffset(0,0)}else{let $=A.smallest;this.setSize($.width,$.height)}super.performLayout()}paint(A,Q,$){if(this._offstage)return;super.paint(A,Q,$)}hitTest(A,Q,$,B){if(this._offstage)return!1;return super.hitTest(A,Q,$,B)}}class cl{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class Cm0 extends p0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new qw4}}class qw4 extends c0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new aP,$=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:$})})}pushWithDismiss(A){let Q=new aP,$=this.makeScopedDismiss(Q),B=A($);this.setState(()=>{this.entries.push({key:Q,widget:B,dismiss:$})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new y80({offstage:this.entries.length>0,child:this.widget.root}));for(let $=0;$<this.entries.length;$++){let B=this.entries[$],E=$===this.entries.length-1,D=E?new c6({autofocus:!0,debugLabel:`ModalStackEntry[${$}]`,onKey:(J)=>{if(J.key!=="Escape")return"ignored";return B.dismiss(),"handled"},child:B.widget}):B.widget;Q.push(new y80({key:B.key,offstage:!E,child:D}))}return new QQ({fit:"expand",children:Q})}}class Nm0 extends F4{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter((E)=>E.status.type!=="hidden"),$=u96(Q),B="";return new B1({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:n0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new R5({items:Q,showBorder:!1,getLabel:(E)=>{let D=Hm0(E);return E.keywords&&E.keywords.length>0?`${D} ${E.keywords.join(" ").toLowerCase()}`:D},onQueryChange:(E)=>{B=E},sortItems:(E,D,J)=>{B=J;let U=J.trim().toLowerCase();if(U===""){let V=E.item.status.type==="disabled"?1:0,K=D.item.status.type==="disabled"?1:0;if(V!==K)return V-K;let z=E.item.sortBoost??0,W=D.item.sortBoost??0;if(z!==W)return W-z;let C=E.item.noun?.toLowerCase()??"",H=D.item.noun?.toLowerCase()??"";if(C!==H)return C<H?-1:1;return 0}let Y=uw4(E.item,U),Z=uw4(D.item,U);if(Y!==Z)return Y?-1:1;let F=vq(E.item.verb.toLowerCase(),J),X=vq(D.item.verb.toLowerCase(),J);if(F!==X)return X-F;let I=vq(Hm0(E.item),J),G=vq(Hm0(D.item),J);if(I!==G)return G-I;return D.score-E.score},isItemDisabled:(E)=>E.status.type==="disabled",buildDisabledReasonWidget:(E,D)=>{if(E.status.type!=="disabled")return;let{colors:J}=EA.of(D);return new D0({text:new h(E.status.reason,new $0({color:J.mutedForeground,dim:!0})),textAlign:"center",maxLines:1,overflow:"ellipsis"})},renderItem:(E,D,J,U)=>new ww4({command:E,isSelected:D,isDisabled:J,categoryWidth:$,query:B,buildContext:U}),onAccept:(E)=>{this.props.onAccept(E)},onDismiss:this.props.onDismiss})})}}class ww4 extends F4{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:$,isDisabled:B,categoryWidth:E,query:D,buildContext:J}=this.props,U=EA.of(J),{colors:Y,app:Z}=U,F=$?Z.selectionBackground:void 0,X=$?Z.selectionForeground:Y.foreground,I=$?X:Y.mutedForeground,G=new D0({text:new h(Q.noun?.toLowerCase()??"",new $0({color:I,dim:B||!$})),textAlign:"right",maxLines:1,overflow:"ellipsis"}),V=Q.verb.toLowerCase();if(B)V+=" (unavailable)";let K=q96(Q,D);if(K)V+=` (alias: ${K})`;let z=new D0({text:new h(V,new $0({color:X,bold:!0,dim:B})),maxLines:1,overflow:"ellipsis"}),W=[{child:G,fixedWidth:E},{child:z,expanded:!0}];if(Q.shortcut)W.push({child:w96(Q.shortcut,U,B)});return new Mw4({columns:W,padding:n0.horizontal(1),backgroundColor:F})}}function Hm0(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function uw4(A,Q){return A.keywords?.some(($)=>$.trim().toLowerCase()===Q)??!1}function q96(A,Q){let $=Q.trim().toLowerCase();if($==="")return;return A.keywords?.find((B)=>B.trim().toLowerCase()===$)}function u96(A){return A.reduce((Q,$)=>{return $.noun?Math.max(Q,cA($.noun)):Q},0)}function w96(A,Q,$){let{app:B}=Q,E=new $0({color:B.keybind,bold:!0,dim:$}),D=[],J=fX(A.toString()).split("+");for(let U=0;U<J.length;U++){if(U>0)D.push(new h("+",E));D.push(new h(J[U],E))}return D0.spans(D)}class Mw4 extends F4{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:$=2,padding:B,backgroundColor:E}=this.props,D=[];for(let U=0;U<Q.length;U++){let Y=Q[U];if(U>0&&$>0)D.push(new y0({width:$}));if(Y.fixedWidth!==void 0)D.push(new y0({width:Y.fixedWidth,child:Y.child}));else if(Y.expanded)D.push(new L4({child:Y.child}));else D.push(Y.child)}let J=new LA({crossAxisAlignment:"start",children:D});if(!B&&!E)return J;return new WA({decoration:E?{color:E}:void 0,padding:B,child:J})}}class qm0{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#$(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#$()}}findByID(A){return this.#A.find((Q)=>Q.id===A)}runByID(A,Q){let $=this.findByID(A);if(!$||$.status.type!=="enabled")return!1;return $.run(new cl,Q,()=>{}),!0}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#$(){for(let A of this.#Q)A()}}class eB extends lQ{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=eB.maybeOf(A);if(!Q)throw Error("No CommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(eB)?.commandRegistry??null}}class um0 extends p0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Ow4}}class Ow4 extends c0{modalStack=new cl;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=eB.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=eB.of(A).commands,$=new Nm0({commands:Q,onAccept:(B)=>{B.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new Cm0({root:$,controller:this.modalStack})}}var Lw4=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],jw4=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class b80 extends F4{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let $=W4.of(A).size.width<50,B=[];for(let E of this.items){let[D,J]=this.renderRow(E),U;if($)U=new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:[D,new hA({padding:n0.only({left:4}),child:J})]});else U=new LA({crossAxisAlignment:"start",children:[new L4({flex:1,child:D}),new y0({width:1}),new L4({flex:1,child:J})]});B.push(new hA({padding:n0.horizontal(6),child:U}))}return new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:B})}}function M96(A){let Q=[...A.keys];if(A.input)Q.push(A.input);return fX(Q.join("+"))}class wm0 extends F4{commands;onDismiss;constructor(A){super();this.commands=A.commands,this.onDismiss=A.onDismiss}build(A){let Q=EA.of(A),{colors:$,app:B}=Q,E=W4.of(A),D=new $0({color:$.secondary,bold:!0}),J=new $0({color:B.keybind}),U=new $0({color:B.command}),Y=new $0({color:$.foreground}),Z=Math.max(40,Math.min(80,E.size.width-4)),X=[...this.commands.filter((V)=>{let K=V.noun?.toLowerCase();return K!=="dev"&&K!=="debug"&&V.status.type!=="hidden"})].sort((V,K)=>{let z=(V.noun??"").toLowerCase(),W=(K.noun??"").toLowerCase(),C=z.localeCompare(W);if(C!==0)return C;return V.verb.toLowerCase().localeCompare(K.verb.toLowerCase())}),I=(V)=>{let K=V.methods.map((z)=>M96(z)).join(", ");return[new D0({text:new h(K,J)}),new D0({text:new h(V.description,Y)})]},G=new PB({autofocus:!0,child:new WA({constraints:new Y4(Z,Z,0,Number.POSITIVE_INFINITY),child:new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:[new hA({padding:n0.horizontal(2),child:new D0({text:new h(`Editor Shortcuts
4338
+ ${$.errorMessage??""}`;if(Q.add(B),this.pluginErrorToastKeys.has(B))continue;this.options.toastController.show(this.formatPluginErrorToast($),"error",8000)}this.pluginErrorToastKeys=Q}removeInactivePluginStatusItems(A){let Q=new Set(A.filter((B)=>B.status==="active").map((B)=>B.uri.toString())),$=[];for(let[B,E]of this.statusItems){if(Q.has(E.pluginURI))continue;$.push(B)}if($.length===0)return;this.updateStatusItemState(()=>{for(let B of $)this.statusItems.delete(B)})}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.context.logFilePath}`}createPluginCommand(A){return{id:A.id,noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,status:A.availability,run:async(Q,$,B)=>{B();try{await this.options.context.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(E){S.error("Neo plugin command failed",{error:E,command:A}),this.options.toastController.show(E instanceof Error?E.message:String(E),"error",5000)}}}}showInputDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"input",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showConfirmDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(!1);return}let B={kind:"confirm",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showSelectDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"select",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=tG(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};createStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{let B=this.statusItemKey(A,Q),E={pluginURI:A,id:Q};if($!==void 0)E.value=$;this.statusItems.set(B,E)})};updateStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.set(this.statusItemKey(A,Q),{pluginURI:A,id:Q,value:$})})};removeStatusItem=(A,Q)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.delete(this.statusItemKey(A,Q))})};readThreadMessages=(A,Q)=>{let $=this.options.readThreadMessages;if(!$)return Promise.reject(Error("thread.messages is not available - no active thread"));return $(A,Q)};updateStatusItemState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}statusItemKey(A,Q){return`${A}\x00${Q}`}cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[],this.resolvingDialog=null,this.emitBlockingConfirmDialogChange();for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.abortUnsubscribe(),A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}abortDialog(A){if(this.activeDialog===A){this.advanceDialog(),this.cancelDialog(A);return}let Q=this.queuedDialogs.indexOf(A);if(Q===-1)return;this.updateDialogState(()=>{this.queuedDialogs.splice(Q,1)}),this.cancelDialog(A)}enqueueDialog(A){if(this.activeDialog){if(this.queuedDialogs.push(A),this.resolvingDialog===this.activeDialog)this.advanceResolvingDialog(this.activeDialog);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A}),this.emitBlockingConfirmDialogChange()}resolveInputDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveConfirmDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveSelectDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveDialog(A,Q){if(this.activeDialog!==A||this.resolvingDialog===A)return;this.resolvingDialog=A,A.abortUnsubscribe(),Q(),this.scheduleResolvingDialogAdvance(A,J96)}scheduleResolvingDialogAdvance(A,Q){z6.instance.addPostFrameCallback(()=>{if(this.activeDialog!==A)return;if(this.queuedDialogs.length>0||Q<=1){this.advanceResolvingDialog(A);return}this.scheduleResolvingDialogAdvance(A,Q-1)},"PluginIntegration.advanceDialog")}advanceResolvingDialog(A){if(this.resolvingDialog===A)this.resolvingDialog=null;if(this.activeDialog!==A)return;this.advanceDialog()}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A();this.emitBlockingConfirmDialogChange()}emitBlockingConfirmDialogChange(){let A=this.hasBlockingConfirmDialog();if(A===this.blockingConfirmDialog)return;this.blockingConfirmDialog=A,this.options.onBlockingConfirmDialogChange?.(A)}}a0();import{spawnSync as F96}from"node:child_process";import N9 from"node:process";var Cw4={options:new Set(["settings-file","log-level","log-file","mcp-config"]),booleans:new Set(["color","dangerously-allow-all","ide","jetbrains","neo-orb","notifications"])};function dl(A){let Q=A.getRelaunchThreadIDs();if(A.onRelaunchRequested?.(Q),A.stop)A.stop();else X1.instance.stop()}function Hw4(A){return{noun:"amp",verb:"Relaunch (Quit & Reopen)",description:"Quit, reopen Amp, and resume active threads",keywords:["restart","update"],shortcut:N9.env.NODE_ENV==="development"&&N9.platform==="darwin"?HA.meta("r"):void 0,status:{type:"enabled"},sortBoost:90,run:(Q,$,B)=>{B(),dl(A)}}}function X96(A,Q){let{command:$,args:B}=I96(A),E=N9.execve,D=N9.platform==="win32"||!E,J=D?"spawnSync":"execve";if(S.info("Relaunching Amp; threads will be resumed",{threadIDs:A,relaunchMethod:J}),D){let U=F96($,B,{cwd:Q,env:N9.env,stdio:"inherit"});if(U.error)return S.error("Failed to relaunch Amp",{error:U.error}),1;return U.status??1}try{if(N9.chdir(Q),$.includes("/"))return E($,[$,...B],N9.env);return E("/usr/bin/env",["env",$,...B],N9.env)}catch(U){return S.error("Failed to relaunch Amp",{error:U}),1}}class Im0{relaunchRequested=!1;requestedThreadIDs=[];request=(A)=>{S.info("Relaunch requested; threads will be resumed",{threadIDs:A}),this.relaunchRequested=!0,this.requestedThreadIDs=A};get shouldShowExitSummary(){return!this.relaunchRequested}relaunchIfRequested(A){if(!this.relaunchRequested)return;return X96(this.requestedThreadIDs,A)}}function I96(A){let Q=A.length>0?["threads","continue",...A]:[],$=G96(N9.argv),B=K96();if(B)return{command:B.command,args:[...B.args,...$,...Q]};let E=N9.argv[1],D=E&&V96(E)?[E]:[];return{command:N9.execPath,args:[...D,...$,...Q]}}function G96(A){let Q=[],$=A.slice(2);for(let B=0;B<$.length;B+=1){let E=$[B];if(!E?.startsWith("--"))continue;let[D,J]=E.split("=",2);if(!D)continue;let U=D.slice(2),Y=U.startsWith("no-")?U.slice(3):U;if(Cw4.booleans.has(Y)){Q.push(E);continue}if(!Cw4.options.has(U))continue;if(J!==void 0){Q.push(E);continue}let Z=$[B+1];if(Z===void 0||Z.startsWith("--"))continue;Q.push(E,Z),B+=1}return Q}function V96(A){return A!==N9.execPath&&!A.startsWith("/$bunfs/")}function K96(){if(N9.env.NODE_ENV!=="development")return null;let A=N9.env.AMP_DEV_RELAUNCH_COMMAND?.trim();if(!A)return null;let Q=z96(A),$=Q[0];if(!$)return null;return{command:$,args:Q.slice(1)}}function z96(A){if(A.startsWith("["))try{let Q=JSON.parse(A);if(Array.isArray(Q)&&Q.every(($)=>typeof $==="string"))return Q}catch{return[]}return A.split(/\s+/).filter(Boolean)}var W96=48;class Gm0{visible=!1;onClick=void 0;listeners=new Set;show(A){this.visible=!0,this.onClick=A,this.notifyListeners()}activate(){this.onClick?.()}get isVisible(){return this.visible}dismiss(){this.visible=!1,this.onClick=void 0,this.notifyListeners()}addListener(A){this.listeners.add(A)}removeListener(A){this.listeners.delete(A)}buildComplexToast(){if(!this.visible||!this.onClick)return null;return new bl({width:W96,title:"Relaunch to Update Amp",message:"Your threads will resume.",variant:"success",mouseBehavior:"click-anywhere",action:{keyboardShortcut:"Ctrl+O",command:"amp: relaunch",confirmShortcut:"Enter",label:"relaunch",onAction:()=>this.activate()}})}notifyListeners(){for(let A of this.listeners)A()}}import{readFile as C96}from"node:fs/promises";import Vm0 from"node:os";H$();function H96(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function Nw4(A,Q){try{return{path:Q,contents:Yf0(await C96(A,"utf8"))}}catch{return null}}async function x80(A,Q){let $=[],B=H96(),E=await j4.getThread({thread:Q},{config:A.configService}),D=E.ok?E.result.thread.data:null;$.push({path:`${B}/thread.json`,contents:JSON.stringify(eD(D),null,2)});let J=await Nw4(SP(Q),`${B}/logs/${Q}.log`);if(J)$.push(J);let U=await Nw4(A.settingsFilePath,`${B}/settings/global.json`);if(U)$.push(U);let Y=await EZ()??"unknown",Z=await j4.sendReport({threadID:Q,files:$,metadata:{clientVersion:"0.0.1780478921-g021c3e",clientOS:`${Vm0.platform()} ${Vm0.release()} ${Vm0.arch()}`,installMethod:Y}},{config:A.configService});if(!Z.ok)throw Error(`Failed to submit report: ${Z.error.message}`);return Z.result.reportID}class Km0{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.backStack.pop();this.forwardStack.push(Q)}}}}var N96=86400000;class zm0{options;subscription=null;relaunchNotificationShown=!1;relaunchNotificationPending=!1;relaunchNotificationTimer=null;openedAt=Date.now();constructor(A){this.options=A}init(){if(this.subscription=this.options.updateService?.state.subscribe((A)=>{this.handleUpdateState(A)})??null,process.env.DEV_SHOW_RELAUNCH_NOTIF_ON_STARTUP==="1")this.showUpdateRelaunchNotification(!0)}dispose(){if(this.subscription?.unsubscribe(),this.subscription=null,this.relaunchNotificationTimer)clearTimeout(this.relaunchNotificationTimer),this.relaunchNotificationTimer=null}handleUpdateState(A){if(A!=="updated")return;this.showUpdateRelaunchNotification()}showUpdateRelaunchNotification(A=!1){if(this.relaunchNotificationShown)return;let $=(this.options.minimumOpenDurationMs??N96)-(Date.now()-this.openedAt);if($>0&&!A){if(this.relaunchNotificationPending=!0,!this.relaunchNotificationTimer)this.relaunchNotificationTimer=setTimeout(()=>{if(this.relaunchNotificationTimer=null,!this.relaunchNotificationPending)return;this.relaunchNotificationPending=!1,this.showUpdateRelaunchNotification()},$),this.relaunchNotificationTimer.unref();return}this.relaunchNotificationPending=!1,this.relaunchNotificationShown=!0,this.options.relaunchNotificationController.show(()=>dl(this.options))}}class y80 extends R6{offstage;constructor({key:A,offstage:Q=!0,child:$}){super({key:A,child:$});this.offstage=Q}createRenderObject(){return new Wm0(this.offstage)}updateRenderObject(A){if(A instanceof Wm0)A.offstage=this.offstage}}class Wm0 extends bA{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;rA(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let $=A.constrain(Q.size.width,Q.size.height);this.setSize($.width,$.height),Q.setOffset(0,0)}else{let $=A.smallest;this.setSize($.width,$.height)}super.performLayout()}paint(A,Q,$){if(this._offstage)return;super.paint(A,Q,$)}hitTest(A,Q,$,B){if(this._offstage)return!1;return super.hitTest(A,Q,$,B)}}class cl{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class Cm0 extends p0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new qw4}}class qw4 extends c0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new aP,$=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:$})})}pushWithDismiss(A){let Q=new aP,$=this.makeScopedDismiss(Q),B=A($);this.setState(()=>{this.entries.push({key:Q,widget:B,dismiss:$})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new y80({offstage:this.entries.length>0,child:this.widget.root}));for(let $=0;$<this.entries.length;$++){let B=this.entries[$],E=$===this.entries.length-1,D=E?new c6({autofocus:!0,debugLabel:`ModalStackEntry[${$}]`,onKey:(J)=>{if(J.key!=="Escape")return"ignored";return B.dismiss(),"handled"},child:B.widget}):B.widget;Q.push(new y80({key:B.key,offstage:!E,child:D}))}return new QQ({fit:"expand",children:Q})}}class Nm0 extends F4{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter((E)=>E.status.type!=="hidden"),$=u96(Q),B="";return new B1({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:n0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new R5({items:Q,showBorder:!1,getLabel:(E)=>{let D=Hm0(E);return E.keywords&&E.keywords.length>0?`${D} ${E.keywords.join(" ").toLowerCase()}`:D},onQueryChange:(E)=>{B=E},sortItems:(E,D,J)=>{B=J;let U=J.trim().toLowerCase();if(U===""){let V=E.item.status.type==="disabled"?1:0,K=D.item.status.type==="disabled"?1:0;if(V!==K)return V-K;let z=E.item.sortBoost??0,W=D.item.sortBoost??0;if(z!==W)return W-z;let C=E.item.noun?.toLowerCase()??"",H=D.item.noun?.toLowerCase()??"";if(C!==H)return C<H?-1:1;return 0}let Y=uw4(E.item,U),Z=uw4(D.item,U);if(Y!==Z)return Y?-1:1;let F=vq(E.item.verb.toLowerCase(),J),X=vq(D.item.verb.toLowerCase(),J);if(F!==X)return X-F;let I=vq(Hm0(E.item),J),G=vq(Hm0(D.item),J);if(I!==G)return G-I;return D.score-E.score},isItemDisabled:(E)=>E.status.type==="disabled",buildDisabledReasonWidget:(E,D)=>{if(E.status.type!=="disabled")return;let{colors:J}=EA.of(D);return new D0({text:new h(E.status.reason,new $0({color:J.mutedForeground,dim:!0})),textAlign:"center",maxLines:1,overflow:"ellipsis"})},renderItem:(E,D,J,U)=>new ww4({command:E,isSelected:D,isDisabled:J,categoryWidth:$,query:B,buildContext:U}),onAccept:(E)=>{this.props.onAccept(E)},onDismiss:this.props.onDismiss})})}}class ww4 extends F4{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:$,isDisabled:B,categoryWidth:E,query:D,buildContext:J}=this.props,U=EA.of(J),{colors:Y,app:Z}=U,F=$?Z.selectionBackground:void 0,X=$?Z.selectionForeground:Y.foreground,I=$?X:Y.mutedForeground,G=new D0({text:new h(Q.noun?.toLowerCase()??"",new $0({color:I,dim:B||!$})),textAlign:"right",maxLines:1,overflow:"ellipsis"}),V=Q.verb.toLowerCase();if(B)V+=" (unavailable)";let K=q96(Q,D);if(K)V+=` (alias: ${K})`;let z=new D0({text:new h(V,new $0({color:X,bold:!0,dim:B})),maxLines:1,overflow:"ellipsis"}),W=[{child:G,fixedWidth:E},{child:z,expanded:!0}];if(Q.shortcut)W.push({child:w96(Q.shortcut,U,B)});return new Mw4({columns:W,padding:n0.horizontal(1),backgroundColor:F})}}function Hm0(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function uw4(A,Q){return A.keywords?.some(($)=>$.trim().toLowerCase()===Q)??!1}function q96(A,Q){let $=Q.trim().toLowerCase();if($==="")return;return A.keywords?.find((B)=>B.trim().toLowerCase()===$)}function u96(A){return A.reduce((Q,$)=>{return $.noun?Math.max(Q,cA($.noun)):Q},0)}function w96(A,Q,$){let{app:B}=Q,E=new $0({color:B.keybind,bold:!0,dim:$}),D=[],J=fX(A.toString()).split("+");for(let U=0;U<J.length;U++){if(U>0)D.push(new h("+",E));D.push(new h(J[U],E))}return D0.spans(D)}class Mw4 extends F4{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:$=2,padding:B,backgroundColor:E}=this.props,D=[];for(let U=0;U<Q.length;U++){let Y=Q[U];if(U>0&&$>0)D.push(new y0({width:$}));if(Y.fixedWidth!==void 0)D.push(new y0({width:Y.fixedWidth,child:Y.child}));else if(Y.expanded)D.push(new L4({child:Y.child}));else D.push(Y.child)}let J=new LA({crossAxisAlignment:"start",children:D});if(!B&&!E)return J;return new WA({decoration:E?{color:E}:void 0,padding:B,child:J})}}class qm0{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#$(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#$()}}findByID(A){return this.#A.find((Q)=>Q.id===A)}runByID(A,Q){let $=this.findByID(A);if(!$||$.status.type!=="enabled")return!1;return $.run(new cl,Q,()=>{}),!0}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#$(){for(let A of this.#Q)A()}}class eB extends lQ{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=eB.maybeOf(A);if(!Q)throw Error("No CommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(eB)?.commandRegistry??null}}class um0 extends p0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Ow4}}class Ow4 extends c0{modalStack=new cl;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=eB.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=eB.of(A).commands,$=new Nm0({commands:Q,onAccept:(B)=>{B.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new Cm0({root:$,controller:this.modalStack})}}var Lw4=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],jw4=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class b80 extends F4{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let $=W4.of(A).size.width<50,B=[];for(let E of this.items){let[D,J]=this.renderRow(E),U;if($)U=new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:[D,new hA({padding:n0.only({left:4}),child:J})]});else U=new LA({crossAxisAlignment:"start",children:[new L4({flex:1,child:D}),new y0({width:1}),new L4({flex:1,child:J})]});B.push(new hA({padding:n0.horizontal(6),child:U}))}return new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:B})}}function M96(A){let Q=[...A.keys];if(A.input)Q.push(A.input);return fX(Q.join("+"))}class wm0 extends F4{commands;onDismiss;constructor(A){super();this.commands=A.commands,this.onDismiss=A.onDismiss}build(A){let Q=EA.of(A),{colors:$,app:B}=Q,E=W4.of(A),D=new $0({color:$.secondary,bold:!0}),J=new $0({color:B.keybind}),U=new $0({color:B.command}),Y=new $0({color:$.foreground}),Z=Math.max(40,Math.min(80,E.size.width-4)),X=[...this.commands.filter((V)=>{let K=V.noun?.toLowerCase();return K!=="dev"&&K!=="debug"&&V.status.type!=="hidden"})].sort((V,K)=>{let z=(V.noun??"").toLowerCase(),W=(K.noun??"").toLowerCase(),C=z.localeCompare(W);if(C!==0)return C;return V.verb.toLowerCase().localeCompare(K.verb.toLowerCase())}),I=(V)=>{let K=V.methods.map((z)=>M96(z)).join(", ");return[new D0({text:new h(K,J)}),new D0({text:new h(V.description,Y)})]},G=new PB({autofocus:!0,child:new WA({constraints:new Y4(Z,Z,0,Number.POSITIVE_INFINITY),child:new IA({crossAxisAlignment:"start",mainAxisSize:"min",children:[new hA({padding:n0.horizontal(2),child:new D0({text:new h(`Editor Shortcuts
4339
4339
  `,D)})}),new b80({items:Lw4.filter((V)=>V.submitOnEnterOnly===void 0||V.submitOnEnterOnly===!0),renderRow:I}),new y0({height:1}),new hA({padding:n0.horizontal(2),child:new D0({text:new h(`Scrolling & Navigation
4340
4340
  `,D)})}),new b80({items:jw4,renderRow:I}),new y0({height:1}),new hA({padding:n0.horizontal(2),child:new D0({text:new h(`Command Palette Commands
4341
4341
  `,D)})}),new b80({items:X,renderRow:(V)=>{let K=V.noun?`${V.noun}: ${V.verb}`:V.verb;return[new D0({text:new h(K,U)}),new D0({text:new h(V.description,Y)})]}}),new y0({height:1})]})})});return new B1({header:"Amp CLI — Help & Keyboard Shortcuts",minWidth:Z,maxWidth:Z,maxHeight:E.size.height,autofocus:!1,footer:[{keys:["Esc"],label:"close"},{keys:["↑↓","j/k"],label:"scroll"}],onDismiss:this.onDismiss,child:G})}}class wv extends lQ{completionBuilder;constructor({completionBuilder:A,child:Q}){super({child:Q});this.completionBuilder=A}updateShouldNotify(A){return!1}static of(A){let Q=A.dependOnInheritedWidgetOfExactType(wv);if(!Q)throw Error("No CompletionBuilderProvider found in widget tree");return Q.completionBuilder}}var O96=250,L96=2000;class Mm0 extends p0{configReloadEvents;toastController;child;constructor(A){super();this.configReloadEvents=A.configReloadEvents,this.toastController=A.toastController,this.child=A.child}createState(){return new Rw4}}class Rw4 extends c0{subscription=null;toastTimer=null;pendingToastType=null;lastToast=null;initState(){this.subscribeToConfigReloadEvents()}didUpdateWidget(A){if(A.configReloadEvents===this.widget.configReloadEvents)return;this.clearPendingToast(),this.subscribeToConfigReloadEvents()}dispose(){this.subscription?.unsubscribe(),this.subscription=null,this.clearPendingToast(),super.dispose()}build(A){return this.widget.child}subscribeToConfigReloadEvents(){this.subscription?.unsubscribe(),this.subscription=this.widget.configReloadEvents.subscribe((A)=>{this.scheduleToast(A)})}scheduleToast(A){if(this.pendingToastType=j96(this.pendingToastType,A),this.toastTimer)clearTimeout(this.toastTimer);this.toastTimer=setTimeout(()=>{if(!this.mounted)return;this.flushToast()},O96),this.toastTimer.unref()}flushToast(){let A=this.pendingToastType;if(this.clearPendingToast(),!A)return;let Q=Date.now();if(R96(this.lastToast,A,Q))return;this.lastToast={type:A,shownAt:Q},P96(this.widget.toastController,A)}clearPendingToast(){if(this.toastTimer)clearTimeout(this.toastTimer),this.toastTimer=null;this.pendingToastType=null}}function j96(A,Q){return A==="failed"||Q.type==="failed"?"failed":"succeeded"}function R96(A,Q,$){return A?.type===Q&&$-A.shownAt<L96}function P96(A,Q){switch(Q){case"succeeded":A.show("Config reloaded","success",1500);break;case"failed":A.show("Config reload failed","error",5000);break}}class HQ extends lQ{context;constructor({context:A,child:Q}){super({child:Q});this.context=A}updateShouldNotify(A){return!1}static of(A){let Q=A.dependOnInheritedWidgetOfExactType(HQ);if(!Q)throw Error("No ContextProvider found in widget tree");return Q.context}}a0();d8();var g80=80,v96=13,T96=1,Pw4=-g80,_96=16,S96=_b0(g80,g80);function vw4({ampURL:A,threadID:Q,logPath:$}){return[`Debug thread ${dG(new URL(A),Q).toString()} (cli log: ${$}). Start with the CLI log, actor logs, and Rivet DB/inspector as sources of truth. Read thread-actors/docs/debugging-actors.md and thread-actors/scripts/README.md. For dev, actor logs are in .amp/in/thread-actors.json.log; for staging/prod, logs are in gcloud.`,"","Problem: "].join(`
@@ -4422,13 +4422,13 @@ Ctrl-X, Y, Z to unlock`;if(this.widget.centerContent)R=this.widget.centerContent
4422
4422
  - Real life (in person)
4423
4423
 
4424
4424
  `,new $0({color:Q.foreground})),textAlign:"left"}),new D0({text:new h("All diagnostics data is deleted after 7 days. Amp team members can only access the diagnostics data if you provide the report ID.",new $0({color:Q.foreground,dim:!0})),textAlign:"left"})]})}}var IR4={kind:"fill",modalRows:19};function cZ6(A){return new B1({header:"Sending Report",tone:"default",minWidth:80,maxWidth:80,bodyFit:IR4,onDismiss:A,child:new GR4})}class GR4 extends F4{build(A){let{colors:Q}=EA.of(A);return new LA({mainAxisSize:"min",children:[new rX({color:Q.primary}),new y0({width:1}),new D0({text:new h("Gathering and sending diagnostics data...",new $0({color:Q.foreground,dim:!0}))})]})}}function XR4(A){return new B1({header:A.title,tone:A.tone,barrierOpaque:!0,minWidth:80,maxWidth:80,bodyFit:IR4,onDismiss:A.onDismiss,child:A.child})}function VR4(A,Q){return{noun:"feedback",verb:"send report with diagnostics",description:"Send a report with diagnostics to Amp support",keywords:["bug","support"],get status(){return Q()?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:($,B,E)=>{let D=Q()?.client.getThreadId();if(!D)return;$.push(cZ6(E)),A.sendFeedbackReport(D).then(async(J)=>{try{await X1.instance.tuiInstance.clipboard.writeText(J),EQ.maybeOf(B)?.show("Copied report ID to clipboard","success",3000)}catch(U){S.warn("Failed to copy report ID to clipboard",{error:U,reportID:J})}$.push(XR4({title:"Report Sent",tone:"success",onDismiss:E,child:new dc0(J)}))}).catch((J)=>{S.error("Failed to share thread with support",{error:J,threadID:D}),$.push(XR4({title:"Report failed",tone:"error",onDismiss:E,child:new D0({text:new h(`Failed to send report: ${J instanceof Error?J.message:String(J)}`)})}))})}}}bB();import{homedir as pZ6}from"node:os";import{relative as lZ6,sep as iZ6}from"node:path";import{fileURLToPath as nZ6}from"node:url";var aZ6="https://ampcode.com/manual#agent-skills",oZ6="You need to start a new thread to see skills. You can mention skills in your first message.";class cc0 extends G4{}class pc0 extends p0{listSkills;onDismiss;cwd;constructor(A){super();this.listSkills=A.listSkills,this.onDismiss=A.onDismiss,this.cwd=A.cwd}createState(){return new KR4}}class KR4 extends c0{status={kind:"loading"};abortController=null;initState(){this.abortController=new AbortController,this.loadSkills()}dispose(){this.abortController?.abort()}async loadSkills(){try{let A=await this.widget.listSkills(this.abortController?.signal);if(!this.mounted)return;this.setState(()=>{this.status={kind:"ready",skills:A.skills,errors:A.errors}})}catch(A){if(!this.mounted)return;this.setState(()=>{this.status={kind:"error",message:A instanceof Error?A.message:"Unknown error"}})}}build(A){return new m90({status:this.status,cwd:this.widget.cwd,onDismiss:this.widget.onDismiss})}}class m90 extends F4{status;cwd;onDismiss;constructor(A){super();this.status=A.status,this.cwd=A.cwd,this.onDismiss=A.onDismiss}build(A){return new B1({header:rZ6(this.status),onDismiss:this.onDismiss,minWidth:80,maxWidth:120,maxHeight:40,autofocus:!1,footer:[{keys:["Esc"],label:"close"},{keys:["↑↓","j/k"],label:"scroll"},{keys:["o"],label:"open manual"}],child:new N4({actions:new Map([[cc0,new pA(()=>{t6(A,aZ6)})]]),child:new pQ({debugLabel:"SkillListShortcuts",shortcuts:new Map([[HA.key("o"),new cc0]]),child:sZ6(A,this.status,this.cwd)})})})}}function rZ6(A){if(A.kind!=="ready")return"Skills";let{skills:Q,errors:$}=A;if(Q.length===0&&$.length===0)return"Skills";if($.length===0)return`Skills (${Q.length})`;let B=`${$.length} ${J1($.length,"error")}`;if(Q.length===0)return`Skills (0, ${B})`;return`Skills (${Q.length}, ${B})`}function sZ6(A,Q,$){let{colors:B}=EA.of(A);switch(Q.kind){case"loading":return new LA({mainAxisSize:"min",children:[new rX({color:B.primary}),new y0({width:1}),new D0({text:new h("Loading skills...",new $0({color:B.foreground,dim:!0}))})]});case"no-thread":return new D0({text:new h(oZ6,new $0({color:B.foreground}))});case"error":return new D0({text:new h(Q.message,new $0({color:B.destructive}))});case"ready":return eZ6(A,Q.skills,Q.errors,$)}}var tZ6=90;function eZ6(A,Q,$,B){let{colors:E,app:D}=EA.of(A),J=new $0({color:E.foreground,dim:!0});if(Q.length===0&&$.length===0)return new D0({text:new h("No skills reported by the executor yet.",J)});let U=W4.sizeOf(A).width>=tZ6;return new PB({child:new IA({crossAxisAlignment:"stretch",mainAxisSize:"min",children:EF6(Q,$,U,{section:new $0({color:E.foreground,bold:!0}),name:new $0({color:D.command}),description:new $0({color:E.foreground}),location:J,errorTitle:new $0({color:E.destructive,bold:!0}),errorName:new $0({color:E.warning,bold:!0}),errorMessage:new $0({color:E.destructive}),cwd:B})})})}var AF6={local:"Local",global:"Global",builtin:"Built-in"},QF6=["local","global","builtin"],$F6={"workspace-agents":"local","workspace-claude":"local","user-agents":"global","user-amp":"global","user-claude":"global",plugin:"global",toolbox:"global","custom-path":"global",builtin:"builtin"};function BF6(A){let Q={local:[],global:[],builtin:[]};for(let $ of A){let B=$.source??"workspace-agents";Q[$F6[B]].push($)}return QF6.filter(($)=>Q[$].length>0).map(($)=>({label:AF6[$],skills:Q[$]}))}function EF6(A,Q,$,B){let E=[];if(BF6(A).forEach((D,J)=>{if(J>0)E.push(new y0({height:1}));E.push(new D0({text:new h(D.label,B.section)}));for(let U of D.skills)E.push(new hA({padding:n0.only({left:2}),child:YF6(U,$,B)}))}),Q.length>0){if(A.length>0)E.push(new y0({height:1}));E.push(new D0({text:new h(`Skipped skills with errors (${Q.length}):`,B.errorTitle)}));for(let D of Q)E.push(new y0({height:1})),E.push(...JF6(D,B))}E.push(new y0({height:1})),E.push(new D0({text:new h("Create your own:",B.section)}));for(let D of DF6)E.push(new hA({padding:n0.only({left:2}),child:new D0({text:new h(`"${D}"`,B.description),maxLines:1,overflow:"ellipsis"})}));return E}var DF6=["Create a skill for searching our production logs","Create a user skill for my preferred commit message style"];function JF6(A,Q){let $=[new hA({padding:n0.only({left:2}),child:new D0({text:new h(`⚠ ${UF6(A.path)}`,Q.errorName)})}),new hA({padding:n0.only({left:4}),child:new D0({text:new h(A.error,Q.errorMessage)})})];if(A.hint)$.push(new hA({padding:n0.only({left:4}),child:new D0({text:new h(A.hint.split(`
4425
- `)[0]??"",Q.description)})}));return $.push(new hA({padding:n0.only({left:4}),child:new D0({text:new h(zR4(A.path,Q.cwd),Q.location),maxLines:1,overflow:"ellipsis"})})),$}function UF6(A){try{return new URL(A).pathname.split("/").filter(Boolean).at(-2)??"unknown"}catch{return"unknown"}}function YF6(A,Q,$){if(Q)return new LA({crossAxisAlignment:"start",children:[new L4({flex:1,child:new D0({text:new h(A.name,$.name),maxLines:1,overflow:"ellipsis"})}),new y0({width:2}),new L4({flex:2,child:new hA({padding:n0.only({right:1}),child:new D0({text:new h(A.description,$.description),maxLines:1,overflow:"ellipsis"})})})]});return new IA({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new LA({crossAxisAlignment:"start",children:[new D0({text:new h(A.name,$.name),maxLines:1,overflow:"ellipsis"}),new L4({child:new D0({text:new h(` ${zR4(A.baseDir,$.cwd)}`,$.location),maxLines:1,overflow:"ellipsis"})})]}),new hA({padding:n0.only({left:2,right:1}),child:new D0({text:new h(A.description,$.description),maxLines:1,overflow:"ellipsis"})})]})}function zR4(A,Q){if(A.startsWith("builtin://"))return"(builtin)";if(!A.startsWith("file://"))return A;let $=nZ6(A),B=lZ6(Q,$);if(B&&!B.startsWith(".."))return`./${B}`;let E=pZ6();if($===E||$.startsWith(E+iZ6))return`~${$.slice(E.length)}`;return $}var XF6=5000,IF6={attach:()=>{},detach:()=>{},unsubscribe:()=>{}};function GF6(A){let Q=WR4(A);return Q?{type:"rgb",value:Q}:void 0}function WR4(A){let Q=A?.match(/^#([0-9a-f]{6})$/i);if(!Q?.[1])return;return{r:Number.parseInt(Q[1].slice(0,2),16),g:Number.parseInt(Q[1].slice(2,4),16),b:Number.parseInt(Q[1].slice(4,6),16)}}function VF6(A){return{r:Math.round(A.r*0.55),g:Math.round(A.g*0.55),b:Math.round(A.b*0.55)}}async function KF6(A){return new Promise((Q)=>{ZF6("git",["branch","--show-current"],{cwd:A},($,B)=>{if($){Q(null);return}let E=B.trim();Q(E||null)})})}function zF6(A,Q){let $=$4(m0.file(A)),B={workspaceRoot:$,workingDirectory:$};if(Q)B.git={branch:Q};return B}class lc0 extends p0{initialAgentMode;initialPluginAgentModeKey;analyzeContextForThread;listSkillsForThread;threadContext;draftThreadSettings;editorController;editorFocusNode;history;updateDraftThreadSettings;onNewThread;sendFeedbackReport;archiveThread;addThreadLabel;removeThreadLabel;configService;hints;ideStatus;statusItems;pluginConfirmationBlocked;notificationService;notice;onDismissNotice;constructor(A){super();this.initialAgentMode=A.initialAgentMode,this.initialPluginAgentModeKey=A.initialPluginAgentModeKey,this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.threadContext=A.threadContext,this.draftThreadSettings=A.draftThreadSettings,this.editorController=A.editorController,this.editorFocusNode=A.editorFocusNode,this.history=A.history,this.updateDraftThreadSettings=A.updateDraftThreadSettings,this.onNewThread=A.onNewThread,this.sendFeedbackReport=A.sendFeedbackReport,this.archiveThread=A.archiveThread,this.addThreadLabel=A.addThreadLabel,this.removeThreadLabel=A.removeThreadLabel,this.configService=A.configService,this.hints=A.hints,this.ideStatus=A.ideStatus,this.statusItems=A.statusItems??[],this.pluginConfirmationBlocked=A.pluginConfirmationBlocked,this.notificationService=A.notificationService,this.notice=A.notice,this.onDismissNotice=A.onDismissNotice}createState(){return new CR4}}class CR4 extends c0{agentMode;pluginAgentModes=[];selectedPluginAgentMode=null;pluginAgentModesSubscription=null;copyOnSelectEnabled=!0;copyOnSelectSubscription=null;expansion=new Xd0;previousThreadIDForReference=null;unregisterCommands=null;configSettingsForReasoning={};currentGitBranch=null;useLocalEnvironmentFallbackForActiveThread=!1;fastModeToastID=null;statusMessage=null;statusMessageTimer=null;isEditorUploadLocked=!1;initState(){this.agentMode=this.widget.initialAgentMode,this.subscribeToPluginAgentModes(),this.applyInitialPluginAgentMode(),this.subscribeToCopyOnSelectEnabled(),this.updateGitBranch()}applyInitialPluginAgentMode(){if(!this.widget.initialPluginAgentModeKey||this.widget.threadContext)return;this.selectedPluginAgentMode=this.pluginAgentModes.find((A)=>A.key===this.widget.initialPluginAgentModeKey)??null}didUpdateWidget(A){if(A.configService!==this.widget.configService)this.subscribeToCopyOnSelectEnabled();if(HQ.of(this.context).pluginService!==HQ.of(this.context).pluginService)this.subscribeToPluginAgentModes();if(A.threadContext?.client!==this.widget.threadContext?.client)if(this.isEditorUploadLocked=!1,!this.widget.threadContext)this.previousThreadIDForReference=A.threadContext?.client.getThreadId()??null,this.useLocalEnvironmentFallbackForActiveThread=!0;else this.previousThreadIDForReference=null,this.useLocalEnvironmentFallbackForActiveThread=A.threadContext===null}dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=null,this.pluginAgentModesSubscription?.unsubscribe(),this.pluginAgentModesSubscription=null,this.statusMessageTimer)clearTimeout(this.statusMessageTimer),this.statusMessageTimer=null}updateGitBranch=async()=>{let A=HQ.of(this.context).workspaceRoot,Q=await KF6(A);if(!this.mounted)return;this.setState(()=>{this.currentGitBranch=Q})};subscribeToPluginAgentModes(){this.pluginAgentModesSubscription?.unsubscribe(),this.pluginAgentModesSubscription=null;let A=HQ.of(this.context).pluginService?.agentModes;if(!A){this.syncPluginAgentModes([]);return}this.syncPluginAgentModes(A.list()),this.pluginAgentModesSubscription=A.changed.subscribe({next:()=>this.syncPluginAgentModes(A.list())})}syncPluginAgentModes(A){this.setState(()=>{if(this.pluginAgentModes=A,this.selectedPluginAgentMode&&!A.some((Q)=>Q.key===this.selectedPluginAgentMode?.key))this.selectedPluginAgentMode=null}),this.refreshCommands()}refreshCommands(){this.unregisterCommands?.(),this.unregisterCommands=this.registerCommands()}registerCommands(){let A=eB.of(this.context),Q=HQ.of(this.context),$=this,B=()=>{return $.widget.threadContext??null},E=()=>{let Z=$.widget.threadContext?.client.getThreadId();if(!Z)return null;return dG(new URL(Q.ampURL),Z).toString()},D=lG(void 0,{isInternalUser:Q.isInternalUser}).map(({mode:Z})=>({noun:"mode",verb:`use ${Z}`,description:`Enable ${Z} mode`,get status(){if($.widget.threadContext)return{type:"hidden"};if(Z===$.agentMode)return{type:"disabled",reason:`Already using ${Z} mode`};return{type:"enabled"}},run:(F,X,I)=>{$.setAgentMode(Z),I()}})),J=this.pluginAgentModes.map((Z)=>({noun:"mode",verb:`use ${Z.label}`,description:Z.description??`Enable ${Z.label} mode`,get status(){if($.widget.threadContext)return{type:"hidden"};if(Z.key===$.selectedPluginAgentMode?.key)return{type:"disabled",reason:`Already using ${Z.label} mode`};return{type:"enabled"}},run:(F,X,I)=>{$.setPluginAgentMode(Z),I()}})),Y=[...D,...J,{noun:"speed",get verb(){if($.isFastSpeedEnabled())return"disable fast";let Z=$.speedCostMultiplierLabel();return Z?`use fast (${Z} cost)`:"use fast"},description:"Toggle fast speed for this thread",get status(){return $.speedToggleCommandStatus()},run:(Z,F,X)=>{$.toggleSpeed(),X()}},{noun:"thread",verb:"toggle details",description:"Expand or collapse tool and activity details",keywords:["expand","thinking"],shortcut:HA.alt("t"),status:{type:"enabled"},run:(Z,F,X)=>{$.toggleWorkDetails(),X()}},{noun:"mode",verb:"toggle reasoning effort",description:"Cycle reasoning effort for the active model",shortcut:HA.alt("d"),get status(){if($.widget.threadContext)return{type:"hidden"};return nC($.currentCommandAgentMode())?{type:"enabled"}:{type:"hidden"}},run:(Z,F,X)=>{$.toggleReasoningEffort(),X()}},{noun:"thread",verb:"copy ID",description:"Copy thread ID to clipboard",get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;N4.maybeInvoke(F,new ZB(I,"Thread ID copied to clipboard","Failed to copy thread ID")),X()}},{noun:"thread",verb:"copy URL",description:"Copy thread URL to clipboard",keywords:["share"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=E();if(!I)return;N4.maybeInvoke(F,new ZB(I,"Thread URL copied to clipboard","Failed to copy thread URL")),X()}},{noun:"thread",verb:"copy markdown",description:"Copy thread as Markdown",get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;(async()=>{try{let G=await Q.getThreadMarkdown(I);if(!G){EQ.error(F,"Failed to copy thread markdown");return}N4.maybeInvoke(F,new ZB(G,"Thread markdown copied to clipboard","Failed to copy thread markdown"))}catch(G){S.error("Failed to render thread markdown from Neo command palette",{error:G,threadID:I}),EQ.error(F,"Failed to copy thread markdown")}finally{X()}})()}},{noun:"thread",verb:"analyze context",description:"Show token usage by prompt section for this thread",keywords:["tokens"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;Z.push(new Mc0({threadID:I,analyzeContext:$.widget.analyzeContextForThread,onDismiss:X}))}},{noun:"skills",verb:"list",description:"List available skills for this thread",get status(){return{type:"enabled"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I){Z.push(new m90({status:{kind:"no-thread"},onDismiss:X,cwd:Q.workspaceRoot}));return}Z.push(new pc0({listSkills:(G)=>$.widget.listSkillsForThread(I,G),onDismiss:X,cwd:Q.workspaceRoot}))}},{noun:"thread",verb:"new",description:"Start new thread",keywords:["create","start"],sortBoost:101,get status(){if($.isEditorUploadLocked)return{type:"disabled",reason:"Prompt editor is not available"};return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"Already on a new thread"}},run:(Z,F)=>{if($.isEditorUploadLocked)return;N4.maybeInvoke(F,new Xl)}},{noun:"thread",verb:"open in browser",description:"Open thread in browser",keywords:["web"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:async(Z,F,X)=>{let I=E();if(!I)return;try{await t6(F,I)}finally{X()}}},VR4({sendFeedbackReport:(Z)=>{return this.widget.sendFeedbackReport(Z)}},B),_j4({archiveThread:(Z)=>this.widget.archiveThread(Z)},B),FR4(B),BR4({configService:this.widget.configService,addLabel:(Z,F)=>this.widget.addThreadLabel(Z,F)},B),JR4({configService:this.widget.configService,removeLabel:(Z,F)=>this.widget.removeThreadLabel(Z,F)},B)].map((Z)=>A.register(Z));return()=>{for(let Z of Y)Z()}}currentCommandAgentMode(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.agentMode;return this.widget.threadContext?.observer.agentMode??this.agentMode}currentThreadSettings(){return this.widget.threadContext?.observer.threadSettings().getValue()??this.widget.draftThreadSettings}currentCommandSpeedModel(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.selectedPluginAgentMode.agent.model;return _$(this.currentCommandAgentMode())?.primaryModel}currentCommandModeLabel(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.selectedPluginAgentMode.label;return this.currentCommandAgentMode()}currentSpeedSettingKey(){let A=this.currentCommandSpeedModel();return A?C50(A):void 0}speedCostMultiplierLabel(){let A=this.currentCommandSpeedModel();return A?Py0(A):void 0}isFastSpeedEnabled(){let A=this.currentSpeedSettingKey();return A!==void 0&&this.currentThreadSettings()[A]==="fast"}speedToggleCommandStatus(){if(this.currentSpeedSettingKey()===void 0)return{type:"hidden"};return{type:"enabled"}}updateThreadSettings(A){let Q=this.widget.threadContext;if(Q){let $=Q.observer.threadSettings().getValue()??{},B=A($);return Q.client.sendClientUpdateThreadSettings(B),this.widget.updateDraftThreadSettings(()=>B),"handled"}return this.widget.updateDraftThreadSettings(A),"handled"}toggleSpeed(){return this.setSpeed(this.isFastSpeedEnabled()?"normal":"fast")}setSpeed(A){let Q=this.currentSpeedSettingKey();if(Q===void 0)return"ignored";let $=A==="normal"?"standard":"fast",B=this.updateThreadSettings((E)=>{return{...E,[Q]:$}});if(!(this.selectedPluginAgentMode&&!this.widget.threadContext))this.rememberSpeedForMode(this.currentCommandAgentMode(),$);if(A==="fast")this.showFastModeToast();return B}showFastModeToast(){let A=EQ.maybeOf(this.context);if(!A)return;if(this.fastModeToastID!==null)A.dismiss(this.fastModeToastID);let Q=this.currentCommandModeLabel(),$=this.speedCostMultiplierLabel()??"2.5x";this.fastModeToastID=A.show(`↯${Q} costs ${$} the standard rate for this mode`,"warning",XF6)}dismissFastModeToast(){if(this.fastModeToastID===null)return;EQ.maybeOf(this.context)?.dismiss(this.fastModeToastID),this.fastModeToastID=null}toggleWorkDetails(){return this.expansion.toggle(!1),"handled"}rememberReasoningEffortForMode(A,Q){let $=HQ.of(this.context);$.lastReasoningEffortByMode={...$.lastReasoningEffortByMode??{},[A]:Q}}rememberSpeedForMode(A,Q){let $=HQ.of(this.context);$.lastSpeedByMode={...$.lastSpeedByMode??{},[A]:Q}}applyStickySpeedForMode(A,Q){let $=Yq(Q),B=H50(HQ.of(this.context),Q);if($===void 0||B===void 0)return A;return{...A,[$]:B}}toggleReasoningEffort(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return"ignored";let A=this.currentCommandAgentMode(),Q=nC(A);if(!Q)return"ignored";return this.updateThreadSettings(($)=>{let B=vy0(A,$,this.configSettingsForReasoning),E=gbA(Q,B);return this.rememberReasoningEffortForMode(A,E),{...$,"reasoning.effort":E}})}onPromptSubmitted=(A)=>{this.widget.history.add(A,FF6.cwd()),this.resetHistory()};handleEditorUploadLockChange=(A)=>{if(this.isEditorUploadLocked===A)return;this.setState(()=>{this.isEditorUploadLocked=A})};resetHistory(){this.widget.history.reset()}setAgentMode=(A)=>{if(this.widget.threadContext)return;if(A!==this.agentMode)this.dismissFastModeToast();this.setState(()=>{this.agentMode=A,this.selectedPluginAgentMode=null}),this.widget.updateDraftThreadSettings((Q)=>{let $=jy0(HQ.of(this.context),A),B={...Q};delete B["reasoning.effort"];let E=$??vy0(A,B,this.configSettingsForReasoning);if(E===void 0){let D={...Q};return delete D["reasoning.effort"],this.applyStickySpeedForMode(D,A)}return this.applyStickySpeedForMode({...Q,"reasoning.effort":E},A)})};setPluginAgentMode=(A)=>{if(this.widget.threadContext)return;this.dismissFastModeToast(),this.setState(()=>{this.selectedPluginAgentMode=A})};buildActions(){let A=new pA((B)=>{return this.setAgentMode(B.mode),"handled"}),Q=new pA(()=>{return this.toggleReasoningEffort()}),$=new pA(()=>{return this.toggleWorkDetails()});return new Map([[lh0,A],[_q,Q],[g70,$]])}build(A){let Q=this.widget.threadContext,$=HQ.of(A),B=WR4(this.selectedPluginAgentMode?.color),E=zF6($.workspaceRoot,this.currentGitBranch),J=[Q?new wc0({editorController:this.widget.editorController,editorFocusNode:this.widget.editorFocusNode,copyOnSelectEnabled:this.copyOnSelectEnabled,observingClient:{client:Q.client,observer:Q.observer,agentModeDisplay:Q.agentModeDisplay},hints:this.widget.hints,ideStatus:this.widget.ideStatus,statusItems:this.widget.statusItems,pluginConfirmationBlocked:this.widget.pluginConfirmationBlocked,onPromptSubmitted:this.onPromptSubmitted,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,notificationService:this.widget.notificationService??IF6,environmentFallback:this.useLocalEnvironmentFallbackForActiveThread?E:null}):new mc0({agentMode:this.agentMode,pluginAgentModes:this.pluginAgentModes,selectedPluginAgentMode:this.selectedPluginAgentMode,agentModeLabel:this.selectedPluginAgentMode?.label,pluginAgentModeURI:this.selectedPluginAgentMode?.sourceURI,agentModeColor:GF6(this.selectedPluginAgentMode?.color),splashPrimaryColor:B?VF6(B):void 0,splashSecondaryColor:B,threadSettings:this.widget.draftThreadSettings,configSettings:this.configSettingsForReasoning,editorController:this.widget.editorController,editorFocusNode:this.widget.editorFocusNode,visibility:null,onNewThread:this.widget.onNewThread,onAgentModeChange:this.setAgentMode,onPluginAgentModeChange:this.setPluginAgentMode,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,previousThreadIDForReference:this.previousThreadIDForReference,hints:this.widget.hints,ideStatus:this.widget.ideStatus,statusItems:this.widget.statusItems,configService:this.widget.configService,environment:E,notice:this.widget.notice??null,onDismissNotice:this.widget.onDismissNotice??(()=>{}),statusMessage:this.statusMessage})],U=new Map([[HA.alt("t"),new g70]]);return new N4({actions:this.buildActions(),child:new pQ({debugLabel:"ThreadShortcuts",shortcuts:U,child:new xv({history:this.isEditorUploadLocked?void 0:this.widget.history,child:new zJ({controller:this.expansion,child:new QQ({children:J})})})})})}subscribeToCopyOnSelectEnabled(){this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=this.widget.configService.config.subscribe((A)=>{let Q=A.settings["terminal.copyOnSelect"]??!0,$=A.settings["internal.model"],B=this.configSettingsForReasoning["internal.model"]!==$;if($===void 0)this.configSettingsForReasoning={};else this.configSettingsForReasoning={"internal.model":$};if(this.copyOnSelectEnabled===Q&&!B)return;if(this.copyOnSelectEnabled=Q,this.mounted)this.setState()})}}a0();d8();J4();class QI extends G4{direction;constructor(A){super();this.direction=A}}class d90 extends G4{}class zi extends G4{}class c90 extends G4{index;constructor(A){super();this.index=A}}function ic0(A){return A.length+2}class nc0 extends p0{props;constructor(A){super();this.props=A}createState(){return new HR4}}class HR4 extends c0{selectedIndex=0;initState(){super.initState(),this.selectedIndex=this.findSelectableIndex(this.widget.props.initialSelectedIndex??0)}didUpdateWidget(A){this.selectedIndex=this.findSelectableIndex(this.selectedIndex)}isSelectable(A){let Q=this.widget.props.entries[A];return Q?.type==="item"&&(Q.enabled??!0)}findSelectableIndex(A){let{entries:Q}=this.widget.props;if(Q.length===0)return 0;let $=Math.max(0,Math.min(A,Q.length-1));if(this.isSelectable($))return $;for(let B=1;B<Q.length;B++){let E=$+B;if(E<Q.length&&this.isSelectable(E))return E;let D=$-B;if(D>=0&&this.isSelectable(D))return D}return 0}moveSelection(A){let Q=this.findNextSelectableIndex(A);if(Q===this.selectedIndex)return;this.setState(()=>{this.selectedIndex=Q})}findNextSelectableIndex(A){let{entries:Q}=this.widget.props;for(let $=this.selectedIndex+A;$>=0&&$<Q.length;$+=A)if(this.isSelectable($))return $;return this.selectedIndex}acceptIndex(A){let Q=this.widget.props.entries[A];if(Q?.type!=="item"||!(Q.enabled??!0))return;this.setState(()=>{this.selectedIndex=A}),this.widget.props.onAccept(Q.value)}invoke=(A)=>{if(A instanceof QI)return this.moveSelection(A.direction),"handled";if(A instanceof d90)return this.acceptIndex(this.selectedIndex),"handled";if(A instanceof zi)return this.widget.props.onDismiss(),"handled";if(A instanceof c90)return this.acceptIndex(A.index),"handled";return"ignored"};buildShortcuts(){let A=new Map([[HA.key("ArrowDown"),new QI(1)],[HA.key("j"),new QI(1)],[HA.ctrl("n"),new QI(1)],[HA.key("ArrowUp"),new QI(-1)],[HA.key("k"),new QI(-1)],[HA.ctrl("p"),new QI(-1)],[HA.key("Enter"),new d90],[HA.key("Escape"),new zi],[HA.ctrl("."),new zi]]);return this.widget.props.entries.forEach((Q,$)=>{if(Q.type==="item"&&Q.shortcut)A.set(Q.shortcut,new c90($))}),A}buildActions(){return new Map([[QI,new pA(this.invoke)],[d90,new pA(this.invoke)],[zi,new pA(this.invoke)],[c90,new pA(this.invoke)]])}build(A){let Q=EA.of(A),$=WF6(this.widget.props.entries,W4.of(A).supportsEmojiWidth);return new WA({width:this.widget.props.width,height:ic0(this.widget.props.entries),decoration:new c1(Q.colors.background,W1.all(new C1(Q.colors.border,1,"solid"))),child:new N4({actions:this.buildActions(),child:new pQ({debugLabel:"ContextPickerShortcuts",shortcuts:this.buildShortcuts(),child:new cQ({autofocus:!0,debugLabel:"ContextPicker",child:new IA({mainAxisSize:"min",crossAxisAlignment:"stretch",children:this.widget.props.entries.map((B,E)=>this.buildEntry(B,E,$,Q))})})})})})}buildEntry(A,Q,$,B){if(A.type==="separator")return new WA({height:1,decoration:{border:new W1(new C1(B.colors.border,1,"solid"))}});let E=Q===this.selectedIndex,D=A.enabled??!0,J=new $0({color:E?B.app.selectionForeground:B.colors.foreground,dim:!D}),U=new $0({color:E?B.app.selectionForeground:B.app.keybind,bold:!0,dim:!D});return new iA({onClick:()=>this.acceptIndex(Q),child:new WA({padding:n0.symmetric(1,0),decoration:E?new c1(B.app.selectionBackground):void 0,child:new LA({crossAxisAlignment:"start",children:[new L4({child:new D0({text:new h(A.label,J),maxLines:1,overflow:"ellipsis"})}),new y0({width:1}),new y0({width:$,child:new D0({text:new h(NR4(A),U),textAlign:"right",maxLines:1,overflow:"ellipsis"})})]})})})}}function WF6(A,Q){return A.reduce(($,B)=>{return B.type==="item"?Math.max($,cA(NR4(B),Q)):$},0)}function NR4(A){return A.shortcutLabel??A.shortcut?.toString().toLowerCase()??""}var CF6=36,HF6=24,NF6=72;class qR4 extends p0{child;onContext;constructor(A,Q){super();this.child=A;this.onContext=Q}createState(){return new uR4}}class uR4 extends c0{build(A){return this.widget.onContext(A),this.widget.child}}function wR4(A){if(A==="Just now")return"1m";return A.replace(/ ago$/,"")}function qF6(A){return A.reduce((Q,$)=>Math.max(Q,cA(wR4($.description.timeAgo))),0)}function MR4(A){return Math.max(HF6,Math.min(A,NF6))}class ac0 extends G4{}class oc0 extends G4{}class rc0 extends G4{}class sc0{options;focusScopeNode=new B8({debugLabel:"ThreadListSidebar"});initialized=!1;visible=!1;hasRenderedSidebar=!1;width=CF6;pickerController=new tp;constructor(A){this.options=A}isVisible(){return this.ensureInitialized(),this.visible}visibleWidth(){return this.isVisible()?this.width:0}buildBody(A){return new LA({crossAxisAlignment:"stretch",children:[this.buildSlot(),new L4({child:A})]})}buildSlot(){let A=this.isVisible();if(!this.hasRenderedSidebar)return new y0({width:0});let Q={activeThreadID:this.options.getActiveThreadID(),currentWorkspaceURI:$4(m0.file(this.options.getWorkspaceRoot())),width:this.width,loadThreads:this.options.loadThreads,pickerController:this.pickerController,onSelectThread:this.options.onSelectThread,onDismiss:this.close,onResizeWidth:this.resize};if(this.options.observeThreadSummaries)Q.observeThreadSummaries=this.options.observeThreadSummaries;return new y0({width:A?this.width:0,child:new c6({focusScopeNode:this.focusScopeNode,debugLabel:"ThreadListSidebar",onFocusChange:this.handleFocusChange,child:new OR4(Q)})})}commands(){return[{noun:"thread",verb:"toggle sidebar",description:"Show or hide the thread sidebar",shortcut:HA.alt("s"),status:{type:"enabled"},run:(A,Q,$)=>{$(),this.toggleFromShortcut()}}]}shortcutEntries(){return[[HA.alt("s"),new d70]]}actionEntries(){return[[d70,new pA(()=>this.toggleFromShortcut())]]}toggleFromShortcut=()=>{if(this.isVisible()){if(this.focusScopeNode.hasFocus)return this.close(),"handled";if(this.options.isBlocked())return"ignored";return this.pickerController.requestFocus(),"handled"}if(this.options.isBlocked())return"ignored";return this.pickerController.requestFocus(),this.setVisible(!0),"handled"};close=()=>{this.options.focusMainContent(),this.setVisible(!1)};setVisible(A){if(this.ensureInitialized(),this.visible===A)return;if(A)this.hasRenderedSidebar=!0;this.options.state.setState(()=>{this.visible=A}),JJ((Q)=>({...Q,threadListSidebarVisible:A})).catch((Q)=>{S.warn("Failed to save thread sidebar visibility state",{error:Q instanceof Error?Q.message:String(Q)})})}ensureInitialized(){if(this.initialized)return;this.initialized=!0,this.visible=this.options.getInitialVisible(),this.hasRenderedSidebar=this.visible}handleFocusChange=(A)=>{this.options.state.setState()};dispose(){this.focusScopeNode.dispose()}resize=(A)=>{let Q=MR4(A);if(Q===this.width)return;this.options.state.setState(()=>{this.width=Q})}}class OR4 extends p0{props;constructor(A){super();this.props=A}createState(){return new LR4}}class LR4 extends c0{threads=[];isLoading=!0;isSwitchingThread=!1;hasError=!1;filterByWorkspace=!0;contextMenu=null;pendingThreadMutations=new Map;canonicalThreadSummariesByID=new Map;archivedCanonicalThreadIDs=new Set;liveThreadSummaries=null;resizeSession=null;isResizeHandleHovered=!1;threadItemContexts=new Map;threadSummarySubscription=null;observedThreadSummaries;shortcuts=new Map([[HA.alt("w"),new ac0],[HA.ctrl("."),new oc0],[HA.key("e"),new rc0]]);actions=new Map([[ac0,new pA(()=>{return this.setState(()=>{this.filterByWorkspace=!this.filterByWorkspace,this.contextMenu=null}),"handled"})],[oc0,new pA(()=>this.openContextMenu())],[rc0,new pA(()=>this.archiveSelectedThread())]]);get isBusy(){return this.isLoading}get isResizeActive(){return this.resizeSession!==null||this.isResizeHandleHovered}didUpdateWidget(A){if(super.didUpdateWidget(A),this.contextMenu&&(A.props.width!==this.widget.props.width||A.props.currentWorkspaceURI!==this.widget.props.currentWorkspaceURI))this.contextMenu=null;if(A.props.observeThreadSummaries!==this.widget.props.observeThreadSummaries)this.startThreadSummaryUpdates()}initState(){super.initState(),this.startThreadSummaryUpdates()}dispose(){this.threadSummarySubscription?.unsubscribe(),this.threadSummarySubscription=null,super.dispose()}startThreadSummaryUpdates(){this.threadSummarySubscription?.unsubscribe(),this.threadSummarySubscription=null,this.liveThreadSummaries=null,this.observedThreadSummaries=this.widget.props.observeThreadSummaries;let A=this.widget.props.observeThreadSummaries;if(!A){this.loadThreadSummaries();return}let Q=A();if(!Q){this.loadThreadSummaries();return}this.loadThreadSummaries(),this.threadSummarySubscription=Q.subscribe({next:($)=>this.applyLiveThreadSummaries($),error:($)=>{if(S.error("Failed to observe threads for Neo sidebar",{error:$}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}})}async loadThreadSummaries(){let A=this.observedThreadSummaries;try{let Q=await this.widget.props.loadThreads(),$=nd0(Q);if(!this.mounted||A!==this.observedThreadSummaries)return;this.archivedCanonicalThreadIDs.clear();for(let B of Q)if(B.archived)this.archivedCanonicalThreadIDs.add(B.id);this.applyCanonicalThreadSummaries($)}catch(Q){if(S.error("Failed to load threads for Neo sidebar",{error:Q}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}}applyCanonicalThreadSummaries(A){this.canonicalThreadSummariesByID.clear();for(let Q of A)this.canonicalThreadSummariesByID.set(Q.id,Q);this.applyThreadSummaries(this.liveThreadSummaries?this.mergeLiveMetadata():A)}applyLiveThreadSummaries(A){this.liveThreadSummaries=A;let Q=this.mergeLiveMetadata();if(Q.length===0&&this.canonicalThreadSummariesByID.size===0&&this.isLoading)return;this.applyThreadSummaries(Q)}mergeLiveMetadata(){let A=new Map((this.liveThreadSummaries??[]).map((B)=>[B.id,B])),Q=(this.liveThreadSummaries??[]).flatMap((B)=>{if(this.archivedCanonicalThreadIDs.has(B.id))return[];let E=this.canonicalThreadSummariesByID.get(B.id);if(!E){if(!B.updatedAt)return[];return[B]}return[this.mergeLiveThreadSummary(E,B)]}),$=Array.from(this.canonicalThreadSummariesByID.values()).filter((B)=>!A.has(B.id));return[...Q,...$]}mergeLiveThreadSummary(A,Q){return{...A,...Q,updatedAt:Q.updatedAt??A.updatedAt,description:Q.updatedAt?Q.description:A.description,workspaceURI:A.workspaceURI,relationships:A.relationships,diffStats:A.diffStats,agentMode:A.agentMode,details:A.details,archived:A.archived}}applyThreadSummaries(A){if(!this.mounted)return;this.setState(()=>{let Q=this.widget.props.pickerController.selectedItem?.id??this.widget.props.activeThreadID;this.widget.props.pickerController.selectedItem=A.find(($)=>$.id===Q)??A.find(($)=>$.id===this.widget.props.activeThreadID)??null,this.threads=A,this.isLoading=!1,this.hasError=!1})}handleSelectThread=async(A)=>{if(this.isSwitchingThread)return;this.setState(()=>{this.isSwitchingThread=!0});try{await this.widget.props.onSelectThread(A)}catch(Q){S.error("Failed to switch thread from Neo sidebar",{error:Q,threadID:A})}finally{if(this.mounted)this.setState(()=>{this.isSwitchingThread=!1})}};getOptimisticThreads(){return this.threads.flatMap((A)=>{if(this.pendingThreadMutations.get(A.id)?.kind==="archive")return[];return[A]})}getThreadsForDisplay(){let A=this.getOptimisticThreads();return this.filterByWorkspace?A.filter((Q)=>!Q.workspaceURI||Q.workspaceURI===this.widget.props.currentWorkspaceURI):A}buildContextMenuEntries(){return[{type:"item",value:"archive",label:"Archive Thread",shortcut:HA.key("a"),shortcutLabel:"a"},{type:"separator"},{type:"item",value:"copy-id",label:"Copy ID",shortcut:HA.ctrl("c"),shortcutLabel:"ctrl+c"},{type:"item",value:"copy-url",label:"Copy URL",shortcut:new HA("c",{shift:!0,ctrl:!0}),shortcutLabel:"shift+ctrl+c"}]}openContextMenu(){let A=this.widget.props.pickerController.selectedItem;if(!A||this.isBusy||this.isSwitchingThread||this.hasError)return"ignored";let Q=this.buildContextMenuEntries(),$=ic0(Q),B=this.getContextMenuWidth(),E=this.getContextMenuPosition(A.id,$,B);return this.setState(()=>{this.contextMenu={threadID:A.id,left:E.left,top:E.top,width:B,height:$}}),"handled"}archiveSelectedThread(){let A=this.widget.props.pickerController.selectedItem?.id;if(!A||this.contextMenu||this.isBusy||this.isSwitchingThread||this.hasError)return"ignored";return this.archiveThread(A),"handled"}getContextMenuWidth(){let A=Math.max(24,this.widget.props.width-3);return Math.max(1,Math.min(A,this.widget.props.width-2))}getContextMenuPosition(A,Q,$){let B=Math.max(0,Math.min(2,this.widget.props.width-$)),E=1,D=this.threadItemContexts.get(A)?.findRenderObject(),J=this.context.findRenderObject();if(!(D instanceof bA)||!(J instanceof bA))return{left:B,top:1};let U=D.localToGlobal({x:0,y:0}),Y=J.localToGlobal({x:0,y:0}),Z=U.y-Y.y,F=Z+D.size.height,X=W4.sizeOf(this.context).height,I=Math.max(1,Math.min(J.size.height,X-Y.y)),K=I-F>=Q||Z<I/2?F:Z-Q,z=Math.max(0,I-Q);return{left:B,top:Math.max(0,Math.min(K,z))}}closeContextMenu=()=>{if(!this.contextMenu)return;this.setState(()=>{this.contextMenu=null})};handleContextMenuAccept=(A)=>{let Q=this.contextMenu?.threadID;if(!Q)return;if(this.closeContextMenu(),A==="archive"){this.archiveThread(Q);return}if(A==="copy-id"){N4.maybeInvoke(this.context,new ZB(Q,"Thread ID copied to clipboard","Failed to copy thread ID"));return}N4.maybeInvoke(this.context,new ZB(this.getThreadURL(Q),"Thread URL copied to clipboard","Failed to copy thread URL"))};beginOptimisticArchive(A){if(this.pendingThreadMutations.has(A))return!1;if(!this.threads.some(($)=>$.id===A))return!1;let Q={kind:"archive",fallbackSelectedThreadID:null};return this.setState(()=>{this.pendingThreadMutations.set(A,Q)}),z6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;let $=this.pendingThreadMutations.get(A);if($?.kind!=="archive")return;$.fallbackSelectedThreadID=this.widget.props.pickerController.selectedItem?.id??null}),!0}commitOptimisticArchive(A){if(this.pendingThreadMutations.get(A)?.kind!=="archive")return;this.pendingThreadMutations.delete(A),this.canonicalThreadSummariesByID.delete(A),this.threads=this.threads.filter(($)=>$.id!==A)}rollbackOptimisticArchive(A){let Q=this.pendingThreadMutations.get(A);if(Q?.kind!=="archive")return;let $=this.threads.find((B)=>B.id===A);if(!$){this.pendingThreadMutations.delete(A);return}this.setState(()=>{this.pendingThreadMutations.delete(A);let B=this.widget.props.pickerController.selectedItem?.id??null;if(B===null||B===Q.fallbackSelectedThreadID)this.widget.props.pickerController.selectedItem=$})}async archiveThread(A){let Q=EQ.maybeOf(this.context),{configService:$}=HQ.of(this.context);if(!this.beginOptimisticArchive(A))return;try{let B=await H70({configService:$},A);if(!this.mounted)return;if(B){this.rollbackOptimisticArchive(A),Q?.show(B.message,"error");return}this.commitOptimisticArchive(A),Q?.show("Archived thread")}catch(B){if(S.error("Failed to archive thread from Neo sidebar context menu",{error:B,threadID:A}),!this.mounted)return;this.rollbackOptimisticArchive(A),Q?.show("Failed to archive thread","error")}}getThreadURL(A){return dG(new URL(HQ.of(this.context).ampURL),A).toString()}buildContextMenuOverlay(){let A=this.contextMenu;if(!A||!this.getThreadsForDisplay().some((Q)=>Q.id===A.threadID))return null;return new r1({left:A.left,top:A.top,width:A.width,height:A.height,child:new c6({debugLabel:"ThreadListSidebarContextMenu",onFocusChange:(Q)=>{if(!Q)this.closeContextMenu()},child:new nc0({entries:this.buildContextMenuEntries(),width:A.width,onAccept:this.handleContextMenuAccept,onDismiss:this.closeContextMenu})})})}buildContextMenuBackdrop(){return new r1({left:0,top:0,right:0,bottom:0,child:new iA({onClick:()=>this.closeContextMenu(),child:y0.expand()})})}buildThreadItem(A,Q,$,B){let E=EA.of(B),{app:D,colors:J}=E,U=A.id===this.widget.props.activeThreadID,Y=!Q&&!U,Z=Q?D.selectionForeground:J.foreground,F=Q?D.selectionForeground:J.mutedForeground,I=A.agentState!==void 0&&A.agentState!=="idle"?new eX({color:Q?D.selectionForeground:J.primary}):void 0,G=wR4(A.description.timeAgo);return new qR4(new WA({padding:n0.symmetric(1,0),child:new LA({children:[new y0({width:2,child:I}),new L4({child:new D0({text:new h(A.title,new $0({color:Z,dim:Y})),overflow:"ellipsis",maxLines:1})}),new y0({width:2}),new y0({width:$,child:LA.end([new D0({text:new h(G,new $0({color:F,dim:Y}))})])})]})}),(V)=>{this.threadItemContexts.set(A.id,V)})}handleResizeHandlePress=(A)=>{if(A.button!=="left")return;this.setState(()=>{this.resizeSession={baseWidthColumns:this.widget.props.width,startColumn:Math.floor(A.position.x)}})};handleResizeHandleDrag=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;let Q=Math.floor(A.position.x)-this.resizeSession.startColumn,$=MR4(this.resizeSession.baseWidthColumns+Q);if($!==this.widget.props.width)this.widget.props.onResizeWidth($)};handleResizeHandleRelease=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;this.setState(()=>{this.resizeSession=null})};handleResizeHandleEnter=()=>{if(this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!0})};handleResizeHandleExit=()=>{if(!this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!1})};buildResizeHandle(){return new r1({top:0,right:0,bottom:0,width:1,child:new iA({cursor:d1.EW_RESIZE,onClick:this.handleResizeHandlePress,onDrag:this.handleResizeHandleDrag,onRelease:this.handleResizeHandleRelease,onEnter:this.handleResizeHandleEnter,onExit:this.handleResizeHandleExit,child:new y0({width:1})})})}build(A){let Q=EA.of(A),$=this.getThreadsForDisplay(),B=this.hasError?[]:$,E=qF6(B);this.threadItemContexts.clear();let D=this.isResizeActive?2:1,J=new W1(void 0,new C1(Q.colors.border,D),void 0,void 0),U=this.buildContextMenuOverlay(),Y=[new WA({decoration:new c1(Q.colors.background,J),child:new N4({actions:this.actions,child:new pQ({shortcuts:this.shortcuts,debugLabel:"ThreadListSidebarFilter",child:new R5({items:B,getLabel:(Z)=>`${Z.title} ${Z.id}`,controller:this.widget.props.pickerController,autofocus:!1,onAccept:(Z)=>void this.handleSelectThread(Z.id),onDismiss:this.widget.props.onDismiss,renderItem:(Z,F,X,I)=>this.buildThreadItem(Z,F,E,I),enabled:!this.isBusy,isLoading:this.isBusy,hidePrompt:!0,loadingText:"Loading threads...",emptyStateText:this.hasError?"Failed to load threads":void 0,emptyStateWidget:this.hasError?void 0:(Z)=>ld0(Z,this.filterByWorkspace),maxRenderItems:200,showBorder:!1})})})}),this.buildResizeHandle()];if(U)Y.push(this.buildContextMenuBackdrop()),Y.push(U);return new WA({width:this.widget.props.width,child:new QQ({fit:"expand",children:Y})})}}bB();class tc0 extends p0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new RR4}}class RR4 extends c0{toolboxes=new sB(this,[]);initState(){this.toolboxes.subscribe(this.widget.toolboxes)}didUpdateWidget(A){if(A.toolboxes!==this.widget.toolboxes)this.toolboxes.subscribe(this.widget.toolboxes)}build(A){return new PR4({toolboxes:this.toolboxes.getValue(),onDismiss:this.widget.onDismiss})}}class PR4 extends p0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new vR4}}class vR4 extends c0{scrollController=new G$;canScroll=!1;initState(){this.scrollController.followMode=!1,this.scrollController.jumpTo(0),this.scrollController.addListener(this.updateCanScroll)}dispose(){this.scrollController.removeListener(this.updateCanScroll),this.scrollController.dispose()}updateCanScroll=()=>{let A=this.scrollController.maxScrollExtent>0;if(A===this.canScroll)return;this.setState(()=>{this.canScroll=A})};build(A){return new B1({header:"Toolboxes",onDismiss:this.widget.onDismiss,minWidth:80,maxWidth:120,maxHeight:40,autofocus:!1,footer:uF6(this.canScroll),child:new PB({controller:this.scrollController,child:wF6(A,this.widget.toolboxes)})})}}function uF6(A){let Q=[{keys:["Esc"],label:"close"}];if(A)Q.push({keys:["↑↓","j/k"],label:"scroll"});return Q}function wF6(A,Q){let $=MF6(A,Q);return new IA({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new D0({text:new h("",void 0,$),selectable:!0})]})}function MF6(A,Q){let $=EA.of(A),{colors:B}=$,E=new $0({color:B.foreground,dim:!0}),D=new $0({color:B.foreground,bold:!0});if(Q.length===0)return[new h("No toolboxes found.",E)];let J=[];for(let U of Q){let Y=U.tools.length,Z=U.tools.filter((F)=>F.status==="registered").length;if(U.discovering){let F=U.tools.filter((X)=>X.status!=="pending").length;J.push(new h(U.path,D)),J.push(new h(` discovering ${F}/${Y}...
4425
+ `)[0]??"",Q.description)})}));return $.push(new hA({padding:n0.only({left:4}),child:new D0({text:new h(zR4(A.path,Q.cwd),Q.location),maxLines:1,overflow:"ellipsis"})})),$}function UF6(A){try{return new URL(A).pathname.split("/").filter(Boolean).at(-2)??"unknown"}catch{return"unknown"}}function YF6(A,Q,$){if(Q)return new LA({crossAxisAlignment:"start",children:[new L4({flex:1,child:new D0({text:new h(A.name,$.name),maxLines:1,overflow:"ellipsis"})}),new y0({width:2}),new L4({flex:2,child:new hA({padding:n0.only({right:1}),child:new D0({text:new h(A.description,$.description),maxLines:1,overflow:"ellipsis"})})})]});return new IA({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new LA({crossAxisAlignment:"start",children:[new D0({text:new h(A.name,$.name),maxLines:1,overflow:"ellipsis"}),new L4({child:new D0({text:new h(` ${zR4(A.baseDir,$.cwd)}`,$.location),maxLines:1,overflow:"ellipsis"})})]}),new hA({padding:n0.only({left:2,right:1}),child:new D0({text:new h(A.description,$.description),maxLines:1,overflow:"ellipsis"})})]})}function zR4(A,Q){if(A.startsWith("builtin://"))return"(builtin)";if(!A.startsWith("file://"))return A;let $=nZ6(A),B=lZ6(Q,$);if(B&&!B.startsWith(".."))return`./${B}`;let E=pZ6();if($===E||$.startsWith(E+iZ6))return`~${$.slice(E.length)}`;return $}var XF6=5000,IF6={attach:()=>{},detach:()=>{},unsubscribe:()=>{}};function GF6(A){let Q=WR4(A);return Q?{type:"rgb",value:Q}:void 0}function WR4(A){let Q=A?.match(/^#([0-9a-f]{6})$/i);if(!Q?.[1])return;return{r:Number.parseInt(Q[1].slice(0,2),16),g:Number.parseInt(Q[1].slice(2,4),16),b:Number.parseInt(Q[1].slice(4,6),16)}}function VF6(A){return{r:Math.round(A.r*0.55),g:Math.round(A.g*0.55),b:Math.round(A.b*0.55)}}async function KF6(A){return new Promise((Q)=>{ZF6("git",["branch","--show-current"],{cwd:A},($,B)=>{if($){Q(null);return}let E=B.trim();Q(E||null)})})}function zF6(A,Q){let $=$4(m0.file(A)),B={workspaceRoot:$,workingDirectory:$};if(Q)B.git={branch:Q};return B}class lc0 extends p0{initialAgentMode;initialPluginAgentModeKey;analyzeContextForThread;listSkillsForThread;threadContext;draftThreadSettings;editorController;editorFocusNode;history;updateDraftThreadSettings;onNewThread;sendFeedbackReport;archiveThread;addThreadLabel;removeThreadLabel;configService;hints;ideStatus;statusItems;pluginConfirmationBlocked;notificationService;notice;onDismissNotice;constructor(A){super();this.initialAgentMode=A.initialAgentMode,this.initialPluginAgentModeKey=A.initialPluginAgentModeKey,this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.threadContext=A.threadContext,this.draftThreadSettings=A.draftThreadSettings,this.editorController=A.editorController,this.editorFocusNode=A.editorFocusNode,this.history=A.history,this.updateDraftThreadSettings=A.updateDraftThreadSettings,this.onNewThread=A.onNewThread,this.sendFeedbackReport=A.sendFeedbackReport,this.archiveThread=A.archiveThread,this.addThreadLabel=A.addThreadLabel,this.removeThreadLabel=A.removeThreadLabel,this.configService=A.configService,this.hints=A.hints,this.ideStatus=A.ideStatus,this.statusItems=A.statusItems??[],this.pluginConfirmationBlocked=A.pluginConfirmationBlocked,this.notificationService=A.notificationService,this.notice=A.notice,this.onDismissNotice=A.onDismissNotice}createState(){return new CR4}}class CR4 extends c0{agentMode;pluginAgentModes=[];selectedPluginAgentMode=null;pluginAgentModesSubscription=null;copyOnSelectEnabled=!0;copyOnSelectSubscription=null;expansion=new Xd0;previousThreadIDForReference=null;unregisterCommands=null;configSettingsForReasoning={};currentGitBranch=null;useLocalEnvironmentFallbackForActiveThread=!1;fastModeToastID=null;statusMessage=null;statusMessageTimer=null;isEditorUploadLocked=!1;initState(){this.agentMode=this.widget.initialAgentMode,this.subscribeToPluginAgentModes(),this.applyInitialPluginAgentMode(),this.subscribeToCopyOnSelectEnabled(),this.updateGitBranch()}applyInitialPluginAgentMode(){if(!this.widget.initialPluginAgentModeKey||this.widget.threadContext)return;this.selectedPluginAgentMode=this.pluginAgentModes.find((A)=>A.key===this.widget.initialPluginAgentModeKey)??null}didUpdateWidget(A){if(A.configService!==this.widget.configService)this.subscribeToCopyOnSelectEnabled();if(HQ.of(this.context).pluginService!==HQ.of(this.context).pluginService)this.subscribeToPluginAgentModes();if(A.threadContext?.client!==this.widget.threadContext?.client)if(this.isEditorUploadLocked=!1,!this.widget.threadContext)this.previousThreadIDForReference=A.threadContext?.client.getThreadId()??null,this.useLocalEnvironmentFallbackForActiveThread=!0;else this.previousThreadIDForReference=null,this.useLocalEnvironmentFallbackForActiveThread=A.threadContext===null}dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=null,this.pluginAgentModesSubscription?.unsubscribe(),this.pluginAgentModesSubscription=null,this.statusMessageTimer)clearTimeout(this.statusMessageTimer),this.statusMessageTimer=null}updateGitBranch=async()=>{let A=HQ.of(this.context).workspaceRoot,Q=await KF6(A);if(!this.mounted)return;this.setState(()=>{this.currentGitBranch=Q})};subscribeToPluginAgentModes(){this.pluginAgentModesSubscription?.unsubscribe(),this.pluginAgentModesSubscription=null;let A=HQ.of(this.context).pluginService?.agentModes;if(!A){this.syncPluginAgentModes([]);return}this.syncPluginAgentModes(A.list()),this.pluginAgentModesSubscription=A.changed.subscribe({next:()=>this.syncPluginAgentModes(A.list())})}syncPluginAgentModes(A){this.setState(()=>{if(this.pluginAgentModes=A,this.selectedPluginAgentMode&&!A.some((Q)=>Q.key===this.selectedPluginAgentMode?.key))this.selectedPluginAgentMode=null}),this.refreshCommands()}refreshCommands(){this.unregisterCommands?.(),this.unregisterCommands=this.registerCommands()}registerCommands(){let A=eB.of(this.context),Q=HQ.of(this.context),$=this,B=()=>{return $.widget.threadContext??null},E=()=>{let Z=$.widget.threadContext?.client.getThreadId();if(!Z)return null;return dG(new URL(Q.ampURL),Z).toString()},D=lG(void 0,{isInternalUser:Q.isInternalUser}).map(({mode:Z})=>({noun:"mode",verb:`use ${Z}`,description:`Enable ${Z} mode`,get status(){if($.widget.threadContext)return{type:"hidden"};if(Z===$.agentMode)return{type:"disabled",reason:`Already using ${Z} mode`};return{type:"enabled"}},run:(F,X,I)=>{$.setAgentMode(Z),I()}})),J=this.pluginAgentModes.map((Z)=>({noun:"mode",verb:`use ${Z.label}`,description:Z.description??`Enable ${Z.label} mode`,get status(){if($.widget.threadContext)return{type:"hidden"};if(Z.key===$.selectedPluginAgentMode?.key)return{type:"disabled",reason:`Already using ${Z.label} mode`};return{type:"enabled"}},run:(F,X,I)=>{$.setPluginAgentMode(Z),I()}})),Y=[...D,...J,{noun:"speed",get verb(){if($.isFastSpeedEnabled())return"disable fast";let Z=$.speedCostMultiplierLabel();return Z?`use fast (${Z} cost)`:"use fast"},description:"Toggle fast speed for this thread",get status(){return $.speedToggleCommandStatus()},run:(Z,F,X)=>{$.toggleSpeed(),X()}},{noun:"thread",verb:"toggle details",description:"Expand or collapse tool and activity details",keywords:["expand","thinking"],shortcut:HA.alt("t"),status:{type:"enabled"},run:(Z,F,X)=>{$.toggleWorkDetails(),X()}},{noun:"mode",verb:"toggle reasoning effort",description:"Cycle reasoning effort for the active model",shortcut:HA.alt("d"),get status(){if($.widget.threadContext)return{type:"hidden"};return nC($.currentCommandAgentMode())?{type:"enabled"}:{type:"hidden"}},run:(Z,F,X)=>{$.toggleReasoningEffort(),X()}},{noun:"thread",verb:"copy ID",description:"Copy thread ID to clipboard",get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;N4.maybeInvoke(F,new ZB(I,"Thread ID copied to clipboard","Failed to copy thread ID")),X()}},{noun:"thread",verb:"copy URL",description:"Copy thread URL to clipboard",keywords:["share"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=E();if(!I)return;N4.maybeInvoke(F,new ZB(I,"Thread URL copied to clipboard","Failed to copy thread URL")),X()}},{noun:"thread",verb:"copy markdown",description:"Copy thread as Markdown",get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;(async()=>{try{let G=await Q.getThreadMarkdown(I);if(!G){EQ.error(F,"Failed to copy thread markdown");return}N4.maybeInvoke(F,new ZB(G,"Thread markdown copied to clipboard","Failed to copy thread markdown"))}catch(G){S.error("Failed to render thread markdown from Neo command palette",{error:G,threadID:I}),EQ.error(F,"Failed to copy thread markdown")}finally{X()}})()}},{noun:"thread",verb:"analyze context",description:"Show token usage by prompt section for this thread",keywords:["tokens"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I)return;Z.push(new Mc0({threadID:I,analyzeContext:$.widget.analyzeContextForThread,onDismiss:X}))}},{noun:"skills",verb:"list",description:"List available skills for this thread",get status(){return{type:"enabled"}},run:(Z,F,X)=>{let I=B()?.client.getThreadId();if(!I){Z.push(new m90({status:{kind:"no-thread"},onDismiss:X,cwd:Q.workspaceRoot}));return}Z.push(new pc0({listSkills:(G)=>$.widget.listSkillsForThread(I,G),onDismiss:X,cwd:Q.workspaceRoot}))}},{noun:"thread",verb:"new",description:"Start new thread",keywords:["create","start"],sortBoost:101,get status(){if($.isEditorUploadLocked)return{type:"disabled",reason:"Prompt editor is not available"};return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"Already on a new thread"}},run:(Z,F)=>{if($.isEditorUploadLocked)return;N4.maybeInvoke(F,new Xl)}},{noun:"thread",verb:"open in browser",description:"Open thread in browser",keywords:["web"],get status(){return $.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:async(Z,F,X)=>{let I=E();if(!I)return;try{await t6(F,I)}finally{X()}}},VR4({sendFeedbackReport:(Z)=>{return this.widget.sendFeedbackReport(Z)}},B),_j4({archiveThread:(Z)=>this.widget.archiveThread(Z)},B),FR4(B),BR4({configService:this.widget.configService,addLabel:(Z,F)=>this.widget.addThreadLabel(Z,F)},B),JR4({configService:this.widget.configService,removeLabel:(Z,F)=>this.widget.removeThreadLabel(Z,F)},B)].map((Z)=>A.register(Z));return()=>{for(let Z of Y)Z()}}currentCommandAgentMode(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.agentMode;return this.widget.threadContext?.observer.agentMode??this.agentMode}currentThreadSettings(){return this.widget.threadContext?.observer.threadSettings().getValue()??this.widget.draftThreadSettings}currentCommandSpeedModel(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.selectedPluginAgentMode.agent.model;return _$(this.currentCommandAgentMode())?.primaryModel}currentCommandModeLabel(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return this.selectedPluginAgentMode.label;return this.currentCommandAgentMode()}currentSpeedSettingKey(){let A=this.currentCommandSpeedModel();return A?C50(A):void 0}speedCostMultiplierLabel(){let A=this.currentCommandSpeedModel();return A?Py0(A):void 0}isFastSpeedEnabled(){let A=this.currentSpeedSettingKey();return A!==void 0&&this.currentThreadSettings()[A]==="fast"}speedToggleCommandStatus(){if(this.currentSpeedSettingKey()===void 0)return{type:"hidden"};return{type:"enabled"}}updateThreadSettings(A){let Q=this.widget.threadContext;if(Q){let $=Q.observer.threadSettings().getValue()??{},B=A($);return Q.client.sendClientUpdateThreadSettings(B),this.widget.updateDraftThreadSettings(()=>B),"handled"}return this.widget.updateDraftThreadSettings(A),"handled"}toggleSpeed(){return this.setSpeed(this.isFastSpeedEnabled()?"normal":"fast")}setSpeed(A){let Q=this.currentSpeedSettingKey();if(Q===void 0)return"ignored";let $=A==="normal"?"standard":"fast",B=this.updateThreadSettings((E)=>{return{...E,[Q]:$}});if(!(this.selectedPluginAgentMode&&!this.widget.threadContext))this.rememberSpeedForMode(this.currentCommandAgentMode(),$);if(A==="fast")this.showFastModeToast();return B}showFastModeToast(){let A=EQ.maybeOf(this.context);if(!A)return;if(this.fastModeToastID!==null)A.dismiss(this.fastModeToastID);let Q=this.currentCommandModeLabel(),$=this.speedCostMultiplierLabel()??"2.5x";this.fastModeToastID=A.show(`↯${Q} costs ${$} the standard rate for this mode`,"warning",XF6)}dismissFastModeToast(){if(this.fastModeToastID===null)return;EQ.maybeOf(this.context)?.dismiss(this.fastModeToastID),this.fastModeToastID=null}toggleWorkDetails(){return this.expansion.toggle(!1),"handled"}rememberReasoningEffortForMode(A,Q){let $=HQ.of(this.context);$.lastReasoningEffortByMode={...$.lastReasoningEffortByMode??{},[A]:Q}}rememberSpeedForMode(A,Q){let $=HQ.of(this.context);$.lastSpeedByMode={...$.lastSpeedByMode??{},[A]:Q}}applyStickySpeedForMode(A,Q){let $=Yq(Q),B=H50(HQ.of(this.context),Q);if($===void 0||B===void 0)return A;return{...A,[$]:B}}toggleReasoningEffort(){if(this.selectedPluginAgentMode&&!this.widget.threadContext)return"ignored";let A=this.currentCommandAgentMode(),Q=nC(A);if(!Q)return"ignored";return this.updateThreadSettings(($)=>{let B=vy0(A,$,this.configSettingsForReasoning),E=gbA(Q,B);return this.rememberReasoningEffortForMode(A,E),{...$,"reasoning.effort":E}})}onPromptSubmitted=(A)=>{this.widget.history.add(A,FF6.cwd()),this.resetHistory()};handleEditorUploadLockChange=(A)=>{if(this.isEditorUploadLocked===A)return;this.setState(()=>{this.isEditorUploadLocked=A})};resetHistory(){this.widget.history.reset()}setAgentMode=(A)=>{if(this.widget.threadContext)return;if(A!==this.agentMode)this.dismissFastModeToast();this.setState(()=>{this.agentMode=A,this.selectedPluginAgentMode=null}),this.widget.updateDraftThreadSettings((Q)=>{let $=jy0(HQ.of(this.context),A),B={...Q};delete B["reasoning.effort"];let E=$??vy0(A,B,this.configSettingsForReasoning);if(E===void 0){let D={...Q};return delete D["reasoning.effort"],this.applyStickySpeedForMode(D,A)}return this.applyStickySpeedForMode({...Q,"reasoning.effort":E},A)})};setPluginAgentMode=(A)=>{if(this.widget.threadContext)return;this.dismissFastModeToast(),this.setState(()=>{this.selectedPluginAgentMode=A})};buildActions(){let A=new pA((B)=>{return this.setAgentMode(B.mode),"handled"}),Q=new pA(()=>{return this.toggleReasoningEffort()}),$=new pA(()=>{return this.toggleWorkDetails()});return new Map([[lh0,A],[_q,Q],[g70,$]])}build(A){let Q=this.widget.threadContext,$=HQ.of(A),B=WR4(this.selectedPluginAgentMode?.color),E=zF6($.workspaceRoot,this.currentGitBranch),J=[Q?new wc0({editorController:this.widget.editorController,editorFocusNode:this.widget.editorFocusNode,copyOnSelectEnabled:this.copyOnSelectEnabled,observingClient:{client:Q.client,observer:Q.observer,agentModeDisplay:Q.agentModeDisplay},hints:this.widget.hints,ideStatus:this.widget.ideStatus,statusItems:this.widget.statusItems,pluginConfirmationBlocked:this.widget.pluginConfirmationBlocked,onPromptSubmitted:this.onPromptSubmitted,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,notificationService:this.widget.notificationService??IF6,environmentFallback:this.useLocalEnvironmentFallbackForActiveThread?E:null}):new mc0({agentMode:this.agentMode,pluginAgentModes:this.pluginAgentModes,selectedPluginAgentMode:this.selectedPluginAgentMode,agentModeLabel:this.selectedPluginAgentMode?.label,pluginAgentModeURI:this.selectedPluginAgentMode?.sourceURI,agentModeColor:GF6(this.selectedPluginAgentMode?.color),splashPrimaryColor:B?VF6(B):void 0,splashSecondaryColor:B,threadSettings:this.widget.draftThreadSettings,configSettings:this.configSettingsForReasoning,editorController:this.widget.editorController,editorFocusNode:this.widget.editorFocusNode,visibility:null,onNewThread:this.widget.onNewThread,onAgentModeChange:this.setAgentMode,onPluginAgentModeChange:this.setPluginAgentMode,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,previousThreadIDForReference:this.previousThreadIDForReference,hints:this.widget.hints,ideStatus:this.widget.ideStatus,statusItems:this.widget.statusItems,configService:this.widget.configService,environment:E,notice:this.widget.notice??null,onDismissNotice:this.widget.onDismissNotice??(()=>{}),statusMessage:this.statusMessage})],U=new Map([[HA.alt("t"),new g70]]);return new N4({actions:this.buildActions(),child:new pQ({debugLabel:"ThreadShortcuts",shortcuts:U,child:new xv({history:this.isEditorUploadLocked?void 0:this.widget.history,child:new zJ({controller:this.expansion,child:new QQ({children:J})})})})})}subscribeToCopyOnSelectEnabled(){this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=this.widget.configService.config.subscribe((A)=>{let Q=A.settings["terminal.copyOnSelect"]??!0,$=A.settings["internal.model"],B=this.configSettingsForReasoning["internal.model"]!==$;if($===void 0)this.configSettingsForReasoning={};else this.configSettingsForReasoning={"internal.model":$};if(this.copyOnSelectEnabled===Q&&!B)return;if(this.copyOnSelectEnabled=Q,this.mounted)this.setState()})}}a0();d8();J4();class QI extends G4{direction;constructor(A){super();this.direction=A}}class d90 extends G4{}class zi extends G4{}class c90 extends G4{index;constructor(A){super();this.index=A}}function ic0(A){return A.length+2}class nc0 extends p0{props;constructor(A){super();this.props=A}createState(){return new HR4}}class HR4 extends c0{selectedIndex=0;initState(){super.initState(),this.selectedIndex=this.findSelectableIndex(this.widget.props.initialSelectedIndex??0)}didUpdateWidget(A){this.selectedIndex=this.findSelectableIndex(this.selectedIndex)}isSelectable(A){let Q=this.widget.props.entries[A];return Q?.type==="item"&&(Q.enabled??!0)}findSelectableIndex(A){let{entries:Q}=this.widget.props;if(Q.length===0)return 0;let $=Math.max(0,Math.min(A,Q.length-1));if(this.isSelectable($))return $;for(let B=1;B<Q.length;B++){let E=$+B;if(E<Q.length&&this.isSelectable(E))return E;let D=$-B;if(D>=0&&this.isSelectable(D))return D}return 0}moveSelection(A){let Q=this.findNextSelectableIndex(A);if(Q===this.selectedIndex)return;this.setState(()=>{this.selectedIndex=Q})}findNextSelectableIndex(A){let{entries:Q}=this.widget.props;for(let $=this.selectedIndex+A;$>=0&&$<Q.length;$+=A)if(this.isSelectable($))return $;return this.selectedIndex}acceptIndex(A){let Q=this.widget.props.entries[A];if(Q?.type!=="item"||!(Q.enabled??!0))return;this.setState(()=>{this.selectedIndex=A}),this.widget.props.onAccept(Q.value)}invoke=(A)=>{if(A instanceof QI)return this.moveSelection(A.direction),"handled";if(A instanceof d90)return this.acceptIndex(this.selectedIndex),"handled";if(A instanceof zi)return this.widget.props.onDismiss(),"handled";if(A instanceof c90)return this.acceptIndex(A.index),"handled";return"ignored"};buildShortcuts(){let A=new Map([[HA.key("ArrowDown"),new QI(1)],[HA.key("j"),new QI(1)],[HA.ctrl("n"),new QI(1)],[HA.key("ArrowUp"),new QI(-1)],[HA.key("k"),new QI(-1)],[HA.ctrl("p"),new QI(-1)],[HA.key("Enter"),new d90],[HA.key("Escape"),new zi],[HA.ctrl("."),new zi]]);return this.widget.props.entries.forEach((Q,$)=>{if(Q.type==="item"&&Q.shortcut)A.set(Q.shortcut,new c90($))}),A}buildActions(){return new Map([[QI,new pA(this.invoke)],[d90,new pA(this.invoke)],[zi,new pA(this.invoke)],[c90,new pA(this.invoke)]])}build(A){let Q=EA.of(A),$=WF6(this.widget.props.entries,W4.of(A).supportsEmojiWidth);return new WA({width:this.widget.props.width,height:ic0(this.widget.props.entries),decoration:new c1(Q.colors.background,W1.all(new C1(Q.colors.border,1,"solid"))),child:new N4({actions:this.buildActions(),child:new pQ({debugLabel:"ContextPickerShortcuts",shortcuts:this.buildShortcuts(),child:new cQ({autofocus:!0,debugLabel:"ContextPicker",child:new IA({mainAxisSize:"min",crossAxisAlignment:"stretch",children:this.widget.props.entries.map((B,E)=>this.buildEntry(B,E,$,Q))})})})})})}buildEntry(A,Q,$,B){if(A.type==="separator")return new WA({height:1,decoration:{border:new W1(new C1(B.colors.border,1,"solid"))}});let E=Q===this.selectedIndex,D=A.enabled??!0,J=new $0({color:E?B.app.selectionForeground:B.colors.foreground,dim:!D}),U=new $0({color:E?B.app.selectionForeground:B.app.keybind,bold:!0,dim:!D});return new iA({onClick:()=>this.acceptIndex(Q),child:new WA({padding:n0.symmetric(1,0),decoration:E?new c1(B.app.selectionBackground):void 0,child:new LA({crossAxisAlignment:"start",children:[new L4({child:new D0({text:new h(A.label,J),maxLines:1,overflow:"ellipsis"})}),new y0({width:1}),new y0({width:$,child:new D0({text:new h(NR4(A),U),textAlign:"right",maxLines:1,overflow:"ellipsis"})})]})})})}}function WF6(A,Q){return A.reduce(($,B)=>{return B.type==="item"?Math.max($,cA(NR4(B),Q)):$},0)}function NR4(A){return A.shortcutLabel??A.shortcut?.toString().toLowerCase()??""}var CF6=36,HF6=24,NF6=72;class qR4 extends p0{child;onContext;constructor(A,Q){super();this.child=A;this.onContext=Q}createState(){return new uR4}}class uR4 extends c0{build(A){return this.widget.onContext(A),this.widget.child}}function wR4(A){if(A==="Just now")return"1m";return A.replace(/ ago$/,"")}function qF6(A){return A.reduce((Q,$)=>Math.max(Q,cA(wR4($.description.timeAgo))),0)}function MR4(A){return Math.max(HF6,Math.min(A,NF6))}class ac0 extends G4{}class oc0 extends G4{}class rc0 extends G4{}class sc0{options;focusScopeNode=new B8({debugLabel:"ThreadListSidebar"});initialized=!1;visible=!1;hasRenderedSidebar=!1;width=CF6;pickerController=new tp;constructor(A){this.options=A}isVisible(){return this.ensureInitialized(),this.visible}visibleWidth(){return this.isVisible()?this.width:0}buildBody(A){return new LA({crossAxisAlignment:"stretch",children:[this.buildSlot(),new L4({child:A})]})}buildSlot(){let A=this.isVisible();if(!this.hasRenderedSidebar)return new y0({width:0});let Q={activeThreadID:this.options.getActiveThreadID(),currentWorkspaceURI:$4(m0.file(this.options.getWorkspaceRoot())),width:this.width,loadThreads:this.options.loadThreads,pickerController:this.pickerController,onSelectThread:this.options.onSelectThread,onDismiss:this.close,onResizeWidth:this.resize};if(this.options.observeThreadSummaries)Q.observeThreadSummaries=this.options.observeThreadSummaries;return new y0({width:A?this.width:0,child:new c6({focusScopeNode:this.focusScopeNode,debugLabel:"ThreadListSidebar",onFocusChange:this.handleFocusChange,child:new OR4(Q)})})}commands(){return[{noun:"thread",verb:"toggle sidebar",description:"Show or hide the thread sidebar",shortcut:HA.alt("s"),status:{type:"enabled"},run:(A,Q,$)=>{$(),this.toggleVisibility()}}]}shortcutEntries(){return[[HA.alt("s"),new d70]]}actionEntries(){return[[d70,new pA(()=>this.toggleFromShortcut())]]}toggleFromShortcut=()=>{if(this.isVisible()){if(this.focusScopeNode.hasFocus)return this.close(),"handled";if(this.options.isBlocked())return"ignored";return this.pickerController.requestFocus(),"handled"}if(this.options.isBlocked())return"ignored";return this.pickerController.requestFocus(),this.setVisible(!0),"handled"};toggleVisibility=()=>{if(this.isVisible()){this.close();return}if(this.options.isBlocked())return;this.pickerController.requestFocus(),this.setVisible(!0)};close=()=>{this.options.focusMainContent(),this.setVisible(!1)};setVisible(A){if(this.ensureInitialized(),this.visible===A)return;if(A)this.hasRenderedSidebar=!0;this.options.state.setState(()=>{this.visible=A}),JJ((Q)=>({...Q,threadListSidebarVisible:A})).catch((Q)=>{S.warn("Failed to save thread sidebar visibility state",{error:Q instanceof Error?Q.message:String(Q)})})}ensureInitialized(){if(this.initialized)return;this.initialized=!0,this.visible=this.options.getInitialVisible(),this.hasRenderedSidebar=this.visible}handleFocusChange=(A)=>{this.options.state.setState()};dispose(){this.focusScopeNode.dispose()}resize=(A)=>{let Q=MR4(A);if(Q===this.width)return;this.options.state.setState(()=>{this.width=Q})}}class OR4 extends p0{props;constructor(A){super();this.props=A}createState(){return new LR4}}class LR4 extends c0{threads=[];isLoading=!0;isSwitchingThread=!1;hasError=!1;filterByWorkspace=!0;contextMenu=null;pendingThreadMutations=new Map;canonicalThreadSummariesByID=new Map;archivedCanonicalThreadIDs=new Set;liveThreadSummaries=null;resizeSession=null;isResizeHandleHovered=!1;threadItemContexts=new Map;threadSummarySubscription=null;observedThreadSummaries;shortcuts=new Map([[HA.alt("w"),new ac0],[HA.ctrl("."),new oc0],[HA.key("e"),new rc0]]);actions=new Map([[ac0,new pA(()=>{return this.setState(()=>{this.filterByWorkspace=!this.filterByWorkspace,this.contextMenu=null}),"handled"})],[oc0,new pA(()=>this.openContextMenu())],[rc0,new pA(()=>this.archiveSelectedThread())]]);get isBusy(){return this.isLoading}get isResizeActive(){return this.resizeSession!==null||this.isResizeHandleHovered}didUpdateWidget(A){if(super.didUpdateWidget(A),this.contextMenu&&(A.props.width!==this.widget.props.width||A.props.currentWorkspaceURI!==this.widget.props.currentWorkspaceURI))this.contextMenu=null;if(A.props.observeThreadSummaries!==this.widget.props.observeThreadSummaries)this.startThreadSummaryUpdates()}initState(){super.initState(),this.startThreadSummaryUpdates()}dispose(){this.threadSummarySubscription?.unsubscribe(),this.threadSummarySubscription=null,super.dispose()}startThreadSummaryUpdates(){this.threadSummarySubscription?.unsubscribe(),this.threadSummarySubscription=null,this.liveThreadSummaries=null,this.observedThreadSummaries=this.widget.props.observeThreadSummaries;let A=this.widget.props.observeThreadSummaries;if(!A){this.loadThreadSummaries();return}let Q=A();if(!Q){this.loadThreadSummaries();return}this.loadThreadSummaries(),this.threadSummarySubscription=Q.subscribe({next:($)=>this.applyLiveThreadSummaries($),error:($)=>{if(S.error("Failed to observe threads for Neo sidebar",{error:$}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}})}async loadThreadSummaries(){let A=this.observedThreadSummaries;try{let Q=await this.widget.props.loadThreads(),$=nd0(Q);if(!this.mounted||A!==this.observedThreadSummaries)return;this.archivedCanonicalThreadIDs.clear();for(let B of Q)if(B.archived)this.archivedCanonicalThreadIDs.add(B.id);this.applyCanonicalThreadSummaries($)}catch(Q){if(S.error("Failed to load threads for Neo sidebar",{error:Q}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}}applyCanonicalThreadSummaries(A){this.canonicalThreadSummariesByID.clear();for(let Q of A)this.canonicalThreadSummariesByID.set(Q.id,Q);this.applyThreadSummaries(this.liveThreadSummaries?this.mergeLiveMetadata():A)}applyLiveThreadSummaries(A){this.liveThreadSummaries=A;let Q=this.mergeLiveMetadata();if(Q.length===0&&this.canonicalThreadSummariesByID.size===0&&this.isLoading)return;this.applyThreadSummaries(Q)}mergeLiveMetadata(){let A=new Map((this.liveThreadSummaries??[]).map((B)=>[B.id,B])),Q=(this.liveThreadSummaries??[]).flatMap((B)=>{if(this.archivedCanonicalThreadIDs.has(B.id))return[];let E=this.canonicalThreadSummariesByID.get(B.id);if(!E){if(!B.updatedAt)return[];return[B]}return[this.mergeLiveThreadSummary(E,B)]}),$=Array.from(this.canonicalThreadSummariesByID.values()).filter((B)=>!A.has(B.id));return[...Q,...$]}mergeLiveThreadSummary(A,Q){return{...A,...Q,updatedAt:Q.updatedAt??A.updatedAt,description:Q.updatedAt?Q.description:A.description,workspaceURI:A.workspaceURI,relationships:A.relationships,diffStats:A.diffStats,agentMode:A.agentMode,details:A.details,archived:A.archived}}applyThreadSummaries(A){if(!this.mounted)return;this.setState(()=>{let Q=this.widget.props.pickerController.selectedItem?.id??this.widget.props.activeThreadID;this.widget.props.pickerController.selectedItem=A.find(($)=>$.id===Q)??A.find(($)=>$.id===this.widget.props.activeThreadID)??null,this.threads=A,this.isLoading=!1,this.hasError=!1})}handleSelectThread=async(A)=>{if(this.isSwitchingThread)return;this.setState(()=>{this.isSwitchingThread=!0});try{await this.widget.props.onSelectThread(A)}catch(Q){S.error("Failed to switch thread from Neo sidebar",{error:Q,threadID:A})}finally{if(this.mounted)this.setState(()=>{this.isSwitchingThread=!1})}};getOptimisticThreads(){return this.threads.flatMap((A)=>{if(this.pendingThreadMutations.get(A.id)?.kind==="archive")return[];return[A]})}getThreadsForDisplay(){let A=this.getOptimisticThreads();return this.filterByWorkspace?A.filter((Q)=>!Q.workspaceURI||Q.workspaceURI===this.widget.props.currentWorkspaceURI):A}buildContextMenuEntries(){return[{type:"item",value:"archive",label:"Archive Thread",shortcut:HA.key("a"),shortcutLabel:"a"},{type:"separator"},{type:"item",value:"copy-id",label:"Copy ID",shortcut:HA.ctrl("c"),shortcutLabel:"ctrl+c"},{type:"item",value:"copy-url",label:"Copy URL",shortcut:new HA("c",{shift:!0,ctrl:!0}),shortcutLabel:"shift+ctrl+c"}]}openContextMenu(){let A=this.widget.props.pickerController.selectedItem;if(!A||this.isBusy||this.isSwitchingThread||this.hasError)return"ignored";let Q=this.buildContextMenuEntries(),$=ic0(Q),B=this.getContextMenuWidth(),E=this.getContextMenuPosition(A.id,$,B);return this.setState(()=>{this.contextMenu={threadID:A.id,left:E.left,top:E.top,width:B,height:$}}),"handled"}archiveSelectedThread(){let A=this.widget.props.pickerController.selectedItem?.id;if(!A||this.contextMenu||this.isBusy||this.isSwitchingThread||this.hasError)return"ignored";return this.archiveThread(A),"handled"}getContextMenuWidth(){let A=Math.max(24,this.widget.props.width-3);return Math.max(1,Math.min(A,this.widget.props.width-2))}getContextMenuPosition(A,Q,$){let B=Math.max(0,Math.min(2,this.widget.props.width-$)),E=1,D=this.threadItemContexts.get(A)?.findRenderObject(),J=this.context.findRenderObject();if(!(D instanceof bA)||!(J instanceof bA))return{left:B,top:1};let U=D.localToGlobal({x:0,y:0}),Y=J.localToGlobal({x:0,y:0}),Z=U.y-Y.y,F=Z+D.size.height,X=W4.sizeOf(this.context).height,I=Math.max(1,Math.min(J.size.height,X-Y.y)),K=I-F>=Q||Z<I/2?F:Z-Q,z=Math.max(0,I-Q);return{left:B,top:Math.max(0,Math.min(K,z))}}closeContextMenu=()=>{if(!this.contextMenu)return;this.setState(()=>{this.contextMenu=null})};handleContextMenuAccept=(A)=>{let Q=this.contextMenu?.threadID;if(!Q)return;if(this.closeContextMenu(),A==="archive"){this.archiveThread(Q);return}if(A==="copy-id"){N4.maybeInvoke(this.context,new ZB(Q,"Thread ID copied to clipboard","Failed to copy thread ID"));return}N4.maybeInvoke(this.context,new ZB(this.getThreadURL(Q),"Thread URL copied to clipboard","Failed to copy thread URL"))};beginOptimisticArchive(A){if(this.pendingThreadMutations.has(A))return!1;if(!this.threads.some(($)=>$.id===A))return!1;let Q={kind:"archive",fallbackSelectedThreadID:null};return this.setState(()=>{this.pendingThreadMutations.set(A,Q)}),z6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;let $=this.pendingThreadMutations.get(A);if($?.kind!=="archive")return;$.fallbackSelectedThreadID=this.widget.props.pickerController.selectedItem?.id??null}),!0}commitOptimisticArchive(A){if(this.pendingThreadMutations.get(A)?.kind!=="archive")return;this.pendingThreadMutations.delete(A),this.canonicalThreadSummariesByID.delete(A),this.threads=this.threads.filter(($)=>$.id!==A)}rollbackOptimisticArchive(A){let Q=this.pendingThreadMutations.get(A);if(Q?.kind!=="archive")return;let $=this.threads.find((B)=>B.id===A);if(!$){this.pendingThreadMutations.delete(A);return}this.setState(()=>{this.pendingThreadMutations.delete(A);let B=this.widget.props.pickerController.selectedItem?.id??null;if(B===null||B===Q.fallbackSelectedThreadID)this.widget.props.pickerController.selectedItem=$})}async archiveThread(A){let Q=EQ.maybeOf(this.context),{configService:$}=HQ.of(this.context);if(!this.beginOptimisticArchive(A))return;try{let B=await H70({configService:$},A);if(!this.mounted)return;if(B){this.rollbackOptimisticArchive(A),Q?.show(B.message,"error");return}this.commitOptimisticArchive(A),Q?.show("Archived thread")}catch(B){if(S.error("Failed to archive thread from Neo sidebar context menu",{error:B,threadID:A}),!this.mounted)return;this.rollbackOptimisticArchive(A),Q?.show("Failed to archive thread","error")}}getThreadURL(A){return dG(new URL(HQ.of(this.context).ampURL),A).toString()}buildContextMenuOverlay(){let A=this.contextMenu;if(!A||!this.getThreadsForDisplay().some((Q)=>Q.id===A.threadID))return null;return new r1({left:A.left,top:A.top,width:A.width,height:A.height,child:new c6({debugLabel:"ThreadListSidebarContextMenu",onFocusChange:(Q)=>{if(!Q)this.closeContextMenu()},child:new nc0({entries:this.buildContextMenuEntries(),width:A.width,onAccept:this.handleContextMenuAccept,onDismiss:this.closeContextMenu})})})}buildContextMenuBackdrop(){return new r1({left:0,top:0,right:0,bottom:0,child:new iA({onClick:()=>this.closeContextMenu(),child:y0.expand()})})}buildThreadItem(A,Q,$,B){let E=EA.of(B),{app:D,colors:J}=E,U=A.id===this.widget.props.activeThreadID,Y=!Q&&!U,Z=Q?D.selectionForeground:J.foreground,F=Q?D.selectionForeground:J.mutedForeground,I=A.agentState!==void 0&&A.agentState!=="idle"?new eX({color:Q?D.selectionForeground:J.primary}):void 0,G=wR4(A.description.timeAgo);return new qR4(new WA({padding:n0.symmetric(1,0),child:new LA({children:[new y0({width:2,child:I}),new L4({child:new D0({text:new h(A.title,new $0({color:Z,dim:Y})),overflow:"ellipsis",maxLines:1})}),new y0({width:2}),new y0({width:$,child:LA.end([new D0({text:new h(G,new $0({color:F,dim:Y}))})])})]})}),(V)=>{this.threadItemContexts.set(A.id,V)})}handleResizeHandlePress=(A)=>{if(A.button!=="left")return;this.setState(()=>{this.resizeSession={baseWidthColumns:this.widget.props.width,startColumn:Math.floor(A.position.x)}})};handleResizeHandleDrag=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;let Q=Math.floor(A.position.x)-this.resizeSession.startColumn,$=MR4(this.resizeSession.baseWidthColumns+Q);if($!==this.widget.props.width)this.widget.props.onResizeWidth($)};handleResizeHandleRelease=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;this.setState(()=>{this.resizeSession=null})};handleResizeHandleEnter=()=>{if(this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!0})};handleResizeHandleExit=()=>{if(!this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!1})};buildResizeHandle(){return new r1({top:0,right:0,bottom:0,width:1,child:new iA({cursor:d1.EW_RESIZE,onClick:this.handleResizeHandlePress,onDrag:this.handleResizeHandleDrag,onRelease:this.handleResizeHandleRelease,onEnter:this.handleResizeHandleEnter,onExit:this.handleResizeHandleExit,child:new y0({width:1})})})}build(A){let Q=EA.of(A),$=this.getThreadsForDisplay(),B=this.hasError?[]:$,E=qF6(B);this.threadItemContexts.clear();let D=this.isResizeActive?2:1,J=new W1(void 0,new C1(Q.colors.border,D),void 0,void 0),U=this.buildContextMenuOverlay(),Y=[new WA({decoration:new c1(Q.colors.background,J),child:new N4({actions:this.actions,child:new pQ({shortcuts:this.shortcuts,debugLabel:"ThreadListSidebarFilter",child:new R5({items:B,getLabel:(Z)=>`${Z.title} ${Z.id}`,controller:this.widget.props.pickerController,autofocus:!1,onAccept:(Z)=>void this.handleSelectThread(Z.id),onDismiss:this.widget.props.onDismiss,renderItem:(Z,F,X,I)=>this.buildThreadItem(Z,F,E,I),enabled:!this.isBusy,isLoading:this.isBusy,hidePrompt:!0,loadingText:"Loading threads...",emptyStateText:this.hasError?"Failed to load threads":void 0,emptyStateWidget:this.hasError?void 0:(Z)=>ld0(Z,this.filterByWorkspace),maxRenderItems:200,showBorder:!1})})})}),this.buildResizeHandle()];if(U)Y.push(this.buildContextMenuBackdrop()),Y.push(U);return new WA({width:this.widget.props.width,child:new QQ({fit:"expand",children:Y})})}}bB();class tc0 extends p0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new RR4}}class RR4 extends c0{toolboxes=new sB(this,[]);initState(){this.toolboxes.subscribe(this.widget.toolboxes)}didUpdateWidget(A){if(A.toolboxes!==this.widget.toolboxes)this.toolboxes.subscribe(this.widget.toolboxes)}build(A){return new PR4({toolboxes:this.toolboxes.getValue(),onDismiss:this.widget.onDismiss})}}class PR4 extends p0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new vR4}}class vR4 extends c0{scrollController=new G$;canScroll=!1;initState(){this.scrollController.followMode=!1,this.scrollController.jumpTo(0),this.scrollController.addListener(this.updateCanScroll)}dispose(){this.scrollController.removeListener(this.updateCanScroll),this.scrollController.dispose()}updateCanScroll=()=>{let A=this.scrollController.maxScrollExtent>0;if(A===this.canScroll)return;this.setState(()=>{this.canScroll=A})};build(A){return new B1({header:"Toolboxes",onDismiss:this.widget.onDismiss,minWidth:80,maxWidth:120,maxHeight:40,autofocus:!1,footer:uF6(this.canScroll),child:new PB({controller:this.scrollController,child:wF6(A,this.widget.toolboxes)})})}}function uF6(A){let Q=[{keys:["Esc"],label:"close"}];if(A)Q.push({keys:["↑↓","j/k"],label:"scroll"});return Q}function wF6(A,Q){let $=MF6(A,Q);return new IA({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new D0({text:new h("",void 0,$),selectable:!0})]})}function MF6(A,Q){let $=EA.of(A),{colors:B}=$,E=new $0({color:B.foreground,dim:!0}),D=new $0({color:B.foreground,bold:!0});if(Q.length===0)return[new h("No toolboxes found.",E)];let J=[];for(let U of Q){let Y=U.tools.length,Z=U.tools.filter((F)=>F.status==="registered").length;if(U.discovering){let F=U.tools.filter((X)=>X.status!=="pending").length;J.push(new h(U.path,D)),J.push(new h(` discovering ${F}/${Y}...
4426
4426
  `,E))}else if(J.push(new h(U.path,D)),Y>0)J.push(new h(` ${Z}/${Y} ${J1(Y,"tool")}
4427
4427
  `,E));else J.push(new h(`
4428
4428
  `));if(U.tools.length===0)J.push(new h(` └─ No tools available
4429
4429
  `,E));else for(let F of U.tools)OF6(J,F,$);J.push(new h(`
4430
4430
  `))}return J}function OF6(A,Q,$){let{colors:B,app:E}=$,D=LF6(Q.status,$);if(A.push(new h(` ${D.icon} `,new $0({color:D.color}))),A.push(new h(Q.name,new $0({color:Q.status==="pending"?B.warning:E.command}))),Q.status==="pending")A.push(new h(" discovering...",new $0({color:B.foreground,dim:!0})));else if(Q.description)A.push(new h(` ${jR4(Q.description,50)}`,new $0({color:B.foreground,dim:!0})));if(Q.error)A.push(new h(` ${jR4(Q.error,40)}`,new $0({color:E.toolError})));A.push(new h(`
4431
- `))}function LF6(A,Q){let{colors:$,app:B}=Q;switch(A){case"pending":return{icon:"◌",color:$.warning};case"registered":return{icon:"•",color:$.mutedForeground};case"failed":return{icon:"✗",color:B.toolError};case"duplicate":return{icon:"◇",color:$.warning};default:return{icon:"?",color:$.foreground}}}function jR4(A,Q){let $=A.replace(/\s+/g," ").trim();if(cA($)<=Q)return $;let B="...",E=cA(B);if(Q<=E)return Q8(B,Q);return`${Q8($,Q-E,!0,"")}${B}`}var Qp0="https://ampcode.com/news/neo",$p0=[{title:"Meet the new Amp CLI",body:[]},{title:"Rebuilt From The Ground Up",body:["Same close-up terminal workflow. Completely different underneath."]},{title:"Just Keep Typing",body:["Context is summarized automatically at ~90%.","No handoff flow. No context percentage to babysit."]},{title:"Queueing and Steering",body:["Sending a message now queues by default instead of cancelling tools.","Use steering when you want the agent to see something sooner."]},{title:"Remote Control",body:["Start a thread in the CLI, then keep going from ampcode.com.","Watch live updates and queue follow-ups from any device."]},{title:"Customize Amp with Amp",body:[{text:"Amp now has a ",linkText:"complete plugin API",href:"https://ampcode.com/manual/plugin-api",textAfter:"."},"Add tools, commands, control UI, and hook into events."]},{title:"Permissions",body:[{text:"By default (when no ",highlightText:"amp.permissions",textAfterHighlight:" setting is present), Amp no longer asks for confirmation before running any tools and commands. And you can now implement your own custom permission logic with ",linkText:"plugins",href:"https://ampcode.com/manual/plugin-api",textAfter:"."}]},{title:null,body:["Check out the full news post for more:",{text:Qp0,href:Qp0}]}];function jF6(A){return[{title:"Upgrade your Amp CLI",body:[{text:"This npm-based distribution of Amp CLI has been deprecated. To use the ",linkText:"new Amp CLI",href:Qp0,textAfter:" you'll need to switch to the binary install:",linkWidget:!0},"",{codeBlock:["npm uninstall -g @sourcegraph/amp",A]}]}]}function RF6(){if(process.platform==="win32")return'powershell -c "irm https://ampcode.com/install.ps1 | iex"';return"curl -fsSL https://ampcode.com/install.sh | bash"}var hv=50,tq=40,ec0=1000,PF6=420,vF6=760,TF6=-250,_F6=1100,p90=33,TR4=0.999,SF6=2.1,kF6=720,fF6=420,hR4="Meet the new",gR4="Amp",mR4="CLI",Bp0=B4(hR4).length,xF6=B4(gR4).length,yF6=B4(mR4).length,l90={primary:{r:140,g:38,b:0},secondary:{r:255,g:225,b:102}},_R4={primary:{r:10,g:42,b:18},secondary:{r:200,g:230,b:68}},SR4={primary:{r:18,g:0,b:107},secondary:{r:103,g:255,b:168}},kR4=[l90,_R4,SR4,l90,_R4,SR4,l90],bF6=l90;class Ep0 extends p0{onDismiss;onQuit;animationProgress;animationsEnabled;variant;binaryInstallCommand;introStages;dismissible;constructor(A){super();this.onDismiss=A.onDismiss,this.onQuit=A.onQuit,this.animationProgress=A.animationProgress,this.animationsEnabled=A.animationsEnabled??!0,this.variant=A.variant??"intro",this.binaryInstallCommand=A.binaryInstallCommand??RF6(),this.introStages=this.variant==="npm-migration"?jF6(this.binaryInstallCommand):$p0,this.dismissible=this.variant!=="npm-migration"}createState(){return new dR4}}class dR4 extends c0{startedAt=performance.now();animationTimer=null;stageTransitionTimer=null;firstStageTitleTimer=null;firstStageHintTimer=null;firstStageRevealTimer=null;firstStageTitleRevealStartedAt=null;firstStageHintRevealStartedAt=null;stageTransitionStartedAt=performance.now();animationStartProgress=0;animationTargetProgress=1;animationDurationMs=ec0;onAnimationComplete=null;animationProgress=0;introStage=0;previousIntroStage=null;stageTransitionProgress=1;stageTransitionDirection=1;firstStageTitleVisible=!1;firstStageHintVisible=!1;firstStageTitleRevealProgress=0;firstStageHintRevealProgress=0;dismissTimer=null;dismissStartedAt=performance.now();dismissProgress=0;isDismissing=!1;splashOrbGlow=new v5(42);initState(){super.initState(),this.startAnimationIfNeeded()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.animationProgress!==this.widget.animationProgress||A.animationsEnabled!==this.widget.animationsEnabled)this.startAnimationIfNeeded()}dispose(){this.stopAnimation(),this.stopStageTransitionTimer(),this.stopFirstStageRevealTimers(),this.stopDismissAnimation(),super.dispose()}startAnimationIfNeeded(){if(this.stopAnimation(),this.stopFirstStageRevealTimers(),this.widget.animationProgress!==void 0){this.animationProgress=SE(this.widget.animationProgress),this.firstStageTitleVisible=this.animationProgress>=TR4,this.firstStageHintVisible=this.animationProgress>=TR4,this.firstStageTitleRevealProgress=this.firstStageTitleVisible?1:0,this.firstStageHintRevealProgress=this.firstStageHintVisible?1:0;return}if(!this.widget.animationsEnabled){this.stopStageTransitionTimer(),this.stopDismissAnimation(),this.animationProgress=1,this.isDismissing=!1,this.dismissProgress=0,this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1,this.previousIntroStage=null,this.stageTransitionProgress=1;return}if(this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0,this.startProgressAnimation({from:0,to:1,durationMs:ec0,onComplete:()=>{if(!this.widget.dismissible)this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1})}}),this.widget.dismissible)this.startFirstStageRevealSequence()}startDismissAnimation(){if(this.isDismissing)return;if(!this.widget.animationsEnabled){this.widget.onDismiss();return}this.stopFirstStageRevealTimers(),this.stopStageTransitionTimer(),this.dismissStartedAt=performance.now(),this.setState(()=>{this.isDismissing=!0,this.dismissProgress=0}),this.dismissTimer=setInterval(()=>{let A=performance.now()-this.dismissStartedAt,Q=SE(A/vF6);if(this.setState(()=>{this.dismissProgress=Q}),Q>=1)this.stopDismissAnimation(),this.widget.onDismiss()},p90)}canNavigateIntroStage(){if(this.isDismissing)return!1;if(!this.firstStageHintVisible)return!1;if(this.introStage===0&&this.firstStageHintRevealProgress<1)return!1;return!0}advanceIntroStage(){if(!this.canNavigateIntroStage())return;if(this.isFinalIntroStage()){if(this.widget.dismissible)this.startDismissAnimation();return}this.moveIntroStage(1)}dismissFromFinalIntroStage(){if(!this.widget.dismissible||!this.canNavigateIntroStage()||!this.isFinalIntroStage())return!1;return this.startDismissAnimation(),!0}nextIntroStage(){if(!this.canNavigateIntroStage()||this.isFinalIntroStage())return;this.moveIntroStage(1)}goToPreviousIntroStage(){if(!this.canNavigateIntroStage()||this.introStage<=0)return;this.moveIntroStage(-1)}isFinalIntroStage(){return this.introStage>=this.widget.introStages.length-1}moveIntroStage(A){let Q=this.introStage+A;if(this.stopStageTransitionTimer(),this.stageTransitionStartedAt=performance.now(),this.setState(()=>{this.previousIntroStage=this.introStage,this.introStage=Q,this.stageTransitionDirection=A}),this.widget.animationProgress!==void 0||!this.widget.animationsEnabled){this.setState(()=>{this.previousIntroStage=null,this.stageTransitionProgress=1});return}this.setState(()=>{this.stageTransitionProgress=0}),this.stageTransitionTimer=setInterval(()=>{let $=performance.now()-this.stageTransitionStartedAt,B=SE($/PF6);if(this.setState(()=>{if(this.stageTransitionProgress=B,B>=1)this.previousIntroStage=null}),B>=1)this.stopStageTransitionTimer()},p90)}startProgressAnimation({from:A,to:Q,durationMs:$,onComplete:B}){this.stopAnimation(),this.startedAt=performance.now(),this.animationStartProgress=A,this.animationTargetProgress=Q,this.animationDurationMs=$,this.onAnimationComplete=B,this.animationProgress=A,this.animationTimer=setInterval(()=>{let E=performance.now()-this.startedAt,D=SE(E/this.animationDurationMs),J=this.animationStartProgress+(this.animationTargetProgress-this.animationStartProgress)*gv(D);if(this.setState(()=>{this.animationProgress=J}),D>=1)this.stopAnimation(),this.onAnimationComplete?.(),this.onAnimationComplete=null},p90)}stopAnimation(){if(this.animationTimer)clearInterval(this.animationTimer),this.animationTimer=null}stopStageTransitionTimer(){if(this.stageTransitionTimer)clearInterval(this.stageTransitionTimer),this.stageTransitionTimer=null}startFirstStageRevealSequence(){if(this.stopFirstStageRevealTimers(),!this.widget.animationsEnabled){this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1});return}this.setState(()=>{this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0});let A=Math.max(0,ec0+TF6),Q=A+_F6;this.firstStageTitleTimer=setTimeout(()=>{this.firstStageTitleRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageTitleRevealProgress=0}),this.startFirstStageRevealTimer()},A),this.firstStageHintTimer=setTimeout(()=>{this.firstStageHintRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageHintVisible=!0,this.firstStageHintRevealProgress=0}),this.startFirstStageRevealTimer()},Q)}startFirstStageRevealTimer(){if(this.firstStageRevealTimer)return;this.firstStageRevealTimer=setInterval(()=>{let A=performance.now(),Q=this.firstStageTitleRevealStartedAt?SE((A-this.firstStageTitleRevealStartedAt)/kF6):this.firstStageTitleRevealProgress,$=this.firstStageHintRevealStartedAt?SE((A-this.firstStageHintRevealStartedAt)/fF6):this.firstStageHintRevealProgress;if(this.setState(()=>{this.firstStageTitleRevealProgress=Q,this.firstStageHintRevealProgress=$}),Q>=1&&$>=1)this.stopFirstStageRevealTimer()},p90)}stopFirstStageRevealTimers(){if(this.stopFirstStageRevealTimer(),this.firstStageTitleRevealStartedAt=null,this.firstStageHintRevealStartedAt=null,this.firstStageTitleTimer)clearTimeout(this.firstStageTitleTimer),this.firstStageTitleTimer=null;if(this.firstStageHintTimer)clearTimeout(this.firstStageHintTimer),this.firstStageHintTimer=null}stopFirstStageRevealTimer(){if(this.firstStageRevealTimer)clearInterval(this.firstStageRevealTimer),this.firstStageRevealTimer=null}stopDismissAnimation(){if(this.dismissTimer)clearInterval(this.dismissTimer),this.dismissTimer=null}currentOrbPalette(){let A=fR4(this.introStage),Q=this.previousIntroStage===null||this.stageTransitionProgress>=1?A:xR4(fR4(this.previousIntroStage),A,gv(this.stageTransitionProgress));return this.dismissProgress>0?xR4(Q,bF6,gv(this.dismissProgress)):Q}build(A){let Q=c4.of(A).colorScheme,$=EA.of(A),B=this.currentOrbPalette(),E=I7(1,"deep",B),D=W4.of(A).size,U=this.widget.animationProgress??this.animationProgress,Y=Math.max(D.width/hv,D.height/tq)*SF6,Z=Y+(1-Y)*U,F=gv(this.dismissProgress),X=Math.max(hv,Math.round(hv*Z)),I=Math.max(tq,Math.round(tq*Z)),G=Math.round((D.width-X)/2),V=Math.round((D.height-I)/2),K=Math.max(0,Math.floor((D.width-hv)/2)),z=-Math.floor(tq/2),W=Math.round(G+(K-G)*U),C=Math.round(V+(z-V)*U),H=W+X/2,N=C+I/2,q=hF6({dismissProgress:this.dismissProgress,easedDismissProgress:F,introOrbScale:Z,normalOrbCenterX:H,normalOrbCenterY:N,size:D}),w=Math.max(hv,Math.round(hv*q.orbScale)),O=Math.max(tq,Math.round(tq*q.orbScale)),R=q.orbCenterX,_=q.orbCenterY,v=Math.round(R-w/2),k=Math.round(_-O/2),m=Math.max(3,Math.min(D.height-5,Math.floor(tq/2)+2)),x=Math.max(m+3,D.height-3),T=q.textDissolveProgress,f=this.isFinalIntroStage()?q.backdropDissolveProgress:0,c=this.firstStageTitleVisible&&T<1,d=c&&this.firstStageHintVisible,b=d&&this.widget.dismissible&&this.introStage>0&&!this.isFinalIntroStage(),p=this.introStage===0?this.firstStageTitleRevealProgress:1,n=this.introStage===0?this.firstStageHintRevealProgress:1,o=Math.max(24,Math.min(74,D.width-4)),I0=Math.min(12,Math.max(8,D.height-m-6)),E0=Math.max(0,Math.floor((D.width-o)/2)),G0=Math.max(0,Math.min(D.height-I0,Math.floor(D.height*0.55-I0/2))),q0=this.widget.animationProgress!==void 0||!this.widget.animationsEnabled?new tK({width:w,height:O,agentMode:"deep",glyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,seed:42,fps:0,onClick:()=>{}}):new tK({width:w,height:O,agentMode:"deep",glyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,onClick:()=>{}});return new c6({autofocus:!0,canRequestFocus:!0,debugLabel:"WelcomeTakeover",onKey:(t)=>{if(t.key==="Enter")return this.advanceIntroStage(),"handled";if(!this.widget.dismissible&&t.key==="c"&&t.ctrlKey)return this.widget.onQuit?.(),"handled";if(!this.widget.dismissible&&t.key==="q")return this.widget.onQuit?.(),"handled";if((t.key===" "||t.key==="Space")&&!this.isFinalIntroStage())return this.advanceIntroStage(),"handled";if(t.key==="Escape"||t.key==="Esc"){if(!this.widget.dismissible)return this.widget.onQuit?.(),"handled";return this.dismissFromFinalIntroStage()?"handled":"ignored"}if(t.key==="ArrowRight")return this.nextIntroStage(),"handled";if(t.key==="ArrowLeft")return this.goToPreviousIntroStage(),"handled";return"ignored"},child:new QQ({fit:"expand",children:[new cR4({color:Q.background,dissolveProgress:f}),new QQ({fit:"expand",children:[new iA({onClick:()=>{},child:y0.expand()}),new r1({left:v,top:k,width:w,height:O,child:q0}),...c?[new r1({left:E0,top:G0,width:o,height:I0,child:mF6({introStages:this.widget.introStages,stage:this.introStage,previousStage:this.previousIntroStage,progress:this.stageTransitionProgress,direction:this.stageTransitionDirection,width:o,height:I0,foreground:Q.foreground,mutedForeground:Q.mutedForeground,accent:E,link:$.app.link,keybind:$.app.keybind,titleRevealProgress:p,dissolveProgress:T,context:A})})]:[],...d?[...b?[new r1({left:E0,top:Math.max(0,x-1),width:o,height:1,child:new D0({text:nF6({stage:this.introStage,featureStageCount:Math.max(0,this.widget.introStages.length-2),foreground:Q.mutedForeground,dissolveProgress:T}),textAlign:"center"})})]:[],new r1({left:E0,top:x,width:o,height:1,child:oF6({finalStage:this.isFinalIntroStage(),dismissible:this.widget.dismissible,foreground:Q.mutedForeground,keybind:$.app.keybind,revealProgress:n,dissolveProgress:T,context:A})})]:[]]})]})})}}class cR4 extends YB{color;dissolveProgress;constructor({color:A,dissolveProgress:Q}){super();this.color=A,this.dissolveProgress=Q}createRenderObject(){return new pR4(this.color,this.dissolveProgress)}updateRenderObject(A){A.update(this.color,this.dissolveProgress)}}class pR4 extends bA{color;dissolveProgress;constructor(A,Q){super();this.color=A,this.dissolveProgress=Q}update(A,Q){this.color=A,this.dissolveProgress=Q,this.markNeedsPaint()}performLayout(){let A=this._lastConstraints;rA(!!A,"performLayout called without constraints");let Q=A.constrain(A.biggest.width,A.biggest.height);this.setSize(Q.width,Q.height),super.performLayout()}paint(A,Q=0,$=0){let B=Math.floor(Q+this.offset.x),E=Math.floor($+this.offset.y),D=Math.floor(this.size.width),J=Math.floor(this.size.height),U={bg:this.color},Y=SE(this.dissolveProgress);if(Y<=0){A.fill(B,E,D,J," ",U);return}if(Y>=1)return;for(let Z=0;Z<J;Z++)for(let F=0;F<D;F++)if(!gF6(F,Z,D,J,Y))A.fill(B+F,E+Z,1,1," ",U)}}function SE(A){return Math.min(1,Math.max(0,A))}function gv(A){return 1-(1-A)**3}function fR4(A){return kR4[A]??kR4[0]}function xR4(A,Q,$){return{primary:Tq(A.primary,Q.primary,$),secondary:Tq(A.secondary,Q.secondary,$)}}function hF6({dismissProgress:A,easedDismissProgress:Q,introOrbScale:$,normalOrbCenterX:B,normalOrbCenterY:E,size:D}){return{orbScale:$+($*0.86-$)*Q,orbCenterX:B+(D.width*0.54-B)*Q,orbCenterY:E-D.height*0.44*Q,textDissolveProgress:SE(A/0.52),backdropDissolveProgress:gv(SE((A-0.12)/0.88))}}function gF6(A,Q,$,B,E){let D=B<=1?0:Q/(B-1),J=lR4(A+Q*Math.max(1,$));return(1-D)*0.72+J*0.28<E}function mF6({introStages:A,stage:Q,previousStage:$,progress:B,direction:E,width:D,height:J,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V}){if($===null||B>=1)return Ap0({introStages:A,stage:Q,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V});let K=gv(B),z=E*Math.round((1-K)*D),W=-E*Math.round(K*D);return new zq(new QQ({fit:"expand",children:[new r1({left:W,top:0,width:D,height:J,child:Ap0({introStages:A,stage:$,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:$===0?1:I,dissolveProgress:G,context:V})}),new r1({left:z,top:0,width:D,height:J,child:Ap0({introStages:A,stage:Q,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V})})]}))}function Ap0({introStages:A,stage:Q,foreground:$,mutedForeground:B,accent:E,link:D,keybind:J,titleRevealProgress:U,dissolveProgress:Y,context:Z}){let F=A[Q]??A[0]??$p0[0],X=new $0({color:E,bold:!0}),I=new $0({color:$}),G=A===$p0&&Q===0,V=[...F.title===null?[]:[new D0({text:G?i90(pF6({progress:U,foreground:E,pulseColor:E}),Y):new h(Z8(F.title,Y),X),textAlign:"center"})],...F.body.length>0?[dF6()]:[],...F.body.map((K)=>cF6(K,I,B,D,J,Y,Z))];return new $6({child:new hA({padding:n0.horizontal(1),child:new IA({crossAxisAlignment:"stretch",mainAxisAlignment:"center",mainAxisSize:"min",children:V})})})}function dF6(){return y0.height(1)}function cF6(A,Q,$,B,E,D,J){if(typeof A==="string")return new D0({text:new h(Z8(A,D),Q),textAlign:"center"});if("codeBlock"in A)return new L5({onCopy:(U,Y)=>{if(Y)EQ.success(J,"Copied to clipboard",2000)},child:new IA({mainAxisSize:"min",children:A.codeBlock.map((U)=>new D0({text:new h(Z8(U,D),new $0({color:E})),textAlign:"center",selectable:!0}))})});if("keybind"in A){let U=new D0({text:new h("",void 0,[new h(Z8(A.text,D),new $0({color:$,dim:!0})),new h(Z8(A.keybind,D,B4(A.text).length),new $0({color:E}))]),textAlign:"center",selectable:"selectable"in A?A.selectable:!1});if("selectable"in A)return new $6({child:new L5({child:U})});return U}if("highlightText"in A){let U=L$.createSpan(A.href,A.linkText,new $0({color:B,underline:!0})),Y=oX.of(J),Z=new h("",void 0,[new h(A.text,Q),new h(A.highlightText,new $0({color:E})),new h(A.textAfterHighlight,Q),new h(U.text,U.style,U.children,U.hyperlink,()=>{t6(J,A.href,{forceExternal:!1,onShowImagePreview:Y})}),new h(A.textAfter,Q)]);return new D0({text:i90(Z,D),textAlign:"center"})}if("linkText"in A){if(A.linkWidget)return new IA({mainAxisSize:"min",children:[new D0({text:new h(Z8(A.text,D),Q),textAlign:"center"}),new $6({child:new LA({mainAxisSize:"min",children:[L$.createWidget(J,A.href,Z8(A.linkText,D),new $0({color:B,underline:!0})),new D0({text:new h(Z8(A.textAfter,D),Q)})]})})]});let U=L$.createSpan(A.href,A.linkText,new $0({color:B,underline:!0})),Y=oX.of(J),Z=new h("",void 0,[new h(A.text,Q),new h(U.text,U.style,U.children,U.hyperlink,()=>{t6(J,A.href,{forceExternal:!1,onShowImagePreview:Y})}),new h(A.textAfter,Q)]);return new D0({text:i90(Z,D),textAlign:"center"})}if(D>0)return new D0({text:new h(Z8(A.text,D),new $0({color:B,underline:!0})),textAlign:"center"});return new $6({child:L$.createWidget(J,A.href,A.text,new $0({color:B,underline:!0}))})}function pF6({progress:A,foreground:Q,pulseColor:$}){let B=new $0({color:Q,bold:!0}),E=new $0({color:iF6({progress:A,foreground:Q,pulseColor:$}),bold:!0});return new h("",void 0,[new h(lF6(A).padEnd(Bp0," "),B),new h(" ",B),new h(yR4(gR4,xF6,A,0.72),B),new h(" ",B),new h(yR4(mR4,yF6,A,0.88),E)])}function lF6(A){let Q=B4(hR4),$=Math.min(Bp0,Math.ceil(SE(A/0.62)*Bp0));return Q.slice(0,$).join("")}function yR4(A,Q,$,B){return $>=B?A:"".padEnd(Q," ")}function iF6({progress:A,foreground:Q,pulseColor:$}){if(A<0.88||A>=1)return Q;let B=SE((A-0.88)/0.12);return Math.cos(B*Math.PI*4)*(1-B)>0.12?$:Q}function nF6({stage:A,featureStageCount:Q,foreground:$,dissolveProgress:B}){return new h(Z8(`${A}/${Q}`,B),new $0({color:$,dim:!0}))}function aF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D}){let J=new $0({color:B}),U=new $0({color:$,dim:!0}),Y=Q?A?"Enter":"Space":"Esc",Z=Q?A?" to get started":" to continue":" to quit",F="",X="",I=`${Z}`;if(!Q)return new h("",void 0,[new h(Y,J),new h(Z,U),new h("",J),new h("",U)]);let G=bR4(Y,E),V=bR4(I,SE((E*(B4(Y).length+B4(I).length)-B4(Y).length)/B4(I).length));return new h("",void 0,[new h(Z8(G,D),J),new h(Z8(V.slice(0,Z.length),D),U),new h(Z8(V.slice(Z.length,Z.length+0),D),J),new h(Z8(V.slice(Z.length+0),D),U)])}function oF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D,context:J}){if(Q)return new D0({text:aF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D}),textAlign:"center"});let U=new $0({color:B}),Y=new $0({color:$,dim:!0});return new L5({onCopy:(Z,F)=>{if(F)EQ.success(J,"Copied to clipboard",2000)},child:new D0({text:new h("",void 0,[new h("q",U),new h(" to quit",Y)]),textAlign:"center",selectable:!0})})}function bR4(A,Q){let $=B4(A),B=Math.min($.length,Math.ceil(SE(Q)*$.length));return $.slice(0,B).join("").padEnd($.length," ")}function i90(A,Q,$=0){if(Q<=0)return A;let B=$+B4(A.text??"").length,E=A.children?.map((D)=>{let J=i90(D,Q,B);return B+=B4(D.toPlainText()).length,J});return new h(A.text?Z8(A.text,Q,$):A.text,A.style,E,A.hyperlink,A.onClick)}function Z8(A,Q,$=0){if(Q<=0)return A;return B4(A).map((E,D)=>{if(E.trim()==="")return E;return lR4($+D)<Q?" ":E}).join("")}function lR4(A){let Q=Math.sin((A+1)*12.9898)*43758.5453;return Q-Math.floor(Q)}function rF6(A){let $=A.observer.protocolMessages().filter((B)=>B.role==="assistant").at(-1);if(!$)return null;return $.content.filter((B)=>B.type==="text").map((B)=>B.text).join("")}function sF6(A,Q={}){return new Promise(($,B)=>{let E=!1,D=setTimeout(()=>{J.unsubscribe(),B(Error("Timed out waiting for agent response"))},Q.timeoutMs??600000),J=A.observer.agentState().subscribe((U)=>{if(c3(U)){E=!0;return}if(!E)return;let Y=rF6(A);if(Y===null)return;clearTimeout(D),J.unsubscribe(),$(Y)})})}class Dp0 extends p0{listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;updateService;initialThreadIDs;showWelcome;welcomeVariant;onWelcomeDismissed;notificationService;mcpTrustHandler;onThreadArchived;onActiveThreadChange;onRelaunchRequested;onFirstFrame;initialUserInput;getDefaultNewThreadVisibility;observeThreadSummaries;openThreadPickerOnStart;workspaceSettingsFilePath;context;constructor(A){super();this.listSkillsForThread=A.listSkillsForThread,this.clientPool=A.clientPool,this.completionBuilder=A.completionBuilder,this.history=A.history,this.ideManager=A.ideManager,this.configService=A.configService,this.updateService=A.updateService,this.initialThreadIDs=A.initialThreadIDs??[],this.showWelcome=A.showWelcome??!1,this.welcomeVariant=A.welcomeVariant??"intro",this.onWelcomeDismissed=A.onWelcomeDismissed,this.notificationService=A.notificationService,this.mcpTrustHandler=A.mcpTrustHandler,this.onThreadArchived=A.onThreadArchived,this.onActiveThreadChange=A.onActiveThreadChange,this.onRelaunchRequested=A.onRelaunchRequested,this.onFirstFrame=A.onFirstFrame,this.initialUserInput=A.initialUserInput,this.getDefaultNewThreadVisibility=A.getDefaultNewThreadVisibility,this.observeThreadSummaries=A.observeThreadSummaries,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.workspaceSettingsFilePath=A.workspaceSettingsFilePath,this.context=A.context}createState(){return new nR4}}class nR4 extends c0{editorController=new IZ;commandPalette=new jb0(this);commandRegistry=new qm0;toastController=new vb0;relaunchNotificationController=new Gm0;exitHintTimer=new kp(this,1000);ideStatus=new sB(this,{});threadNavigationHistory=new Km0;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;activeThreadIDSubscription=null;activePluginMessageSubscription=null;activePluginUIRequestsSubscription=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;executorAlreadyConnectedDialog=null;switchThreadPickerVisible=!1;welcomeVisible=!1;endCreditsVisible=!1;invadersHighScore=0;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;emptyThreadTerminalTitleController=new tl;pluginIntegration=null;mcpTrustIntegration=null;updateRelaunchIntegration=null;noticesPollingTimeout=null;notices;editorFocusNode=new B8({debugLabel:"EditorPanel"});loadThreads=async()=>{return this.widget.context.listThreads()};focusEditor=()=>{this.editorFocusNode.requestFocus()};focusEditorAfterNextFrame(){z6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;this.focusEditor()},"Neo focus editor")}analyzeContextForThread=async(A,Q)=>{return gz4({ampURL:this.widget.context.ampURL,configService:this.widget.configService,threadID:A,signal:Q})};onSwitchThread=(A)=>{return this.connectToExistingThread(A,{recordNavigation:!0,rethrowError:!0})};onSelectSidebarThread=async(A)=>{this.focusEditor(),await this.onSwitchThread(A)};threadListSidebar=new sc0({state:this,isBlocked:()=>this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal(),getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,getWorkspaceRoot:()=>this.widget.context.workspaceRoot,loadThreads:this.loadThreads,observeThreadSummaries:()=>this.widget.observeThreadSummaries(),onSelectThread:this.onSelectSidebarThread,focusMainContent:this.focusEditor,getInitialVisible:()=>this.widget.context.threadListSidebarVisible});sendFeedbackReport=async(A)=>x80({configService:this.widget.configService,settingsFilePath:this.widget.context.settingsFilePath},A);archiveThread=async(A)=>{let Q=await H70({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let $=await pN4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};removeThreadLabel=async(A,Q)=>{let $=await lN4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};initState(){if(kX.getInstance().interceptConsole(),this.invadersHighScore=this.widget.context.invadersHighScore??0,this.notices=new rg0(this.widget.configService,($)=>this.setState($)),z6.instance.addPostFrameCallback(()=>{setTimeout(()=>this.widget.onFirstFrame?.(),0),this.noticesPollingTimeout=setTimeout(()=>{this.noticesPollingTimeout=null,this.notices.startPolling()},500)},"Neo notices polling"),this.widget.showWelcome)this.welcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:$,error:B})=>{if(S.error("Neo failed to connect to thread",{threadID:$,error:B}),!$)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configSubscription=this.widget.configService.config.subscribe(($)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(K00($.settings)))}),this.updateRelaunchIntegration=new zm0({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested,relaunchNotificationController:this.relaunchNotificationController,updateService:this.widget.updateService}),this.updateRelaunchIntegration.init(),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput,Q=this.widget.initialThreadIDs[0];if(Q){let $={};if(A)$.initialUserInput=A;this.connectToInitialThreads(Q,$)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.context.sessionAgentMode);this.pluginIntegration=new Xm0({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,context:this.widget.context,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread,readThreadMessages:this.readPluginThreadMessages,runAgent:this.runPluginAgent,onBlockingConfirmDialogChange:this.syncEmptyThreadPluginConfirmationTitle}),this.pluginIntegration.init(),this.mcpTrustIntegration=new nh0({state:this,mcpTrustHandler:this.widget.mcpTrustHandler,toastController:this.toastController,workspaceSettingsFilePath:this.widget.workspaceSettingsFilePath}),this.mcpTrustIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=X1.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}registerAppCommands(){let A=this,Q=this.widget.context.pluginService?Xw4({pluginService:this.widget.context.pluginService,workspaceRoot:this.widget.context.workspaceRoot,logFilePath:this.widget.context.logFilePath,toastController:this.toastController}):[],B=[Hw4({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["resume"],status:{type:"enabled"},sortBoost:100,run:(E,D,J)=>{E.pushWithDismiss((U)=>ad0({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,loadThreadTail:this.widget.context.loadThreadTail,onSelectThread:this.onSwitchThread,onDismiss:U,onThreadSelected:J}))}},...this.threadListSidebar.commands(),{noun:"thread",verb:"switch to previous",description:"Switch to previous thread",keywords:["back"],get status(){return A.threadNavigationHistory.canNavigateBack()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to previous with no previous thread"}},run:(E,D,J)=>{A.navigateBack(),J()}},IO4({configService:this.widget.configService,getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??void 0,toastController:this.toastController}),{noun:"thread",verb:"switch to next",description:"Switch to next thread",keywords:["forward"],get status(){return A.threadNavigationHistory.canNavigateForward()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to next with no next thread"}},run:(E,D,J)=>{A.navigateForward(),J()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",status:{type:"enabled"},run:(E,D,J)=>{E.push(new $d0({mcpServers:this.widget.context.mcpServers,onDismiss:J}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",status:{type:"enabled"},run:(E)=>{E.pushWithDismiss((D)=>new tc0({toolboxes:this.widget.context.toolboxes,onDismiss:D}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","blog","announcements"],status:{type:"enabled"},run:async(E,D,J)=>{try{await t6(D,"https://ampcode.com/chronicle")}finally{J()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config"],status:{type:"enabled"},run:()=>{yK(this.widget.context.settingsFilePath).catch((E)=>{S.error("Failed to open settings file in editor",{error:E})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains"],status:{type:"enabled"},run:(E,D,J)=>{E.pushWithDismiss((U)=>new Qd0({onCancel:U,onSelect:(Y)=>{this.handleIdeSelection(Y),J()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["manual","?"],status:{type:"enabled"},run:(E,D,J)=>{E.push(new wm0({commands:eB.of(D).commands,onDismiss:J}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",status:{type:"enabled"},run:(E,D,J)=>{J(),A.showWelcome()}},{noun:"amp",verb:"end credits",description:"Roll the full-screen Amp credits",status:{type:"enabled"},run:(E,D,J)=>{J(),A.showEndCredits()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["v"],status:{type:"enabled"},run:(E,D,J)=>{E.push(new B1({header:"Amp Version",maxWidth:72,onDismiss:J,child:new D0({text:new h(i50({version:"0.0.1780456213-g47360c",buildTimestamp:"2026-06-03T03:14:57.812Z",buildType:"release"}))})}))}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","bye"],shortcut:HA.ctrl("c"),status:{type:"enabled"},run:(E,D)=>{N4.maybeInvoke(D,new iK)}},...Q,...cN4(this.widget.context.logFilePath)].map((E)=>this.commandRegistry.register(E));return()=>{for(let E of B)E()}}build(A){let Q=this.buildHints(),$=this.ideStatus.getValue(),B=this.notices.current,E=new lc0({initialAgentMode:this.widget.context.sessionAgentMode,initialPluginAgentModeKey:this.widget.context.initialPluginAgentModeKey,analyzeContextForThread:this.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,editorFocusNode:this.editorFocusNode,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:$,statusItems:this.pluginIntegration?.getStatusItems()??[],pluginConfirmationBlocked:this.pluginIntegration?.hasBlockingConfirmDialog()??!1,notificationService:this.widget.notificationService,notice:this.activeThreadContext||this.welcomeVisible?null:B,onDismissNotice:(I)=>this.notices.dismiss(I)}),D=W4.of(A),J=D.capabilities.animationSupport!=="disabled",U=this.threadListSidebar.visibleWidth(),Y=Math.max(0,D.size.width-U),F=[new WA({constraints:Y4.tight(D.size.width,D.size.height),child:this.threadListSidebar.buildBody(E)})];if(this.commandPalette.isEnabled())F.push(new c6({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new um0({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.welcomeVisible)F.push(ad0({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,loadThreadTail:this.widget.context.loadThreadTail,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.welcomeVisible)F.push(new c6({debugLabel:"WelcomeDialogOverlay",child:new Ep0({onDismiss:this.dismissWelcome,onQuit:()=>X1.instance.stop(),animationsEnabled:J,variant:this.widget.welcomeVariant})}));let X=this.executorAlreadyConnectedDialog;if(X)F.push(new c6({debugLabel:"ExecutorAlreadyConnectedDialogOverlay",child:new em0({existingExecutorPid:X.existingExecutorPid,onChoice:this.handleExecutorAlreadyConnectedChoice})}));if(F.push(...this.mcpTrustIntegration?.buildDialogLayers()??[]),F.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.context.isInternalUser)F.push(new Om0({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:n90.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)F.push(new Ad0);if(this.endCreditsVisible)F.push(new nm0({onComplete:this.completeEndCredits,highScore:this.invadersHighScore,onHighScoreChange:this.updateInvadersHighScore}));return new HQ({context:this.widget.context,child:new eB({commandRegistry:this.commandRegistry,child:new wv({completionBuilder:this.widget.completionBuilder,child:new EQ({controller:this.toastController,child:new N4({actions:this.buildActions(),child:new pQ({debugLabel:"AppShortcuts",shortcuts:this.buildShortcuts(),child:new cQ({debugLabel:"AppShellFocus",canRequestFocus:!1,skipTraversal:!0,child:new Tb0({controller:this.toastController,complexToastControllers:[this.relaunchNotificationController,...B&&this.activeThreadContext&&!this.welcomeVisible?[this.notices]:[]],child:new Mm0({configReloadEvents:this.widget.configService.configReloadEvents,toastController:this.toastController,child:new Bl({left:U,width:Y,child:new QQ({children:F})})})})})})})})})})})}buildShortcuts(){let A=new Map([[HA.ctrl("c"),new y70],[HA.ctrl("o"),new h70],[HA.alt("i"),new m70],[HA.alt("p"),new Wp],[HA.ctrl("."),new p70],[HA.ctrl("t"),new n70],...this.threadListSidebar.shortcutEntries()]);if(n90.env.NODE_ENV==="development"&&n90.platform==="darwin")A.set(HA.meta("r"),new b70);return A}buildActions(){let A=new pA(()=>{if(c2.hasAnyCopyableSelection())return c2.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new pA(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),$=new pA(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),B=new pA(()=>{return this.startNewDraftThread(),"handled"}),E=new pA(()=>{return X1.instance.stop(),"handled"}),D=new pA(()=>{return dl({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),"handled"}),J=new pA((I)=>{if(!I.text)return"ignored";return X1.instance.tuiInstance.clipboard.writeText(I.text).then((G)=>{if(G.ok)this.toastController.show(I.successMessage,"success",2000);else this.toastController.show(`${I.failureMessage}: ${G.userFacingErrorMessage}`,"error",4000)}).catch((G)=>{S.error("Failed to copy Neo text to clipboard",{error:G}),this.toastController.show(I.failureMessage,"error",2000)}),"handled"}),U=new pA(()=>{return X1.instance.toggleFrameStatsOverlay(),"handled"}),Y=new pA(()=>this.notices.dismissCurrent()?"handled":"ignored"),Z=new pA(()=>{if(!this.widget.context.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=Tw4({getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,context:this.widget.context,toastController:this.toastController,startNewDraftThread:this.startNewDraftThread,sendFeedbackReport:this.sendFeedbackReport}),X=new pA(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[y70,A],[Xl,B],[iK,E],[b70,D],[ZB,J],[Kl,$],[h70,Q],[m70,Z],...this.threadListSidebar.actionEntries(),[p70,Y],...F,[Wp,U],[n70,X]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.cancelOwnerUIRequests(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),this.widget.onActiveThreadChange?.(null),this.syncEmptyThreadPluginConfirmationTitle(),A.prompt!==void 0)this.editorController.text=A.prompt;this.focusEditorAfterNextFrame()}syncEmptyThreadPluginConfirmationTitle=()=>{this.emptyThreadTerminalTitleController.setPluginConfirmationBlocked(this.activeThreadContext===null&&(this.pluginIntegration?.hasBlockingConfirmDialog()??!1))};closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await pP(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){S.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.context.sessionAgentMode,$=A,B=Yq(Q),E=H50(this.widget.context,Q);if(B!==void 0&&E!==void 0)$={...$,[B]:E};return W50($,{agentMode:Q,explicitEffort:this.widget.context.explicitReasoningEffort,sessionState:this.widget.context})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=iR4(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if($Y(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=iR4(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(lK);if(this.exitHintTimer.isActive())A.add(Xv);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),X1.instance.stop();else this.exitHintTimer.activate()};dismissWelcome=()=>{if(!this.welcomeVisible)return;this.setState(()=>{this.welcomeVisible=!1}),this.widget.onWelcomeDismissed?.()};updateInvadersHighScore=(A)=>{if(A<=this.invadersHighScore)return;this.setState(()=>{this.invadersHighScore=A}),JJ((Q)=>({...Q,neoInvadersHighScore:Math.max(Q.neoInvadersHighScore,A)})).catch((Q)=>{S.warn("Failed to save Neo Invaders high score",{error:Q instanceof Error?Q.message:String(Q)})})};showWelcome=()=>{if(this.welcomeVisible)return;this.setState(()=>{this.welcomeVisible=!0})};showEndCredits=()=>{if(this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!0})};completeEndCredits=()=>{if(!this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!1})};promptExecutorAlreadyConnected(A){return new Promise((Q)=>{this.setState(()=>{this.executorAlreadyConnectedDialog={existingExecutorPid:A.existingExecutorPid,resolve:($)=>{Q($==="watch"?"observe":"disconnect")}}})})}handleExecutorAlreadyConnectedChoice=(A)=>{if(this.resolveExecutorAlreadyConnectedDialog(A),A==="exit")X1.instance.stop()};resolveExecutorAlreadyConnectedDialog(A){let Q=this.executorAlreadyConnectedDialog;if(!Q)return;this.setState(()=>{this.executorAlreadyConnectedDialog=null}),Q.resolve(A)}closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1}),this.focusEditorAfterNextFrame()};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,$=null,B,E,D)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),U=A.find(Z00);if(U)this.widget.history.add(U.text,n90.cwd()),this.widget.history.reset();let Y=$?void 0:await this.widget.getDefaultNewThreadVisibility?.(),Z=$??Y??null,F=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,Z??void 0,E,D);if(this.sendUserMessage(F,A,E?void 0:Q,E?void 0:B),!E)this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings);this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(F)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.context.sessionAgentMode=A;let $=Q["reasoning.effort"];if($!==void 0)this.widget.context.lastReasoningEffortByMode={...this.widget.context.lastReasoningEffortByMode??{},[A]:$};let B=Yq(A),E=B?Q[B]:void 0;if(E!==void 0)this.widget.context.lastSpeedByMode={...this.widget.context.lastSpeedByMode??{},[A]:E};JJ((D)=>{let J={...D,agentMode:A};if($!==void 0)J={...J,lastReasoningEffortByMode:{...J.lastReasoningEffortByMode??{},[A]:$}};if(E!==void 0)J={...J,lastSpeedByMode:{...J.lastSpeedByMode??{},[A]:E}};return J}).catch((D)=>{S.warn("Failed to persist Neo session defaults for new message",{error:D instanceof Error?D.message:String(D)})})}sendUserMessage(A,Q,$,B,E){let D=l50(this.ideStatus.getValue());if(B===void 0){A.client.sendUserMessage(Q,$,{steer:E?.steer,userState:D}).catch((J)=>{S.warn("Failed to send user message",{error:J})});return}A.client.sendUserMessage(Q,$,{reasoningEffort:B,steer:E?.steer,userState:D}).catch((J)=>{S.warn("Failed to send user message",{error:J})})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};getRelaunchThreadIDs=()=>{let A=new Set,Q=this.getActiveThreadID();if(Q)A.add(Q);for(let $ of this.widget.clientPool.activeThreadIDs)A.add($);return[...A]};appendPluginMessagesToThread=async(A,Q,$)=>{let B=this.activeThreadContext;if(!B){if(Q){for(let D of A)await this.widget.clientPool.appendUserMessageToThread(Q,D.content,$);return}throw Error("appendToThread is not available - no active thread")}let E=B.client.getThreadId();if(Q&&E!==Q){for(let D of A)await this.widget.clientPool.appendUserMessageToThread(Q,D.content,$);return}for(let D of A)this.sendUserMessage(B,[{type:"text",text:D.content}],void 0,void 0,$)};readPluginThreadMessages=async(A,Q)=>{let $=this.activeThreadContext;if(!$)throw Error("thread.messages is not available - no active thread");let B=$.client.getThreadId();if(Q&&B!==Q)throw Error("thread.messages is only available for the active thread");return BoA(EoA($.observer.protocolMessages()),A)};runPluginAgent=async(A,Q)=>{await this.ensureDraftThreadSettingsInitialized();let $=this.widget.clientPool.createNewThread(this.widget.context.sessionAgentMode,this.draftThreadSettings,void 0,A,Q.agentModeDisplay,Q.parentThreadID,{trackAsLastActive:!1});this.sendUserMessage($,[{type:"text",text:Q.message}]);try{let B=await sF6($,{timeoutMs:Q.timeoutMs}),E=$.client.getThreadId();return E?{threadID:E,text:B}:{text:B}}finally{this.widget.clientPool.disconnect($)}};async connectToExistingThread(A,Q={}){let $=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let B=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.context.observerOnly,onExecutorAlreadyConnected:(E)=>this.promptExecutorAlreadyConnected(E)});if(this.setActiveClient(B),Q.recordNavigation&&$!==A)this.threadNavigationHistory.recordNavigation($);if(Q.initialUserInput)this.sendUserMessage(B,[{type:"text",text:Q.initialUserInput}])}catch(B){if(S.error("Failed to load thread",{error:B,threadID:A}),this.toastController.show(`Failed to load ${A}: ${B instanceof Error?B.message:String(B)}`,"error",4000),Q.rethrowError)throw B}finally{this.setState(()=>{this.connectingToThreadID=null})}}async connectToInitialThreads(A,Q={}){await this.connectToExistingThread(A,Q);let $=this.widget.initialThreadIDs.filter((B)=>B!==A);await Promise.all($.map((B)=>this.resumeBackgroundThread(B)))}async resumeBackgroundThread(A){try{await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.context.observerOnly,onExecutorAlreadyConnected:async()=>"observe"})}catch(Q){S.error("Failed to resume background thread",{error:Q,threadID:A}),this.toastController.show(`Failed to resume ${A}: ${Q instanceof Error?Q.message:String(Q)}`,"error",4000)}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}setActiveClient({client:A,observer:Q,agentModeDisplay:$}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q,agentModeDisplay:$}}),this.syncEmptyThreadPluginConfirmationTitle(),this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=Q.threadID().subscribe((B)=>{this.widget.onActiveThreadChange?.(B)}),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription?.unsubscribe(),this.pluginIntegration?.cancelOwnerUIRequests(),this.activePluginMessageSubscription=Q.pluginMessages().subscribe((B)=>{this.pluginIntegration?.handlePluginMessage(B,(E)=>{A.sendPluginMessage(E)})}),this.activePluginUIRequestsSubscription=Q.pluginUIRequests().subscribe((B)=>{this.pluginIntegration?.handlePluginMessage({type:"plugin_message",message:{type:"event",event:"plugin.ui.snapshot",data:{requests:[...B]}}},(E)=>{A.sendPluginMessage(E)})})}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){S.error("Failed to connect to IDE",{error:Q});let $=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${$}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.threadListSidebar.dispose(),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.emptyThreadTerminalTitleController.dispose(),this.mcpTrustIntegration?.dispose(),this.mcpTrustIntegration=null,this.updateRelaunchIntegration?.dispose(),this.updateRelaunchIntegration=null,this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.noticesPollingTimeout)clearTimeout(this.noticesPollingTimeout),this.noticesPollingTimeout=null;this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.notices.dispose(),this.widget.notificationService.detach(),this.toastController.dispose(),this.editorFocusNode.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.executorAlreadyConnectedDialog!==null||this.welcomeVisible||(this.mcpTrustIntegration?.hasBlockingDialog()??!1)||this.endCreditsVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function iR4(A,Q,$){let B={...A};for(let E of tF6(Q,$)){if(!$Y(A[E],Q[E]))continue;let D=$[E];if(D===void 0)delete B[E];else B[E]=D}return B}function tF6(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}hB();function aR4(A,Q,$,B){let E=ZbA(A),D="\x1B[0m",J="\x1B[34m",U="\x1B[90m",Y="\x1B[2m",Z=[];if(A.archived)Z.push("\x1B[90m\x1B[2mArchived\x1B[0m");Z.push(`${E}`),Z.push(`\x1B[34m${Q}\x1B[0m`),Z.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let F=14,X=7,I=new m2(F,X),G=new v5(42),V=new Ov(F,X,F,X,F,X,0,A.agentMode??"smart","intensity","ascii",void 0,void 0,d0.default(),G);V.layout(Y4.tight(F,X)),V.paint(I,0,0);let K=I.getBuffer().getCells(),z=0;for(let R=0;R<X;R++)if(K[R].some((_)=>_.char!==" ")){z=R;break}let W=X-1;for(let R=X-1;R>=0;R--)if(K[R].some((_)=>_.char!==" ")){W=R;break}function C(R,_){if(!R)return"";if(R.type==="rgb"){let{r:v,g:k,b:m}=R.value;if($.getColorDepth()>=24)return`\x1B[${_?38:48};2;${v};${k};${m}m`;let x=Mp(v,k,m);return`\x1B[${_?38:48};5;${x}m`}return""}let H=[];if(W>=z)for(let R=z;R<=W;R++){let _="";for(let v=0;v<F;v++){let k=K[R][v],m=k.char,x=C(k.style.fg,!0);_+=x+m+"\x1B[0m"}H.push(_)}let N=H.length,q=Math.max(N,Z.length),w=Math.floor((q-N)/2),O=Math.floor((q-Z.length)/2);for(let R=0;R<q;R++){let _=" ".repeat(F);if(R>=w&&R<w+N)_=H[R-w];let v=" ",k="";if(R>=O&&R<O+Z.length)k=Z[R-O];$.write(_+v+k+`
4431
+ `))}function LF6(A,Q){let{colors:$,app:B}=Q;switch(A){case"pending":return{icon:"◌",color:$.warning};case"registered":return{icon:"•",color:$.mutedForeground};case"failed":return{icon:"✗",color:B.toolError};case"duplicate":return{icon:"◇",color:$.warning};default:return{icon:"?",color:$.foreground}}}function jR4(A,Q){let $=A.replace(/\s+/g," ").trim();if(cA($)<=Q)return $;let B="...",E=cA(B);if(Q<=E)return Q8(B,Q);return`${Q8($,Q-E,!0,"")}${B}`}var Qp0="https://ampcode.com/news/neo",$p0=[{title:"Meet the new Amp CLI",body:[]},{title:"Rebuilt From The Ground Up",body:["Same close-up terminal workflow. Completely different underneath."]},{title:"Just Keep Typing",body:["Context is summarized automatically at ~90%.","No handoff flow. No context percentage to babysit."]},{title:"Queueing and Steering",body:["Sending a message now queues by default instead of cancelling tools.","Use steering when you want the agent to see something sooner."]},{title:"Remote Control",body:["Start a thread in the CLI, then keep going from ampcode.com.","Watch live updates and queue follow-ups from any device."]},{title:"Customize Amp with Amp",body:[{text:"Amp now has a ",linkText:"complete plugin API",href:"https://ampcode.com/manual/plugin-api",textAfter:"."},"Add tools, commands, control UI, and hook into events."]},{title:"Permissions",body:[{text:"By default (when no ",highlightText:"amp.permissions",textAfterHighlight:" setting is present), Amp no longer asks for confirmation before running any tools and commands. And you can now implement your own custom permission logic with ",linkText:"plugins",href:"https://ampcode.com/manual/plugin-api",textAfter:"."}]},{title:null,body:["Check out the full news post for more:",{text:Qp0,href:Qp0}]}];function jF6(A){return[{title:"Upgrade your Amp CLI",body:[{text:"This npm-based distribution of Amp CLI has been deprecated. To use the ",linkText:"new Amp CLI",href:Qp0,textAfter:" you'll need to switch to the binary install:",linkWidget:!0},"",{codeBlock:["npm uninstall -g @sourcegraph/amp",A]}]}]}function RF6(){if(process.platform==="win32")return'powershell -c "irm https://ampcode.com/install.ps1 | iex"';return"curl -fsSL https://ampcode.com/install.sh | bash"}var hv=50,tq=40,ec0=1000,PF6=420,vF6=760,TF6=-250,_F6=1100,p90=33,TR4=0.999,SF6=2.1,kF6=720,fF6=420,hR4="Meet the new",gR4="Amp",mR4="CLI",Bp0=B4(hR4).length,xF6=B4(gR4).length,yF6=B4(mR4).length,l90={primary:{r:140,g:38,b:0},secondary:{r:255,g:225,b:102}},_R4={primary:{r:10,g:42,b:18},secondary:{r:200,g:230,b:68}},SR4={primary:{r:18,g:0,b:107},secondary:{r:103,g:255,b:168}},kR4=[l90,_R4,SR4,l90,_R4,SR4,l90],bF6=l90;class Ep0 extends p0{onDismiss;onQuit;animationProgress;animationsEnabled;variant;binaryInstallCommand;introStages;dismissible;constructor(A){super();this.onDismiss=A.onDismiss,this.onQuit=A.onQuit,this.animationProgress=A.animationProgress,this.animationsEnabled=A.animationsEnabled??!0,this.variant=A.variant??"intro",this.binaryInstallCommand=A.binaryInstallCommand??RF6(),this.introStages=this.variant==="npm-migration"?jF6(this.binaryInstallCommand):$p0,this.dismissible=this.variant!=="npm-migration"}createState(){return new dR4}}class dR4 extends c0{startedAt=performance.now();animationTimer=null;stageTransitionTimer=null;firstStageTitleTimer=null;firstStageHintTimer=null;firstStageRevealTimer=null;firstStageTitleRevealStartedAt=null;firstStageHintRevealStartedAt=null;stageTransitionStartedAt=performance.now();animationStartProgress=0;animationTargetProgress=1;animationDurationMs=ec0;onAnimationComplete=null;animationProgress=0;introStage=0;previousIntroStage=null;stageTransitionProgress=1;stageTransitionDirection=1;firstStageTitleVisible=!1;firstStageHintVisible=!1;firstStageTitleRevealProgress=0;firstStageHintRevealProgress=0;dismissTimer=null;dismissStartedAt=performance.now();dismissProgress=0;isDismissing=!1;splashOrbGlow=new v5(42);initState(){super.initState(),this.startAnimationIfNeeded()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.animationProgress!==this.widget.animationProgress||A.animationsEnabled!==this.widget.animationsEnabled)this.startAnimationIfNeeded()}dispose(){this.stopAnimation(),this.stopStageTransitionTimer(),this.stopFirstStageRevealTimers(),this.stopDismissAnimation(),super.dispose()}startAnimationIfNeeded(){if(this.stopAnimation(),this.stopFirstStageRevealTimers(),this.widget.animationProgress!==void 0){this.animationProgress=SE(this.widget.animationProgress),this.firstStageTitleVisible=this.animationProgress>=TR4,this.firstStageHintVisible=this.animationProgress>=TR4,this.firstStageTitleRevealProgress=this.firstStageTitleVisible?1:0,this.firstStageHintRevealProgress=this.firstStageHintVisible?1:0;return}if(!this.widget.animationsEnabled){this.stopStageTransitionTimer(),this.stopDismissAnimation(),this.animationProgress=1,this.isDismissing=!1,this.dismissProgress=0,this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1,this.previousIntroStage=null,this.stageTransitionProgress=1;return}if(this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0,this.startProgressAnimation({from:0,to:1,durationMs:ec0,onComplete:()=>{if(!this.widget.dismissible)this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1})}}),this.widget.dismissible)this.startFirstStageRevealSequence()}startDismissAnimation(){if(this.isDismissing)return;if(!this.widget.animationsEnabled){this.widget.onDismiss();return}this.stopFirstStageRevealTimers(),this.stopStageTransitionTimer(),this.dismissStartedAt=performance.now(),this.setState(()=>{this.isDismissing=!0,this.dismissProgress=0}),this.dismissTimer=setInterval(()=>{let A=performance.now()-this.dismissStartedAt,Q=SE(A/vF6);if(this.setState(()=>{this.dismissProgress=Q}),Q>=1)this.stopDismissAnimation(),this.widget.onDismiss()},p90)}canNavigateIntroStage(){if(this.isDismissing)return!1;if(!this.firstStageHintVisible)return!1;if(this.introStage===0&&this.firstStageHintRevealProgress<1)return!1;return!0}advanceIntroStage(){if(!this.canNavigateIntroStage())return;if(this.isFinalIntroStage()){if(this.widget.dismissible)this.startDismissAnimation();return}this.moveIntroStage(1)}dismissFromFinalIntroStage(){if(!this.widget.dismissible||!this.canNavigateIntroStage()||!this.isFinalIntroStage())return!1;return this.startDismissAnimation(),!0}nextIntroStage(){if(!this.canNavigateIntroStage()||this.isFinalIntroStage())return;this.moveIntroStage(1)}goToPreviousIntroStage(){if(!this.canNavigateIntroStage()||this.introStage<=0)return;this.moveIntroStage(-1)}isFinalIntroStage(){return this.introStage>=this.widget.introStages.length-1}moveIntroStage(A){let Q=this.introStage+A;if(this.stopStageTransitionTimer(),this.stageTransitionStartedAt=performance.now(),this.setState(()=>{this.previousIntroStage=this.introStage,this.introStage=Q,this.stageTransitionDirection=A}),this.widget.animationProgress!==void 0||!this.widget.animationsEnabled){this.setState(()=>{this.previousIntroStage=null,this.stageTransitionProgress=1});return}this.setState(()=>{this.stageTransitionProgress=0}),this.stageTransitionTimer=setInterval(()=>{let $=performance.now()-this.stageTransitionStartedAt,B=SE($/PF6);if(this.setState(()=>{if(this.stageTransitionProgress=B,B>=1)this.previousIntroStage=null}),B>=1)this.stopStageTransitionTimer()},p90)}startProgressAnimation({from:A,to:Q,durationMs:$,onComplete:B}){this.stopAnimation(),this.startedAt=performance.now(),this.animationStartProgress=A,this.animationTargetProgress=Q,this.animationDurationMs=$,this.onAnimationComplete=B,this.animationProgress=A,this.animationTimer=setInterval(()=>{let E=performance.now()-this.startedAt,D=SE(E/this.animationDurationMs),J=this.animationStartProgress+(this.animationTargetProgress-this.animationStartProgress)*gv(D);if(this.setState(()=>{this.animationProgress=J}),D>=1)this.stopAnimation(),this.onAnimationComplete?.(),this.onAnimationComplete=null},p90)}stopAnimation(){if(this.animationTimer)clearInterval(this.animationTimer),this.animationTimer=null}stopStageTransitionTimer(){if(this.stageTransitionTimer)clearInterval(this.stageTransitionTimer),this.stageTransitionTimer=null}startFirstStageRevealSequence(){if(this.stopFirstStageRevealTimers(),!this.widget.animationsEnabled){this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1});return}this.setState(()=>{this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0});let A=Math.max(0,ec0+TF6),Q=A+_F6;this.firstStageTitleTimer=setTimeout(()=>{this.firstStageTitleRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageTitleRevealProgress=0}),this.startFirstStageRevealTimer()},A),this.firstStageHintTimer=setTimeout(()=>{this.firstStageHintRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageHintVisible=!0,this.firstStageHintRevealProgress=0}),this.startFirstStageRevealTimer()},Q)}startFirstStageRevealTimer(){if(this.firstStageRevealTimer)return;this.firstStageRevealTimer=setInterval(()=>{let A=performance.now(),Q=this.firstStageTitleRevealStartedAt?SE((A-this.firstStageTitleRevealStartedAt)/kF6):this.firstStageTitleRevealProgress,$=this.firstStageHintRevealStartedAt?SE((A-this.firstStageHintRevealStartedAt)/fF6):this.firstStageHintRevealProgress;if(this.setState(()=>{this.firstStageTitleRevealProgress=Q,this.firstStageHintRevealProgress=$}),Q>=1&&$>=1)this.stopFirstStageRevealTimer()},p90)}stopFirstStageRevealTimers(){if(this.stopFirstStageRevealTimer(),this.firstStageTitleRevealStartedAt=null,this.firstStageHintRevealStartedAt=null,this.firstStageTitleTimer)clearTimeout(this.firstStageTitleTimer),this.firstStageTitleTimer=null;if(this.firstStageHintTimer)clearTimeout(this.firstStageHintTimer),this.firstStageHintTimer=null}stopFirstStageRevealTimer(){if(this.firstStageRevealTimer)clearInterval(this.firstStageRevealTimer),this.firstStageRevealTimer=null}stopDismissAnimation(){if(this.dismissTimer)clearInterval(this.dismissTimer),this.dismissTimer=null}currentOrbPalette(){let A=fR4(this.introStage),Q=this.previousIntroStage===null||this.stageTransitionProgress>=1?A:xR4(fR4(this.previousIntroStage),A,gv(this.stageTransitionProgress));return this.dismissProgress>0?xR4(Q,bF6,gv(this.dismissProgress)):Q}build(A){let Q=c4.of(A).colorScheme,$=EA.of(A),B=this.currentOrbPalette(),E=I7(1,"deep",B),D=W4.of(A).size,U=this.widget.animationProgress??this.animationProgress,Y=Math.max(D.width/hv,D.height/tq)*SF6,Z=Y+(1-Y)*U,F=gv(this.dismissProgress),X=Math.max(hv,Math.round(hv*Z)),I=Math.max(tq,Math.round(tq*Z)),G=Math.round((D.width-X)/2),V=Math.round((D.height-I)/2),K=Math.max(0,Math.floor((D.width-hv)/2)),z=-Math.floor(tq/2),W=Math.round(G+(K-G)*U),C=Math.round(V+(z-V)*U),H=W+X/2,N=C+I/2,q=hF6({dismissProgress:this.dismissProgress,easedDismissProgress:F,introOrbScale:Z,normalOrbCenterX:H,normalOrbCenterY:N,size:D}),w=Math.max(hv,Math.round(hv*q.orbScale)),O=Math.max(tq,Math.round(tq*q.orbScale)),R=q.orbCenterX,_=q.orbCenterY,v=Math.round(R-w/2),k=Math.round(_-O/2),m=Math.max(3,Math.min(D.height-5,Math.floor(tq/2)+2)),x=Math.max(m+3,D.height-3),T=q.textDissolveProgress,f=this.isFinalIntroStage()?q.backdropDissolveProgress:0,c=this.firstStageTitleVisible&&T<1,d=c&&this.firstStageHintVisible,b=d&&this.widget.dismissible&&this.introStage>0&&!this.isFinalIntroStage(),p=this.introStage===0?this.firstStageTitleRevealProgress:1,n=this.introStage===0?this.firstStageHintRevealProgress:1,o=Math.max(24,Math.min(74,D.width-4)),I0=Math.min(12,Math.max(8,D.height-m-6)),E0=Math.max(0,Math.floor((D.width-o)/2)),G0=Math.max(0,Math.min(D.height-I0,Math.floor(D.height*0.55-I0/2))),q0=this.widget.animationProgress!==void 0||!this.widget.animationsEnabled?new tK({width:w,height:O,agentMode:"deep",glyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,seed:42,fps:0,onClick:()=>{}}):new tK({width:w,height:O,agentMode:"deep",glyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,onClick:()=>{}});return new c6({autofocus:!0,canRequestFocus:!0,debugLabel:"WelcomeTakeover",onKey:(t)=>{if(t.key==="Enter")return this.advanceIntroStage(),"handled";if(!this.widget.dismissible&&t.key==="c"&&t.ctrlKey)return this.widget.onQuit?.(),"handled";if(!this.widget.dismissible&&t.key==="q")return this.widget.onQuit?.(),"handled";if((t.key===" "||t.key==="Space")&&!this.isFinalIntroStage())return this.advanceIntroStage(),"handled";if(t.key==="Escape"||t.key==="Esc"){if(!this.widget.dismissible)return this.widget.onQuit?.(),"handled";return this.dismissFromFinalIntroStage()?"handled":"ignored"}if(t.key==="ArrowRight")return this.nextIntroStage(),"handled";if(t.key==="ArrowLeft")return this.goToPreviousIntroStage(),"handled";return"ignored"},child:new QQ({fit:"expand",children:[new cR4({color:Q.background,dissolveProgress:f}),new QQ({fit:"expand",children:[new iA({onClick:()=>{},child:y0.expand()}),new r1({left:v,top:k,width:w,height:O,child:q0}),...c?[new r1({left:E0,top:G0,width:o,height:I0,child:mF6({introStages:this.widget.introStages,stage:this.introStage,previousStage:this.previousIntroStage,progress:this.stageTransitionProgress,direction:this.stageTransitionDirection,width:o,height:I0,foreground:Q.foreground,mutedForeground:Q.mutedForeground,accent:E,link:$.app.link,keybind:$.app.keybind,titleRevealProgress:p,dissolveProgress:T,context:A})})]:[],...d?[...b?[new r1({left:E0,top:Math.max(0,x-1),width:o,height:1,child:new D0({text:nF6({stage:this.introStage,featureStageCount:Math.max(0,this.widget.introStages.length-2),foreground:Q.mutedForeground,dissolveProgress:T}),textAlign:"center"})})]:[],new r1({left:E0,top:x,width:o,height:1,child:oF6({finalStage:this.isFinalIntroStage(),dismissible:this.widget.dismissible,foreground:Q.mutedForeground,keybind:$.app.keybind,revealProgress:n,dissolveProgress:T,context:A})})]:[]]})]})})}}class cR4 extends YB{color;dissolveProgress;constructor({color:A,dissolveProgress:Q}){super();this.color=A,this.dissolveProgress=Q}createRenderObject(){return new pR4(this.color,this.dissolveProgress)}updateRenderObject(A){A.update(this.color,this.dissolveProgress)}}class pR4 extends bA{color;dissolveProgress;constructor(A,Q){super();this.color=A,this.dissolveProgress=Q}update(A,Q){this.color=A,this.dissolveProgress=Q,this.markNeedsPaint()}performLayout(){let A=this._lastConstraints;rA(!!A,"performLayout called without constraints");let Q=A.constrain(A.biggest.width,A.biggest.height);this.setSize(Q.width,Q.height),super.performLayout()}paint(A,Q=0,$=0){let B=Math.floor(Q+this.offset.x),E=Math.floor($+this.offset.y),D=Math.floor(this.size.width),J=Math.floor(this.size.height),U={bg:this.color},Y=SE(this.dissolveProgress);if(Y<=0){A.fill(B,E,D,J," ",U);return}if(Y>=1)return;for(let Z=0;Z<J;Z++)for(let F=0;F<D;F++)if(!gF6(F,Z,D,J,Y))A.fill(B+F,E+Z,1,1," ",U)}}function SE(A){return Math.min(1,Math.max(0,A))}function gv(A){return 1-(1-A)**3}function fR4(A){return kR4[A]??kR4[0]}function xR4(A,Q,$){return{primary:Tq(A.primary,Q.primary,$),secondary:Tq(A.secondary,Q.secondary,$)}}function hF6({dismissProgress:A,easedDismissProgress:Q,introOrbScale:$,normalOrbCenterX:B,normalOrbCenterY:E,size:D}){return{orbScale:$+($*0.86-$)*Q,orbCenterX:B+(D.width*0.54-B)*Q,orbCenterY:E-D.height*0.44*Q,textDissolveProgress:SE(A/0.52),backdropDissolveProgress:gv(SE((A-0.12)/0.88))}}function gF6(A,Q,$,B,E){let D=B<=1?0:Q/(B-1),J=lR4(A+Q*Math.max(1,$));return(1-D)*0.72+J*0.28<E}function mF6({introStages:A,stage:Q,previousStage:$,progress:B,direction:E,width:D,height:J,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V}){if($===null||B>=1)return Ap0({introStages:A,stage:Q,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V});let K=gv(B),z=E*Math.round((1-K)*D),W=-E*Math.round(K*D);return new zq(new QQ({fit:"expand",children:[new r1({left:W,top:0,width:D,height:J,child:Ap0({introStages:A,stage:$,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:$===0?1:I,dissolveProgress:G,context:V})}),new r1({left:z,top:0,width:D,height:J,child:Ap0({introStages:A,stage:Q,foreground:U,mutedForeground:Y,accent:Z,link:F,keybind:X,titleRevealProgress:I,dissolveProgress:G,context:V})})]}))}function Ap0({introStages:A,stage:Q,foreground:$,mutedForeground:B,accent:E,link:D,keybind:J,titleRevealProgress:U,dissolveProgress:Y,context:Z}){let F=A[Q]??A[0]??$p0[0],X=new $0({color:E,bold:!0}),I=new $0({color:$}),G=A===$p0&&Q===0,V=[...F.title===null?[]:[new D0({text:G?i90(pF6({progress:U,foreground:E,pulseColor:E}),Y):new h(Z8(F.title,Y),X),textAlign:"center"})],...F.body.length>0?[dF6()]:[],...F.body.map((K)=>cF6(K,I,B,D,J,Y,Z))];return new $6({child:new hA({padding:n0.horizontal(1),child:new IA({crossAxisAlignment:"stretch",mainAxisAlignment:"center",mainAxisSize:"min",children:V})})})}function dF6(){return y0.height(1)}function cF6(A,Q,$,B,E,D,J){if(typeof A==="string")return new D0({text:new h(Z8(A,D),Q),textAlign:"center"});if("codeBlock"in A)return new L5({onCopy:(U,Y)=>{if(Y)EQ.success(J,"Copied to clipboard",2000)},child:new IA({mainAxisSize:"min",children:A.codeBlock.map((U)=>new D0({text:new h(Z8(U,D),new $0({color:E})),textAlign:"center",selectable:!0}))})});if("keybind"in A){let U=new D0({text:new h("",void 0,[new h(Z8(A.text,D),new $0({color:$,dim:!0})),new h(Z8(A.keybind,D,B4(A.text).length),new $0({color:E}))]),textAlign:"center",selectable:"selectable"in A?A.selectable:!1});if("selectable"in A)return new $6({child:new L5({child:U})});return U}if("highlightText"in A){let U=L$.createSpan(A.href,A.linkText,new $0({color:B,underline:!0})),Y=oX.of(J),Z=new h("",void 0,[new h(A.text,Q),new h(A.highlightText,new $0({color:E})),new h(A.textAfterHighlight,Q),new h(U.text,U.style,U.children,U.hyperlink,()=>{t6(J,A.href,{forceExternal:!1,onShowImagePreview:Y})}),new h(A.textAfter,Q)]);return new D0({text:i90(Z,D),textAlign:"center"})}if("linkText"in A){if(A.linkWidget)return new IA({mainAxisSize:"min",children:[new D0({text:new h(Z8(A.text,D),Q),textAlign:"center"}),new $6({child:new LA({mainAxisSize:"min",children:[L$.createWidget(J,A.href,Z8(A.linkText,D),new $0({color:B,underline:!0})),new D0({text:new h(Z8(A.textAfter,D),Q)})]})})]});let U=L$.createSpan(A.href,A.linkText,new $0({color:B,underline:!0})),Y=oX.of(J),Z=new h("",void 0,[new h(A.text,Q),new h(U.text,U.style,U.children,U.hyperlink,()=>{t6(J,A.href,{forceExternal:!1,onShowImagePreview:Y})}),new h(A.textAfter,Q)]);return new D0({text:i90(Z,D),textAlign:"center"})}if(D>0)return new D0({text:new h(Z8(A.text,D),new $0({color:B,underline:!0})),textAlign:"center"});return new $6({child:L$.createWidget(J,A.href,A.text,new $0({color:B,underline:!0}))})}function pF6({progress:A,foreground:Q,pulseColor:$}){let B=new $0({color:Q,bold:!0}),E=new $0({color:iF6({progress:A,foreground:Q,pulseColor:$}),bold:!0});return new h("",void 0,[new h(lF6(A).padEnd(Bp0," "),B),new h(" ",B),new h(yR4(gR4,xF6,A,0.72),B),new h(" ",B),new h(yR4(mR4,yF6,A,0.88),E)])}function lF6(A){let Q=B4(hR4),$=Math.min(Bp0,Math.ceil(SE(A/0.62)*Bp0));return Q.slice(0,$).join("")}function yR4(A,Q,$,B){return $>=B?A:"".padEnd(Q," ")}function iF6({progress:A,foreground:Q,pulseColor:$}){if(A<0.88||A>=1)return Q;let B=SE((A-0.88)/0.12);return Math.cos(B*Math.PI*4)*(1-B)>0.12?$:Q}function nF6({stage:A,featureStageCount:Q,foreground:$,dissolveProgress:B}){return new h(Z8(`${A}/${Q}`,B),new $0({color:$,dim:!0}))}function aF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D}){let J=new $0({color:B}),U=new $0({color:$,dim:!0}),Y=Q?A?"Enter":"Space":"Esc",Z=Q?A?" to get started":" to continue":" to quit",F="",X="",I=`${Z}`;if(!Q)return new h("",void 0,[new h(Y,J),new h(Z,U),new h("",J),new h("",U)]);let G=bR4(Y,E),V=bR4(I,SE((E*(B4(Y).length+B4(I).length)-B4(Y).length)/B4(I).length));return new h("",void 0,[new h(Z8(G,D),J),new h(Z8(V.slice(0,Z.length),D),U),new h(Z8(V.slice(Z.length,Z.length+0),D),J),new h(Z8(V.slice(Z.length+0),D),U)])}function oF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D,context:J}){if(Q)return new D0({text:aF6({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:E,dissolveProgress:D}),textAlign:"center"});let U=new $0({color:B}),Y=new $0({color:$,dim:!0});return new L5({onCopy:(Z,F)=>{if(F)EQ.success(J,"Copied to clipboard",2000)},child:new D0({text:new h("",void 0,[new h("q",U),new h(" to quit",Y)]),textAlign:"center",selectable:!0})})}function bR4(A,Q){let $=B4(A),B=Math.min($.length,Math.ceil(SE(Q)*$.length));return $.slice(0,B).join("").padEnd($.length," ")}function i90(A,Q,$=0){if(Q<=0)return A;let B=$+B4(A.text??"").length,E=A.children?.map((D)=>{let J=i90(D,Q,B);return B+=B4(D.toPlainText()).length,J});return new h(A.text?Z8(A.text,Q,$):A.text,A.style,E,A.hyperlink,A.onClick)}function Z8(A,Q,$=0){if(Q<=0)return A;return B4(A).map((E,D)=>{if(E.trim()==="")return E;return lR4($+D)<Q?" ":E}).join("")}function lR4(A){let Q=Math.sin((A+1)*12.9898)*43758.5453;return Q-Math.floor(Q)}function rF6(A){let $=A.observer.protocolMessages().filter((B)=>B.role==="assistant").at(-1);if(!$)return null;return $.content.filter((B)=>B.type==="text").map((B)=>B.text).join("")}function sF6(A,Q={}){return new Promise(($,B)=>{let E=!1,D=setTimeout(()=>{J.unsubscribe(),B(Error("Timed out waiting for agent response"))},Q.timeoutMs??600000),J=A.observer.agentState().subscribe((U)=>{if(c3(U)){E=!0;return}if(!E)return;let Y=rF6(A);if(Y===null)return;clearTimeout(D),J.unsubscribe(),$(Y)})})}class Dp0 extends p0{listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;updateService;initialThreadIDs;showWelcome;welcomeVariant;onWelcomeDismissed;notificationService;mcpTrustHandler;onThreadArchived;onActiveThreadChange;onRelaunchRequested;onFirstFrame;initialUserInput;getDefaultNewThreadVisibility;observeThreadSummaries;openThreadPickerOnStart;workspaceSettingsFilePath;context;constructor(A){super();this.listSkillsForThread=A.listSkillsForThread,this.clientPool=A.clientPool,this.completionBuilder=A.completionBuilder,this.history=A.history,this.ideManager=A.ideManager,this.configService=A.configService,this.updateService=A.updateService,this.initialThreadIDs=A.initialThreadIDs??[],this.showWelcome=A.showWelcome??!1,this.welcomeVariant=A.welcomeVariant??"intro",this.onWelcomeDismissed=A.onWelcomeDismissed,this.notificationService=A.notificationService,this.mcpTrustHandler=A.mcpTrustHandler,this.onThreadArchived=A.onThreadArchived,this.onActiveThreadChange=A.onActiveThreadChange,this.onRelaunchRequested=A.onRelaunchRequested,this.onFirstFrame=A.onFirstFrame,this.initialUserInput=A.initialUserInput,this.getDefaultNewThreadVisibility=A.getDefaultNewThreadVisibility,this.observeThreadSummaries=A.observeThreadSummaries,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.workspaceSettingsFilePath=A.workspaceSettingsFilePath,this.context=A.context}createState(){return new nR4}}class nR4 extends c0{editorController=new IZ;commandPalette=new jb0(this);commandRegistry=new qm0;toastController=new vb0;relaunchNotificationController=new Gm0;exitHintTimer=new kp(this,1000);ideStatus=new sB(this,{});threadNavigationHistory=new Km0;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;activeThreadIDSubscription=null;activePluginMessageSubscription=null;activePluginUIRequestsSubscription=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;executorAlreadyConnectedDialog=null;switchThreadPickerVisible=!1;welcomeVisible=!1;endCreditsVisible=!1;invadersHighScore=0;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;emptyThreadTerminalTitleController=new tl;pluginIntegration=null;mcpTrustIntegration=null;updateRelaunchIntegration=null;noticesPollingTimeout=null;notices;editorFocusNode=new B8({debugLabel:"EditorPanel"});loadThreads=async()=>{return this.widget.context.listThreads()};focusEditor=()=>{this.editorFocusNode.requestFocus()};focusEditorAfterNextFrame(){z6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;this.focusEditor()},"Neo focus editor")}analyzeContextForThread=async(A,Q)=>{return gz4({ampURL:this.widget.context.ampURL,configService:this.widget.configService,threadID:A,signal:Q})};onSwitchThread=(A)=>{return this.connectToExistingThread(A,{recordNavigation:!0,rethrowError:!0})};onSelectSidebarThread=async(A)=>{this.focusEditor(),await this.onSwitchThread(A)};threadListSidebar=new sc0({state:this,isBlocked:()=>this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal(),getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,getWorkspaceRoot:()=>this.widget.context.workspaceRoot,loadThreads:this.loadThreads,observeThreadSummaries:()=>this.widget.observeThreadSummaries(),onSelectThread:this.onSelectSidebarThread,focusMainContent:this.focusEditor,getInitialVisible:()=>this.widget.context.threadListSidebarVisible});sendFeedbackReport=async(A)=>x80({configService:this.widget.configService,settingsFilePath:this.widget.context.settingsFilePath},A);archiveThread=async(A)=>{let Q=await H70({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let $=await pN4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};removeThreadLabel=async(A,Q)=>{let $=await lN4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};initState(){if(kX.getInstance().interceptConsole(),this.invadersHighScore=this.widget.context.invadersHighScore??0,this.notices=new rg0(this.widget.configService,($)=>this.setState($)),z6.instance.addPostFrameCallback(()=>{setTimeout(()=>this.widget.onFirstFrame?.(),0),this.noticesPollingTimeout=setTimeout(()=>{this.noticesPollingTimeout=null,this.notices.startPolling()},500)},"Neo notices polling"),this.widget.showWelcome)this.welcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:$,error:B})=>{if(S.error("Neo failed to connect to thread",{threadID:$,error:B}),!$)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configSubscription=this.widget.configService.config.subscribe(($)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(K00($.settings)))}),this.updateRelaunchIntegration=new zm0({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested,relaunchNotificationController:this.relaunchNotificationController,updateService:this.widget.updateService}),this.updateRelaunchIntegration.init(),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput,Q=this.widget.initialThreadIDs[0];if(Q){let $={};if(A)$.initialUserInput=A;this.connectToInitialThreads(Q,$)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.context.sessionAgentMode);this.pluginIntegration=new Xm0({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,context:this.widget.context,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread,readThreadMessages:this.readPluginThreadMessages,runAgent:this.runPluginAgent,onBlockingConfirmDialogChange:this.syncEmptyThreadPluginConfirmationTitle}),this.pluginIntegration.init(),this.mcpTrustIntegration=new nh0({state:this,mcpTrustHandler:this.widget.mcpTrustHandler,toastController:this.toastController,workspaceSettingsFilePath:this.widget.workspaceSettingsFilePath}),this.mcpTrustIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=X1.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}registerAppCommands(){let A=this,Q=this.widget.context.pluginService?Xw4({pluginService:this.widget.context.pluginService,workspaceRoot:this.widget.context.workspaceRoot,logFilePath:this.widget.context.logFilePath,toastController:this.toastController}):[],B=[Hw4({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["resume"],status:{type:"enabled"},sortBoost:100,run:(E,D,J)=>{E.pushWithDismiss((U)=>ad0({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,loadThreadTail:this.widget.context.loadThreadTail,onSelectThread:this.onSwitchThread,onDismiss:U,onThreadSelected:J}))}},...this.threadListSidebar.commands(),{noun:"thread",verb:"switch to previous",description:"Switch to previous thread",keywords:["back"],get status(){return A.threadNavigationHistory.canNavigateBack()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to previous with no previous thread"}},run:(E,D,J)=>{A.navigateBack(),J()}},IO4({configService:this.widget.configService,getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??void 0,toastController:this.toastController}),{noun:"thread",verb:"switch to next",description:"Switch to next thread",keywords:["forward"],get status(){return A.threadNavigationHistory.canNavigateForward()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to next with no next thread"}},run:(E,D,J)=>{A.navigateForward(),J()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",status:{type:"enabled"},run:(E,D,J)=>{E.push(new $d0({mcpServers:this.widget.context.mcpServers,onDismiss:J}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",status:{type:"enabled"},run:(E)=>{E.pushWithDismiss((D)=>new tc0({toolboxes:this.widget.context.toolboxes,onDismiss:D}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","blog","announcements"],status:{type:"enabled"},run:async(E,D,J)=>{try{await t6(D,"https://ampcode.com/chronicle")}finally{J()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config"],status:{type:"enabled"},run:()=>{yK(this.widget.context.settingsFilePath).catch((E)=>{S.error("Failed to open settings file in editor",{error:E})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains"],status:{type:"enabled"},run:(E,D,J)=>{E.pushWithDismiss((U)=>new Qd0({onCancel:U,onSelect:(Y)=>{this.handleIdeSelection(Y),J()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["manual","?"],status:{type:"enabled"},run:(E,D,J)=>{E.push(new wm0({commands:eB.of(D).commands,onDismiss:J}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",status:{type:"enabled"},run:(E,D,J)=>{J(),A.showWelcome()}},{noun:"amp",verb:"end credits",description:"Roll the full-screen Amp credits",status:{type:"enabled"},run:(E,D,J)=>{J(),A.showEndCredits()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["v"],status:{type:"enabled"},run:(E,D,J)=>{E.push(new B1({header:"Amp Version",maxWidth:72,onDismiss:J,child:new D0({text:new h(i50({version:"0.0.1780478921-g021c3e",buildTimestamp:"2026-06-03T09:34:18.051Z",buildType:"release"}))})}))}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","bye"],shortcut:HA.ctrl("c"),status:{type:"enabled"},run:(E,D)=>{N4.maybeInvoke(D,new iK)}},...Q,...cN4(this.widget.context.logFilePath)].map((E)=>this.commandRegistry.register(E));return()=>{for(let E of B)E()}}build(A){let Q=this.buildHints(),$=this.ideStatus.getValue(),B=this.notices.current,E=new lc0({initialAgentMode:this.widget.context.sessionAgentMode,initialPluginAgentModeKey:this.widget.context.initialPluginAgentModeKey,analyzeContextForThread:this.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,editorFocusNode:this.editorFocusNode,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:$,statusItems:this.pluginIntegration?.getStatusItems()??[],pluginConfirmationBlocked:this.pluginIntegration?.hasBlockingConfirmDialog()??!1,notificationService:this.widget.notificationService,notice:this.activeThreadContext||this.welcomeVisible?null:B,onDismissNotice:(I)=>this.notices.dismiss(I)}),D=W4.of(A),J=D.capabilities.animationSupport!=="disabled",U=this.threadListSidebar.visibleWidth(),Y=Math.max(0,D.size.width-U),F=[new WA({constraints:Y4.tight(D.size.width,D.size.height),child:this.threadListSidebar.buildBody(E)})];if(this.commandPalette.isEnabled())F.push(new c6({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new um0({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.welcomeVisible)F.push(ad0({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,loadThreadTail:this.widget.context.loadThreadTail,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.welcomeVisible)F.push(new c6({debugLabel:"WelcomeDialogOverlay",child:new Ep0({onDismiss:this.dismissWelcome,onQuit:()=>X1.instance.stop(),animationsEnabled:J,variant:this.widget.welcomeVariant})}));let X=this.executorAlreadyConnectedDialog;if(X)F.push(new c6({debugLabel:"ExecutorAlreadyConnectedDialogOverlay",child:new em0({existingExecutorPid:X.existingExecutorPid,onChoice:this.handleExecutorAlreadyConnectedChoice})}));if(F.push(...this.mcpTrustIntegration?.buildDialogLayers()??[]),F.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.context.isInternalUser)F.push(new Om0({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:n90.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)F.push(new Ad0);if(this.endCreditsVisible)F.push(new nm0({onComplete:this.completeEndCredits,highScore:this.invadersHighScore,onHighScoreChange:this.updateInvadersHighScore}));return new HQ({context:this.widget.context,child:new eB({commandRegistry:this.commandRegistry,child:new wv({completionBuilder:this.widget.completionBuilder,child:new EQ({controller:this.toastController,child:new N4({actions:this.buildActions(),child:new pQ({debugLabel:"AppShortcuts",shortcuts:this.buildShortcuts(),child:new cQ({debugLabel:"AppShellFocus",canRequestFocus:!1,skipTraversal:!0,child:new Tb0({controller:this.toastController,complexToastControllers:[this.relaunchNotificationController,...B&&this.activeThreadContext&&!this.welcomeVisible?[this.notices]:[]],child:new Mm0({configReloadEvents:this.widget.configService.configReloadEvents,toastController:this.toastController,child:new Bl({left:U,width:Y,child:new QQ({children:F})})})})})})})})})})})}buildShortcuts(){let A=new Map([[HA.ctrl("c"),new y70],[HA.ctrl("o"),new h70],[HA.alt("i"),new m70],[HA.alt("p"),new Wp],[HA.ctrl("."),new p70],[HA.ctrl("t"),new n70],...this.threadListSidebar.shortcutEntries()]);if(n90.env.NODE_ENV==="development"&&n90.platform==="darwin")A.set(HA.meta("r"),new b70);return A}buildActions(){let A=new pA(()=>{if(c2.hasAnyCopyableSelection())return c2.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new pA(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),$=new pA(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),B=new pA(()=>{return this.startNewDraftThread(),"handled"}),E=new pA(()=>{return X1.instance.stop(),"handled"}),D=new pA(()=>{return dl({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),"handled"}),J=new pA((I)=>{if(!I.text)return"ignored";return X1.instance.tuiInstance.clipboard.writeText(I.text).then((G)=>{if(G.ok)this.toastController.show(I.successMessage,"success",2000);else this.toastController.show(`${I.failureMessage}: ${G.userFacingErrorMessage}`,"error",4000)}).catch((G)=>{S.error("Failed to copy Neo text to clipboard",{error:G}),this.toastController.show(I.failureMessage,"error",2000)}),"handled"}),U=new pA(()=>{return X1.instance.toggleFrameStatsOverlay(),"handled"}),Y=new pA(()=>this.notices.dismissCurrent()?"handled":"ignored"),Z=new pA(()=>{if(!this.widget.context.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=Tw4({getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,context:this.widget.context,toastController:this.toastController,startNewDraftThread:this.startNewDraftThread,sendFeedbackReport:this.sendFeedbackReport}),X=new pA(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[y70,A],[Xl,B],[iK,E],[b70,D],[ZB,J],[Kl,$],[h70,Q],[m70,Z],...this.threadListSidebar.actionEntries(),[p70,Y],...F,[Wp,U],[n70,X]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.cancelOwnerUIRequests(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),this.widget.onActiveThreadChange?.(null),this.syncEmptyThreadPluginConfirmationTitle(),A.prompt!==void 0)this.editorController.text=A.prompt;this.focusEditorAfterNextFrame()}syncEmptyThreadPluginConfirmationTitle=()=>{this.emptyThreadTerminalTitleController.setPluginConfirmationBlocked(this.activeThreadContext===null&&(this.pluginIntegration?.hasBlockingConfirmDialog()??!1))};closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await pP(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){S.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.context.sessionAgentMode,$=A,B=Yq(Q),E=H50(this.widget.context,Q);if(B!==void 0&&E!==void 0)$={...$,[B]:E};return W50($,{agentMode:Q,explicitEffort:this.widget.context.explicitReasoningEffort,sessionState:this.widget.context})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=iR4(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if($Y(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=iR4(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(lK);if(this.exitHintTimer.isActive())A.add(Xv);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),X1.instance.stop();else this.exitHintTimer.activate()};dismissWelcome=()=>{if(!this.welcomeVisible)return;this.setState(()=>{this.welcomeVisible=!1}),this.widget.onWelcomeDismissed?.()};updateInvadersHighScore=(A)=>{if(A<=this.invadersHighScore)return;this.setState(()=>{this.invadersHighScore=A}),JJ((Q)=>({...Q,neoInvadersHighScore:Math.max(Q.neoInvadersHighScore,A)})).catch((Q)=>{S.warn("Failed to save Neo Invaders high score",{error:Q instanceof Error?Q.message:String(Q)})})};showWelcome=()=>{if(this.welcomeVisible)return;this.setState(()=>{this.welcomeVisible=!0})};showEndCredits=()=>{if(this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!0})};completeEndCredits=()=>{if(!this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!1})};promptExecutorAlreadyConnected(A){return new Promise((Q)=>{this.setState(()=>{this.executorAlreadyConnectedDialog={existingExecutorPid:A.existingExecutorPid,resolve:($)=>{Q($==="watch"?"observe":"disconnect")}}})})}handleExecutorAlreadyConnectedChoice=(A)=>{if(this.resolveExecutorAlreadyConnectedDialog(A),A==="exit")X1.instance.stop()};resolveExecutorAlreadyConnectedDialog(A){let Q=this.executorAlreadyConnectedDialog;if(!Q)return;this.setState(()=>{this.executorAlreadyConnectedDialog=null}),Q.resolve(A)}closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1}),this.focusEditorAfterNextFrame()};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,$=null,B,E,D)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),U=A.find(Z00);if(U)this.widget.history.add(U.text,n90.cwd()),this.widget.history.reset();let Y=$?void 0:await this.widget.getDefaultNewThreadVisibility?.(),Z=$??Y??null,F=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,Z??void 0,E,D);if(this.sendUserMessage(F,A,E?void 0:Q,E?void 0:B),!E)this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings);this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(F)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.context.sessionAgentMode=A;let $=Q["reasoning.effort"];if($!==void 0)this.widget.context.lastReasoningEffortByMode={...this.widget.context.lastReasoningEffortByMode??{},[A]:$};let B=Yq(A),E=B?Q[B]:void 0;if(E!==void 0)this.widget.context.lastSpeedByMode={...this.widget.context.lastSpeedByMode??{},[A]:E};JJ((D)=>{let J={...D,agentMode:A};if($!==void 0)J={...J,lastReasoningEffortByMode:{...J.lastReasoningEffortByMode??{},[A]:$}};if(E!==void 0)J={...J,lastSpeedByMode:{...J.lastSpeedByMode??{},[A]:E}};return J}).catch((D)=>{S.warn("Failed to persist Neo session defaults for new message",{error:D instanceof Error?D.message:String(D)})})}sendUserMessage(A,Q,$,B,E){let D=l50(this.ideStatus.getValue());if(B===void 0){A.client.sendUserMessage(Q,$,{steer:E?.steer,userState:D}).catch((J)=>{S.warn("Failed to send user message",{error:J})});return}A.client.sendUserMessage(Q,$,{reasoningEffort:B,steer:E?.steer,userState:D}).catch((J)=>{S.warn("Failed to send user message",{error:J})})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};getRelaunchThreadIDs=()=>{let A=new Set,Q=this.getActiveThreadID();if(Q)A.add(Q);for(let $ of this.widget.clientPool.activeThreadIDs)A.add($);return[...A]};appendPluginMessagesToThread=async(A,Q,$)=>{let B=this.activeThreadContext;if(!B){if(Q){for(let D of A)await this.widget.clientPool.appendUserMessageToThread(Q,D.content,$);return}throw Error("appendToThread is not available - no active thread")}let E=B.client.getThreadId();if(Q&&E!==Q){for(let D of A)await this.widget.clientPool.appendUserMessageToThread(Q,D.content,$);return}for(let D of A)this.sendUserMessage(B,[{type:"text",text:D.content}],void 0,void 0,$)};readPluginThreadMessages=async(A,Q)=>{let $=this.activeThreadContext;if(!$)throw Error("thread.messages is not available - no active thread");let B=$.client.getThreadId();if(Q&&B!==Q)throw Error("thread.messages is only available for the active thread");return BoA(EoA($.observer.protocolMessages()),A)};runPluginAgent=async(A,Q)=>{await this.ensureDraftThreadSettingsInitialized();let $=this.widget.clientPool.createNewThread(this.widget.context.sessionAgentMode,this.draftThreadSettings,void 0,A,Q.agentModeDisplay,Q.parentThreadID,{trackAsLastActive:!1});this.sendUserMessage($,[{type:"text",text:Q.message}]);try{let B=await sF6($,{timeoutMs:Q.timeoutMs}),E=$.client.getThreadId();return E?{threadID:E,text:B}:{text:B}}finally{this.widget.clientPool.disconnect($)}};async connectToExistingThread(A,Q={}){let $=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let B=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.context.observerOnly,onExecutorAlreadyConnected:(E)=>this.promptExecutorAlreadyConnected(E)});if(this.setActiveClient(B),Q.recordNavigation&&$!==A)this.threadNavigationHistory.recordNavigation($);if(Q.initialUserInput)this.sendUserMessage(B,[{type:"text",text:Q.initialUserInput}])}catch(B){if(S.error("Failed to load thread",{error:B,threadID:A}),this.toastController.show(`Failed to load ${A}: ${B instanceof Error?B.message:String(B)}`,"error",4000),Q.rethrowError)throw B}finally{this.setState(()=>{this.connectingToThreadID=null})}}async connectToInitialThreads(A,Q={}){await this.connectToExistingThread(A,Q);let $=this.widget.initialThreadIDs.filter((B)=>B!==A);await Promise.all($.map((B)=>this.resumeBackgroundThread(B)))}async resumeBackgroundThread(A){try{await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.context.observerOnly,onExecutorAlreadyConnected:async()=>"observe"})}catch(Q){S.error("Failed to resume background thread",{error:Q,threadID:A}),this.toastController.show(`Failed to resume ${A}: ${Q instanceof Error?Q.message:String(Q)}`,"error",4000)}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}setActiveClient({client:A,observer:Q,agentModeDisplay:$}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q,agentModeDisplay:$}}),this.syncEmptyThreadPluginConfirmationTitle(),this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=Q.threadID().subscribe((B)=>{this.widget.onActiveThreadChange?.(B)}),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription?.unsubscribe(),this.pluginIntegration?.cancelOwnerUIRequests(),this.activePluginMessageSubscription=Q.pluginMessages().subscribe((B)=>{this.pluginIntegration?.handlePluginMessage(B,(E)=>{A.sendPluginMessage(E)})}),this.activePluginUIRequestsSubscription=Q.pluginUIRequests().subscribe((B)=>{this.pluginIntegration?.handlePluginMessage({type:"plugin_message",message:{type:"event",event:"plugin.ui.snapshot",data:{requests:[...B]}}},(E)=>{A.sendPluginMessage(E)})})}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){S.error("Failed to connect to IDE",{error:Q});let $=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${$}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.threadListSidebar.dispose(),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.emptyThreadTerminalTitleController.dispose(),this.mcpTrustIntegration?.dispose(),this.mcpTrustIntegration=null,this.updateRelaunchIntegration?.dispose(),this.updateRelaunchIntegration=null,this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.noticesPollingTimeout)clearTimeout(this.noticesPollingTimeout),this.noticesPollingTimeout=null;this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.notices.dispose(),this.widget.notificationService.detach(),this.toastController.dispose(),this.editorFocusNode.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.executorAlreadyConnectedDialog!==null||this.welcomeVisible||(this.mcpTrustIntegration?.hasBlockingDialog()??!1)||this.endCreditsVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function iR4(A,Q,$){let B={...A};for(let E of tF6(Q,$)){if(!$Y(A[E],Q[E]))continue;let D=$[E];if(D===void 0)delete B[E];else B[E]=D}return B}function tF6(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}hB();function aR4(A,Q,$,B){let E=ZbA(A),D="\x1B[0m",J="\x1B[34m",U="\x1B[90m",Y="\x1B[2m",Z=[];if(A.archived)Z.push("\x1B[90m\x1B[2mArchived\x1B[0m");Z.push(`${E}`),Z.push(`\x1B[34m${Q}\x1B[0m`),Z.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let F=14,X=7,I=new m2(F,X),G=new v5(42),V=new Ov(F,X,F,X,F,X,0,A.agentMode??"smart","intensity","ascii",void 0,void 0,d0.default(),G);V.layout(Y4.tight(F,X)),V.paint(I,0,0);let K=I.getBuffer().getCells(),z=0;for(let R=0;R<X;R++)if(K[R].some((_)=>_.char!==" ")){z=R;break}let W=X-1;for(let R=X-1;R>=0;R--)if(K[R].some((_)=>_.char!==" ")){W=R;break}function C(R,_){if(!R)return"";if(R.type==="rgb"){let{r:v,g:k,b:m}=R.value;if($.getColorDepth()>=24)return`\x1B[${_?38:48};2;${v};${k};${m}m`;let x=Mp(v,k,m);return`\x1B[${_?38:48};5;${x}m`}return""}let H=[];if(W>=z)for(let R=z;R<=W;R++){let _="";for(let v=0;v<F;v++){let k=K[R][v],m=k.char,x=C(k.style.fg,!0);_+=x+m+"\x1B[0m"}H.push(_)}let N=H.length,q=Math.max(N,Z.length),w=Math.floor((q-N)/2),O=Math.floor((q-Z.length)/2);for(let R=0;R<q;R++){let _=" ".repeat(F);if(R>=w&&R<w+N)_=H[R-w];let v=" ",k="";if(R>=O&&R<O+Z.length)k=Z[R-O];$.write(_+v+k+`
4432
4432
  `)}if(B)$.write(`
4433
4433
  \x1B[90m${B}\x1B[0m
4434
4434
  `)}a0();class Jp0{status=f3.status;constructor(){this.autoConnect()}async connect(A){await f3.start(A,!0,"user-initiated"),f3.selectConfig(A)}autoConnect(){let A=f3.getSelectedConfig();if(A){f3.start(A,!0,"auto-startup").catch((Q)=>{S.error("Failed to auto-connect to IDE",{error:Q})});return}this.discoverAndConnect()}async discoverAndConnect(){try{await ThA();let A=await sC({});if(A.length===1&&A[0])f3.selectConfig(A[0]),await f3.start(A[0],!0,"auto-startup")}catch(A){S.error("Failed to auto-discover IDE",{error:A})}}}a0();a0();import{exec as eq}from"node:child_process";function oR4(A="idle"){try{if(A==="idle"){if(process.platform==="darwin")eq("afplay /System/Library/Sounds/Submarine.aiff");else if(process.platform==="win32")eq("powershell [console]::beep(800,200)");else if(process.platform==="linux")eq("paplay /usr/share/sounds/freedesktop/stereo/message.oga || beep")}else if(A==="idle-review"){if(process.platform==="darwin")eq("afplay /System/Library/Sounds/Glass.aiff")}else if(A==="requires-user-input"){if(process.platform==="darwin")eq("afplay /System/Library/Sounds/Ping.aiff");else if(process.platform==="win32")eq("powershell [console]::beep(1000,300)");else if(process.platform==="linux")eq("paplay /usr/share/sounds/freedesktop/stereo/dialog-information.oga || beep -f 1000 -l 100")}}catch(Q){S.error(`Failed to play notification sound (${A}):`,Q)}}Pp();Hb0();var eF6=2000,AX6="Agent is ready",QX6="Waiting for approval";function rR4(A){let Q=!0,$=!0,B=A.configService.config.subscribe((W)=>{Q=W.settings["notifications.enabled"]??!0,$=W.settings["notifications.system.enabled"]!==!1}),E=0,D=()=>{let W=G?.prepareTerminalTitleForNotification();if(W!==void 0)process.stdout.write(cK4(W))},J=(W)=>{if(!Q)return;let C=Date.now();if(C-E<eF6)return;if(E=C,xK())return;if(PG4())D(),setTimeout(vG4,Eb0);else oR4(W)},U=()=>{J("idle"),V(AX6)},Y=()=>{J("requires-user-input"),V(QX6)},Z=(W)=>W?.attempt===void 0||W.attempt===0,F=null,X=null,I=null,G,V=(W)=>{if(!Q||!$)return;if(xK()&&!Cb0()&&!T50())return;D(),setTimeout(()=>{process.stdout.write(dK4(W))},Eb0)},K=()=>{F?.unsubscribe(),X?.unsubscribe(),F=null,X=null,I=null,G=void 0};return{attach:(W,C,H)=>{if(K(),G=H,C)X=C.subscribe({next:(N)=>{if(N===null)return;if(!Z(N))return;U()},error:(N)=>{S.debug("Neo notification active error stream errored",{error:N})}});F=W.subscribe({next:(N)=>{try{let q=I!==null&&c3(I),w=I==="awaiting_approval",O=q||w;if(N==="awaiting_approval"&&!w)Y();else if(N==="idle"&&O)U()}catch(q){S.debug("Neo notification handling failed",{error:q})}finally{I=N}},error:(N)=>{S.debug("Neo notification agent state stream errored",{error:N})}})},detach:K,unsubscribe(){K(),B.unsubscribe()}}}function $X6({initialUserInput:A,showWelcome:Q,hideWelcome:$,welcomeVariant:B,welcomeDismissed:E}){if($)return{show:!1,markDismissedOnDismiss:!1};if(B==="npm-migration")return{show:!0,markDismissedOnDismiss:!1};if(Q)return{show:!0,markDismissedOnDismiss:!0};let D=!A&&!E;return{show:D,markDismissedOnDismiss:D}}async function BX6(A){await JJ((Q)=>nP(Q,A,"interactive"))}async function sR4(A,Q={}){let{initialThreadIDs:$=[],initialUserInput:B,getDefaultNewThreadVisibility:E,openThreadPickerOnStart:D=!1,observerOnly:J=!1,initialAgentMode:U,initialPluginAgentModeKey:Y,initialReasoningEffort:Z,onFirstFrame:F,showWelcome:X=!1,hideWelcome:I=!1,welcomeVariant:G="intro"}=Q,V=G==="npm-migration";if($.length>1)S.info("Resuming multiple initial threads",{threadIDs:$});let K=async(m)=>{let x=await A.getThreadFromServer(m);if(!x)return null;return g30(x)},z=async(m)=>{let x=await A.getThreadFromServer(m);if(!x)throw Error(`Thread ${m} not found`);let T=await JB(m,A.configService,A.apiKey,{usesThreadActors:!0}),f=Z7({endpoint:A.rivetEndpoint,poolName:T.poolName}),c={wsToken:T.wsToken,transport:"json-rpc"},b=await f.threadActor.get([T.threadId],{params:c}).fetch("/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({thread:m30(x)}),skipReadyWait:!0});if(!b.ok&&b.status!==409)throw Error(`Thread import failed (${b.status}): ${await b.text()}`);try{await o30(m,A.configService,A.apiKey,{executorType:"local-client"})}catch(p){S.warn("failed to mark thread as imported on server",{threadID:m,error:p instanceof Error?p.message:String(p)})}},W=new ay0(A.rivetEndpoint,A.apiKey,A.configService,{clientID:uK.parse(`neo-${crypto.randomUUID()}`),toolService:A.toolService,skillService:A.skillService,requestPluginToolCall:(m)=>A.pluginService.event.toolCall(m),requestPluginToolResult:(m)=>A.pluginService.event.toolResult(m),pluginService:A.pluginService,pluginPlatform:A.pluginPlatform,canUseV2LocalThreadChanges:A.canUseV2LocalThreadChanges,invokeTool:async(m,x)=>{let T=typeof x.args==="object"&&x.args!==null?x.args:{},f=await vK({toolName:x.toolName,configService:A.configService,toolService:A.toolService,mcpService:A.mcpService,skillService:A.skillService,toolUseID:x.toolCallId,threadId:m});return A.toolService.invokeTool(x.toolName,{args:T},f)},persistLastThreadID:BX6,readFileSystemDirectory:A.readFileSystemDirectory},K,z),C=await Zq(),H=$X6({initialUserInput:B,showWelcome:X,hideWelcome:I,welcomeVariant:G,welcomeDismissed:C.neoWelcomeDismissed}),N={ampURL:A.ampURL,configService:A.configService,getThreadMarkdown:async(m)=>{let x=await A.getThreadFromServer(m);return x?FQ0(x):null},isInternalUser:A.isInternalUser,listThreads:A.listThreads,loadThreadTail:A.getThreadTail,logFilePath:pc,mcpServers:A.mcpService.servers,pluginPlatform:A.pluginPlatform,pluginService:A.pluginService,toolboxes:A.toolboxes,observerOnly:V?!1:J,invadersHighScore:C.neoInvadersHighScore,sessionAgentMode:U??C.agentMode,threadListSidebarVisible:C.threadListSidebarVisible,initialPluginAgentModeKey:Y,explicitReasoningEffort:Z,lastReasoningEffortByMode:C.lastReasoningEffortByMode,lastSpeedByMode:C.lastSpeedByMode,settingsFilePath:A.settingsFilePath,workspaceRoot:A.workspaceRoot},q=(m,x)=>{return OK4({ampURL:A.ampURL,configService:A.configService,threadID:m,signal:x})},w=()=>jK4({apiKey:A.apiKey,configService:A.configService,rivetEndpoint:A.rivetEndpoint}),O=new Jp0,R=rR4({configService:A.configService}),_=await A.configService.getLatest();X1.instance.tuiInstance.setOptions({queryOptions:{animationDisabled:_.settings["terminal.animation"]===!1}});let v=new Set,k=new Im0;try{await Nb0(new Dp0({clientPool:W,listSkillsForThread:q,completionBuilder:A.completionBuilder,history:new Ly0,ideManager:O,configService:A.configService,updateService:A.updateService,initialThreadIDs:V?[]:$,notificationService:R,mcpTrustHandler:A.mcpTrustHandler,initialUserInput:V?void 0:B,getDefaultNewThreadVisibility:E,observeThreadSummaries:w,openThreadPickerOnStart:V?!1:D,workspaceSettingsFilePath:A.workspaceSettingsFilePath,context:N,showWelcome:H.show,welcomeVariant:G,onActiveThreadChange:A.setActiveThreadID,onRelaunchRequested:k.request,onWelcomeDismissed:H.markDismissedOnDismiss?()=>{JJ(TK4).catch((x)=>{S.warn("Failed to mark Neo welcome as dismissed",{error:x})})}:void 0,onThreadArchived:(x)=>{v.add(x)},onFirstFrame:F}));let m=W.lastActiveObservingClient;if(m&&k.shouldShowExitSummary){let{client:x,observer:T}=m,f=x.getThreadId();if(f){let c={id:f,title:T.title().getValue(),agentMode:T.agentMode,archived:v.has(f)},d=`${A.ampURL.replace(/\/$/,"")}/threads/${f}`;aR4(c,d,process.stdout)}}}finally{process.stdout.write(k50("")),R.unsubscribe(),W.dispose(),await A.dispose?.()}process.exit(k.relaunchIfRequested(A.workspaceRoot)??0)}import{execFile as EX6}from"node:child_process";import{closeSync as tR4,openSync as DX6,writeSync as JX6}from"node:fs";import UX6 from"node:tty";var YX6="\x1B[c",ZX6="\x1B[?1004h",FX6="\x1B[?1004l",XX6="\x1B[?u",eR4=200,IX6="\x1B[>4;2m",GX6="\x1B[?9001h",VX6="\x1B[?9001l";function AP4(){let A=null;try{if(process.stdout.isTTY){let Q=process.stdout.getWindowSize();A=[Q[0],Q[1]]}}catch{}return{isTTY:process.stdout.isTTY,columns:process.stdout.columns??null,rows:process.stdout.rows??null,windowSize:A,hasRefreshSize:typeof process.stdout._refreshSize==="function"}}function KX6(){if(process.stdout.isTTY)return{stream:process.stdout,target:"stdout",dispose:()=>{}};if(process.stderr.isTTY)return{stream:process.stderr,target:"stderr",dispose:()=>{}};if(process.platform!=="win32")try{let A=DX6("/dev/tty","w");if(UX6.isatty(A))return{stream:{write(Q){return JX6(A,Q),!0}},target:"dev-tty",dispose:()=>{tR4(A)}};tR4(A)}catch{}return{stream:process.stdout,target:"stdout",dispose:()=>{}}}function j$(A,Q){if(!process.stdout.writable||process.stdout.destroyed){Q?.();return}let $=`${JSON.stringify(A)}
@@ -6359,7 +6359,7 @@ Start Amp from a smaller directory.`};function $I(A,Q){if(!CG4())return;S.debug(
6359
6359
  `)}function ev4(A,Q){A.command("usage").description("Show your current Amp usage and credit balance").action(async($,B)=>{let E=B.optsWithGlobals(),D=await Q(E),J=await t30(D),U=await j4.userDisplayBalanceInfo({},{config:J});if(!U.ok){if(U.error.code==="auth-required")process.stderr.write(f0.red("Error: ")+"You must be logged in to view usage. Run `amp login` first.\n"),process.exit(1);process.stderr.write(f0.red("Error: ")+U.error.message+`
6360
6360
  `),process.exit(1)}process.stdout.write(await yK6(U.result.displayText)+`
6361
6361
  `),process.exit(0)})}var JN6=pi.join(AY,"logs","headless.log"),Ji0=pi.join(ty,"device-id.json");MX4();async function UN6(){let A=await Promise.all(rC.map(async(Q)=>{try{return{query:Q,hasConfigs:(await Q.listConfigs()).length>0}}catch($){return S.debug("Failed to detect query-based IDE integration",{ideName:Q.ideName,error:$}),{query:Q,hasConfigs:!1}}}));for(let Q of A)if(Q.hasConfigs)return Q.query;return}function jk4(){UN6().then((A)=>{if(A){let Q=P00(A.ideName);if(Q)pC(Q)}})}try{if(process.platform==="win32")await Promise.resolve().then(() => M4(VT(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(A){q7.write(`Failed to change directory to ${process.env.AMP_PWD}: ${A}
6362
- `)}function YN6(A){process.emitWarning=(Q,$,B,E)=>{let D=typeof Q==="string"?Q:Q.message||String(Q),J=$||"Warning",U=!1;A.warn(D,{name:J,code:B})}}function u3(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")iG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli"&&KT(Q.mode))iG("experimental.agentMode",Q.mode)}function ZN6(A,Q){if(!J$(Q))return;if(!_7(Q.user.email)){if(A.model)throw new GA("The --model flag is only available for Amp employees.",1);iG("internal.model",void 0);return}if(A.model)iG("internal.model",IN6(A.model))}function Nk4(A){let Q=A.indexOf(":");if(Q===-1)throw new GA(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let $=A.slice(0,Q).trim(),B=A.slice(Q+1).trim();if(!$||!B)throw new GA(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function FN6(A){if(A===void 0)return;let Q=A.trim();if(I00(Q))return Q;throw new GA(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function XN6(A,Q){if(nC(A))return;throw new GA(`Reasoning effort "${Q}" is not available for ${A} mode.`,1)}function IN6(A){if(!A.includes("="))return Nk4(A),A;let Q={};for(let $ of A.split(",")){let B=$.trim();if(!B)continue;let E=B.indexOf("=");if(E===-1)throw new GA(`Invalid mode-specific model entry "${B}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let D=B.slice(0,E).trim(),J=B.slice(E+1).trim();if(!D)throw new GA(`Missing mode name in "${B}". Expected "mode=provider:model".`,1);if(!J)throw new GA(`Missing model value for mode "${D}". Expected "${D}=provider:model".`,1);Nk4(J),Q[D]=J}if(Object.keys(Q).length===0)throw new GA("No valid model overrides found in --model flag value.",1);return Q}function sE0(A,Q,$){let B=Number(A);if(!Number.isInteger(B)||B<$.min)throw new L30(`${Q} must be an integer >= ${$.min}`);if($.max!==void 0&&B>$.max)throw new L30(`${Q} must be an integer <= ${$.max}`);return B}function GN6(A,Q){if(A.getOptionValueSourceWithGlobals("sp")==="cli"&&Q.sp)return Q.sp;if(A.getOptionValueSourceWithGlobals("systemPrompt")==="cli"&&Q.systemPrompt)return Q.systemPrompt;return}async function VN6(A){try{return await Lk4(A,"utf-8")}catch{return A}}async function KN6(A,Q,$){let B=GN6(A,Q);if(!B)return;let E=J$($)?$.features:[],D=J$($)?$.user.email:void 0;if(!Zi0(E,WD.HARNESS_SYSTEM_PROMPT)&&!(D&&_7(D)))throw new GA("You are not allowed to do this.",1);iG("systemPrompt",await VN6(B))}function Zi0(A,Q){return A?.some(($)=>$.name===Q&&$.enabled)??!1}async function zN6(A,Q){let $=await j4.getUserInfo({},{config:A});return $.ok?Zi0($.result.features,Q):!1}function WN6(A){return A!=="pending"}function Gu(A){if(!J$(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function CN6(A){let Q=Gu(A);if(Q)return Q.id;if(lC(A))throw Error(A.error.message);throw Error("unreachable")}function HN6(A){try{let Q=new URL(A);return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"}catch{return A.includes("localhost")||A.includes("127.0.0.1")}}function NN6(A){let B=HN6(A)?"Run `pnpm dev` to start the local server, then try again.":"Check your network connection or the server URL and try again.";return new GA(`Couldn't connect to the Amp server at ${A}.`,1,B)}function Fi0(A,Q){let $=fx0(Error(A.error.message));if($.message===W3.networkOffline||$.message===W3.networkTimeout)return NN6(Q);if($.message!==W3.internalBug)return new GA($.message,1,$.suggestion);return new GA(A.error.message.replace(/^Error: /,""),1)}async function qN6(){if(process.versions.bun)return!1;try{return await EZ()==="npm"}catch(A){return S.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var qk4=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH or with AMP_FORCE_BEL; enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??$2,description:`Custom settings file path (overrides the default location ${$2})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(S).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${pc})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:jE(),description:(A)=>A?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(A)=>A?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"mode",long:"mode",short:"m",type:"option",default:s9.SMART.key,description:`Set the agent mode (${lG({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`},{name:"effort",long:"effort",type:"option",description:"Set reasoning effort for the new thread, when supported by the selected mode",choices:["none","minimal","low","medium","high","xhigh","max"]},{name:"takeMeBack",long:"take-me-back",type:"switch",description:"Show migration instructions for the removed legacy runtime",hidden:!0},{name:"orb",long:"neo-orb",type:"switch",description:"Use the experimental Neo splash orb",hidden:!0},{name:"hideWelcome",long:"hide-welcome",type:"switch",description:"Skip the welcome experience on startup",hidden:!0},{name:"showWelcome",long:"show-welcome",type:"switch",description:"Show the welcome experience on startup",hidden:!0},{name:"observe",long:"observe",type:"option",description:"Open the Neo TUI as an observer of an existing thread (thread ID or URL)",hidden:!0},{name:"headless",long:"headless",type:"optional-option",description:"Run headless thread-actor executor (no TUI). Optionally provide a thread ID to connect to existing thread, otherwise create one.",hidden:!0},{name:"sp",long:"sp",type:"option",description:"Custom system prompt text or file path",hidden:!0},{name:"systemPrompt",long:"system-prompt",type:"option",description:"Custom system prompt text",hidden:!0},{name:"model",long:"model",type:"option",description:'Override the model. Use "provider:model" for all modes, or "mode=provider:model,mode=provider:model" for mode-specific overrides',hidden:!0}],uk4=(A)=>("deprecated"in A)&&A.deprecated===!0,uN6=(A)=>("hidden"in A)&&A.hidden===!0,wN6=(A)=>("default"in A),MN6=(A)=>("default"in A)?A.default:void 0;function wk4(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let $=FN6(Q.effort);if($!==void 0){if(KT(Q.mode))XN6(Q.mode,$)}return $}var ON6="Amp Neo is now Amp and available to everyone. If you need to finish work in the old Amp, you can use an older version. For instructions on how to do that and more information: https://ampcode.com/news/drop-the-neo";function KT(A){return Object.values(s9).some((Q)=>Q.key===A)}function LN6(A,Q){if(KT(A))return A;throw new GA(`${Q} does not support plugin-defined agent modes`,1)}function Rk4(A,Q){if(KT(Q))return{agentMode:Q};let $=A.agentModes.list().find((E)=>E.key===Q||E.label===Q);if(!$){let E=lG({}).map((U)=>U.mode).join(", "),D=A.agentModes.list().map((U)=>U.label).join(", "),J=D?` Plugin modes: ${D}.`:"";throw new GA(`Unknown agent mode '${Q}'. Built-in modes: ${E}.${J}`,1)}let B={label:$.label};if($.color!==void 0)B.color=$.color;return{agentMode:s9.SMART.key,agent:$.agent,agentModeDisplay:B,pluginAgentModeKey:$.key}}async function jN6(A,Q,$){if(A.getOptionValueSourceWithGlobals("mode")!=="cli")return;return await Q.initialized,Rk4(Q,$)}function RN6(A,Q){let $=Q.args[0],B=Q.commands.map((D)=>D.name());if($&&!$.includes(" ")&&$.length<30&&!/[./\\]/.test($)){let D=B.filter((U)=>$.includes(U)||U.includes($)),J="Run amp --help for a list of available commands.";if(D.length>0)J=`Did you mean: ${D.join(", ")}? Or run amp --help for all commands.`;throw new GA(W3.unknownCommand($),1,J)}}var tE0=m0.file(DN6.homedir()),Ui0=process.env.XDG_CONFIG_HOME?m0.file(process.env.XDG_CONFIG_HOME):BA.joinPath(tE0,".config");async function vB(A,Q,$){let B=$?.deferAuth??!1,E=$?.skipToolProviders??!1;NbA("0.0.1780456213-g47360c");let D=u00({storage:A.settings,secretStorage:A.secrets,workspaceRoot:process.cwd(),defaultAmpURL:A.ampURL,homeDir:tE0,userConfigDir:Ui0}),J=A.secrets.get("apiKey",A.ampURL),U=AL(D),Y=null,Z=()=>{return},F=new Promise((t)=>{Z=t}),X=J.then(async(t)=>{if(!t&&!B)await F;return Y??=U.subscribe(()=>{}),T4(U.pipe(U5(WN6)))});X.catch(()=>{return}),kv4(D);let I=await D.getLatest();S.debug("Global configuration initialized",{settingsKeys:Object.keys(I.settings)});let G=!1;{let t=await J;if(G=Boolean(t),S.info("API key lookup before login",{found:Boolean(t),ampURL:A.ampURL,deferAuth:B}),!t)if(B)S.info("No API key found, continuing startup with deferred auth");else{vQ.write(`No API key found. Starting login flow...
6362
+ `)}function YN6(A){process.emitWarning=(Q,$,B,E)=>{let D=typeof Q==="string"?Q:Q.message||String(Q),J=$||"Warning",U=!1;A.warn(D,{name:J,code:B})}}function u3(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")iG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli"&&KT(Q.mode))iG("experimental.agentMode",Q.mode)}function ZN6(A,Q){if(!J$(Q))return;if(!_7(Q.user.email)){if(A.model)throw new GA("The --model flag is only available for Amp employees.",1);iG("internal.model",void 0);return}if(A.model)iG("internal.model",IN6(A.model))}function Nk4(A){let Q=A.indexOf(":");if(Q===-1)throw new GA(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let $=A.slice(0,Q).trim(),B=A.slice(Q+1).trim();if(!$||!B)throw new GA(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function FN6(A){if(A===void 0)return;let Q=A.trim();if(I00(Q))return Q;throw new GA(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function XN6(A,Q){if(nC(A))return;throw new GA(`Reasoning effort "${Q}" is not available for ${A} mode.`,1)}function IN6(A){if(!A.includes("="))return Nk4(A),A;let Q={};for(let $ of A.split(",")){let B=$.trim();if(!B)continue;let E=B.indexOf("=");if(E===-1)throw new GA(`Invalid mode-specific model entry "${B}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let D=B.slice(0,E).trim(),J=B.slice(E+1).trim();if(!D)throw new GA(`Missing mode name in "${B}". Expected "mode=provider:model".`,1);if(!J)throw new GA(`Missing model value for mode "${D}". Expected "${D}=provider:model".`,1);Nk4(J),Q[D]=J}if(Object.keys(Q).length===0)throw new GA("No valid model overrides found in --model flag value.",1);return Q}function sE0(A,Q,$){let B=Number(A);if(!Number.isInteger(B)||B<$.min)throw new L30(`${Q} must be an integer >= ${$.min}`);if($.max!==void 0&&B>$.max)throw new L30(`${Q} must be an integer <= ${$.max}`);return B}function GN6(A,Q){if(A.getOptionValueSourceWithGlobals("sp")==="cli"&&Q.sp)return Q.sp;if(A.getOptionValueSourceWithGlobals("systemPrompt")==="cli"&&Q.systemPrompt)return Q.systemPrompt;return}async function VN6(A){try{return await Lk4(A,"utf-8")}catch{return A}}async function KN6(A,Q,$){let B=GN6(A,Q);if(!B)return;let E=J$($)?$.features:[],D=J$($)?$.user.email:void 0;if(!Zi0(E,WD.HARNESS_SYSTEM_PROMPT)&&!(D&&_7(D)))throw new GA("You are not allowed to do this.",1);iG("systemPrompt",await VN6(B))}function Zi0(A,Q){return A?.some(($)=>$.name===Q&&$.enabled)??!1}async function zN6(A,Q){let $=await j4.getUserInfo({},{config:A});return $.ok?Zi0($.result.features,Q):!1}function WN6(A){return A!=="pending"}function Gu(A){if(!J$(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function CN6(A){let Q=Gu(A);if(Q)return Q.id;if(lC(A))throw Error(A.error.message);throw Error("unreachable")}function HN6(A){try{let Q=new URL(A);return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"}catch{return A.includes("localhost")||A.includes("127.0.0.1")}}function NN6(A){let B=HN6(A)?"Run `pnpm dev` to start the local server, then try again.":"Check your network connection or the server URL and try again.";return new GA(`Couldn't connect to the Amp server at ${A}.`,1,B)}function Fi0(A,Q){let $=fx0(Error(A.error.message));if($.message===W3.networkOffline||$.message===W3.networkTimeout)return NN6(Q);if($.message!==W3.internalBug)return new GA($.message,1,$.suggestion);return new GA(A.error.message.replace(/^Error: /,""),1)}async function qN6(){if(process.versions.bun)return!1;try{return await EZ()==="npm"}catch(A){return S.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var qk4=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH or with AMP_FORCE_BEL; enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??$2,description:`Custom settings file path (overrides the default location ${$2})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(S).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${pc})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:jE(),description:(A)=>A?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(A)=>A?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"mode",long:"mode",short:"m",type:"option",default:s9.SMART.key,description:`Set the agent mode (${lG({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`},{name:"effort",long:"effort",type:"option",description:"Set reasoning effort for the new thread, when supported by the selected mode",choices:["none","minimal","low","medium","high","xhigh","max"]},{name:"takeMeBack",long:"take-me-back",type:"switch",description:"Show migration instructions for the removed legacy runtime",hidden:!0},{name:"orb",long:"neo-orb",type:"switch",description:"Use the experimental Neo splash orb",hidden:!0},{name:"hideWelcome",long:"hide-welcome",type:"switch",description:"Skip the welcome experience on startup",hidden:!0},{name:"showWelcome",long:"show-welcome",type:"switch",description:"Show the welcome experience on startup",hidden:!0},{name:"observe",long:"observe",type:"option",description:"Open the Neo TUI as an observer of an existing thread (thread ID or URL)",hidden:!0},{name:"headless",long:"headless",type:"optional-option",description:"Run headless thread-actor executor (no TUI). Optionally provide a thread ID to connect to existing thread, otherwise create one.",hidden:!0},{name:"sp",long:"sp",type:"option",description:"Custom system prompt text or file path",hidden:!0},{name:"systemPrompt",long:"system-prompt",type:"option",description:"Custom system prompt text",hidden:!0},{name:"model",long:"model",type:"option",description:'Override the model. Use "provider:model" for all modes, or "mode=provider:model,mode=provider:model" for mode-specific overrides',hidden:!0}],uk4=(A)=>("deprecated"in A)&&A.deprecated===!0,uN6=(A)=>("hidden"in A)&&A.hidden===!0,wN6=(A)=>("default"in A),MN6=(A)=>("default"in A)?A.default:void 0;function wk4(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let $=FN6(Q.effort);if($!==void 0){if(KT(Q.mode))XN6(Q.mode,$)}return $}var ON6="Amp Neo is now Amp and available to everyone. If you need to finish work in the old Amp, you can use an older version. For instructions on how to do that and more information: https://ampcode.com/news/drop-the-neo";function KT(A){return Object.values(s9).some((Q)=>Q.key===A)}function LN6(A,Q){if(KT(A))return A;throw new GA(`${Q} does not support plugin-defined agent modes`,1)}function Rk4(A,Q){if(KT(Q))return{agentMode:Q};let $=A.agentModes.list().find((E)=>E.key===Q||E.label===Q);if(!$){let E=lG({}).map((U)=>U.mode).join(", "),D=A.agentModes.list().map((U)=>U.label).join(", "),J=D?` Plugin modes: ${D}.`:"";throw new GA(`Unknown agent mode '${Q}'. Built-in modes: ${E}.${J}`,1)}let B={label:$.label};if($.color!==void 0)B.color=$.color;return{agentMode:s9.SMART.key,agent:$.agent,agentModeDisplay:B,pluginAgentModeKey:$.key}}async function jN6(A,Q,$){if(A.getOptionValueSourceWithGlobals("mode")!=="cli")return;return await Q.initialized,Rk4(Q,$)}function RN6(A,Q){let $=Q.args[0],B=Q.commands.map((D)=>D.name());if($&&!$.includes(" ")&&$.length<30&&!/[./\\]/.test($)){let D=B.filter((U)=>$.includes(U)||U.includes($)),J="Run amp --help for a list of available commands.";if(D.length>0)J=`Did you mean: ${D.join(", ")}? Or run amp --help for all commands.`;throw new GA(W3.unknownCommand($),1,J)}}var tE0=m0.file(DN6.homedir()),Ui0=process.env.XDG_CONFIG_HOME?m0.file(process.env.XDG_CONFIG_HOME):BA.joinPath(tE0,".config");async function vB(A,Q,$){let B=$?.deferAuth??!1,E=$?.skipToolProviders??!1;NbA("0.0.1780478921-g021c3e");let D=u00({storage:A.settings,secretStorage:A.secrets,workspaceRoot:process.cwd(),defaultAmpURL:A.ampURL,homeDir:tE0,userConfigDir:Ui0}),J=A.secrets.get("apiKey",A.ampURL),U=AL(D),Y=null,Z=()=>{return},F=new Promise((t)=>{Z=t}),X=J.then(async(t)=>{if(!t&&!B)await F;return Y??=U.subscribe(()=>{}),T4(U.pipe(U5(WN6)))});X.catch(()=>{return}),kv4(D);let I=await D.getLatest();S.debug("Global configuration initialized",{settingsKeys:Object.keys(I.settings)});let G=!1;{let t=await J;if(G=Boolean(t),S.info("API key lookup before login",{found:Boolean(t),ampURL:A.ampURL,deferAuth:B}),!t)if(B)S.info("No API key found, continuing startup with deferred auth");else{vQ.write(`No API key found. Starting login flow...
6363
6363
  `);let W0=await PN6(A),l=await A.secrets.get("apiKey",A.ampURL);if(S.info("Login flow completed",{success:W0,storedKeyPresent:Boolean(l),ampURL:A.ampURL}),!W0)await $Z(),process.exit(1);G=!0,Z()}}{let t=await D.getLatest(),W0=t.settings.url,l=t.secrets.isSet?.[W0];S.info("Config secrets state after login",{configURL:W0,apiKeySet:l?.apiKey??!1})}let V=B?"pending":await X;if(!B)S.info("Server status resolved",{status:"ready",isAuthenticated:J$(V),isError:lC(V),errorMessage:lC(V)?V.error.message:void 0});ZN6(Q,V);let K=X.then((t)=>CN6(t));K.catch(()=>{return});let z=J$(V),W=!1;if(process.env.AMP_DISABLE_PLUGINS==="1")S.warn("Ignoring AMP_DISABLE_PLUGINS outside development");let C=W?"off":"all",{toolService:H,dispose:N}=tD4({configService:D}),q=new Map,w=()=>q.clear(),O=new kM0(D,A.settings.getWorkspaceRootPath()),R=ltA({configService:D}),_=LaA({configService:D,trustStore:O,skillMCPServers:R.skillMCPServers,uploadImageAttachments:z,createOAuthProvider:async(t,W0,l)=>{let i=`${t}:${W0}`,A0=q.get(i);if(A0)return S.debug("Reusing existing OAuth provider for server",{serverName:t,serverUrl:W0}),A0;S.debug("Creating OAuth provider for server",{serverName:t,serverUrl:W0});let s=(async()=>{let B0=new BH(A.secrets),Q0=await B0.getClientInfo(t,W0),V0=l?.scopes??Q0?.scopes,K0=fG4();S.info("OAuth headless mode check",{useHeadless:K0,executeMode:A.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:vQ.isTTY});let w0;if(K0)w0=A.executeMode?kG4():SG4(t);let X0=new Lq0({storage:B0,serverName:t,serverUrl:W0,clientId:l?.clientId??Q0?.clientId,clientSecret:l?.clientSecret??Q0?.clientSecret,authUrl:l?.authUrl??Q0?.authUrl,tokenUrl:l?.tokenUrl??Q0?.tokenUrl,scopes:V0,headlessAuthHandler:w0});return S.debug("OAuth provider created",{serverName:t,serverUrl:W0,hasManualClientId:!!(l?.clientId??Q0?.clientId),willUseDCR:!(l?.clientId??Q0?.clientId),scopes:V0,headlessMode:K0,executeMode:A.executeMode}),X0})();return q.set(i,s),s}}),v=fL0({configService:D,spawn:GQ0}),k=Q.headless?sP4():void 0,m=k??new DE0({configService:D}),x=m instanceof DE0?m:void 0;if(x)x.pluginExecutorKind="local";let T=new K4(null),f=null,c=z&&!W?[...Av4(I.settings)?[{name:"permissions",entryPoint:up0}]:[],{name:"thread-visibility",entryPoint:Bv4(D,()=>X.then(Gu),()=>f,(t)=>{f=t}),alwaysLoad:!0}]:[],d=nM0({configService:D,platform:m,loadGlobalPlugins:sx0(D),pluginFilter:C,activeThread$:T,internalPlugins:c}),b=OoA(d),p=[_,v,b],n;if(E)n=new Map;else if(A.executeMode){let t=await W04({toolService:H,providers:p,initialTimeout:15000});n=t.registrations;for(let[W0,l]of t.initErrors)S.warn(`${W0} provider initialization slow or failed:`,l)}else n=xL0({toolService:H,providers:p});if(Q.jetbrains)pC("JetBrains");else if(Q.ide&&mG4())pC("VS Code");else if(Q.ide&&dG4())pC("Neovim");else if(Q.ide&&A.executeMode)jk4();if(A.executeMode)qbA(!0);let o,I0=f3.status.pipe(aA((t)=>Boolean(t.connected&&t.authenticated&&t.ideName&&MhA(t.ideName))),UQ()).subscribe((t)=>{if(t){if(!o)o=H.registerTool(z04)}else o?.dispose(),o=void 0}),E0;if(!A.executeMode){let t=await A.settings.get("fuzzy.alwaysIncludePaths")??[];E0=new s30(process.cwd(),{alwaysIncludePaths:t},!0)}else E0=new class extends s30{async start(){}async query(){return[]}async queryCompletions(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};let G0=Ug(D);S.info("Starting Amp background services");let F0=new Pp0,q0={configService:D,toolService:H,mcpService:_,skillService:R,toolboxService:v,trustStore:O,threadRemote:G0,setThreadMeta:G0.setThreadMeta,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:E0,terminal:F0,pluginService:d,pluginPlatform:x,headlessPluginPlatform:k,activeThread$:T,serverStatus:V,serverStatusPromise:X,viewerUserIDPromise:K,hasAPIKeyAtStartup:G,consumeDraftNewThreadVisibility:()=>{let t=f;return f=null,t}};return{...q0,async asyncDispose(){if(q0.mcpService.hasAuthenticatingClients())S.info("Waiting for OAuth authentication to complete before exit..."),await q0.mcpService.waitForAuthentication();for(let t of n.values())t.dispose();await q0.mcpService.dispose(),w(),q0.configService.unsubscribe(),Y?.unsubscribe(),N(),q0.fuzzyServer.dispose(),q0.settingsStorage[Symbol.dispose](),I0.unsubscribe(),o?.dispose(),await q0.pluginService.dispose()}}}async function PN6(A){if(!A.executeMode){if(!await $E0("Would you like to log in to Amp? [(y)es, (n)o]: "))return vQ.write(`Login cancelled. Run the command again to retry.
6364
6364
  `),!1}return await Pk4(A)}async function Pk4(A){let Q=$N6(32).toString("hex"),$=await zp0(A.ampURL,Q),B=new AbortController;try{await eU($,B.signal)}catch(D){S.error("Error opening browser",{error:D})}let E=await zp0(A.ampURL,Q,!1);vQ.write(`If your browser does not open automatically, visit:
6365
6365
 
@@ -6367,7 +6367,7 @@ ${f0.blue.bold(E)}
6367
6367
 
6368
6368
  `);try{return await SP4(A.ampURL,Q,A.secrets,B),vQ.write("\nLogin successful! Run `amp` to get started.\n"),!0}catch(D){return S.error("Login failed",{error:D}),q7.write(`
6369
6369
  Login failed: ${D instanceof Error?D.message:String(D)}
6370
- `),!1}}async function vN6(A,Q,$){let B=await Q.get("apiKey",A);if(!B)throw new GA("No Amp API key found. Run `amp login` first.",1);let E=QN6("curl",["-H",`Authorization: Bearer ${B}`,...$],{stdio:"inherit"});process.exitCode=await new Promise((D,J)=>{E.on("error",J),E.on("close",(U)=>D(U??1))})}function TN6(A){let Q=new PX().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, unlisted, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((C)=>{if(C.code==="commander.help"||C.code==="commander.version"||C.exitCode===0)rN(),process.exit(0);let H=C.originalError??C;pX4(H)}),dz4(Q,{version:"0.0.1780456213-g47360c",buildTimestamp:"2026-06-03T03:14:57.812Z",buildType:"release"}),Q.addHelpText("after",DV4()),Q.configureHelp({formatHelp:JV4}),Q.command("logout").description("Log out by removing stored API key").action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await dN6(q)}),Q.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await mN6(q,await Mp0(N,q.settings))}),zv4(Q,E6);let B=Q.command("internal",{hidden:!0}).description("Internal commands").command("curl [args...]").description("Internal: run curl with the current Amp API key as a bearer token").allowUnknownOption(!0).allowExcessArguments(!0).action(async(...C)=>{let H=C.find((O)=>typeof O==="object"&&O!==null&&typeof O.optsWithGlobals==="function")??B,N=C.filter((O)=>O!==H).flatMap((O)=>Array.isArray(O)?O:typeof O==="string"?[O]:[]),q=H.optsWithGlobals(),w=await E6(q);await vN6(w.ampURL,w.secrets,N),process.exit(process.exitCode??0)});Q.command("git-credential-helper [action]",{hidden:!0}).summary("Git credential helper for GitHub").description("Internal: implements the git credential helper protocol. Used inside sandboxes to authenticate git operations with GitHub.").action(async(C,H,N)=>{let q=N.optsWithGlobals(),w=await E6(q);await qG4(C??"get",w.ampURL,w.secrets),process.exit(process.exitCode??0)}),Q.command("sign-commit [args...]",{hidden:!0}).summary("Git commit signing helper").description("Internal: implements Git signing helper interfaces. Used inside sandboxes for commit signing.").allowUnknownOption(!0).allowExcessArguments(!0).action(async(C,H,N)=>{let q=N.optsWithGlobals(),w=await E6(q);await wG4(w,C),process.exit(process.exitCode??0)}),Q.command("keyboard-tester",{hidden:!0}).summary("Keyboard input tester").description("Internal: stream parsed terminal input events as JSONL.").option("--raw","Log raw incoming terminal bytes before parsing").action(async(C)=>{await BP4({raw:C.raw===!0}),process.exit(process.exitCode??0)}),Q.command("live-sync [threadIDOrURL]",{hidden:!0}).summary("Mirror live DTW thread changes into the current checkout").description("Experimental: watch a v2 thread URL or ID and mirror its live working-tree changes into your local checkout, or apply the current snapshot once and exit.").addHelpText("after",["","Examples:"," amp live-sync T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync --apply T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync https://ampcode.com/threads/T-5928a90d-d53b-488f-a829-4e36442142ee"].join(`
6370
+ `),!1}}async function vN6(A,Q,$){let B=await Q.get("apiKey",A);if(!B)throw new GA("No Amp API key found. Run `amp login` first.",1);let E=QN6("curl",["-H",`Authorization: Bearer ${B}`,...$],{stdio:"inherit"});process.exitCode=await new Promise((D,J)=>{E.on("error",J),E.on("close",(U)=>D(U??1))})}function TN6(A){let Q=new PX().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, unlisted, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((C)=>{if(C.code==="commander.help"||C.code==="commander.version"||C.exitCode===0)rN(),process.exit(0);let H=C.originalError??C;pX4(H)}),dz4(Q,{version:"0.0.1780478921-g021c3e",buildTimestamp:"2026-06-03T09:34:18.051Z",buildType:"release"}),Q.addHelpText("after",DV4()),Q.configureHelp({formatHelp:JV4}),Q.command("logout").description("Log out by removing stored API key").action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await dN6(q)}),Q.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await mN6(q,await Mp0(N,q.settings))}),zv4(Q,E6);let B=Q.command("internal",{hidden:!0}).description("Internal commands").command("curl [args...]").description("Internal: run curl with the current Amp API key as a bearer token").allowUnknownOption(!0).allowExcessArguments(!0).action(async(...C)=>{let H=C.find((O)=>typeof O==="object"&&O!==null&&typeof O.optsWithGlobals==="function")??B,N=C.filter((O)=>O!==H).flatMap((O)=>Array.isArray(O)?O:typeof O==="string"?[O]:[]),q=H.optsWithGlobals(),w=await E6(q);await vN6(w.ampURL,w.secrets,N),process.exit(process.exitCode??0)});Q.command("git-credential-helper [action]",{hidden:!0}).summary("Git credential helper for GitHub").description("Internal: implements the git credential helper protocol. Used inside sandboxes to authenticate git operations with GitHub.").action(async(C,H,N)=>{let q=N.optsWithGlobals(),w=await E6(q);await qG4(C??"get",w.ampURL,w.secrets),process.exit(process.exitCode??0)}),Q.command("sign-commit [args...]",{hidden:!0}).summary("Git commit signing helper").description("Internal: implements Git signing helper interfaces. Used inside sandboxes for commit signing.").allowUnknownOption(!0).allowExcessArguments(!0).action(async(C,H,N)=>{let q=N.optsWithGlobals(),w=await E6(q);await wG4(w,C),process.exit(process.exitCode??0)}),Q.command("keyboard-tester",{hidden:!0}).summary("Keyboard input tester").description("Internal: stream parsed terminal input events as JSONL.").option("--raw","Log raw incoming terminal bytes before parsing").action(async(C)=>{await BP4({raw:C.raw===!0}),process.exit(process.exitCode??0)}),Q.command("live-sync [threadIDOrURL]",{hidden:!0}).summary("Mirror live DTW thread changes into the current checkout").description("Experimental: watch a v2 thread URL or ID and mirror its live working-tree changes into your local checkout, or apply the current snapshot once and exit.").addHelpText("after",["","Examples:"," amp live-sync T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync --apply T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync https://ampcode.com/threads/T-5928a90d-d53b-488f-a829-4e36442142ee"].join(`
6371
6371
  `)).option("--apply <threadIDOrURL>","Apply the current DTW thread snapshot once and exit").option("--checkout","Automatically check out the thread commit when it differs").option("--skip-checkout","Skip the startup checkout prompt when commits differ").action(async(C,H,N)=>{if(C&&H.apply)throw new GA("Choose either a positional thread ID/URL or --apply <thread-id>, not both.",1);let q=H.apply??C;if(!q||q.trim().length===0)vQ.write(`live-sync watches a v2 thread and mirrors its live changes locally. Use --apply <thread-id> to materialize the current snapshot once and exit.
6372
6372
 
6373
6373
  `),N.outputHelp(),process.exit(0);let w=J3(q)??A8(q),O=N.optsWithGlobals(),R=await E6(O);u3(N,O);let _=await vB(R,O),v=!1;try{if(H.checkout&&H.skipCheckout)throw new GA("Choose either --checkout or --skip-checkout, not both.",1);if(lC(_.serverStatus))throw Fi0(_.serverStatus,R.ampURL);let k=J$(_.serverStatus)?_.serverStatus.features:void 0;if(!Zi0(k,WD.V2))throw new GA("live-sync is not enabled for your user",1);await qP4({ampURL:R.ampURL,threadId:w,configService:_.configService,threadSnapshotReader:{get:_.threadRemote.getThread},apiKey:process.env.AMP_API_KEY,applyOnce:typeof H.apply==="string",checkoutMode:H.checkout?"always":H.skipCheckout?"never":"prompt",promptForYesNo:$E0}),v=!0}finally{if(await _.asyncDispose(),v)process.exit(0)}});let E=async(C,H,N)=>{u00({storage:H.settings,secretStorage:H.secrets,workspaceRoot:process.cwd(),defaultAmpURL:H.ampURL,homeDir:tE0,userConfigDir:Ui0});let q={...H,executeMode:!1};await Yi0(q,{...C,openThreadSwitcher:!0},N)},D=Q.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").option("--include-archived","Include archived threads in the list").option("--limit <number>","Maximum number of threads to return",(C)=>sE0(C,"--limit",{min:1,max:500})).option("--offset <number>","Number of threads to skip",(C)=>sE0(C,"--offset",{min:0})).action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await Ok4(N,q,H)});D.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, unlisted, workspace, group)").action(async(C,H)=>{let N=H.optsWithGlobals(),q=await E6(N);await Qq6(N,q,H)}),D.command("continue [threadIDOrURLs...]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. By default, interactive mode shows a picker. Use --last to continue the last thread for the current mode directly. When multiple thread are given, all are resumed and the first is shown in the foreground.").option("--last","Continue the last thread for the current mode directly").option("--pick","Pick a thread interactively from a list (DEPRECATED: picker is now the default)").action(async(C,H,N)=>{let q=N.optsWithGlobals(),w=await E6(q),O=Array.isArray(C)?C:[];if(H.pick)q7.write(`${f0.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
@@ -6392,8 +6392,8 @@ ${R}
6392
6392
 
6393
6393
  `)},async input(){return},async confirm(){return!1},async select(){return},async ask(){return{result:"uncertain",probability:0.5,reason:"AI not available"}}},loadGlobalPlugins:sx0(q),pluginFilter:process.env.PLUGINS??"all"}),asyncDispose:async()=>{}}}),wv4(Q,async(C)=>{let H=C.optsWithGlobals(),N=await E6(H);u3(C,H);let q=await vB(N,H),w=await q.secretStorage.get("apiKey",N.ampURL);if(!w)throw await q.asyncDispose(),new GA("API key required. Please run `amp login` first.",1);return{configService:q.configService,actorOptions:{apiKey:w,ampURL:N.ampURL,workspaceRoot:process.cwd(),dependencies:q},cleanupTerminal:rN,asyncDispose:q.asyncDispose.bind(q)}}),_v4(Q,async(C)=>{let H=C.optsWithGlobals(),N=await E6(H);u3(C,H);let q=await vB(N,H);return{settings:N.settings,configService:q.configService,skillService:q.skillService,asyncDispose:q.asyncDispose.bind(q)}}),nP4(Q,async(C)=>{let H=C.optsWithGlobals();return await E6(H)}),hP4(Q,async(C)=>{let H=await E6(C);return{settings:H.settings,secretStorage:H.secrets,getThreadDeps:async(N)=>{u3(N,C);let q=await vB(H,C);return{mcpService:q.mcpService,settings:H.settings,asyncDispose:q.asyncDispose.bind(q)}}}}),qX4(Q,E6),xX4(Q,E6),ev4(Q,E6);function Z(C,H,N){let w=typeof C.description==="string"?C.description:N===void 0?C.description(!0):C.description(N),O=new h2(H,w),R=MN6(C);if(R)O.default(R);if(O.hidden=uN6(C)||uk4(C),"choices"in C&&Array.isArray(C.choices))if("hiddenChoices"in C){let _=[...C.choices],v=Array.isArray(C.hiddenChoices)?C.hiddenChoices:[],k=new Set([..._,...v]);O.argParser((m)=>{if(!k.has(m))throw new L30(`Allowed choices are ${_.join(", ")}.`);return m})}else O.choices([...C.choices]);return O}for(let C of qk4){switch(C.type){case"flag":{Q.addOption(Z(C,`--${C.long}`)),Q.addOption(Z(C,`--no-${C.long}`,!1));break}case"switch":{Q.addOption(Z(C,`--${C.long}`,!0));break}case"optional-option":{Q.addOption(Z(C,`${"short"in C?`-${C.short}, `:""}--${C.long} [value]`));break}default:{Q.addOption(Z(C,`${"short"in C?`-${C.short}, `:""}--${C.long} <value>`));break}}if("aliases"in C&&Array.isArray(C.aliases))for(let H of C.aliases){let N=new h2(`--${H}`,C.description);N.hidden=!0,N.implies({[C.name]:!0}),Q.addOption(N)}}Q.hook("preAction",(C,H)=>{if(H.optsWithGlobals().takeMeBack)Y6(ON6)});let F=new h2("-x, --execute [message]","Use execute mode, optionally with user message. In execute mode, agent will execute provided prompt (either as argument, or via stdin). Only last assistant message is printed. Enabled automatically when redirecting stdout.").default(!1);Q.addOption(F);let X=new h2("-r, --remote","When used with -x/--execute, execute in an async agent on the Amp server.").default(!1).hideHelp(!0);Q.addOption(X);let I=new h2("--stream-json","When used with --execute, output in Claude Code-compatible stream JSON format instead of plain text.").default(!1);Q.addOption(I);let G=new h2("--stream-json-thinking","Include thinking blocks in stream JSON output (non-Claude Code extension). Implies --stream-json.").default(!1);Q.addOption(G);let V=new h2("--stream-json-input","Read JSON Lines user messages from stdin. Requires both --execute and --stream-json.").default(!1);Q.addOption(V);let K=new h2("--stats","When used with --execute, output JSON with both result and token usage data (for /evals).").default(!1).hideHelp(!0);Q.addOption(K);let z=new h2("--archive","When used with --execute, archive the thread after the command finishes.").default(!1);Q.addOption(z);let W=new h2("-l, --label <label>","When used with --execute, add a label to the thread. Repeat the flag for multiple labels.").argParser((C,H)=>{if(H===void 0)return[C];return[...H,C]});return Q.addOption(W),Q.action(async(C,H)=>{let N=C,q=await E6(N);if(Object.keys(N).forEach((w)=>{let O=qk4.find((R)=>R.name===w);if(O&&uk4(O)&&!wN6(O))q7.write(f0.yellow(`Warning: '--${w}' flag is deprecated
6394
6394
  `))}),H.args.length>0)RN6(q,H);await Yi0(q,N,H)}),kV4(Q),Q}async function vk4(A,Q){await JJ(($)=>nP($,A,Q))}async function _N6(A){if(A.streamJsonInput)return{userInput:"",stdinInput:null};if(typeof A.execute==="string"){let Q=(await Op0()).trimEnd();return{userInput:A.execute,stdinInput:Q||null}}return{userInput:(await Op0()).trimEnd(),stdinInput:null}}function SN6(A,Q,$){if(A.remote&&!Q)throw new GA("The -r/--remote flag requires --execute mode",1,'Use: amp --remote --execute "your message"');if(A.streamJson&&!Q)throw new GA("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(A.streamJsonInput&&!Q)throw new GA("The --stream-json-input flag requires --execute mode",1,"Use: amp --execute --stream-json --stream-json-input");if(A.streamJsonInput&&!A.streamJson)throw new GA("The --stream-json-input flag requires --stream-json",1,"Use: amp --execute --stream-json --stream-json-input");if(A.stats&&A.streamJson)throw new GA("The --stats and --stream-json flags are mutually exclusive output formats",1,'Use one or the other: amp --execute "your message" --stats OR amp --execute "your message" --stream-json');if(A.stats&&!Q)throw new GA("The --stats flag requires --execute mode",1,'Use: amp --execute "your message" --stats');if(A.archive&&!Q)throw new GA("The --archive flag requires --execute mode",1,'Use: amp --execute "your message" --archive');if(A.streamJsonInput&&typeof A.execute==="string"&&A.execute.trim()!=="")throw new GA("Do not provide a message argument when using --stream-json-input",1,`Supply messages via stdin JSONL instead: echo '{"type":"user","message":{"role":"user","content":[{"type":"text","text":"your message"},{"type":"image","source":{"type":"base64","media_type":"image/png","data":"..."}}]}}' | amp --execute --stream-json --stream-json-input`);if(Q&&$===""&&!A.streamJsonInput&&!A.headless)throw new GA("User message must be provided through stdin or as argument when using execute mode",1,`Either pass a message as an argument: amp --execute "your message"
6395
- Or pipe via stdin: echo "your message" | amp --execute`)}function kN6(){rmA([N00.parse({tool:"*",action:"allow"})]),wmA({bypass:!0})}function fN6(A){if(A.threadId&&!h7(A.threadId))delete A.threadId}async function Yi0(A,Q,$){if(Q.headless)return xN6(A,Q,$);let B=await vB(A,Q);if(Q.showWelcome&&Q.hideWelcome)throw await B.asyncDispose(),new GA("Cannot use --show-welcome and --hide-welcome together",1);let E=!A.executeMode&&await qN6();return kN6(),fN6(Q),yN6(A,Q,$,B,{showNpmMigrationWelcome:E})}async function xN6(A,Q,$){let B=(W,C)=>{let H=Number(process.hrtime.bigint()-C)/1e6,N=wX4();S.info("Startup phase",{phase:W,phaseMs:Math.round(H),sinceMainMs:N===null?void 0:Math.round(N)})};u3($,Q);let E=process.hrtime.bigint(),D=await vB(A,Q);B("runMainThread:createThreadDependencies",E);let{serverStatus:J}=D;if(lC(J))throw Fi0(J,A.ampURL);let U=J$(J)?J:null,Y=U?.user.email;await KN6($,Q,J);let Z=Gu(J),F=Ci(Q,Z);if(F instanceof Error)Y6(F.message);if(U&&KT(Q.mode)&&!G00(Q.mode,Y))throw new GA(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!Y||!_7(Y)))throw new GA("Headless executor mode is only available for Amp employees",1);_x0();let I=await D.secretStorage.get("apiKey",A.ampURL);if(!I)throw new GA("API key required for headless mode. Please run `amp login` first.",1);let G=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(G&&!h7(G))throw new GA(`Invalid thread ID: ${G}`,1);let V=G?void 0:await eN6({dependencies:D,apiKey:I,visibility:F??void 0}),K=G??V?.threadId;if(!K)throw new GA("Failed to resolve headless thread ID",1);let z=await hG4(K);if(z.status==="already-running")await D.asyncDispose(),await $Z(),process.exit(0);try{await jG4({ampURL:A.ampURL,apiKey:I,workspaceRoot:process.cwd(),threadId:K,ownerUserId:V?.ownerUserId,threadVersion:V?.threadVersion,agentMode:V?.agentMode,initialToolDiscovery:Promise.all([D.mcpService.initialized,D.toolboxService.initialized,D.pluginService.initialized]).then(()=>{return}),configService:D.configService,mcpService:D.mcpService,toolService:D.toolService,skillService:D.skillService,pluginService:D.pluginService,pluginPlatform:D.headlessPluginPlatform,setActiveThreadID:(W)=>D.activeThread$.next(W)})}finally{await z.release(),await D.asyncDispose()}await $Z(),process.exit(0)}async function yN6(A,Q,$,B,E){let{userInput:D,stdinInput:J}=await _N6(Q),U=!!Q.streamJson||!!Q.streamJsonThinking;SN6({...Q,streamJson:U},A.executeMode,D),u3($,Q),vX4(),_x0();let Y=Q.threadId,Z=Q.resumeThreadIDs??(Y?[Y]:[]),F=Q.observe?J3(Q.observe)??A8(Q.observe):void 0,X=await B.serverStatusPromise;if(lC(X))throw Fi0(X,A.ampURL);let I=Gu(X),G=()=>zN6(B.configService,zkA.V2_LOCAL_THREAD_CHANGES),V=Ci(Q,I);if(V instanceof Error)Y6(V.message);if(A.executeMode&&Q.remote){if(!KT(Q.mode))throw new GA("Remote execute mode does not support plugin-defined agent modes",1);if(!J$(X)||!_7(X.user.email))throw new GA("Remote execute mode is only available for Amp employees",1);await Zv4(D,J,B.configService,Q.mode),await B.asyncDispose(),await $Z(),process.exit(0)}let K=null,z=async()=>{let H=B.consumeDraftNewThreadVisibility();if(H!==null)return H;return K??=(async()=>{let N=await x30(A.settings,process.cwd(),I,V);if(N instanceof Error)Y6(N.message);return N})(),K},W=await B.secretStorage.get("apiKey",A.ampURL);if(!W)throw new GA("API key required. Please run `amp login` first.",1);let C=J$(X)&&_7(X.user.email);if(A.executeMode){if(Z.length>1)throw new GA("Execute mode can only resume one thread.",1);cP4(B.mcpService,A.settings);try{await B.pluginService.initialized;let H=Rk4(B.pluginService,Q.mode),N=wk4($,Q),q=await Zq(),w=Y?N:Ry0({agentMode:H.agentMode,explicitEffort:N,sessionState:q}),O=Y?void 0:W50(await pP(B.configService),{agentMode:H.agentMode,explicitEffort:N,sessionState:q}),R=Y?void 0:await z(),{threadID:_}=await r30({apiKey:W,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:B,userInput:D,stdinInput:J,stats:!!Q.stats,streamJson:U,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:H.agentMode,reasoningEffort:H.agent?void 0:w,agent:H.agent,labels:Q.label,initialThreadID:Y,initialThreadMeta:R,initialSettings:O});if(await vk4(_,"execute"),Q.archive)await B.threadRemote.archiveThread(_,!0)}finally{await B.asyncDispose()}await $Z(),process.exit(0)}else{let H=wk4($,Q),N=await jN6($,B.pluginService,Q.mode),q=E.showNpmMigrationWelcome?"npm-migration":"intro",w=wy0("0.0.1780456213-g47360c",B.settingsStorage,{startDelayMs:3000}),O=new Wp0(B.mcpService,A.settings.getWorkspaceRootPath()),R=Ug(B.configService),_=new Sp0(B.fuzzyServer),v=process.cwd();await sR4({ampURL:A.ampURL,apiKey:W,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??I9(A.ampURL),configService:B.configService,toolService:B.toolService,pluginPlatform:B.pluginPlatform,pluginService:B.pluginService,skillService:B.skillService,mcpService:B.mcpService,readFileSystemDirectory:({uri:k})=>xP({workspaceRoot:v},k),canUseV2LocalThreadChanges:G,completionBuilder:_,updateService:w,workspaceRoot:v,listThreads:()=>R.listThreads(),getThreadFromServer:(k)=>R.getThread(k),getThreadTail:async(k,m)=>{let x=await j4.getThreadTail({thread:k,limit:m},{config:B.configService});if(!x.ok){if(x.error.code==="thread-not-found")return null;throw Error(x.error.message??x.error.code)}return{...x.result.thread.data,messages:x.result.messages}},toolboxes:B.toolboxService.toolboxes,isInternalUser:C,settingsFilePath:B.settingsStorage.getSettingsFilePath(),workspaceSettingsFilePath:B.settingsStorage.getWorkspaceSettingsPath(),mcpTrustHandler:O,setActiveThreadID:(k)=>B.activeThread$.next(k),dispose:()=>{return O.dispose(),w.dispose(),B.asyncDispose()}},{initialThreadIDs:F?[F]:Z,initialUserInput:D||void 0,getDefaultNewThreadVisibility:z,onFirstFrame:Q.ide?jk4:void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!F,hideWelcome:!!Q.hideWelcome,showWelcome:Q.showWelcome,welcomeVariant:q,initialAgentMode:N?.agentMode,initialPluginAgentModeKey:N?.pluginAgentModeKey,initialReasoningEffort:H}),process.exit(0)}}async function E6(A){if(S.info("Initializing CLI context",{argv:process.argv,nodeEnv:"production",hasAmpURL:Boolean(process.env.AMP_URL),hasAmpAPIKey:Boolean(process.env.AMP_API_KEY),hasSettingsFile:Boolean(process.env.AMP_SETTINGS_FILE)}),A.interactive)q7.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
6396
- `);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,$=process.stdout.isTTY&&process.stderr.isTTY;S.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let B=await TaA({get:async(U)=>{if(U!==Ch)return;try{let Y=await Lk4(Ji0,"utf-8");return JSON.parse(Y).installationID}catch{return}},set:async(U,Y)=>{if(U!==Ch)return;await BN6(pi.dirname(Ji0),{recursive:!0}),await EN6(Ji0,JSON.stringify({installationID:Y},null,2),{mode:384})}},{clientType:"cli",platform:x40()});ubA(B);let E=await vv4({...A,workspaceTrust:{current:!0,changes:Jy},getHook:process.env.AMP_URL?(U,Y)=>{if(U==="url")return Promise.resolve(process.env.AMP_URL);return Y()}:void 0});if(A.mcpConfig){let U=await mP4(A.mcpConfig);E=dP4(E,U)}let D=pi.dirname(E.getSettingsFilePath());$J4(ty,D),E=ZkA(E);let J=await E.get("url","admin")??await E.get("url","global");if(!J)J=g8;if(S.info("Resolved Amp URL",{ampURL:J,settingsFile:E.getSettingsFilePath(),workspaceRoot:E.getWorkspaceRootPath()}),!aO(J))S.info("Targeting custom Amp server",{ampURL:J});return{executeMode:Q,isTTY:$,ampURL:J,settings:E,secrets:Mv4(await Mp0(A,E))}}function bN6(A){let Q={};for(let $=0;$<A.length;$++){let B=A[$];if(B?.startsWith("--")){let D=B.slice(2).replace(/-([a-z])/g,(U,Y)=>Y.toUpperCase()),J=A[$+1];if(J&&!J.startsWith("--"))Q[D]=J,$++}}return Q}function hN6(A,Q){let $=A.includes("--headless")||A.some((E)=>E.startsWith("--headless=")),B=pi.resolve(Q.logFile??process.env.AMP_LOG_FILE??($?JN6:pc));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:B}}async function gN6(){uX4();let A=bN6(process.argv),Q=hN6(process.argv,A),$=TX4(Q);xB0("silent");let B=process.argv.includes("--no-color"),E=process.argv.includes("--color"),D=process.stdout.isTTY&&process.stderr.isTTY;if(B||!E&&!D)f0.level=0;if(YN6(S),S.info("Starting Amp CLI.",{version:"0.0.1780456213-g47360c",buildTimestamp:"2026-06-03T03:14:57.812Z"}),process.platform==="win32"&&Uq())PV4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new GA(W3.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await TN6($).parseAsync(process.argv)}AJ4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await gN6().catch(y30)});async function mN6(A,Q){let $=A.ampURL.includes("localhost")||A.ampURL.includes("127.0.0.1");if(process.env.AMP_URL&&!$)await A.settings.set("url",process.env.AMP_URL,"global"),vQ.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
6395
+ Or pipe via stdin: echo "your message" | amp --execute`)}function kN6(){rmA([N00.parse({tool:"*",action:"allow"})]),wmA({bypass:!0})}function fN6(A){if(A.threadId&&!h7(A.threadId))delete A.threadId}async function Yi0(A,Q,$){if(Q.headless)return xN6(A,Q,$);let B=await vB(A,Q);if(Q.showWelcome&&Q.hideWelcome)throw await B.asyncDispose(),new GA("Cannot use --show-welcome and --hide-welcome together",1);let E=!A.executeMode&&await qN6();return kN6(),fN6(Q),yN6(A,Q,$,B,{showNpmMigrationWelcome:E})}async function xN6(A,Q,$){let B=(W,C)=>{let H=Number(process.hrtime.bigint()-C)/1e6,N=wX4();S.info("Startup phase",{phase:W,phaseMs:Math.round(H),sinceMainMs:N===null?void 0:Math.round(N)})};u3($,Q);let E=process.hrtime.bigint(),D=await vB(A,Q);B("runMainThread:createThreadDependencies",E);let{serverStatus:J}=D;if(lC(J))throw Fi0(J,A.ampURL);let U=J$(J)?J:null,Y=U?.user.email;await KN6($,Q,J);let Z=Gu(J),F=Ci(Q,Z);if(F instanceof Error)Y6(F.message);if(U&&KT(Q.mode)&&!G00(Q.mode,Y))throw new GA(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!Y||!_7(Y)))throw new GA("Headless executor mode is only available for Amp employees",1);_x0();let I=await D.secretStorage.get("apiKey",A.ampURL);if(!I)throw new GA("API key required for headless mode. Please run `amp login` first.",1);let G=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(G&&!h7(G))throw new GA(`Invalid thread ID: ${G}`,1);let V=G?void 0:await eN6({dependencies:D,apiKey:I,visibility:F??void 0}),K=G??V?.threadId;if(!K)throw new GA("Failed to resolve headless thread ID",1);let z=await hG4(K);if(z.status==="already-running")await D.asyncDispose(),await $Z(),process.exit(0);try{await jG4({ampURL:A.ampURL,apiKey:I,workspaceRoot:process.cwd(),threadId:K,ownerUserId:V?.ownerUserId,threadVersion:V?.threadVersion,agentMode:V?.agentMode,initialToolDiscovery:Promise.all([D.mcpService.initialized,D.toolboxService.initialized,D.pluginService.initialized]).then(()=>{return}),configService:D.configService,mcpService:D.mcpService,toolService:D.toolService,skillService:D.skillService,pluginService:D.pluginService,pluginPlatform:D.headlessPluginPlatform,setActiveThreadID:(W)=>D.activeThread$.next(W)})}finally{await z.release(),await D.asyncDispose()}await $Z(),process.exit(0)}async function yN6(A,Q,$,B,E){let{userInput:D,stdinInput:J}=await _N6(Q),U=!!Q.streamJson||!!Q.streamJsonThinking;SN6({...Q,streamJson:U},A.executeMode,D),u3($,Q),vX4(),_x0();let Y=Q.threadId,Z=Q.resumeThreadIDs??(Y?[Y]:[]),F=Q.observe?J3(Q.observe)??A8(Q.observe):void 0,X=await B.serverStatusPromise;if(lC(X))throw Fi0(X,A.ampURL);let I=Gu(X),G=()=>zN6(B.configService,zkA.V2_LOCAL_THREAD_CHANGES),V=Ci(Q,I);if(V instanceof Error)Y6(V.message);if(A.executeMode&&Q.remote){if(!KT(Q.mode))throw new GA("Remote execute mode does not support plugin-defined agent modes",1);if(!J$(X)||!_7(X.user.email))throw new GA("Remote execute mode is only available for Amp employees",1);await Zv4(D,J,B.configService,Q.mode),await B.asyncDispose(),await $Z(),process.exit(0)}let K=null,z=async()=>{let H=B.consumeDraftNewThreadVisibility();if(H!==null)return H;return K??=(async()=>{let N=await x30(A.settings,process.cwd(),I,V);if(N instanceof Error)Y6(N.message);return N})(),K},W=await B.secretStorage.get("apiKey",A.ampURL);if(!W)throw new GA("API key required. Please run `amp login` first.",1);let C=J$(X)&&_7(X.user.email);if(A.executeMode){if(Z.length>1)throw new GA("Execute mode can only resume one thread.",1);cP4(B.mcpService,A.settings);try{await B.pluginService.initialized;let H=Rk4(B.pluginService,Q.mode),N=wk4($,Q),q=await Zq(),w=Y?N:Ry0({agentMode:H.agentMode,explicitEffort:N,sessionState:q}),O=Y?void 0:W50(await pP(B.configService),{agentMode:H.agentMode,explicitEffort:N,sessionState:q}),R=Y?void 0:await z(),{threadID:_}=await r30({apiKey:W,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:B,userInput:D,stdinInput:J,stats:!!Q.stats,streamJson:U,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:H.agentMode,reasoningEffort:H.agent?void 0:w,agent:H.agent,labels:Q.label,initialThreadID:Y,initialThreadMeta:R,initialSettings:O});if(await vk4(_,"execute"),Q.archive)await B.threadRemote.archiveThread(_,!0)}finally{await B.asyncDispose()}await $Z(),process.exit(0)}else{let H=wk4($,Q),N=await jN6($,B.pluginService,Q.mode),q=E.showNpmMigrationWelcome?"npm-migration":"intro",w=wy0("0.0.1780478921-g021c3e",B.settingsStorage,{startDelayMs:3000}),O=new Wp0(B.mcpService,A.settings.getWorkspaceRootPath()),R=Ug(B.configService),_=new Sp0(B.fuzzyServer),v=process.cwd();await sR4({ampURL:A.ampURL,apiKey:W,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??I9(A.ampURL),configService:B.configService,toolService:B.toolService,pluginPlatform:B.pluginPlatform,pluginService:B.pluginService,skillService:B.skillService,mcpService:B.mcpService,readFileSystemDirectory:({uri:k})=>xP({workspaceRoot:v},k),canUseV2LocalThreadChanges:G,completionBuilder:_,updateService:w,workspaceRoot:v,listThreads:()=>R.listThreads(),getThreadFromServer:(k)=>R.getThread(k),getThreadTail:async(k,m)=>{let x=await j4.getThreadTail({thread:k,limit:m},{config:B.configService});if(!x.ok){if(x.error.code==="thread-not-found")return null;throw Error(x.error.message??x.error.code)}return{...x.result.thread.data,messages:x.result.messages}},toolboxes:B.toolboxService.toolboxes,isInternalUser:C,settingsFilePath:B.settingsStorage.getSettingsFilePath(),workspaceSettingsFilePath:B.settingsStorage.getWorkspaceSettingsPath(),mcpTrustHandler:O,setActiveThreadID:(k)=>B.activeThread$.next(k),dispose:()=>{return O.dispose(),w.dispose(),B.asyncDispose()}},{initialThreadIDs:F?[F]:Z,initialUserInput:D||void 0,getDefaultNewThreadVisibility:z,onFirstFrame:Q.ide?jk4:void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!F,hideWelcome:!!Q.hideWelcome,showWelcome:Q.showWelcome,welcomeVariant:q,initialAgentMode:N?.agentMode,initialPluginAgentModeKey:N?.pluginAgentModeKey,initialReasoningEffort:H}),process.exit(0)}}async function E6(A){if(S.info("Initializing CLI context",{argv:process.argv,nodeEnv:"production",hasAmpURL:Boolean(process.env.AMP_URL),hasAmpAPIKey:Boolean(process.env.AMP_API_KEY),hasSettingsFile:Boolean(process.env.AMP_SETTINGS_FILE)}),A.interactive)q7.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
6396
+ `);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,$=process.stdout.isTTY&&process.stderr.isTTY;S.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let B=await TaA({get:async(U)=>{if(U!==Ch)return;try{let Y=await Lk4(Ji0,"utf-8");return JSON.parse(Y).installationID}catch{return}},set:async(U,Y)=>{if(U!==Ch)return;await BN6(pi.dirname(Ji0),{recursive:!0}),await EN6(Ji0,JSON.stringify({installationID:Y},null,2),{mode:384})}},{clientType:"cli",platform:x40()});ubA(B);let E=await vv4({...A,workspaceTrust:{current:!0,changes:Jy},getHook:process.env.AMP_URL?(U,Y)=>{if(U==="url")return Promise.resolve(process.env.AMP_URL);return Y()}:void 0});if(A.mcpConfig){let U=await mP4(A.mcpConfig);E=dP4(E,U)}let D=pi.dirname(E.getSettingsFilePath());$J4(ty,D),E=ZkA(E);let J=await E.get("url","admin")??await E.get("url","global");if(!J)J=g8;if(S.info("Resolved Amp URL",{ampURL:J,settingsFile:E.getSettingsFilePath(),workspaceRoot:E.getWorkspaceRootPath()}),!aO(J))S.info("Targeting custom Amp server",{ampURL:J});return{executeMode:Q,isTTY:$,ampURL:J,settings:E,secrets:Mv4(await Mp0(A,E))}}function bN6(A){let Q={};for(let $=0;$<A.length;$++){let B=A[$];if(B?.startsWith("--")){let D=B.slice(2).replace(/-([a-z])/g,(U,Y)=>Y.toUpperCase()),J=A[$+1];if(J&&!J.startsWith("--"))Q[D]=J,$++}}return Q}function hN6(A,Q){let $=A.includes("--headless")||A.some((E)=>E.startsWith("--headless=")),B=pi.resolve(Q.logFile??process.env.AMP_LOG_FILE??($?JN6:pc));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:B}}async function gN6(){uX4();let A=bN6(process.argv),Q=hN6(process.argv,A),$=TX4(Q);xB0("silent");let B=process.argv.includes("--no-color"),E=process.argv.includes("--color"),D=process.stdout.isTTY&&process.stderr.isTTY;if(B||!E&&!D)f0.level=0;if(YN6(S),S.info("Starting Amp CLI.",{version:"0.0.1780478921-g021c3e",buildTimestamp:"2026-06-03T09:34:18.051Z"}),process.platform==="win32"&&Uq())PV4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new GA(W3.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await TN6($).parseAsync(process.argv)}AJ4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await gN6().catch(y30)});async function mN6(A,Q){let $=A.ampURL.includes("localhost")||A.ampURL.includes("127.0.0.1");if(process.env.AMP_URL&&!$)await A.settings.set("url",process.env.AMP_URL,"global"),vQ.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
6397
6397
  `);else if(!aO(A.ampURL))vQ.write(`Logging in to ${new URL(A.ampURL).hostname}
6398
6398
  `);let B=process.env.AMP_API_KEY;if(B)vQ.write(`API key found in environment variable, storing...
6399
6399
  `),await Q.set("apiKey",B,A.ampURL),vQ.write(`API key successfully stored.